耗時(shí)10小時(shí)編撰 帶你系統(tǒng)認(rèn)識(shí)組播基礎(chǔ)架構(gòu)及IGMP的概念
有小伙伴留言,表達(dá)了對(duì)于組播知識(shí)的渴求,那今天小老虎就再次化身知識(shí)傳播的使者給大家講一講組播的基礎(chǔ)架構(gòu)以及IGMP的概念。


組播multicast:在一個(gè)或跨越多個(gè)廣播域,實(shí)現(xiàn)點(diǎn)對(duì)多點(diǎn)的通信需求,不存在強(qiáng)制性;比單播技術(shù)更加靈活、比廣播技術(shù)更加高效;廣泛應(yīng)用在網(wǎng)絡(luò)電視、在線直播、遠(yuǎn)程教育、視頻會(huì)議等對(duì)帶寬和數(shù)據(jù)交互實(shí)時(shí)性較高的信息服務(wù)。
單播unnicast:在一個(gè)或跨越多個(gè)廣播域,實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的通信需求。
廣播broadcast:在同一個(gè)廣播域內(nèi),實(shí)現(xiàn)點(diǎn)對(duì)多點(diǎn)的通信需求,存在強(qiáng)制性。

組播特點(diǎn)
1、?高效性:克服了廣播發(fā)送數(shù)據(jù)的缺點(diǎn),實(shí)現(xiàn)了點(diǎn)到多點(diǎn)之間高效的數(shù)據(jù)傳輸。
2、?節(jié)省資源:更好的帶寬利用,只針對(duì)組播組成員發(fā)送且不存在強(qiáng)制性,可以節(jié)省了信源主機(jī)和非組播組成員不必要的CPU和內(nèi)存消耗。
3、?時(shí)效性:發(fā)送源只需要發(fā)送一份數(shù)據(jù),而目的地就可以同時(shí)接收到該數(shù)據(jù)。
4、 發(fā)送源主機(jī)和中間路由器都不必知道接收者的存在就可以直接發(fā)送。
5、 組播可以實(shí)現(xiàn)多對(duì)一、一對(duì)多、多對(duì)多的應(yīng)用。
注:組播只能基于UDP封裝且不能提供可靠傳輸機(jī)制;沒(méi)有序列號(hào),報(bào)文發(fā)送容易亂序,一般需要通過(guò)添加實(shí)時(shí)傳輸協(xié)議RTP來(lái)保證數(shù)據(jù)傳輸?shù)男蛄行?;組播在發(fā)送時(shí)可能會(huì)產(chǎn)生環(huán)路和重復(fù)包。
組播源:信息的發(fā)送者稱(chēng)為"組播源"或"信源"。
組播路由器:提供組播功能的路由器稱(chēng)為"組播路由器";組播路由器不僅提供組播路由功能,也提供組成員管理功能;同時(shí)也可以是一個(gè)或多個(gè)組播組的接收成員;同一組播組的成員可以廣泛分布在網(wǎng)絡(luò)中的任何地方,即"組播組"關(guān)系沒(méi)有地域限制;
組播組成員:相同信息的接收者構(gòu)成一個(gè)組播組,每個(gè)接收者都是"組播組成員"。

組播設(shè)計(jì)架構(gòu)
L3組播:信源/組播應(yīng)用程序--研發(fā)工程師
L2組播:組播路由器/組播動(dòng)態(tài)路由選擇協(xié)議--網(wǎng)絡(luò)工程師
-IGP:PIM(協(xié)議無(wú)關(guān)組播)、DVMRP、MOSPF、CBT
注:PIM對(duì)IGP無(wú)要求,路由可達(dá)即可;而MOSPF基于單播OSPF基礎(chǔ)上運(yùn)行的。
-EGP:MSDP(組播源發(fā)現(xiàn)協(xié)議)、MP-BGP(BGP v4+)
注:MSDP可以實(shí)現(xiàn)跨越不同的AS發(fā)送和接收組播報(bào)文,結(jié)合MPBG一起使用;
L1組播:組播組成員/因特網(wǎng)組管理協(xié)議IGMP--網(wǎng)絡(luò)工程師
注:通過(guò)交互IGMP報(bào)文,讓最后一跳路由器知道自己身后是否存在組播組成員;不存在就不發(fā)送;存在就延伸樹(shù)形結(jié)構(gòu)并將組播發(fā)送給組播組成員。
組播報(bào)文封裝:針對(duì)不同的應(yīng)用進(jìn)行不同的封裝
組播地址:標(biāo)識(shí)一組接收者,不能分配給某個(gè)網(wǎng)卡使用,沒(méi)有網(wǎng)絡(luò)位和主機(jī)位的說(shuō)法,也沒(méi)有網(wǎng)絡(luò)地址和廣播地址(扁平化地址/32);標(biāo)準(zhǔn)組織IANA將D類(lèi)地址空間分配給IPv4組播使用,范圍224.0.0.0 -- 239.255.255.255;
IPv4組播MAC地址:前24位地址位為01005E,第25位恒為0;后23位地址位是IP地址的后23位地址(32:1);
IPv6組播MAC地址:將組播地址的后32提取出來(lái),然后在前邊添加3333
因特網(wǎng)組管理協(xié)議IGMP:運(yùn)行在最后一跳組播路由器和主機(jī)之間,用于建立、維護(hù)組播組成員關(guān)系;通過(guò)IGMP在路由器中記錄的信息判斷某個(gè)組播組是否在本地有組播組成員,能夠?qū)崿F(xiàn)兩個(gè)功能:
1、主機(jī)通過(guò)發(fā)送IGMP報(bào)文通知路由器希望接收某個(gè)特定組播組的信息;
2、路由器通過(guò)IGMP報(bào)文周期性地查詢(xún)局域網(wǎng)內(nèi)的組播組成員是否處于活動(dòng)狀態(tài),實(shí)現(xiàn)所連網(wǎng)段組播組成員關(guān)系的收集與維護(hù)。

IGMP
IGMP報(bào)文封裝:
Ethernet2|IPv4|IGMP|FCS IP協(xié)議號(hào)為2
IGMPv1
IGMPv1(RFC 1112)中定義了基本的組成員查詢(xún)和報(bào)告過(guò)程;支持ASM模型
版本:IGMP版本為1
類(lèi)型:成員關(guān)系查詢(xún)報(bào)文Query(0x11)和成員關(guān)系通告報(bào)文Report(0x12)
校驗(yàn)和:防止報(bào)文被篡改、沖突。
組地址:當(dāng)用于成員關(guān)系通告時(shí),組地址字段包含該組組播地址。
當(dāng)用于成員關(guān)系查詢(xún)時(shí),本字段為0,并被主機(jī)忽略。
查詢(xún)報(bào)文Query:由最后一跳路由器60s/次周期發(fā)送,目的地址為224.0.0.1,TTL值為1;路由器給主機(jī)發(fā)送Query報(bào)文會(huì)形成一個(gè)IGMP查詢(xún)表,老化時(shí)間為180s,超過(guò)180s沒(méi)有收到通告報(bào)文就會(huì)刪除對(duì)應(yīng)的IGMP表項(xiàng)。
通告報(bào)文Report:由PC主機(jī)發(fā)送,分為主動(dòng)通告和針對(duì)查詢(xún)報(bào)文的通告。
IGMP離組:PC會(huì)靜悄悄的離組,不會(huì)通知路由器,最后一跳路由器在3個(gè)hello周期內(nèi)沒(méi)有收到Report報(bào)文會(huì)將該主機(jī)從IGMP查詢(xún)列表中刪除。
IGMP report supress優(yōu)化機(jī)制:一臺(tái)PC收到了路由器發(fā)送的Query報(bào)文,不能立馬去做Report確認(rèn),PC開(kāi)啟一個(gè)隨機(jī)計(jì)時(shí)器,范圍為1-10s,取值為整數(shù),在計(jì)時(shí)器過(guò)期后,其中的一臺(tái)PC會(huì)發(fā)送目的地址為該組組播地址的Report報(bào)文,最后一跳路由器和組內(nèi)其他成員收到這個(gè)Report報(bào)文后就會(huì)抑制報(bào)告發(fā)送。
當(dāng)一個(gè)域內(nèi)有多臺(tái)最后一跳路由器時(shí),需要選舉出一臺(tái)路由器作為IGMP查詢(xún)者在IGMPv1中就需要由組播動(dòng)態(tài)路由選擇協(xié)議(如PIM)選舉出唯一的指定路由器DR作為IGMP查詢(xún)者。
IGMPv2
IGMPv2(RFC 2236)在IGMPv1的基礎(chǔ)上添加了指定組查詢(xún)、組成員快速離開(kāi)的機(jī)制和最大響應(yīng)時(shí)間等機(jī)制;只支持ASM模型
類(lèi)型:
1)成員關(guān)系查詢(xún)(0x11)
-常規(guī)查詢(xún):用于確定組播組有哪些成員,常規(guī)查詢(xún)地址由全零表示;
-指定組查詢(xún):用于查詢(xún)特定的組播組是否還有組成員。
2)版本2成員關(guān)系通告報(bào)文(0x16)
3)版本1成員關(guān)系通告報(bào)文(0x12)
4)離組報(bào)文Leave Group message(0x17)
最大響應(yīng)時(shí)間:最大響應(yīng)時(shí)間為10s,響應(yīng)時(shí)間間隔為0.1s
校驗(yàn)和:防止報(bào)文被篡改、沖突。
組地址:在查詢(xún)消息中,發(fā)送一個(gè)常規(guī)查詢(xún)報(bào)文時(shí)組地址域設(shè)為0;發(fā)送一個(gè)特定組查詢(xún)報(bào)文時(shí),則用該組的組播組地址;發(fā)送成員報(bào)告或離開(kāi)組的報(bào)文時(shí),組地址保留了要報(bào)告或要離開(kāi)的組播組地址。
查詢(xún)者選舉:當(dāng)有多個(gè)最后一跳路由器時(shí),路由器會(huì)互相發(fā)送Query報(bào)文進(jìn)行查詢(xún)者選舉(224.0.0.1),比較路由器的接口地址,地址小的路由器會(huì)被選舉為查詢(xún)者,查詢(xún)者周期性60s/次發(fā)送Query報(bào)文,鄰居路由器超過(guò)120s沒(méi)有收到Query報(bào)文,接口地址第二小的路由器成為查詢(xún)者(和PIM選舉的DR無(wú)關(guān))
離組過(guò)程:主機(jī)在關(guān)閉組播應(yīng)用的時(shí)候會(huì)通過(guò)224.0.0.2給路由器發(fā)送離組報(bào)文Leave Group message,路由器收到離組報(bào)文后會(huì)立即發(fā)送Group-specific query(目的地址為離組報(bào)文發(fā)送的組播組地址)并將最大響應(yīng)時(shí)間修改為2s(思科只發(fā)送一次),路由器在2s內(nèi)收到主機(jī)的Report報(bào)文,會(huì)保留組播查詢(xún)表項(xiàng)。
路由器在2S內(nèi)沒(méi)有收到Report報(bào)文就會(huì)立即刪除對(duì)應(yīng)的IGMP表項(xiàng)。
Router#show ip igmp group(查看igmp表項(xiàng))
Router#show ip igmp int e0/0查詢(xún)路由器接口igmp配置
IGMPv3
IGMPv3(RFC 3376)中增加的主要功能是成員可以指定接收或拒絕來(lái)自某些組播源的報(bào)文,實(shí)現(xiàn)了對(duì)SSM模型的支持。
1、保留(Resv):發(fā)送的時(shí)候以0填充,接收的時(shí)候不做處理,被忽略。
2、標(biāo)志位S(禁止路由器處理):當(dāng)被設(shè)置成1時(shí),表示任何接收路由器禁止更新它們?cè)谑盏讲樵?xún)時(shí)要更新的那些定時(shí)器。但它不禁止查詢(xún)者選舉或者普通的在路由器上執(zhí)行的(當(dāng)路由器作為一個(gè)組成員的時(shí)候)主機(jī)端的查詢(xún)處理。
3、查詢(xún)者的健壯變量(QRV):如果不為0,QRV中包含中一個(gè)被查詢(xún)者使用的[健壯變量]的值,如果查詢(xún)者的健壯變量的值超過(guò)7,即QRV字段的最大值,那么QRV被設(shè)成0。路由器取最近收到的查詢(xún)中的QRV值作為它們自己的健壯性變量的值,除非最近收到的QRV是0,在這種情況下,接收者使用缺省的健壯性變量值,或者是一個(gè)靜態(tài)配置的值。
4、查詢(xún)者的查詢(xún)間隔代碼(QQIC):指定查詢(xún)者使用的查詢(xún)間隔。
5、源數(shù)量Number_of_Source:表明該查詢(xún)中存在多少個(gè)源地址,在普通查詢(xún)或指定組查詢(xún)中這個(gè)值是0,在指定多個(gè)源的查詢(xún)中,這個(gè)值為非0值。
6、源地址Sourceaddress:n個(gè)IP單播地址的數(shù)組,n就是源數(shù)量字段的值。
在IGMPV3中它有了以下的改進(jìn)功能:
1、增加了組播組成員的控制能力;IGMP V3不僅可以指定要加入哪個(gè)組播組,還能明確要求從哪個(gè)指定組播源接受信息,這也是指定源組播功能。
2、響應(yīng)消息包含多組記錄:IGMP V3響應(yīng)消息包含的組地址為224.0.0.22,可以攜帶1個(gè)或多個(gè)組記錄,可以包含組播組地址、數(shù)目不等的源地址信息。
3、取消了Report的抑制機(jī)制、增加了指定源組查詢(xún)報(bào)文;取消了離組報(bào)文,需要結(jié)合第三方協(xié)議配合離組。