一個發送者需要同時向多個接收者發送完全相同的信息時,如果采用單播方式,則網絡需要傳輸大量的報文,相比之下,采用組播的方式可以大大減少需要傳輸的報文數量,從而可以節約大量的網絡資源。隨着Internet的不斷發展,電子商務,網絡會議、視頻點播、遠程教學等服務大量興起,這些服務大多符合點到多點的模式,特別適合於IP組播的應用。
組播的優勢:
① 提高效率:降低網絡流量、減輕意見負荷
② 優化性能:減少冗余流量、節約網絡帶寬、降低網絡負載
③ 分布式應用:使多點應用成為可能
組播基於UDP傳送,存在劣勢:
① 采用盡力而為
② 沒有擁塞避免機制
③ 報文重復
④ 報文失序
一. 組播地址分類:
1.組播IP地址:
一個組播地址就是一個IP地址,該地址不表示具體的主機,而是表示一些列的系統集合。IANA將IP中的D類作為組播IP地址,范圍為224.0.0.0---239.255.255.255。組播地址也被分為幾個類別,並有着不同的使用方式。
D類地址范圍 |
含義 |
224.0.0.0~224.0.0.255 |
為路由協議預留的永久組地址 |
224.0.1.0~231.255.255.255 233.0.0.0~238.255.255.255 |
用戶可用的ASM臨時組地址,全網范圍內有效 |
232.0.0.0~232.255.255.255 |
用戶可用的SSM臨時組地址,全網范圍內有效 |
239.0.0.0~239.255.255.255.255 |
用戶可用的ASM臨時組地址,僅在特定的管理域內有效,稱為本地管理組播地址 |
注:D類組播地址不存在網絡地址和廣播地址。
(1)保留地址:
224.0.0.0~224.0.0.255為預留的組播地址(永久組地址),地址224.0.0.0保留不做分配,其它地址供路由協議使用。
組播地址IP |
協議類型 |
224.0.0.1 |
所有設備(PC、路由器)都會偵聽此地址 |
224.0.0.2 |
子網中所有組播路由器都會偵聽 |
224.0.0.3 |
此地址不做分配 |
224.0.0.5 |
OSPF路由協議中所有的路由器都會偵聽此地 址 |
224.0.0.6 |
OSPF中DR和BDR偵聽地址 |
224.0.0.9 |
RIPv2路由器偵聽此地址 |
224.0.0.10 |
EIGRP路由協議中的路由器偵聽此地址 |
224.0.0.13 |
所有運行PIM的路由器偵聽此地址 |
224.0.0.18 |
VRRP協議交換機偵聽此地址 |
(2)公網組播地址:
224.0.1.0/8~238.255.255.255/8為用戶可用的組播地址(臨時組地址),全網范圍內有效。
① ASM組播地址:
- 224.0.1.0~231.255.255.255
- 233.0.0.0~238.255.255.255
- 232.0.0.0~232.255.255.255
② SSM組播地址:
③ 域間組播地址:
233.x.x.0~233.x.x.255,在中間兩個字節插入AS號碼(x.x),剩余的8bit作為域內組地址范圍
(3)私網組播地址:
239.0.0.0/8~239.255.255.255/8為本地管理組播地址,僅在特定的本地范圍內有效。
2.組播MAC地址:
組播的MAC地址不會變化的,是根據IP地址得來的:
① 前25bit是固定的:01-00-5E-0
② 后23bir根據IP得來:取IP后23bit
注1:組播MAC地址第一個字節的最后一個bit為1;單播MAC地址第一個字節的最后一個bit為0
注2:不同的IP地址對應的組播MAC地址可能會出現重復的問題。
二. 網絡模型:
組播網絡模型分為三種類型,分別為ASM,SFM和SSM。
D類地址范圍 |
含義 |
224.0.1.0~231.255.255.255 233.0.0.0~238.255.255.255 |
用戶可用的ASM臨時組地址,全網范圍內有 效 |
232.0.0.0~232.255.255.255 |
用戶可用的SSM臨時地址,全網范圍內有效 |
239.0.0.0~239.255.255.255 |
用戶可用的ASM臨時組地址,僅在特定的本 地管理域內有效,稱為本地管理組播地址 |
1. ASM:
Any-Source Multicast,任意源組播,主要包含PIM-DM和PIM-SM兩種模式。
ASM模型僅針對組地址提供組播分發。一個組播組地址作為一個網絡服務的集合,任何源發布到該組地址的數據得到同樣的服務。接收者主機加入組播組以后可以接收到任意源發送到該組的數據。
為了提高安全性,可以在路由器上配置針對組播源的過濾策略,允許或禁止來自某些組播源的報文通過。最終從接收者角度看,數據是經過篩選的。
ASM模型要求組地址必須整個組播網絡中唯一。“唯一”指的是同一時刻一個ASM地址只能被一種組播應用使用。如果有兩種不同的應用程序使用了同一個ASM組地址發送數據,他們的接收者會同時收到來自兩個源的數據。這樣一方面會導致網絡流量擁塞,另一方面也會給接收者主機造成困擾。
2. SSM:
Source-Specific Multicast,特定源組播,SSM模型借助PIM-SM的部分技術和IGMPv3來實現的,無需維護RP、無需構建RPT、無需注冊組播源,可以直接在源於組成員之間建立SPT。
SSM的特點是網絡用戶能夠預先知道組播源的具體位置。因此用戶在加入組播組時,可以明確指定從哪些源接收信息。
SSM模型針對特定源和組的綁定數據流提供服務,接收者主機在加入組播組時,可以指定只接收哪些源的數據。加入組播組以后,主機只會收到指定源發送到該組的數據。
SSM模型對組地址不再要求全網唯一,只需要每個組播源保持唯一。這里的“唯一”指的是同一個源上不同的組播應用必須使用不同的SSM地址來區分。不同的源之間可以使用相同的組地址,因為SSM模型中針對每一個(源,組)信息都會生成表項。這樣一方面節省了組播組地址,另一方面也不會造成網絡擁塞。
三. IGMP:
Internet Group Management Protocol,使用IP承載,協議號為2,因特網組管理協議,是TCP/IP協議簇中負責組播成員管理的協議,其作用是在用戶主機和與其直連的組播路由器之間建立和維護組播組成員關系。通過在用戶主機和與其直連的組播路由器上配置和運行IGMP,可以實現主機動態地加入和離開組播組,以及組播路由器對本地網絡中組成員信息的動態管理。
IGMP工作機制:
① 主機會向它所在的共享網絡報告組成員關系,即報告它是屬於哪個組的
② 查詢器會周期地向該網段發送組成員查詢消息
③ 主機收到查詢消息以后進行相應,並且報告組成員關系
④ 該網段中的組播路由器根據相應來刷新組成員的存在信息
IGMP主要分為三個版本:
① IGMPv1
② IGMPv2
③ IGMPv3
區別:
|
IGMPv1 |
IGMPv2 |
IGMPv3 |
查詢器選舉: |
依靠PIM選舉 |
自己選舉(IP地址小的) |
自己選舉(IP小的) |
成員離開方式: |
靜默離開 |
主動發送Level離開報文 |
主動發送Report拒絕 報文,替代了Level報文的功能 |
指定組查詢: |
不支持 |
支持 |
支持 |
指定源、組加入: |
不支持 |
不支持 |
支持 |
抑制機制 |
支持 |
支持 |
不支持 |
最大響應時間: |
不可控(10S) |
可控(默認10S) |
可控(默認10S) |
加組報文: |
一個IGMP只包含一個 組信息 |
一個IGMP只包含一個 組信息 |
一個IGMP能包含多個 組信息 |
1. IGMPv1:
(1)IGMPv1報文:
IGMPv1主要包含如下報文類型:
① Report 請求報文0x13
② Query 詢問報文 0x12 15306188233
① Report:
Report請求報文,標識為0x12,Report目標地址為設備所想加入的組播組IP。
作用:
a) 主機發送此報文給路由器,請求路由器加入某個組播組中。
b) 當主機存在某個組播組中,路由器發送Query報文探測組播組中是否存在設備,主機使用Report報文進行回復。
② Query:
Query詢問報文,在IGMPv1中,只有通用組查詢,標識為0x11,路由器用來檢測當前組播中是否還存在客戶端設備。默認60S發送一次,死亡時間為180S,180s沒有主機回復,表示當前組播組中沒有設備。在IGMPv1中,路由器會周期60S發送Query報文(即使無組播流)。
Query查詢目標地址為224.0.0.1,查詢組中所有的設備,並且組地址為0.0.0.0,表示查詢所有,當收到Query報文時,終端設備如果在某個組中,會回復Report報文,如果不存在忽略該報文。
(2)IGMPv1工作機制:
① 工作機制:
IGMPv1的過程為:
a) 主機通過發送Report消息加入到某組播組中。
b) 當同一個網絡中存在多個組播路由器時,每個組播路由器都能從別的組播路由器和主機那里收到成員關系報告信息。所以,這就需要一個路由器選舉機制來確定一台路由器作為查詢器。在IGMPv1中,查詢器的選擇由組播路由協議決定。
c) 查詢器周期60S發送Query報文探測組播組中是否還存在設備,當組播組中存在設備,收到Query的主機都會回復Report報文進行相應,首先回應的設備作為Last-report,當其他路由器收到Last-report路由器發送的Report報文后,如果自己加入的組存在Report報文中,不會再次發送Report報文
d) 終端在離開后在收到路由器發送的查詢消息時不會反饋Report消息,而路由器會每隔60S進行普通組查詢,當Query Died時間超時后130S(2*60+10),運行IGMPv1的路由器認為此組播組中無設備組。
② 響應抑制機制查詢:
路由器發送Query報文查詢組播組中是否存在設備,所有收到Query的設備都會回復Report報文進行響應,路由器的主要目的是詢問組播組中是否有設備,並不在乎有多少設備,所以只要組播組中的一台設備回應信息即可。
a) 選舉Last-report:
- 組播組中的每台終端都會開啟一個隨機回復計時器(以0.1S為單位,最大為10S,IGMPv1中最大響應時間不可修改)
- 當收到路由器的Query報文后,倒數計時器,計時器為0,發送Report報文進行回復
- 由於計時器隨機,所以最先發送Report回應信息的設備發送的Report會被組內的PC和路由器收到,當其余的PC收到最先發送設備的Report報文后,將不會再發送Report報文,此時這台最先發送report的設備會被認為為last-report。
注:查詢器每隔60S發送一次Query查詢,每台終端接收源的隨機計時器每次都不一致,所以每次查詢時Last-report有可能都不相同
b) Last-report抑制機制:
- 每次路由器發送Query查詢報文時,組播組中的Report回復信息只由last-report發送用來響應路由器
- 其余路由器也會收到last-report的回應信息,所以不會再發送report回復路由器的query,以節省帶寬
2. IGMPv2:
(1)IGMPv2報文:
IGMPv2主要包含如下報文類型:
① Report 請求報文
② Query 詢問報文
③ leave message 離開報文
① Report 請求報文:
Report請求報文,Report目標地址為設備所想加入的組播組IP。
作用:
① 主機發送此報文給路由器,請求路由器加入某個組播組中。
② 當主機存在某個組播組中,路由器發送Query報文探測組播組中是否存在設備,主機使用Report報文進行回復。
② Query 查詢報文 :
Query查詢報文,路由器用來檢測當前組播中是否還存在客戶端設備。默認60S發送一次,死亡時間為180S,180s沒有主機回復,表示當前組播組中沒有設備。
Query查詢報文分為兩種:
a) 通用組查詢
b) 指定組查詢
a) 通用組查詢:
和IGMPv1基本一致,IGMPv2最大響應時間可以修改,所以並在IGMPv1報文的基礎上增加了Max Response Time最大響應時間(默認為10S)。
b) 指定組查詢:
在IGMPv1 Query報文的基礎上,IGMPv2還增加了指定組查詢報文,在Last-report離開時,會觸發查詢器發送指定組查詢報文
注:特定組查詢最大響應時間為1S
③ leave message:
離開報文,當主機想要來開某個組播組中,發送此報文通告路由器。Leave message的目標地址為客戶端所要離開的組播組的IP地址。當路由器收到Leave message報文后,會立刻發送Query報文查詢當前組內是否還存在組成員。
(2)IGMPv2工作機制:
① 主機通過發送一個或多個Report消息加入到某組播組中。
② 當同一個網絡中存在多個組播路由器時,每個組播路由器都能從別的組播路由器和主機那里收到成員關系報告信息。所以,這就需要一個路由器選舉機制來確定一台路由器作為查詢器。在IGMPv2中,IP地址最小的成為查詢器(非查詢器如果在125S(2*普遍組查詢60+最大響應時間10/2)內沒有收到查詢器發送的Query報文,會主動發起Query報文,MRT響應時間為10S,Multicast Address為0.0.0.0
注:使用命令[Huawei-GigabitEthernet0/0/0]igmp timer other-querier-present 60修改非查詢器查詢時間
③ 查詢器周期發送Query報文探測組播組中是否還存在設備,當組播組中存在設備,收到Query的主機都會回復Report報文進行相應,首先回應的設備作為Last-report
④ 在一個組中,當普通組成員離開時,不會發送Leave message給路由器,因為此時last-reporter設備還在組內,所以路由器依舊要維護此組信息
⑤ 當Last-report離開時,會發送leave message信息通知路由器,此時路由器會會進行指定組查詢功能,立刻發送Query報文查詢當前組播組內是否還存在設備,組地址每隔一秒發送一次query(pc離開的組地址),MRT響應時間為1S,Multicast Address為特定組地址,默認發送兩次,如果無響應認為當前組播中無設備。
⑥ 如果組播組中還存在接收源,接收源在收到特定組查詢后,啟動隨機計時器(0~1S),計時器超時,立刻發送Report報文進行響應,最先響應的為新的Last-report。
注:查詢器每隔60S發送一次Query查詢,每台終端接收源的隨機計時器每次都不一致,所以每次查詢時Last-report有可能都不相同。
3. IGMPv3:
服務於SSM模式,IGMPv1和IGMPv2報文中只能攜帶組播組的信息,不能攜帶組播源的信息,所以主機只能選擇加入某個組,而不能選擇組播源,這一問題在IGMPv3中得到了解決。運行IGMPv3時,主機不僅能夠選擇組,還能根據需要選擇組播源,主機發送的IGMPv3報文中可以包含多個組記錄,每個組記錄可以包含多個組播源。
在IGMPv2的基礎上,不僅可以攜帶組播源的信息,並且IGMPv3取消了抑制機制,因為攜帶了組播源,所以接收設備可能接收同一組播IP不同源設備的流量,所以相同的組播可能會有不同的組播源,如果采用抑制機制,可能會抑制掉對另外不同組播源的Report信息,會造成另外的組播源組播流量的修剪,所以IGMPv3在此基礎上取消了抑制行為。
注:IGMPv3使用的目的報文為224.0.0.22
(1)IGMPv3報文:
IGMPv3在v2基礎上對報文進行了修改,並取消了Level報文,使用Report報文代替Level報文的功能
① Query查詢報文:
分為三種報文,其中特定組和特定組源查詢為被動發送,當PC發送Report離開報文,報文包含特定組,則路由器則發送Query特定組查詢;如果報文包含特定組和特定源,則路由器發Query特定組源查詢
a) 通用組查詢:
和IGMPv2基本一致,默認60S發送一次。
b) 特定源組查詢:
當目標DR接收到Report拒絕報文,會發送特定源組查詢,默認發送兩次,兩次無響應表示當前源組無接收設備
② Report請求報文:
取代了v2報文中Level報文的離開功能,並且報文中可以包含多個組記錄,當要加入多個組時,不需要像v2一樣發送多個IGMP Report報文,只需要發送一次Report報文,報文中包含多個組即可
a) Include:
表示想要接收某特定源的某流量,與IGMPv2的區別為目標組地址不再是想要加入組的組IP,而是特定組地址224.0.0.22
b) Exclude:
表示不想接收特定源的某組流量,代替Level報文
(2)IGMPv3工作機制:
① CLient發送成員IGMP Report Type類型為Include報文,目標ip地址固定為224.0.0.22,請求加入組播組,並攜帶所加入組播組的組播源IP
② 查詢器每60S發送一次IGMP普遍組查詢,目標地址為224.0.0.1,Multicast Address地址為0.0.0.0
③ 收到普遍組查詢報文后,Client回復IGMP Report報文進行相應,由於Client接收相同組播流但組播源不同,所以取消了抑制機制
⑤ 任何組員離開都必須都發送IGMP Report Type類型為Export報文。
⑥ 查詢器收到IGMP Report Type類型為Export報文后,會發送2次特定組源的查詢,沒有響應則刪除關於該組播組的表項
IGMP配置:
[Huawei]multicast routing-enable
[Huawei]inter g0/0/0
[Huawei-GigabitEthernet0/0/0]igmp enable
[Huawei-GigabitEthernet0/0/0]igmp version 3
查看IGMP端口信息:
查看組信息:
4. 組播VLAN:
組播VLAN用於解決路由器為不同VLAN用戶復制多份流量的問題。
(1)組播VLAN原理:
在配置單臂路由的情況下,如果交換機下的不同vlan用戶請求了相同的組播流量,此時位於路由器和交換機間的鏈路會傳遞兩份相同的組播流量,此時造成了鏈路的浪費。
當配置了組播VLAN時,配置組播VLAN,組播VLAN下定義用戶VLAN,當組播VLAN接收到了組播流量,會分發給用戶VLAN
(2)組播VLAN配置:
[Huawei]vlan 2
[Huawei-vlan2]igmp-snooping enable
[Huawei-vlan2]multicast-vlan enable
[Huawei-vlan2]multicast-vlan user-vlan 10 20 30
5. IGMP Snooping:
IGMP竊聽協議,用於解決組播報文二層廣播的問題。IGMP Snooping運行在連路層,是二層以太網交換機上的組播約束機制,用於管理和控制組播組。IGMP Snooping通過監聽主機發出的IGMP報文,建立MAC組播地址表。
(1)端口角色:
端口角色 |
作用 |
如何生成 |
Router Port路由器端口
|
二層組播設備上朝向三層組播設備(DR或IGMP查詢器)一側的接口,二層組播設備從此接口接收組播數據報文。 |
注:路由器端口會出現在所有的組播映射端口表項中 |
Member Port成員端口
|
又稱組播組成員端口,表示二層組播設備上朝向組播組成員一側的端口,二層組播設備往此接口發送組播數據報文 |
|
(2)IGMP Snooping原理:
① 偵聽IGMP報文:
a) 當收到一個報文,交換機接口引擎首先查看報文的二層MAC地址,如果目標地址前綴為0100-5E-0的報文,表示為組播報文
b) 交換機繼續查看三層IP頭部的Protocol字段,如果協議號為2,則為IGMP報文
c) 如果位IGMP報文,交換機接口引擎會將報文送入0號口CPU進行處理,查看具體的報文內容CPU對報文進行分析,控制平面生成二層組播接口映射表項
d) 接口引擎根據控制平面二層組播接口映射表象在數據平面對組播報文進行轉發
② 普遍組查詢偵聽:
a) IGMP查詢器定期向本地網段內的所有主機與路由器發送IGMP普遍組查詢報文或Hello報文
b) 交換機收到查詢的Query報文或Hello報文后,將Query下發給所有的端口,並查詢表項
- 如果Router-Port列表中尚未包含該接口,則將其添加進去,並啟動老化定時器180S
- 如果Router-Port列表中已包含該動態路由器端口,則重置老化定時器為180S
注:如果交換機是依靠PIM的Hello報文將其接口放入到Router-Port中,老化定時器為Hello老化時間30X3.5=105S
c) 設備收到Query報文后,回復Report報文,交換機收到Report報文后
- 如果不存在該組對應的轉發表項,則創建轉發表項,將該接口作為動態成員端口添加到出接口列表中,並啟動老化定時器==健壯系數2 x 普遍組查詢間隔60S + 最大響應時間10S=130S
- 如果已存在該組對應的轉發表項,但出接口列表中未包含該接口,則將該接口作為動態成員端口添加到出接口列表,並啟動老化定時器130S
d) 隔離Report報文:
在IGMPv1和v2中存在Last-Report機制,當設備收到其他設備的Report響應報文,就不會回復本地產生的Report報文給路由器,導致成員存在某個組中但是由於抑制機制不發送Report報文,交換機接收不到報文而導致表項計時器超時,所以在開啟了IGMP Snooping功能的交換機上收到一份Report響應報文后,交換機只會把報文轉發給路由接口,不會泛洪給其他的成員接口,其他組成員因為收不到任何的Report報文,當自身的計時器超時后,會認為自己為Last-Report,發送Report報文,交換機根據Report報文刷新當前網絡中所有成員的計時器
③ Report組加入:
a) 當設備想要加入到某個組中,發送Report報文
b) 交換機收到Report報文后
- 如果不存在該組對應的轉發表項,則創建轉發表項,將該接口作為動態成員端口添加到出接口列表中,並啟動老化定時器==健壯系數2 x 普遍組查詢間隔60S + 最大響應時間10S=130S
- 如果已存在該組對應的轉發表項,但出接口列表中未包含該接口,則將該接口作為動態成員端口添加到出接口列表,並啟動老化定時器130S
c) 交換機將該表項發送給Router-Port端口,送給上游路由器
④ Level報文偵聽處理:
a) 當設備中發送Level報文請求離開某個組播組
b) 交換機收到Level報文后,將報文泛洪給所有接口外,會將關於該接口的老化時間置為2S
c) 路由器收到Level報文后,也會將該組的時間置為2S,並連續發送特定組查詢報文
d) 交換機收到特定組查詢報文后轉發給該組播組對應的所有成員接口,並在2S內等待Report報文
- 其余正常端口收到特定組查詢報文,回復Report報文,交換機收到Report報文后,將該端口老化時間復位180S,並將Report報文轉發給路由器,路由器也將該組播的老化時間復位
- 離開設備收到Report特定組查詢,忽略該報文后,2S后交換機和沒有收到Report響應報文,則將該端口從該組中刪除
(4)IGMP Snooping配置:
[Huawei]igmp-snooping enable
[Huawei]vlan 1
[Huawei-vlan1]igmp-snooping enable
6. IGMP Snooping Proxy:
在交換機上配置IGMP Snooping Proxy功能,此時對於PC來說,交換機承當路由器對其進行查詢,對於路由器來說,交換機承當PC進行響應
(1)工作機制:
① 普遍組查詢:
a) 交換機向本VLAN內除接收接口以外的所有接口發送IGMP普遍組查詢報文;同時根據本地維護的組成員關系生成報告報文,向所有路由器端口發送
② 特定組查詢/特定源組查詢:
a) 若該組對應的轉發表項中還有成員端口,則向所有路由器端口回復該組的報告報文
b) 若改組沒有響應的成員端口,則不會響應路由器的查詢報文
③ 報告:
a) 若不存在該組對應的轉發表項,則創建轉發表項,將接收接口作為動態成員端口添加到出接口列表中,並啟動其老化定時器,然后向所有路由器端口發送該組的第一份報告報文
b) 若已存在該組對應的轉發表項,且其出接口列表中已包含該動態成員端口,則重置其老化定時器;
c) 若已存在該組對應的轉發表項,但其出接口列表中不包含該接收接口,則將該接口作為動態成員端口添加到出接口列表中,並啟動其老化定時器。
④ 離開:
a) 向接收接口發送針對該組的特定組查詢報文。只有當刪除某組播組對應轉發表項中的最后一個成員端口時,才會向所有路由器端口發送該組的離開報文。
(2)IGMP Snooping/IGMP Proxy區別:
IGMP Snooping和IGMP Snooping Proxy實現功能相同但原理不同。IGMP Snooping僅僅是通過偵聽IGMP報文來獲取相關用戶信息,而IGMP Snooping Proxy則攔截和抑制了終端用戶的IGMP請求並進行自身相關處理后,才將它轉發給上層路由器。
相對於僅實現IGMP Snooping的設備來說,實現了IGMP Snooping Proxy的二層網絡設備對於用戶側承擔了Server的角色,定期查詢用戶信息;對於網絡側又承擔了Client的角色,在收到查詢時將當前用戶信息進行上報。因此相比IGMP Snooping來說,不僅能達到抑制二層網絡組播泛濫的目的,而且能有效減少網絡中的協議消息,降低網絡負荷。但由於其需要維護和計算表項的狀態變化同時需要代理路由器的功能,因而也相應增加了設備的實現復雜度和處理開銷。
四. PIM協議:
PIM是 Protocol Independent Multicast(協議無關組播)的簡稱,域內組播協議,PIM用於構建出一顆無環的、最優的組播樹,使用RPF檢測依據路由表構建,所以不基於某種協議,稱為協議無關組播。
PIM的IP協議號為103,PIM路由器組播地址為224.0.0.13。PIM目前版本為v2,V1純在缺陷,工作在IGMP之上,沒有224.0.0.0.13,並且無法實現BSR功能。
1. SPT:
源路徑樹,以組播源作為樹根,將組播源到每一個接收等着的最短路徑結合起來構成的轉發樹。
路徑最優,延遲最小,占用內存較多
2. PIM表:
在PIM協議建立之后,發送組播數據會形成兩張組播表,分別為:
① S,G表
② *,G表
(1)(S,G)表:
(Source,Group)表項,在DM模式中,根據此表項進行組播轉發。S,G表分為上行接口和下行接口列表, 組播轉發表項的刷新都是通過收到組播數據報文來進行刷新,當收到組播數據報文時,MFIB會每間隔15s通知PIM協議,由PIM自上而下對組播表項進行刷新。當210s沒有收到組播數據報文MFIB就會通知PIM(這個值可以通過配置PIM視圖下的source lifetime進行改變),進而由PIM協議來觸發組播表項的老化刪除。
注:入接口(上行接口)只有一個,出接口(下行接口)可能為多個
(2)(*,G)表:
任意、Group表項,分為上行接口和下行接口列表
在PIM-DM模式中,由於知道組播源的位置,所以*,G表無作用,僅為S,G的父路由表,華為設備
注:在PIM-DM模式中,華為設備不存在(*,G)表項,如果設備發送請求的組地址路由器組播PIM表中不存在,此時只有在最后一跳路由器可以查看到*,G表項,其余的路由器無法看到*,G表。
3. PIM報文:
PIM報文使用IP層承載,協議號位103,組播目標地址為224.0.0.13
PIM報文主要包括:
① Hello報文
② Register注冊報文
③ Register-stop注冊停止報文
④ Join/prune增加/剪枝報文
⑤ BootStrap引導報文
⑥ Assert聲明報文
⑦ Graft嫁接報文
⑧ Graft-ACK嫁接確認報文
⑨ candidate-RP-Advertisement指定RP激活刷新報文
⑩ State Refresh Message狀態刷新報文
報文頭部:
① Version:4bit,版本字段標識版本信息,當前為2
② Type:4bit,類型
Type值 |
類型 |
0 |
Hello |
1 |
Register |
2 |
Register-stop |
3 |
Join/prune |
4 |
BootStrap |
5 |
Assert |
6 |
Graft |
7 |
Graft-ACK |
8 |
Candidate-RP-Advertisement |
9 |
State Refresh Message |
③ Reserved:8bit,保留位
④ Checksum:16bit,校驗和
(1)Hello:
類型標志位0,用來建立鄰居並維持鄰居關系,並選舉DR,目標地址為224.0.0.13,默認每30S發送一次,Hold時間為30X3.5=105S。
Hello報文使用TLV表示:
① 1: Holdtime,表示保持鄰居為可達狀態的超時時間,若超時仍沒有收到Hello消息則認為鄰居不可達
② 2: 該字段由三部分組成:
- LAN Prune Delay:在共享網段上傳遞Prune消息的延遲時間
- Override Interval:在共享網段上執行剪枝前的否決時間
- T:Join消息抑制能力位
③ 19: DR Priority,表示各路由器接口競選DR的優先級,優先級越高越容易獲勝,默認為1
④ 20: Generation ID,Hello消息中攜帶的隨機數,表示當前鄰居狀態。如果狀態發生更新則隨機數也會更新。當路由器發現接收到的來自上游的Hello消息中包含不同Generation ID值,則認為上游鄰居已經丟失或上游鄰居狀態已經改變。
⑤ 21: State Refresh Capable,表示鄰居狀態刷新時間間隔。
⑥ 24: Address List,PIM接口的從地址列表。
(2)Register(單播):
類型標志位1,注冊報文,使用單播發送,Register報文只在PIM-SM模式中使用,用於源DR將組播數據包以單播的形式發送給RP,用於組播報文的注冊,目的為讓RP生成組播表S,G,每1min泛洪一次。
① B:1bit,邊界位。
② N:1bit,空注冊位。
③ Reserved:8bit,保留位。發送時此字段被清零,接收時不處理此字段。
④ Multicast data packet:可變長字段,組播數據報文。源端DR將接收到的組播數據報文封裝在Register消息中發往RP。RP解封裝后,學習到該組播數據報文的(S,G)信息。
(3)Register-Stop(單播):
類型標識為2,注冊停止報文,單播報文,只在PIM-SM模式中使用,當RP收到源DR發送的Register報文生成組播表S,G后,會發送Register-Stop報文給源DR,停止繼續發送Register報文。
① Group Address:32bit,組播組地址G。
② Source Address:32bit,組播源地址S。
(4)Prune/Join:
類型標識為3,目標地址為組播PIM地址224.0.0.13,分為兩種具體類型:
Prune為剪枝報文,當路由器不需要組播數據時,使用Prune信息通知上游路由器進行組播
的修剪
Join報文出現場景:
① Prune Delay:
a) DM模式下,在MA網絡中,當一台路由器發送Prune報文,上游路由器收到Prune報文后,會檢查鄰居,如果一個端口存在多個鄰居,則等待3S
b) 同為下游的路由器此時需要接收組播信息,會立刻發送Join報文通知上游路由器不要進行剪枝行為
② 在SM模式中,最后一跳路由器發送Join報文向上游路由器請求組播
③ DM模式下,在MA網絡中,當兩台上游路由器進行Assert選舉Winner,此時選舉失敗的路由器會發生剪枝,向下游接口發送Prune報文,如果下游路由器存在客戶,此時會發送Join報文停止剪枝
④ SM模式下,RPT鏈路上,下游路由器發送Join報文給上游路由器請求組播組
⑤ SM模式下,當目標RP接收到IGMP加組消息,即使沒能請求到組播,目標RP也會每隔60S發送一次Join報文,Address IP為RP地址
① Upstream-neighbor:上游鄰居IP地址
② Number Groups:組播數
③ Holdtime:老化時間
④ Group:組IP(可存在多個)
⑤ Num joins:置位符,為join報文置1,包含IP地址
⑥ Num Prune:置位符,為Prune報文置1,包含IP地址
注1:多路訪問型網絡,目標地址為組播,所以存在多個上游鄰居時,發送Prune/Join報文,所有的上游鄰居都會收到,此時使用Upstream-neighbor表示發送給哪個上游鄰居
注2:在PIM-DM模式中,IP address中不包含Flage,而在PIM-SM模式中,會有三個置位符
- S:表示在PIM-SM模式中
- W:Wildcard通配符,表示建立(*,G)條目
- R:RP含義,表示此地址為RP地址(DM為組播源地址)
報文置位含義:
- SWR:SM模式中,下游路由器向上游路由器發送報文,目的地為RP,上游路由
器對應的表項為(*,G)
- S:SM模式中,下游路由器向上游路由器發送報文,目的地為源,上游路由器對
應的表項為(S,G)
- SR:SM模式中,下游路由器向上游路由器發送報文,目的地為RR,上游路由器
對應的表項為(S,G)
Prune報文:
Join報文:
(5)BootStrap:
類型標識為4,引導報文,當PIM-SM網絡中使用動態RP時,配置了C-BSR的路由器從所有PIM接口周期性的發送Bootstrap消息,參與BSR競選。競選獲勝者,繼續發送Bootstrap消息,向域內所有PIM路由器發布RP-Set信息。
使用組播(224.0.0.13)通告,並且每60S發送一次用於通告BSR的存在,並且BootStrap的TTL值為1。
① Fragment Tag:16bit,隨機數,用來區分Bootstrap消息
② Hash Mask length:8bit,C-BSR的Hash掩碼長度
③ BSR-priority:8bit,C-BSR優先級
④ BSR-Address:32bit,C-BSR地址
⑤ Group Address:32bit,組播組地址
⑥ RP-Count:8bit,希望為該組服務的C-RP的總數
⑦ Frag RP-Cnt:8bit,在本段內包含的C-RP地址的個數。對於一個給定的組來說,如果Bootstrap消息分片,Frag RP-Cnt字段便於將RP-Set分片
⑧ RP-address:32bit,C-RP的地址
⑨ RP-hold time:16bit,C-RP發出的advertisement消息的老化時間,表示C-RP的有效時間。
⑩ RP-Priority:8bit,C-RP的優先級
(6)Assert:
類型標識為5,聲明消息,180S發送一次
- 在DM模式中,為(S,G)服務,在MA網絡中,下游路由器存在多個上游鏈路組播路由器並且組播數據流的地址相同,此時下游路由器會使用Assert報文進行選舉DR進行組播數據發送。根據協議優先級/開銷值/IP地址(大的優先),選出下行端口路由器所要接收組播數據的Winner路由器
① Group:組地址
② Source:組播源IP
③ RP Tree:RPT
④ Metric Preference:單播路由協議優先級
⑤ Metric:開銷值(到達源的開銷值)
(7) Graft(單播):
類型標識為6,嫁接報文,只在DM模式中使用,目標地址為單播地址,當被修剪的組播樹枝中的組播內有了新的pc請求組播數據,路由器會從上行端口發送嫁接報文給對端路由器請求組播數據流。
Graft報文由接收者觸發,由最后一跳路由器發送。
(8)Graft-Ack(單播):
類型標識為7,嫁接確認報文,只在DM模式中使用,當對端路由器收到下行接口發來的Graft報文請求時,會發送一個嫁接確認報文進行回復。
(9) Candidate-RP-Advertisement(單播):
類型標識為8,候選RP刷新報文,當PIM-SM網絡中使用動態RP時,配置了C-RP的路由器周期性的向BSR發送Advertisement消息,通告希望服務的組范圍。
C-RP Advertisement消息只在PIM-SM中使用。封裝Advertisement消息的IP報文源地址為源端C-RP,目的地址為BSR。使用單播方式發送。
使用單播方式發送,並且每60S通告一次,目標地址為BSR
① Prefix-Cnt:8bit 組播地址前綴值
② Priority:8bit C-RP優先級
③ Holdtime:16bit Advertisement消息的老化時間
④ RP-Address:32bit C-RP地址
⑤ Group Address:32bit 組播組地址
(10)State Refresh Message:
每60S發送一次,TTL值為1,收到State Refresh Message報文后,路由器會刷新(S,G)路由條目180S、非接收接口210S和Assert老化計時器180S
① Group:組播組IP
② Source:組播源IP
③ Originator:源DR
④ RP Tree:RPT
⑤ Metric Preference:IGP路由協議優先級
⑥ Metric:開銷值
⑦ Masklen:子網掩碼長度
⑧ TTL:生存時間值
4. RPF:
Reverse Path Forwarding,反向路徑轉發,PIM並不關心路徑的次優問題,只在乎組播樹的創建,所以在構建組播樹的時候會存在次優路徑,RPF在PIM-DM網絡中通過查找去往組播源的最優單播路由來判斷所收到的組播數據是否在源於“正確的”上行接口。
某一路由器去往某一組播源的最優單播路由所對應的出接口稱為該路由器上關於該組播
源的RPF接口。
(1)RPF檢測原理:
Reverse Path Forwarding,反向路徑轉發機制,與單播報文根據目標地址查路由表相反,路由器收到組播報文,會根據路由表查詢組播報文的源地址選出鄰居和接口
RPF會每隔5S進行檢測,當路由器收到一個組播報文后,只有確認組播數據報文是從自身連接到組播源的接口上收到的,才能進行轉發,以此來判斷收到的組播數據的路徑是否為最優路徑或冗余流量:
① 當發現RPF出接口和收到組播數據入接口一致,證明為最優路徑;
② 一台路由器從某一接口收到一個組播數據后,如果發現接口不是相應組播源的RPF接口,就意味着RPF校驗失敗,所收到的組播數據將被丟棄;如果發現該接口正式組播源的RPF接口,就表明RPF校驗通過,所收到的組播數據將被進行后續處理。
RPF匹配規則:
① 根據協議優先級進行選舉:
② 查看單播路由表,與組播源IP一致的最優(Cost)下一跳地址。
③ 如果開銷值一樣,選擇下一跳接口地址最大的接口,並且接口啟用了PIM功能(不在乎有沒有PIM鄰居)作為RPF接口。
④ 可以使用靜態組播路由修改RPF接口。
注:如果RPF檢測的入接口沒有存在PIM接口列表中(沒有啟用PIM),則此時RPF檢測不通過,RPF會選擇另外的接口重新進行檢測,如果只有這一條端口,則PIM組播表中的上游接口為NULL,所以為(*,G)表項
① 根據協議優先級進行選舉:
當路由從多個路由源學到時,組播RPF將使用協議優先級值最小的路由協議進行計算
② 根據IGP開銷值選擇:
路由協議相同時,Cost值開銷最小的最為RPF接口
② 選擇下一跳最大IP地址接口:
當開銷值一直時,使用下一跳接口地址大的作為RPF接口
③ 使用組播靜態路由修改:
使用靜態路由命令進行RPF接口修改,組播靜態路由優先級為1,所以優先匹配
[Huawei]ip rpf-route-static 192.168.1.2 32 192.168.3.1
匹配規則:
- 根據路由優先級進行匹配
- 優先級相同,優選組播路由表
注:RPF檢查根據樹的種類進行:
① 使用共享樹進行數據接收轉發時,使用RP地址進行檢測地址
② 使用源樹進行數據接收轉發時,使用組播源地址作為檢測地址
(2)RPF優勢:
① 解決組播樹最優路徑問題和環路問題。
② 由於RPF之間根據路由表進行選擇,由於路由協議本身有防環機制,所以RPF檢測也防止了組播數據在轉發過程中出現了重復報文及流量環路的問題。
(3)RPF檢測行為:
① SM模式組播流檢測:
在PIM-SM模式中,當一台路由器收到一份組播數據流,首先會進行RPF檢測
② RPT中對RP地址進行檢測:
在RPT中建立(*,G)樹后,使用RPF檢測去往RP地址最優接口,從此接口發送Join報文
③ RPT切換到STP:
在SM模式中,數據流被拉到接收者后,最后一跳路由器會根據組播源進行RPF檢測,如果檢測結果發現RPT不是最優的組播流路徑,會進行RPT到SPT的切換
④ 對BootStrap報文的RPF檢測:
在動態選舉BSR之后,BSR每隔60S發送一份BootStrap報文,收到BootStrap報文的設備會根據BootStrap報文的源地址進行檢測,如果發現此報文的源地址不是去往BSR的最優下一跳,拒絕接收此報文。
⑤ MSDP中針對(S,A)報文進行檢測:
當收到MSDP鄰居發送的(S,A)報文時,會進行RPF檢測,用於防環。
五. PIM-DM:
全稱為Protocol Independent Dense Mode,稠密模式,基於Source-Based Tree結構,組播數據為推送的行為,主要采用擴散—剪枝的方式來轉發組播數據流。對於組播成員稀少的網絡,PIM-DM會產生大量的剪枝報文,而如果網絡規模較大,則擴散—剪枝的周期就會比較長,因此PIM-DM一般適合於規模較小,組播組成員比較密集的網絡。
1. PIM-DM收斂:
PIM-DM模式首先假設網絡中的每個子網都存在至少一個組成員,並將組播數據包從組播源擴散到網絡中的所有路由器,然后,對於實際上沒有組成員的分支進行剪枝操作。並周期性的進行擴散剪枝的行為。
(1)建立鄰居關系:
雙方互相發送Hello報文,組播Hello報文地址為224.0.0.13,每30S發送一次,105S超時,連接關系down掉
(2)選舉DR:
在雙方接收到對端的Hello報文后,會根據Hello包中的信息用來選舉DR。優先級高的(默認為1)或者IP地址大的成為DR
使用以下命令[Huawei-GigabitEthernet0/0/0]pim hello-option dr-priority 20修改優先級
注:選舉DR在DM模式下沒有任何意義,只有在IGMPv1中選擇檢測機的時候誰是DR誰就
是查詢器
(3)第一次Flooding:
① 組播源存在組播數據流,發送組播數據給第一跳路由器,第一跳路由器收到組播報文,出現上行接口,生成(S,G)表項,並將組播報文從合法的下行接口擴散組播,如果存在多個第一跳路由器,所有的路由器都會向下游轉發組播報文
合法下游路由器的條件:
a) 存在PIM鄰居的接口
b) 沒有PIM鄰居但是接口上使用igmp start-group命令
c) 最后一跳路由器沒有啟用PIM但是啟用IGMP並且存在組成員的接口
② 當下游路由器從多條上游鏈路收到相同的組播報文時,由於(S,G)表項只能存在一個上游接口,會使用RPF檢測,選出“最優”的上游接口接收組播報文,其余的端口會轉發這份組播報文,並生成(S,G)表項,如果存在多條組播報文路徑,按照以下過程選舉:
a) 路由協議優先級越小越優先
b) 優先Cost值最小的路由條目
c) 優先下一跳IP地址最大的路由條目,並檢查此接口是否啟用了PIM協議(不在乎是否存在PIM鄰居)
注:如果負載分擔,最優的路由接口沒有啟用PIM協議,會選擇另外一條負載分擔的鏈
路(前提為此鏈路啟用PIM)
③ 如果路由器從下游接口收到了與(S,G)條目中相同的組播組數據,此時會觸發路由器發送Assert報文進行Winner的選舉行為,Assert老化計時器為180S,當180S超時后,Loser設備會重新發送組播報文,重新出現Assert報文並進行Winner的選舉
a) 路由協議優先級越小越優先
b) 優先Cost值最小的路由條目
c) 優先下一跳IP地址最大的路由條目,並檢查此接口是否啟用了PIM協議(不在乎是否存在PIM鄰居)
④ 選舉失敗的路由器會將下行接口進行剪枝行為,並從下行接口發送Prune報文進行剪枝,Winner收到Prune報文后,如果下行接口存在多個鄰居,會等待3S(2.5S的修建延遲+0.5S的鏈路延遲)的Prune Delay
a) 下游路由器收到Prune報文后,如果存在自身的下游接口存在接收者,會立刻向上游路由器發送Join報文,Winner收到Join報文后,不會進行剪枝行為
b) 下游路由器收到Prune報文后,如果自身的下游接口不存在接收者,忽略此報文,Winner3S后,進行剪枝行為
注:如果上游接口Winner地址和RPF檢測地址不一致,會使用Winner地址
⑤ 最后一跳如果為共享網段,接收設備存在多個上游鄰居,此時組播流量第一次進入兩台最后一條路由器
a) 如果共享網段的兩台路由器接口配置了PIM DM協議,則共享鏈路上會出現兩份相同的組播流量,兩台路由器會使用Assert報文進行Winner的選舉
b) 如果共享網段的兩台路由器沒有啟用PIM DM協議,則共享鏈路上不會泛洪組播流量(前提為最后一跳路由器沒有收到IGMP加組信息)
(4)Prune剪枝:
① 當最后一跳路由器通過query發現組中沒有pc,於是將端口修改為prune狀態,向上行端口發送此狀態進行剪枝
② 當一個接口被剪枝后,接口會被放入No-Multicast列表中,倒計時210S,當變為0S時,會重新回到(S,G)表項后,下游接口不為Null,路由器重新發送Join報文
③ 沒有組成員,又會進行剪枝,接口重新回到No-Multicast列表中,這個過程稱為Flooding and Prune過程,維護了組播數據傳遞不中斷過程,在此基礎上使用Graft嫁接和60S State Refresh Message優化了此行為
(5)重新Flooding:
① 當剪枝后,如果組播源一直存在組播,第一跳路由器會每隔60S重新泛洪一次State Refresh Message報文,用於刷新每台路由器的各項老化時間
a) 當路由器收到狀態刷新報文,存在no-multicast列表中的接口計時器重新回到210S
b) 當路由器收到狀態刷新報文,(S,G)表項會重回到210S
c) 當路由器收到狀態刷新報文,Winner和Lorse的計時器重新回到180S
(6)Graft嫁接:
優化行為:
① 被剪掉的組播樹中有了新的接收者,為了快速得到組播報文而不需要等地210S,根據(S,G)表項,路由器會立刻從上行端口發送單播嫁接報文,請求ACK確認,如果沒有得到Graft-Ack報文,下游路由器會每3S發送一次Graft報文
② 收到此報文的上游路由器會回復一個嫁接響應(Graft-Ack),然后從上行端口繼續發送此報文,此報文會一直發送給源路由器,重新形成組播樹,端口變為following狀
態
③ 如果終端設備請求的組播組在PIM 路由表中不存在,此時路由器會創建關於該組播組的(*,G)表項
④ 如果接收者存在多個上游鄰居,無論什么情況,這兩台設備只會有其中一台發送Graft報文
a) 下游接口啟用PIM,第一次Flooding時由於兩端共享網絡存在鄰居,所以兩端已經比較出Winner,此時Winner收到Graft報文會向上游端口發送Graft報文,Lorse收到Graft報文后忽略
b) 下游接口沒有啟動PIM,所以第一次Flooding不會進行Winner的選舉,如果此時兩台上游路由器收到IGMP Report報文,此時由IGMP查詢器發送Graft報文給上游路由器
注:如果首先有接收者,並發送IGMP Report報文,此時只有查詢器生成(*,G)表項,非查詢者忽略報文,不會生成(*,G)表項
六. PIM-SM:
Sparse-mode:稀疏模式,屬於稀疏模式的組播協議路由,組播數據為拉入的行為,適用於組成員分部相對分散、范圍較廣、大規模的網絡。
1. SM模式術語:
(1)RP:
Rendezvous Point,匯聚點,網絡中的中心節點,用於對組播數據的泛洪,RP是為每個單獨的組播流服務的,所以一個RP可以服務於多個組播,所以網絡中可以有多個RP
(2)RPT:
Rendezvous Point Tree,匯聚樹,RP和最后一跳路由器之間的鏈路。
(3)SPT:
Shortest Path Tree,最短路徑樹,RP和源DR之間的鏈路。
(5)Register:
注冊,源DR向RP進行單播組播流量發送,讓RP生成組播表,稱之為單播注冊。
(6)PIM-Silent接口:
通常情況下,路由器直連用戶主機的接口上需要配置PIM的,但是這樣配置同樣存在風險,當惡意主機發送大量PIM-Hello報文時,有可能導致主機癱瘓,此時,可以將連接主機的接口配置為Silent接口,禁止該接口接收和發送Hello報文,同時,此接口上的組播轉發功能及IGMP功能都不受影響。
在連接主機的接口上使用以下命令:
[Huawei]inter g0/0/1
[Huawei-GigabitEthernet0/0/1]pim silent
2. PIM-SM收斂過程:
(1)建立鄰居關系:
雙方互相發送Hello報文,組播Hello報文地址為224.0.0.13,每30S發送一次,105S超時,連接關系down掉
(2)選舉DR:
在雙方接收到對端的Hello報文后,會根據Hello包中的信息用來選舉DR。優先級高的(默認為1)或者IP地址大的成為DR
在SM模式中,DR會在每段鏈路上選舉,但是只在第一跳路由器和最后一跳路由器有作用
① 第一跳:只有源DR發送純組播報文給下游路由器
② 最后一跳:只有目標DR向目標RP發送Join報文
③ 在IGMPv1中,誰是DR誰就是查詢器
使用以下命令[Huawei-GigabitEthernet0/0/0]pim hello-option dr-priority 20修改優先級
(3)RPT建立:
由於SM模式采用“拉”的方式,由下游路由器從上游路由器將組播流量拉到接收者,當MA網絡中存在多台路由器,只需要其中一台路由器將組播流量拉到客戶端即可,此時會選擇目標DR或者查詢器通告上游路由器進行組播流量的拉取。
① 普通Router生成*,G條目:
a) 存在接收者,發送IGMP Report報文請求加入組播組
b) 如果Client存在多個上游路由器,此時只會有一台路由器發送Join報文給上游路由器
- 共享網絡中兩台上游設備配置PIM協議,則DR發送Join報文給上游路由器
- 共享網絡中兩台上游設備沒有配置PIM協議,無DR設備,則IGMP查詢器發送Join報文給上游路由器
c) 目標DR/查詢器使用Join報文請求組播數據,使用RPF檢測去往RP的上游接口,並將join報文送往上游路由器
注:如果一直存在組播接收者,目標RP會每隔60S發送一次Join報文給RP(即使發送路徑切換)
- 目標地址224.0.0.13
- 如果存在多個同LAN的上游鄰居,使用Join報文中的Upstream Neighbor表示發給哪個上由鄰居
- 在RPT鏈路上,IP address為RP的IP地址
- 由於是SM模式,S置位
- 不知道組播源,所以為(*,G)表,W置位
- IP address為RP地址,R置位
d) 無論是否存將組播源流量拉下來,目標DR會每隔60S發送Join報文給上游鄰居,並且老化時間為210S
e) 上游鄰居收到Join報文后,下游接口由Null變為存在接口地址,查看Join報文內容,生成*,G表項,根據IP address使用RPF機制繼續向上游發送Join報文
② RP生成*,G條目:
a) 當Join報文送達到RP時,RP下游接口由Null變為存在下游接口,並生成(*,G)表項
- 由於Join報文中的IP address為自己,所以Upstream interface為Null(huawei為Register)
- Downstream Interface為收到Join報文的接口
(4)Register:
當DM模式MA網絡中存在多個源路由器,所有的源路由器都會發送組播數據流,下游路由器通過RPF檢測進行剪枝行為。在SM模式中,當MA網絡中存在多個源路由器,如果所有的源路由器都向RP發送組播注冊,會形成帶寬的浪費,所以此時只需要選擇一台設備進行組播注冊,此設備為源DR。
合法組播流檢測機制:
- SPT鏈路中使用RPF檢測路由表判斷數據流是否從最優的接口流入本路由器
- RP設備檢測(S,G)的上游接口檢測組播數據是否是從注冊報文的入接口流入
- RPT鏈路上根據(*,G)表項進行RPF檢測,根據(S,G)表項進行轉發
① 源DR生成S,G表項:
a) 源DR接收到組播源發來的組播流量,生成(S,G),並將組播流量數據包的IP頭部再次封裝一個新的IP頭部,目標地址為RP地址,生成Register單播注冊報文,將Register發送給RP
b) 當RP接收到源DR發送過來的Register報文,將Register單播頭部拆除,呈現里面的組播,記錄目標源組播地址和源DR地址,並生成S,G組播表項
- 如果此時RP存在(*,G)表項提示有PC接收組播數據,RP會從(*,G)表項復制下游接口到(S,G)表項,並會向上游路由器發送Join報文請求組播源發送純組播流量,在此期間,將單播注冊過來的組播流量下發到下游接口
- 如果沒有接收設備,所以不存在(*,G)表項,所以RP將組播數據丟棄,只保留(S,G),有效時間為210S
② RP生成組播S,G表:
上行端口:標記為Register
下行端口:無地址
(5)Register-Stop:
如果組播源一直存在組播流量,源DR會一直發送單播注冊報文給RP,RP會在以下兩種情況發送Register注冊停止報文
① 存在接收者:
a) 優化網絡結構,當RP下有接收者想要接收此組播流量,為了減少單播報頭封裝與解封裝對源DR和RP帶來的內存過重,此時RP便會發送Join報文給上游路由器,最終Join報文送往源DR
b) 源DR收到Join信息后,發送純組播報文給下游路由器,送往RP
c) RP收到純組播報文后,檢測純組播報文是否和Register報文入接口一致,一致將接收該報文,並激活(S,G)表項,將組播數據送往下游路由器,並發送Register Stop報文給源DR
注:此種類型下RP不會發送Join報文進行第一次SPT的切換
a) 當RP收到注冊報文,生成(S,G)表項,上行接口為Register,下行接口為G0/0/1,並將其單播IP頭剔除傳遞給接收者
b) 如果RP發生第一次SPT路徑切換,生成SG表項,因為下行接口已經是G0/0/1,下行接口也是G0/0/1,導致上下行接口重復,破壞防環機制,所以此時RP不會發送Join報文進行第一次SPT的切換
② 無接收者:
a) 當RP下游不存在組播接收者,當接收到源DR的組播注冊報文后,生成S,G組播表,
此時RP會發送Register注冊停止報文給源DR,通知源DR停止發送Register停止報文。
(6)RPT切換到SPT:
當RPT下存在接收者,RP發送Join報文給上游路由器,源RP將組播數據流傳遞給下游路由器
- SPT鏈路上路由器根據RPF檢測組播流是否為最優端口流入
- RP根據Register傳入端口檢測純組播流是否為最優端口流入,如果位最優端口,則(S,G)為激活狀態,並流入到RPT鏈路上
- RPT鏈路上的路由器接收到數據流,根據(*,G)的上游接口(目標RP)檢測組播流是否合法,合法則將數據流引入到(*,G)的下行表項,huawei實現中會生成(S,G)表項,並將(*,G)表中的下游接口Copy到(S,G)表項中,流量重下游接口Following,如果此時直接進行(S,G)的RPF檢測,如果RPT不是去往組播源的最優路徑,則會導致(S,G)的RPF檢測失敗,所以這份(S,G)表項的Flag位中的SPT位是不會置位的,此時設備不會進行RPF檢測
注:(S,G)表項的作用只是為了當發生RPT切換的時候直接修剪(S,G)的下行接口,而無需先創建(S,G)表項再修剪,由於(S,G)表項優於(*,G),所以在發生RPT切換到SPT的情況下,不會將數據流重新引回到RPT
① 路徑切換:
當組播流傳遞給目標RP,網絡拓撲中,有可能RP並非存在最優的路徑中,所以組播在SM模式中並非為最優路徑,此時在最后一跳路由器收到源DR發送來的組播數據包時,會查看數據包的組播源地址,根據RPF檢測發現去往源DR的最優路徑,如果並不是走RPT,那么最后一跳路由器就會發起由RPT到SPT的切換路徑的切換。建立新的SPT最優路徑去往組播源
最后一跳設備如果開啟了RPT到SPT的切換,那么目標DR會以源路徑的上行接口發送S置位的Join報文,上游設備收到后,如果上游設備在RPT樹中,將原先的(S,G)報文中的SPT位置位,此時會進行以源為目標的PRF檢測,如果上游設備不在RPT樹中,則生成(S,G)表項,但Flag位中的ACT不會被置位,繼續向上游發送Join報文,數據流引入下來之后,ACT置位。
a) 場景1:
- 數據流被引入下來之后,AR5生成(S,G)表項,但是Flag位中的STP沒有置位
- AR5作為最后一跳設備,此時AR5會將(S,G)的STP位置位,進行以源IP的RPF檢測,RPF檢測下一跳為AR1,則直接向R1發送S置位的Join報文,但是(S,G)表項中的ACT不會被置位
- 當AR1將數據流送給AR5時,AR5將(S,G)表項的ACT位置位,並向AR4發S置位的Prune報文進行(S,G)報文的剪枝行為
b) 場景2:
- 數據流被引入下來之后,AR5生成(S,G)表項,但是Flag位中的STP沒有置位
- AR5作為最后一跳設備,此時AR5會將(S,G)的STP位置位,進行以源IP的RPF檢測,RPF檢測下一跳為AR4,則直接向AR4發送S置位的Join報文,由於數據流就是從RPF檢測的接口流入,所以ACT置位
- AR4收到Join報文后,會將(S,G)表項的STP置位,並進行以源為目標的RPF檢測,檢測結果為AR1,發送S置位的Join報文給AR1
- AR1將數據流引下來之后,AR4的(S,G)表項的ACT置位,此時會朝AR3發送S置位的Prune報文進行RPT樹組播流的剪枝
c) 場景3:
- 數據流被引入下來之后,AR5生成(S,G)表項,但是Flag位中的STP沒有置位
- AR5作為最后一跳設備,此時AR5會將(S,G)的STP位置位,進行以源IP的RPF檢測,RPF檢測下一跳為AR4,則直接向AR4發送S置位的Join報文,由於組播流是重RPF檢測的接口流入,所以Flag中的ACT會被置位
- AR4收到Join報文后,會將(S,G)表項的STP置位,並進行以源為目標的RPF檢測,檢測結果為A3,發送S置位的Join報文給AR3
- 此時便發現當前RPT是最優路徑
② RPT修剪:
a) 目標RP在收到組播流后,(S,G)條目為激活狀態,此時目標RP收到兩份同目的地的組播流
- 一份為RPT鏈路的組播流
- 一份為SPT鏈路的組播流
b) 目標RP根據RPF檢測認為SPT鏈路的組播流為最優數據流,會在RPT鏈路的上游接口發送S、G置位的Prune報文給上游路由器進行剪枝
c) RPT樹中的路由器收到Prun報文后,會將(S,G)表項中對應的下行接口修剪掉,當如果存在(*,G)表項,會保留(S,G)表項,只要存在接收者,原因在於目標DR依舊會每隔1min發送一次S、W、G置位的Join報文給上游設備。由於目標RP發送的是S、W、G置位的Prune報文,所以修剪的只是RPT鏈路上的數據流量(S,G表),保留並不斷刷新RPT鏈路上的(*,G)表項,由於(S,G)的下行端口為Null,所以不會將組播流量重新引入回RPT
d) 修建的只是(S,G)表的下游接口(刪除),不修剪鏈路,目的是當沒有超出閥值時,流量會重新切回RPT。RP在收到下游發送的RP位剪枝報文后,會對上游路由器發送Prune信息進行SPT的剪枝。
命令:
- 如果不想讓發生切換,在最后一跳路由器使用[Huawei-pim]spt-switch-threshold infinity禁止切換
- 可以使用一下命令配置流量閥值[Huawei-pim]spt-switch-threshold 1000(kbps),當超出閥值后,會進行切換
(7)重新Register:
a) 源DR如果一直能夠接收到組播源的組播流量,源DR會持續發送Register單播報文給RP進行注冊
b) 在收到RP發送的Register Stop報文或者Join加入報文推送純組播后,源DR會啟動Register抑制計時器,時長1分鍾,1分鍾之后,源DR會繼續發送Register單播給RP重新注冊
c) Huawei設備對此進行優化,源DR會每55S發送一次Register報文,但是Register報文中的組播流為空報文(Probe)
- RP下不存在接收者,在收到空組播數據流的Register報文后,RP發送Register Stop報文,源DR收到Register Stop報文后,注冊抑制計時器復位,5S后不會發送包含組播數據流的Register報文
- 如果此時RP下存在接收者,在收到空組播數據流的Register報文后,不會發送任何報文,5S之后源DR會發送包含組播流的注冊報文給RP
注:
Assert報文在RPT中的出現:
按照傳統的RPT結構是沒有Assert報文出現的,只有在特殊的網絡結構中才會觸發Assert報文的發送
a) PC1和PC2都請求相同的組播數據流
b) PC1發送IGMP加組消息給AR4,AR4通過RPF檢測去往RP的上游路由器是AR2
c) PC2發送IGMP加組消息給AR5,AR5通過RPF檢測去往RP的上游路由器是AR3
d) 最終AR1會從下游路由器AR2和AR3收到兩份請求同一組播流的Join報文,AR1的下游接口為G0/0/0和G0/0/1,並將數據流從兩個接口流出
e) AR2和AR3收到組播流后將組播流從下游接口流出,雙方也會收到對方的組播流,觸發Assert報文的發送
f) 最終兩者傳出最優的一端,另外一端發送Prune報文進行剪枝
g) 如果此時RPT中只存在(*,G)表項,沒有(S,G)表項,所以並不知道去往源的協議優先級和開銷值,此時Assert報文中的開銷值和優先級為去往RP的信息
(8)組播流剪枝:
a) 接受者離開組播組,會向上游DR發送IGMP 離開報文
b) 上游路由器收到離開報文后,如果IGMP Group組對應的接口為Null,則使用PIM報文進行剪枝
c) 無RPT到SPT切換過程,修剪如下:
- 如果沒有進行RPT到SPT的切換,則目標DR首先刪除自己的(*,G)表項,(S,G)表項啟用老化計時器210S,發送的Prune報文中一份為修剪以RP為目標地址的RPT樹(SWR全部置位)、一份為修建組播源為目標地址的SPT樹(S置位)
- 上游設備收到Prune報文后,刪除(*,G)表項,將(S,G)表項老化時間為210S,並繼續向上游發送同樣的Prune報文
- RP收到Prune報文后,刪除(*,G)表項,並將(S,G)表項老化時間為210S,並上SPT樹中發送一份修建源為目標地址的SPT樹(S置位)
d) 存在RPT到SPT的切換過程,假設當前目標RP有一條RPT樹去往RP,另外一條SPT樹去往組播源,並通過SPT樹接收最優組播流,修建如下:
- 目標DR首先刪除自己的(*,G)表項,(S,G)表項啟用老化計時器210S
- 目標發送的Prune報文給RPT樹上游鄰居,(SWR全部置位),只修建(*,G)樹,上游設備收到后,刪除(*,G)表項,並將(S,G)表項變為210S老化倒計時
- 目標DR發送Prune報文給SPT樹上游鄰居(S置位),上游設備收到后,將(S,G)表項下游接口刪除,如果下行接口為Null,啟用老化計時器210S
2. PIM-DM配置:
1.配置IGP
2.所有路由器上啟用組播路由協議[Huawei]multicast routing-enable
3.在路由器上啟用PIM協議[Huawei]pim
4.在路由器的接口上開啟PIM-DM模式[Huawei-GigabitEthernet0/0/0]pim dm
注1:最后一跳路由器連接接收端的接口開啟PIM-DM,如果使用的為IGMPv1報文,如果不啟用PIM,則IGMPv1無法選舉查詢器,也無法發送Graft報文
注2:第一跳路由器連接發送端的接口要開啟PIM-DM,否則此接口不會出現在組播表中,不會處理發送端的組播數據
5.最后一跳路由器連接接收端的接口啟用IGMP[Huawei-GigabitEthernet0/0/0]igmp enable
① 查看PIM鄰居:
② 查看組播路由表:
③ 查看IGMP組播組信息:
④ 查看IGMP接口信息:
3. RP選舉:
(1)RP選舉:
在PIM-SM組播網絡里,擔當共享樹的樹根的節點被稱為RP,RP為每個組播流服務,所以一個RP可以服務於一個組播組,也可以服務於多個組播組,所以網絡中可以存在多個RP,共享樹里所有組播流都通過RP轉發到接收者
RP的選舉可以分為兩種方式:
① 手動指定
② BootStrap自舉選舉
① 手動指定:
可以在每台設備上使用命令靜態指定RP,但無法提供冗余,當RP設備出現故障時,將導致整個組播網絡癱瘓。
[Huawei]pim
[Huawei-pim]static-rp 3.3.3.3 2000 preferred
靜態選舉出來的RP必須相同,匹配列表為2000,默認動態優於靜態,當增加參數Preferred
時靜態優於動態,並且不看ACL范圍
② RP自舉選舉:
Boot Strap Router,自舉選舉路由器,RP使用BSR自舉選舉,通過選舉規則,可以實現自動選擇網路中的RP,當RP出現故障后,會再次進行選舉另一台RP,保證組播網絡通暢,提高了冗余。
a) 自舉選舉原理:
在組播網絡中會存在一個BSR路由器,所有的候選路由器(Candidate-RP)發送Candidate-RP-Advertisement報文單播給BSR路由器。BSR路由器匯集之后通過BootStrap組播(224.0.0.13)報文發送給所有的候選路由器,所有的路由器通過自己計算選出RP,稱為自舉選舉。
b) RP選舉規則:
- 如果PIM-SM域中只有一個候選RP (Candidate-RP,C-RP),那么這個節點就是域里的RP
- 如果域內存在過個C-RP,則匹配組播范圍越精確越優先
- 如果域中存在多個C-RP並都擁有不同的優先級時,則優先級數值最小的將會被選舉為域中的RP(默認為0)
- 如果域中存在多個C-RP並擁有相同的優先級時,則依靠HASH算法算出數值來決定RP,數值越大越優先 ,Hash算法參數為組地址、掩碼長度、C-RP地址
- 如果域中存在多個C-RP並擁有相同的Hash數值時,則擁有最大的IP地址的C-RP為該域的RP
注:huawei設備哈希可以實現異組附載均衡,哈希公式可以將組合RP的IP、掩碼長度計算出哈希值,選出哈希值最大的作為RP,掩碼長度表示每幾個組地址一輪詢,huawei默認長度為/30,表示2個IP組一輪詢,掩碼長度越長,輪詢次數越多,匹配的RP次數就越多,負載均衡越均勻
(2)BSR選舉:
在選舉出RP之前要先選舉出BSR,BSR也可以自舉選舉,CSBR稱為候選路由器,默認搶占。
BSR選舉規則:
① 如果域中只有一台C-BSR,該路由器就是該域里的BSR
② 如果域中存在多台C-BSR,則優先級數值最大的為BSR(默認為0)
③ 如果域里存在多台擁有相同優先級的C-BSR,則擁有最大IP地址的路由器為BSR
(3)選舉過程詳解:
① BSR選舉:
a) 網絡中的C-BSR都會發送TTL值為1的BootStrap組播(224.0.0.13)報文給自己的PIM鄰居
b) 當收到鄰居的BootStrap報文與自己的BSR選舉參數進行比較,選出一份最優的BootStrap報文
- 優先級數值越大越優先,默認為0
- 接口IP地址越大越優先
c) 將最優的BootStrap繼續發送給鄰居,最終最優的BootStrap報文傳遍整個PIM區域
d) 當存在更高優先級或接口IP地址更大的路由器,默認會搶占BSR
e) BSR每60S泛洪一次BootStrap組播報文給自己的PIM鄰居,報文中TTL值為1,目標地址為224.0.0.13
f) 鄰居收到BootStrap報文后,會進行RPF檢測,檢測以BSR接口地址為檢測目標,是否從最優下一跳地址收到“合法”的BSR報文,檢測通過后,會將數據包中TTL值置位1,源地址變為出接口地址,繼續發送給所有的PIM鄰居,最終全網都收到BootStrap報文
g) C-BSR會設置一個計時器130S倒計時來檢查當前active BSR的狀態,如果在130S后沒有收到BSR的BootStrap報文,C-BSR便會重新選舉
② RP選舉:
a) 所有的C-RP將自己的RP優先級和候選接口IP通過Candidate-RP-advertisement報文通過單播發送到BSR,源地址為RP選舉接口IP
b) BSR收到所有的報文后,再傳遞給所有的PIM鄰居
c) 鄰居收到BSR的報文后,根據報文信息選舉出每個組播組的RP路由器:
- 匹配組播范圍越精確越優先
- C-RP優先級數值越小越優先(默認為0)
- 依靠組地址、掩碼長度、C-RP地址C-RP地址生成哈希值,數值越大越優先
- 選舉IP地址越大越好
d) 選舉出RP后,所有的C-RP默認會每60S(可配置)發送Candidate-RP-Advertisement報文單播給BSR
e) BSR每隔60S發送一次組播報文BootStrap通告給PIM鄰居,BootStrap報文中包含C-RP的信息,鄰居收到后繼續傳遞給別的鄰居,刷新RP的狀態
f) 當RP設備失效,沒有向BSR通告Candidate-RP-Advertisement報文,BSR在向鄰居通告BootStrap報文中不會存在RP的信息,此時設備會重新自舉選擇新的RP設備
注:
幀中繼網絡環境BootStrap報文傳遞問題
a) AR1為Hub點,AR2和AR3為Spoke
b) 由於PIM的Hello報文使用組播方式,所以在FR map時開啟傳遞組播報文功能
c) AR2為BSR,發送BootStrap報文給AR1,AR1進行RPF檢測,去往BSR地址2.2.2.2的下一跳地址為192.168.1.2,和報文源地址進行匹配,匹配通過接收該報文並將TTL置為1傳遞給AR3
d) AR3收到BootStrap報文,進行RPF檢測,去往BSR地址2.2.2.2的下一跳地址為192.168.1.2,與源地址192.168.1.1不符,匹配失敗,丟棄BootStrap報文
解決方法:
① 在AR3上使用RPF靜態指定[Huawei]ip rpf-route-static 2.2.2.2 32 192.168.1.1指向AR1
② 將網絡類型改為P2MP網絡類型
4. RP選舉配置:
(1)配置BSR選舉:
[Huawei]inter loo 0
[Huawei-LoopBack0]pim sm
[Huawei]pim
[Huawei-pim]c-bsr LoopBack 0---將loo0作為選舉端口(地址越大越優先)
[Huawei-pim]c-bsr priority 100-----將並將優先級設為100(優先值越大越優先)
(2)配置RP選舉:
[Huawei-LoopBack0]pim
[Huawei-pim]c-rp priority 100—設置rp優先級為100(地址越小越優先)
[Huawei-pim]c-rp LoopBack 0----將Loopback0作為接口選舉(優先值越大越優先)
選項參數:
a) [Huawei-pim]c-rp LoopBack 0 group-policy 2000----------指定CRP服務
的組播地址組
b) [Huawei-pim]c-rp holdtime 100-----指定BSR等待接收候選RP發送
Advertisement宣告消息的超時信息,缺省時間為150S
c) [Huawei-pim]c-rp advertisement-interval 50—指定候選RP發送
Advertisement宣告消息的時間間隔,默認為60S
(3)實現RP附載均衡:
① 配置OSPF
② 在所有路由器上開啟組播路由和pim協議,在接口上開啟pim sm(包括loo0)
③ 在所有路由器使用loo0作為選舉接口地址
④ 配置附載均衡:
- R2:
[Huawei]acl 2000
[Huawei-acl-basic-2000]rule 5 permit source 239.1.1.1 0
[Huawei-pim]c-rp LoopBack 0 group-policy 2000
- R3:
[Huawei]acl 2000
[Huawei-acl-basic-2000]rule 5 permit source 239.1.1.2 0
[Huawei-pim]c-rp LoopBack 0 group-policy 2000
- R4:
[Huawei]acl 2000
[Huawei-acl-basic-2000]rule 5 permit source 239.1.1.2 0
[Huawei-pim]c-rp LoopBack 0 group-policy 2000
七. PIM-SSM:
Source-Specific Multicast,特定源組播,SSM模型借助PIM-SM的部分技術和IGMPv3來實現的,無需維護RP、無需構建RPT、無需注冊組播源,可以直接在源於組成員之間建立SPT。
SSM的特點是網絡用戶能夠預先知道組播源的具體位置。因此用戶在加入組播組時,可以明確指定從哪些源接收信息。
1. 組播地址:
PIM-SSM模式中使用組播地址為232.0.0.0~232.255.255.255
2. PIM-SSM原理:
針對於ASM模式,主要原因在於組播源的不確定,在SSM模式中,接收端使用IGMPv3協議告訴目標DR所要接收到的源IP地址和組播組IP,運行PIM-SM模式的路由器之間采用拉的方式直接發送Join報文給上游路由器,上游路由器通過Join中的組播源IP和組播組地址,查看IGP路由表送往源DR,源DR收到Join報文后,將流量發送到接收端,直接形成最短路徑樹。
3. PIM-SSM收斂過程:
(1)建立鄰居關系:
雙方互相發送Hello報文,組播Hello報文地址為224.0.0.13,每30S發送一次,105S超時,連接關系down掉
(2)選舉DR:
在雙方接收到對端的Hello報文后,會根據Hello包中的信息用來選舉DR。優先級高的(默認為1)或者IP地址大的成為DR
使用以下命令[Huawei-GigabitEthernet0/0/0]pim hello-option dr-priority 20修改優先級
(3)源DR接收組播數據:
當源DR接收到組播數據時,由於沒有RP,所以無法注冊,此時源DR不會對組播數據做任何配置
(4)IGMP Group建立:
當接收端通過IGMPv3發送給目標DR,目標DR接收到IGMPv3報文后形成組播組,並得知組播組IP和組播源IP,建立(S,G)表項,根據單播路由表發送Join報文給上游路由器(報文中只有S置位)
注:如果使用IGMPv2協議,此時PC不能發送帶有組播源IP的Report報文,此時可以在最后一跳路由器上使用IGMP SSM Mapping功能,為IGMPv1主機和IGMPv2主機提供SSM服務,通過在路由器上配置SSM地址的映射規則,將IGMPv1和IGMPv2報文中的*,G信息轉化為S,G信息。
SSM Mapping配置:
[Huawei-igmp]ssm-mapping 232.1.1.1 32 10.1.1.2
[Huawei-GigabitEthernet0/0/0]igmp ssm-mapping enable---在連接組播接收端的接口上開啟SSM Mapping功能
(5)Join報文的傳遞:
每台上游路由器接收到Join報文后檢查報文內容,確定組播組IP和組播源IP,生成(S,G)表項,繼續送往上游路由器
(6)組播源發送組播數據:
當源DR收到Join報文后,生成(S,G)表項,檢查源地址,得知目標DR的IP,直接將組播流量送往下游路由器,最終形成最短SPT。
(7)SPT修剪:
當接收者離開組播組,發送IGMPv3的leave message報文,通告目標DR,目標DR IGMP group組中如果沒有接收者,將發送Prune報文給上游路由器進行剪枝。
八. Any-Cast RP/域間組播:
域間組播稱為不同區域之間的組播流量傳輸。
1. MSDP:
Multicast Source discover Protocol,組播源發現協議,當網絡中出現多個RP或不同AS中會存在不同的RP,RP之間會使用Source-Actrive報文動態的傳遞(S,G)表項內容,實現多個RP之間注冊報文信息的同步
(1)MSDP收斂:
① MSDP使用TCP單播建立鄰居關系,目標端口號639,源端口號隨機
② MSDP協議中IP地址小的一端向IP地址大的一端建立鄰居關系
③ MSPD使用KeepAlive報文維護鄰居關系,20S發送一次
④ MSDP使用SA報文動態傳遞(S,G)表項內容
(2)SA報文:
使用TCP承載,目標端口號為639,源端口號隨機,
① Header:
a) Type:類型,SA類型為1
b) Length:長度
c) RP Address:源RP地址
② SA內容:
a) (S,G):包含組播源IP與組播組的內容
2. Any-Cast RP:
在傳統的PIM-SM域中,每個組播組都只能映射到一個RP。當網絡負載較大或流量過於集中時,可能導致RP壓力過大、RP失效后路由收斂較慢、組播轉發路徑非最優等問題。在單自治域中應用基於PIM協議的Anycast RP,可實現組播源就近注冊和接收者就近加入。既可以緩解單個RP的負擔,也實現了RP備份、優化組播數據的轉發路徑。
Any-Cast RP分為兩種:
① 基於MSDP的Any-Cast RP
② 基於PIM的Any-Cast RP
(1)基於MSDP的Any-Cast RP
① 原理:
a) AR1和AR3都為RP,並且都使用loo0地址都為1.1.1.1作為RP的IP地址
b) 兩者的RP優先級值最大,當選當前網絡的RP
c) 其余的路由器根據RPF檢測選出里自己最優的RP
- AR4、將AR1作為RP
- AR2、AR6、AR5將AR3作為RP
d) AR4下接有組播源,組播源將組播流量Flooding給AR4,AR4采用單播發送給AR1進行Register
e) AR4收到Register單播報文后,生成(S,G)表項
f) PC1請求組播流量,發送IGMP Report報文給AR5
g) AR5收到IGMP Report報文后生成(*,G)表項並向AR3發送Join報文給AR3,AR3生成(*,G)表項
h) AR1和AR3之間啟用MSDP協議,由於AR1存在(S,G)表項,AR1向AR3發送SA報文將(S,G)表項信息通告給AR3
- RP address:1.1.1.1
- (S,G):192.168.7.2—>224.1.1.1
i) AR3收到SA報文后,發現RP address地址和自身的RP地址重復,為防止環路,丟棄SA報文,所以此時在AR1上使用命令[Huawei-msdp]originating-rp LoopBack 1修改RP address
j) AR3重新收到SA報文,生成(S,G)表項,存在對應的(*,G)表項,往上游接口發送Join報文將組播流引下來,傳遞給接收者
k) 目標RPAR5收到后,進行RPF檢測,如果不是最優路徑,進行SPT第二次優化行為
② 配置:
a) 配置IP
b) 配置IGP路由協議
c) 配置組播協議(RP的選舉可以時靜態也可以是動態,動態只在兩台RP上進行BSR和RP的配置,並且優先級、接口地址都相同都相同)
d) 在AR1和AR3上啟用MSDP協議,為了加強冗余,各自使用loo1進行鄰居的建立
e) 使用命令[Huawei-msdp]originating-rp LoopBack 1在RP上修改SA報文的RP address地址
(2)基於PIM的Anycast RP:
針對傳統的Anycast RP,huawei設備提出了基於PIM協議的Anycast RP,與傳統的Any-Cast RP原理基本相同,但是基於PIM協議的Anycast RP不依賴與MSDP,而且解決了MSDP中SA報文的RP地址發送重復而不接收的問題
① 原理:
a) AR1和AR3都為RP,並且都使用loo0地址都為1.1.1.1作為RP的IP地址
b) 兩者的RP優先級值最大,當選當前網絡的RP
c) 其余的路由器根據RPF檢測選出里自己最優的RP
- AR4、將AR1作為RP
- AR2、AR6、AR5將AR3作為RP
d) AR4下接有組播源,組播源將組播流量Flooding給AR4,AR4采用單播發送給AR1進行Register
e) AR4收到Register單播報文后,生成(S,G)表項
f) PC1請求組播流量,發送IGMP Report報文給AR5
g) AR5收到IGMP Report報文后生成(*,G)表項並向AR3發送Join報文給AR3,AR3生成(*,G)表項
h) AR1和AR3之間啟用基於PIM協議的Anycast RP功能,當AR1接收到組播源的單播Register報文,AR1會將這份報文原封不動的發送給AR3
i) AR3收到AR1轉發過來的Register報文,生成(S,G)表項,存在對應的(*,G)表項,往上游接口發送Join報文將組播流引下來,傳遞給接收者
j) 目標RPAR5收到后,進行RPF檢測,如果不是最優路徑,進行SPT第二次優化行為
② 配置:
① 配置IP
② 配置IGP路由協議
③ 配置組播協議(RP的選舉可以時靜態也可以是動態,動態只在兩台RP上進行BSR和RP的配置,並且優先級、接口地址都相同都相同)
④ 在AR1和AR3上配置基於PIM協議的Any-Cast RP
AR1:
[RouterC] pim
[RouterC-pim] anycast-rp 1.1.1.1-----------------配置RP地址為1.1.1.1
[RouterC-pim-anycast-rp-10.10.1.1] local-address 11.11.11.11----------------配置本端建立鄰居的地址為11.11.11.11
[RouterD-pim-anycast-rp-10.10.1.1] peer 33.33.33.33------------對端地址為33.33.33.33
AR3:
[RouterC] pim
[RouterC-pim] anycast-rp 1.1.1.1-----------------配置RP地址為1.1.1.1
[RouterC-pim-anycast-rp-10.10.1.1] local-address 33.33.33.33----------------配置本端建立鄰居的地址為33.33.33.33
[RouterD-pim-anycast-rp-10.10.1.1] peer 11.11.11.11------------對端地址為11.11.11.11
3. 域間組播:
不同AS之間使用SM模式傳遞組播流量時,稱為域間組播
(1)域間組播問題:
組播在域間傳遞的時候會存在以下問題:
問題 |
原因 |
解決方法 |
組播數據發送時RPF檢測問題 |
本區域路由器在接收組播時會進行RPF檢測,如果不知道組播源地址,則導致RPF檢測失敗 |
將源地址引入到BGP路由中,並將此地址引入到IGP協議中,網絡中的所有路由器都可以通過RPF檢測 |
組播傳送問題 |
AS之間需要傳遞組播流量 |
在AS之間啟用PIM協議傳遞組播數據 |
RP生成(S,G)表項問題 |
需要讓不同域了解發送域中發送源的存在 |
使用MSDP協議 |
MSDP的RPF檢測 |
RP在收到SA報文時,也會進行RPF檢測,如果不能從BGP組播表和單播表中檢測到對端RP地址,則RPF檢測不通過,不會接收地MSDP報文 |
將RP地址引入到BGP路由表中,由於必須是BGP路由,所以接收SA報文的RP上要配置BGP協議或組播BGP協議 注:huawei設備檢查規則只要單播表項中存在就可以 |
BootStrap報文跨域傳播問題 |
不同區域中存在不同的RP,兩個區域的BootStrap互不傳遞的,但是由於在兩個BGP路由器上啟用PIM協議用於組播的傳遞,此時本區域BootStrap報文也會傳遞到不同的區域,造成兩個區域只會有一個RP |
[Huawei-GigabitEthernet0/0/0]pim bsr-boundary阻止BootStrap報文跨域傳遞
|
(2)SA報文檢測:
SA在RP之間傳遞時一個矢量的行為,所以如果存在兩個或兩個以上的MSDP鄰居,此時RP會對收到的(S,A)報文進行RPF檢測,根據(S,A)報文中的RP address(起始RP)進行RPF檢測,MSDP設備收到SA消息后,根據MBGP、組播靜態路由、單播路由(包括BGP、IGP)最佳路徑的下一跳是哪個對等體,這個對等體也稱為“RPF對等體”。如果發現SA消息是從RPF對等體發出的,則接收該SA消息並向其他對等體轉發。
此外,還有如下的一些RPF檢查規則,SA消息在轉發時遵守:
① 規則1:
發出SA消息的對等體就是源RP,則接收該SA消息並向其他對等體轉發。表示(S,A)報文中的源地址和報文中的RP address字段IP地址相同,則接收此(S,A)報文
② 規則2:
接收從靜態RPF對等體到來的SA消息。一台路由器可以同時與多個路由器建立MSDP對等體關系。用戶可以從這些遠端對等體中選取一個或多個,使用命令配置為靜態RPF對等體
③ 規則3:
如果一台路由器只擁有一個遠端MSDP對等體,則該遠端對等體自動成為RPF對等體,路由器接收從該遠端對等體發來的SA消息,只存在一個MSDP鄰居是不會出現環路狀況的,所以不會進行RPF檢測
④ 規則4:
發出SA消息的對等體與本地路由器屬於同一Mesh Group,則接收該SA消息。來自Mesh Group的SA消息不再向屬於該Mesh Group的成員轉發,但向該Mesh Group之外的所有對等體轉發,使用命令將RP鄰居放入組中,當收到一份(S,A)報文不會在將這份(S,A)報文傳遞給組中的MSDP鄰居
⑤ 規則5:
到達源RP的路由需要跨越多個AS時,接收從下一跳AS(以AS為單位)中的對等體發出的SA消息,如果該AS中存在多個遠端MSDP對等體,則接收從IP地址最高的對等體發來的SA消息
(4)域間組播配置:
① 配置IP、路由協議
② 啟用PIM SM協議
③ AR3和AR4建立EBGP鄰居關系
③ 在AR3和AR4上配置阻斷BootStrop報文傳遞到對端AS中
AR3:
[Huawei-GigabitEthernet0/0/1]pim bsr-boundary
AR4:
[Huawei-GigabitEthernet0/0/0]pim bsr-boundary
④ 將AR2和AR5分別作為對應AS內的RP
⑤ AR3和AR4將2.2.2.2/32和5.5.5.5/32宣告進BGP,並將這兩條路由引入到BGP,實際工作中不可能將所有的BGP路由引入到IGP,所以在引入時加入策略
AR3:
[Huawei]ospf
[Huawei-ospf-1]import-route bgp route-policy b2o
[Huawei]route-policy b2o permit node 10
[Huawei-route-policy]if-match ip-prefix b2o
[Huawei]ip ip-prefix b2o permit 5.5.5.5 32
AR4:
[Huawei]ospf
[Huawei-ospf-1]import-route bgp route-policy b2o
[Huawei]route-policy b2o permit node 10
[Huawei-route-policy]if-match ip-prefix b2o
[Huawei]ip ip-prefix b2o permit 2.2.2 32
⑥ AR2和AR5建立MSDP鄰居關系:
AR2:
[Huawei-msdp]peer 5.5.5.5 connect-interface LoopBack 0
AR5:
[Huawei-msdp]peer 2.2.2.2 connect-interface LoopBack 0