組播架構
組播IP地址范圍:
D類:1110 0000 0000 0000 224.0.0.0—239.255.255.255
1.被保留的鏈路本地地址(發往到這些組播組地址的報文TTL=1): 224.0.0.0—224.0.0.255
224.0.0.1(一個廣播域內所有三層設備都監聽);224.0.0.2(一個廣播域內只有路由器監聽);224.0.0.5(OSPF發送報文常用的地址);224.0.0.6(DRother把報文發送給DR和BDR時使用);224.0.0.9(RIPv2發送路由更新的組播地址);224.0.0.10(EIGRP發送路由更新的組播地址);224.0.0.13(PIM發送HELLO的組播地址)。
2.全球可聚合的組播地址: 224.0.1.0—238.255.255.255
Source specific multicast(SSM): 232.0.0.0—232.255.255.255
GLOP addresses(買AS號送的組播地址) : 233.0.0.0—233.255.255.255
3.私有的組播地址:239.0.0.0—239.255.255.255
IGMP(用來管理誰加組誰離組)
IGMP(Internet Group Management Protocol)屬於4層協議,協議號為2。(讓最后一跳路由器知道下游有哪些PC要加入一個組播組,讓組播組接收成員得知當我需要接收組播流量時我把“我想要接收”這個信息告訴給誰)
IGMPv2:有四種報文:
1.Membership Queries(路由器每60秒周期性發送);
2.Membership Reports(組播組成員發);
3.Group-specific query(指定組查詢報文。當路由器接收到一個離組報文后會發送一個指定組查詢報文,看看這個組播組還有沒有其他成員在線);
4.Leave Group message(離組報文);
計時器:1.Holdtime:180s
2.查詢者存活計時器:120s
查詢者選舉機制(在有多個組播路由器時解決了重復報文問題,在多個路由器中選舉一個查詢者來轉發組播報文):比較最后一跳路由器連接下游網段的接口IP地址,誰的地址小,誰就充當查詢者。
疑問?
1、當最后一跳路由器向下游交換機轉發報文時需要添加二層幀頭,那么應該添加什么目的MAC地址呢?
答:組播地址對應組播MAC地址,但是由於組播MAC不夠用所以組播IP對應組播IP為32:1,所以目的MAC為組播IP對應的MAC地址01:00:5e:xx:xx:xx(32個IP對應一個MAC)。
2、當交換機收到一個目的MAC地址為01:00:5e:xx:xx:xx的幀,由於MAC表中不存在這樣的MAC,所以交換機會泛洪,導致所有客戶端都收到該組播報文。怎樣解決這個問題?
答:在交換機上運行IGMP Snooping。交換機開啟IGMP Snooping后,當收到客戶端的report報文,會提取客戶端的源目IP地址,然后把目的IP地址和接收該報文的接口做一個綁定。由於需要交換機CPU拆三層包頭,所以會導致交換機轉發報文變慢。
路由器接收到單播路由更加關心去往目的地址的可達性,而接收到組播路由更關心來自哪個接口,目的是防止重復報文。一台路由器對於一個組播組信源有且只有一個接口可以接收組播流量,只有這個接口接收到組播流量后路由器才可以幫助轉發組播流量。(通過RPF校驗來選出這個接口)
RPF 校驗
當單播路由表對發送組播源地址出現負載均衡的情況下,出站接口IP地址大的成為RPF接口。
要實現針對不同的組播源走不同的RPF接口,可以使用組播靜態路由實現。
組播靜態路由:ip mroute x.x.x.x mask interface (x.x.x.x為組播組信源地址)
(個人認為這里用單播靜態路由也能實現。不同的是用單播靜態路由的話往組播信源發送單播流量不能負載均衡了,而用組播靜態路由不會影響單播負載均衡)
PIM
PIM分兩種模式(Dense mode和 Sparse mode),分別對應兩種“樹”(“源樹(SPT)”和“共享樹(RP)”)
組播路由協議建立完鄰居之后不會傳遞路由,此時路由表為空,只有在數據層面接收到組播組的數據流量時才會生成路由。
源樹特點:1.一個源一棵樹
2.從源到目的地的這個最短路徑樹距離肯定最短
3.源樹伴隨網絡環境越來越大,路由器越來越多,信源服務器越來越多每台路由器組播路由表也會越來越大,由於路由表占用路由器內存,所以會造成資源的浪費。
共享樹特點:會選擇一個RP路由器,然后所有信源第一次都會用源樹將組播報文發給RP,然后RP再用共享樹把來自所有信源的組播報文轉發給客戶端。這樣會造成次優路徑,但是信源第二次發送組播報文時就將產用最優路徑(跟ICMP重定向還挺像,但不是→_→)
PIM是一個4層協議,通過周期性發送組播hello包來建立鄰居關系,組播地址為224.0.0.13。PIM和OSPF一樣,在MA網段需要選舉DR(PIM中沒有BDR,並且DR是可以被搶占的),選舉規則為:1、比較優先級;2、接口IP地址,越高越好。在IGMPv1中由於沒有查詢者機制,所以就由DR來代替查詢者。在IGMPv2中,查詢者和DR優先級為 查詢者優先於DR。
PIM DR在IGMPv1中充當查詢者角色,在IGMPv2中無用。
不同接口啟用PIM后的表現
1、對於第一跳路由器的接收組播流量接口,如果該接口沒有啟用PIM,則無論收到什么組播報文,都會本地拆包然后將報文丟棄。
2、對於最后一跳路由器連接接受者所在網段的接口,如果該接口沒有啟用PIM則路由器不會周期性的發送IGMP Query報文。
3、對於中間路由器彼此互連的物理接口,如果沒有啟用PIM,這些路由器不會通過任何接口轉發任何組播報文。
Dense mode和Sparse mode的一些細節:
1、Dense mode(整個路由選擇域內95%以上PC都是組播組流量接受者時使用),
DM—push(不管下游有沒有接收者都一股腦的把流量潑下去)—SPT(源樹)
Push模型
運行PIM的路由器收到泛洪后發現自己下游沒有監聽該組播的客戶端時會發送prune(裁剪)報文,180s后裁剪失效,再次收到泛洪后如果下游依然沒有監聽該組播的客戶端則路由器將再次發送prune報文(可以理解為DM是每3分鍾一次的泛洪和裁剪的過程)。
注意:單播想要通信,源目必須互通。而組播(用的UDP)想要通信,只要信源可以通接收者就可以了,接收者是否同信源沒有任何關系,故ping組播不通並不代表組播沒有部署成功。
Sparse mode(適用於該環境只有5%不到的PC是組播組流量的接收者)
SM—pull(Push是盡可能把組播流量推出去,而pull是盡量不把流量發出去,從而更好節省性能)—SPT(源樹)+RPT(共享樹)
Sparse mode通信流程:
1、首先,在組播組信源發送組播流量之前,只要域內有pc要加入組播組,它就會發送report報文給最后一跳路由器,最后一跳路由器生成(*,G)Join發給RP,告知RP域內擁有該組播組的接收者。
2、信源開始發送流量,信源發送流量到達第一跳路由器,第一跳路由器會把第一個組播報文封裝成一個單播的注冊報文,把這個報文以單播的形式發送給RP,就是問RP下游有沒有組播組流量接受者。如果有,RP會把這個注冊報文解封裝成組播報文,沿着RPT(共享樹)往下發,並且給信源第一跳路由器返回一個(S,G)join的報文來告訴它可以使用SPT(源樹)來以最短的路徑把組播流量發給我,並且RP會給信源第一跳路由器返回一個報文說不要給我發送該組播的單播注冊包。
3、報文到達接收者最后一跳路由器,最后一跳路由器有一個源樹切換閾值,這個閾值是0kbps,這就代表只要收到一份組播報文,它會立即把RPT(共享樹)切換成SPT(源樹)。切換的方法就是組播接收者最后一跳路由器根據SPT(源樹)一跳一跳的給發送組播流量第一跳路由器發送一個(S,G)Join的報文。而到達切換路徑的這台路由器會給RP發送一個prune(裁剪)報文,這個報文發送完畢后我們最終的路徑就是發送組播流量第一跳路由器到接收者第一跳路由器的SPT(源樹)的最短路徑。
SM最終選擇的路徑和DM選擇的一樣,那么為什么要用SM? SM的好處在哪里?
答:SM只有知道有接收者的時候才會把正確的組播流量按照正確的路徑發給正確的接收者,而DM不管有沒有接收者直接就發組播流量。故SM可以節約性能,節約帶寬,所以建議選擇SM。