組網(wǎng)基礎(chǔ)之深入解析二層組播
二層組播相關(guān)協(xié)議包括IGMP 和GMRP協(xié)議。讓我們從分析組播MAC地址開(kāi)始,逐步而深入的了解二層組播。
組播MAC地址
所謂組播MAC地址,是一類邏輯的MAC地址,該MAC地址代表一個(gè)組播組,所有屬于該組的成員都接收以該組對(duì)應(yīng)的組播MAC地址為目的地址的數(shù)據(jù)幀。
注意的是,組播MAC地址是一個(gè)邏輯的MAC地址,也就是說(shuō),在網(wǎng)絡(luò)上,沒(méi)有一個(gè)設(shè)備的MAC地址是一個(gè)組播MAC地址。組播MAC地址跟單播MAC地址(物理MAC地址)的區(qū)別是,組播MAC地址六個(gè)字節(jié)中,***字節(jié)(第六字節(jié))的***位為1,而單播MAC地址則為0,如下圖所示:
為了更進(jìn)一步了解組播的概念,我們先從MAC層的數(shù)據(jù)幀接收過(guò)程說(shuō)起。
MAC層數(shù)據(jù)幀的接收
在網(wǎng)卡的內(nèi)部保留一張接收地址列表(可以理解為一個(gè)可讀寫(xiě)的隨機(jī)存儲(chǔ)器),其中至少有兩個(gè)MAC地址,即網(wǎng)卡的物理MAC地址和全1的廣播MAC地址。每當(dāng)計(jì)算機(jī)想接收一個(gè)組播數(shù)據(jù),也就是說(shuō)要加入一個(gè)組播組,那么上層軟件會(huì)給網(wǎng)絡(luò)層一個(gè)通知,網(wǎng)絡(luò)層做完自己的處理后,也會(huì)發(fā)一個(gè)通知給數(shù)據(jù)鏈路層,于是,數(shù)據(jù)鏈路層根據(jù)網(wǎng)絡(luò)層想加入的組播組的組地址(一般是一個(gè)組播的IP地址),根據(jù)一定的規(guī)則映射為一個(gè)組播的MAC地址,然后把該MAC地址加入接收地址列表。
每當(dāng)數(shù)據(jù)鏈路層接收到一個(gè)數(shù)據(jù)幀的時(shí)候,就提取該數(shù)據(jù)幀的幀頭,找出目的MAC地址,跟接收地址列表中的地址項(xiàng)目比較,如果在列表中遇到一個(gè)地址,跟該數(shù)據(jù)幀的目的MAC地址是相同的,就停止比較,接收該數(shù)據(jù)幀,并把該數(shù)據(jù)幀放到上層協(xié)議對(duì)應(yīng)的接收隊(duì)列中;如果在整個(gè)接收列表中沒(méi)有找到一個(gè)匹配的MAC地址,則丟棄該數(shù)據(jù)幀。
現(xiàn)假設(shè)接收到的數(shù)據(jù)幀是發(fā)給自己的單播數(shù)據(jù)幀,于是該數(shù)據(jù)幀的目的MAC地址就是自己的硬件地址。數(shù)據(jù)鏈路層接收到該數(shù)據(jù)幀,跟接收列表中的地址比較,***次比較就會(huì)通過(guò),因?yàn)榻邮盏刂妨斜碇械?**個(gè)MAC地址就是自己的硬件地址。所以在任何情況下,發(fā)給自己的數(shù)據(jù)幀一定能接收下來(lái);
假設(shè)接收到的數(shù)據(jù)幀是一個(gè)廣播數(shù)據(jù)幀,則在比較的時(shí)候,***一項(xiàng)是匹配的,因?yàn)榻邮盏刂妨斜碇锌隙ò粋€(gè)廣播的MAC地址,這樣就保證了任何廣播數(shù)據(jù)報(bào)都會(huì)被正確接收;
假設(shè)上層軟件想接收組播組G的數(shù)據(jù),經(jīng)過(guò)一番映射到數(shù)據(jù)鏈路層之后,數(shù)據(jù)鏈路層會(huì)在自己的接收數(shù)據(jù)列表中添加一項(xiàng)組播組G對(duì)應(yīng)的MAC地址,假設(shè)為MAC_G,當(dāng)計(jì)算機(jī)接收到一個(gè)數(shù)據(jù)幀,該數(shù)據(jù)幀的目的地址為MAC_G的時(shí)候,該數(shù)據(jù)幀會(huì)被接收并傳遞到上層,因?yàn)榻邮樟斜碇杏幸豁?xiàng)MAC_G記錄。
組播轉(zhuǎn)發(fā)表
在前面交換機(jī)的轉(zhuǎn)發(fā)方式一節(jié)中講到,交換機(jī)在轉(zhuǎn)發(fā)組播數(shù)據(jù)包的時(shí)候,也是根據(jù)一個(gè)轉(zhuǎn)發(fā)表來(lái)進(jìn)行的,但跟單播轉(zhuǎn)發(fā)表不同的是,該組播轉(zhuǎn)發(fā)表對(duì)應(yīng)的出口不是一個(gè)元素/端口,而是一組元素/端口,即一個(gè)出口列表。在轉(zhuǎn)發(fā)數(shù)據(jù)的時(shí)候,交換機(jī)根據(jù)組播數(shù)據(jù)幀的目的組播地址查找組播轉(zhuǎn)發(fā)表,如果在組播轉(zhuǎn)發(fā)表中查不到相應(yīng)的轉(zhuǎn)發(fā)項(xiàng),則把該組播數(shù)據(jù)幀當(dāng)做廣播數(shù)據(jù)幀處理,向所有端口上轉(zhuǎn)發(fā)該數(shù)據(jù)幀(如果實(shí)現(xiàn)了VLAN,則僅僅向接收端口所屬同一個(gè)VLAN的端口上轉(zhuǎn)發(fā));如果能查找到一個(gè)結(jié)果,則結(jié)果肯定是一個(gè)接口列表,于是,交換機(jī)把這個(gè)組播數(shù)據(jù)報(bào)復(fù)制成許多份,每份提交到一個(gè)出接口,從而完成數(shù)據(jù)的交換。
需要注意的是,這個(gè)組播轉(zhuǎn)發(fā)項(xiàng)不像單播那樣,是通過(guò)學(xué)習(xí)的方式獲得的(在處理單播數(shù)據(jù)的時(shí)候,交換機(jī)每轉(zhuǎn)發(fā)一個(gè)數(shù)據(jù)幀,會(huì)進(jìn)行相應(yīng)的學(xué)習(xí)過(guò)程,學(xué)習(xí)到一個(gè)單播轉(zhuǎn)發(fā)項(xiàng)),而是通過(guò)一些二層的組播協(xié)議獲得的,這些流行的組播協(xié)議有IGMP(Internet Group Management Protocol, 因特網(wǎng)組管理協(xié)議),GMRP(GARP Multicast Register Protocol,GARP組播注冊(cè)協(xié)議,GARP- General Attribute Registration Protocol)等。下面部分詳細(xì)解釋每一種二層組播協(xié)議。
二層組播協(xié)議
上面我們提到,用于轉(zhuǎn)發(fā)組播數(shù)據(jù)幀的組播轉(zhuǎn)發(fā)項(xiàng)不是通過(guò)學(xué)習(xí)獲得的,而是通過(guò)一些其他的組播協(xié)議,比如IGMP窺探,GMRP等協(xié)議獲得的。至于為什么不能通過(guò)學(xué)習(xí)獲得,是因?yàn)閷W(xué)習(xí)過(guò)程是分析一個(gè)數(shù)據(jù)幀的源地址,但組播地址在任何情況下不可能出現(xiàn)在源地址的位置(因?yàn)榻M播MAC地址是一個(gè)邏輯的MAC地址,網(wǎng)絡(luò)上沒(méi)有一個(gè)終端的MAC地址是一個(gè)組播MAC地址)。
下面我們分析二層組播協(xié)議,這些協(xié)議在構(gòu)建組播網(wǎng)絡(luò)的時(shí)候,有不可替代的重要地位。尤其是將來(lái)的流媒體應(yīng)用會(huì)很廣泛,在這種情況下,二層的組播將是必然的要求。
IGMP協(xié)議
在講述IGMP窺探之前,先看一下IGMP協(xié)議,理解了IGMP協(xié)議,IGMP窺探就很容易了。
一般情況下,組播數(shù)據(jù)是從路由器的上游流下來(lái)的,而組播的接收端一般位于路由器的下游,典型的情況是,路由器通過(guò)一個(gè)以太網(wǎng)口連接企業(yè)網(wǎng),另外通過(guò)一個(gè)串口連接Internet。組播數(shù)據(jù)源,比如流媒體服務(wù)器一般位于Internet上,組播數(shù)據(jù)流通過(guò)路由器到達(dá)企業(yè)網(wǎng)上的數(shù)據(jù)接收端。這種情況下,流媒體服務(wù)器是長(zhǎng)時(shí)間工作的,也就是說(shuō),一天24小時(shí),一周7天都在不停的發(fā)送媒體流信息,相當(dāng)于電視頻道。但企業(yè)網(wǎng)絡(luò)中的數(shù)據(jù)接收端卻不是這樣,只有有限的時(shí)間接收端才接收數(shù)據(jù),其他時(shí)間都是不接收數(shù)據(jù)的。這樣,在企業(yè)網(wǎng)上沒(méi)有數(shù)據(jù)接收端的時(shí)候,如果路由器也把大量的媒體流信息發(fā)到企業(yè)網(wǎng)內(nèi)部,必然會(huì)浪費(fèi)大量的資源,理想的情況是,如果企業(yè)網(wǎng)上沒(méi)有數(shù)據(jù)接收端,則路由器就不轉(zhuǎn)發(fā)媒體流,但如果只要有一個(gè)接收端,路由器就必須把媒體流引入企業(yè)網(wǎng)。這樣必須有一種機(jī)制來(lái)保證路由器對(duì)企網(wǎng)上的數(shù)據(jù)接收端有一個(gè)清楚的了解,什么時(shí)候網(wǎng)絡(luò)上有數(shù)據(jù)接收端,什么時(shí)候沒(méi)有數(shù)據(jù)接收端,這種機(jī)制就是IGMP協(xié)議。
從上面的分析中,我們可以看出IGMP協(xié)議是數(shù)據(jù)接收端和路由器之間的交互協(xié)議,數(shù)據(jù)接收端使用該協(xié)議來(lái)通知路由器,自己是否想接收組播數(shù)據(jù)流。如果想接收的話,接收哪個(gè)組播組的數(shù)據(jù)流。
一般情況下,存在兩種類型的IGMP消息:組成員報(bào)告和組成員查詢,其中組成員報(bào)告消息由計(jì)算機(jī)發(fā)出,用來(lái)告訴路由器,自己想加入某個(gè)組播組,而組成員查詢消息則由路由器發(fā)出,用來(lái)查詢網(wǎng)絡(luò)上是否存在相應(yīng)組的成員。一個(gè)指導(dǎo)性的原則是,只要網(wǎng)絡(luò)上有組播組的數(shù)據(jù)接收端,不管該接收端的數(shù)量是多少,路由器必須把該組播組的數(shù)據(jù)轉(zhuǎn)發(fā)到網(wǎng)絡(luò)上。
IGMP消息也是通過(guò)組播地址發(fā)出的,在IGMP加入消息中,該組播地址(IGMP消息的目的地址)就是該計(jì)算機(jī)想加入的組播組的組地址。比如,計(jì)算機(jī)想加入224.0.0.2這個(gè)組播組,則該計(jì)算機(jī)發(fā)出的IGMP加入消息的目的IP地址就是224.0.0.2。這樣當(dāng)路由器接收到該組播消息后,就知道網(wǎng)絡(luò)上有一個(gè)主機(jī),該主機(jī)想接收到組播組224.0.0.2的數(shù)據(jù),于是,每當(dāng)從上游接收到目的地址是該組地址的數(shù)據(jù)的時(shí)候,就把該數(shù)據(jù)包向企業(yè)網(wǎng)上轉(zhuǎn)發(fā)。
還有一類消息就是組播組成員查詢消息。在IGMP協(xié)議***版中,沒(méi)有規(guī)定主機(jī)的離開(kāi)消息,即如果一個(gè)主機(jī)不想接收某一組播組的數(shù)據(jù)了,它也不會(huì)通過(guò)某種消息通知路由器,而是靜悄悄的離開(kāi)該組播組。這樣如果路由器不采取某種措施來(lái)掌握網(wǎng)絡(luò)上組播組接收端的數(shù)目情況,就會(huì)產(chǎn)生問(wèn)題,假設(shè)網(wǎng)絡(luò)上所有的主機(jī)都不想接收組播數(shù)據(jù)了,根據(jù)IGMP協(xié)議***版,這些主機(jī)不會(huì)通知路由器,而是不做任何處理。這樣路由器不知道這些原來(lái)接收組播數(shù)據(jù)的主機(jī)現(xiàn)在已經(jīng)不接收數(shù)據(jù)了,而且還以為網(wǎng)絡(luò)上有一大批的接收端,于是仍源源不斷的發(fā)送組播數(shù)據(jù),這樣必然浪費(fèi)帶寬。而引入了組成員查詢消息后,路由器可以每隔一段時(shí)間發(fā)出該消息,用來(lái)查詢網(wǎng)絡(luò)上還有沒(méi)有主機(jī)在接收組播數(shù)據(jù)。注意的是,該查詢消息跟成員加入消息一樣,采用的目的IP地址也是查詢的組的組播IP地址。假設(shè)路由器想查詢245.2.2.1這樣一個(gè)組播組是否還有成員,發(fā)出的查詢消息的目的IP地址就是245.2.2.1。當(dāng)網(wǎng)絡(luò)上接收該組播組數(shù)據(jù)的成員接收到這個(gè)查詢消息后,就發(fā)出一個(gè)響應(yīng),該響應(yīng)還是一個(gè)組播組成員加入消息。這樣只要路由器接收到一個(gè)這樣的響應(yīng),它就知道網(wǎng)絡(luò)上必然還有終端在接收數(shù)據(jù),于是不能停止轉(zhuǎn)發(fā)。但路由器發(fā)出查詢消息后,一段時(shí)間內(nèi)沒(méi)有接收到任何響應(yīng),它就判斷網(wǎng)絡(luò)上沒(méi)有了數(shù)據(jù)接收端,于是停止轉(zhuǎn)發(fā)組播數(shù)據(jù)。
到此為止,IGMP協(xié)議的一些細(xì)節(jié)已經(jīng)介紹完畢,接下來(lái)介紹IGMP窺探。需要注意的是,IGMP協(xié)議是三層協(xié)議,而IGMP窺探則是二層組播協(xié)議,但它利用了IGMP的三層特性。注意,IGMP協(xié)議是運(yùn)行在交換機(jī)上的一種協(xié)議,它使用該協(xié)議來(lái)形成轉(zhuǎn)發(fā)組播數(shù)據(jù)的組播轉(zhuǎn)發(fā)表。
下面是啟動(dòng)了IGMP窺探的交換機(jī)工作過(guò)程:
(1) 交換機(jī)從每個(gè)端口上監(jiān)聽(tīng)接收到的數(shù)據(jù)幀,如果是單播數(shù)據(jù)幀就按照通常的轉(zhuǎn)發(fā)方式進(jìn)行轉(zhuǎn)發(fā),是組播數(shù)據(jù)幀則進(jìn)行下一步處理;
(2) 如果接收到的數(shù)據(jù)幀是組播數(shù)據(jù)幀,則分析該組播數(shù)據(jù)幀的協(xié)議類型字段,看是否是IP協(xié)議,如果不是,則按照通常的方式轉(zhuǎn)發(fā)(這時(shí)候可能查詢組播轉(zhuǎn)發(fā)表轉(zhuǎn)發(fā),如果沒(méi)有查到結(jié)果,則向所有端口上轉(zhuǎn)發(fā));(3) 如果是IP協(xié)議數(shù)據(jù),則進(jìn)一步判斷該數(shù)據(jù)是不是一個(gè)IGMP加入消息或IGMP查詢消息。如果不是,則進(jìn)行通常的組播數(shù)據(jù)發(fā)送,否則轉(zhuǎn)下一步;
(4) 如果是一個(gè)IGMP加入或查詢消息,則該交換機(jī)就可以判斷,在接收到該數(shù)據(jù)幀的端口上一定連接一個(gè)組播數(shù)據(jù)接收端,該接收端想接收IGMP加入消息中目的地址所在的組播組數(shù)據(jù)。于是,交換機(jī)就檢查組播轉(zhuǎn)發(fā)項(xiàng),看對(duì)應(yīng)的組播MAC地址有沒(méi)有在組播轉(zhuǎn)發(fā)項(xiàng)中出現(xiàn)。如果出現(xiàn)了,則把接收到該數(shù)據(jù)幀的接口加入組播轉(zhuǎn)發(fā)項(xiàng)對(duì)應(yīng)的接口集合,如果沒(méi)有出現(xiàn),說(shuō)明該組播轉(zhuǎn)發(fā)項(xiàng)還沒(méi)有創(chuàng)建,于是創(chuàng)建一個(gè)組播轉(zhuǎn)發(fā)項(xiàng),該轉(zhuǎn)發(fā)項(xiàng)的組播地址是IGMP消息的目的IP地址的影射MAC地址,接口列表初始化為接收到該數(shù)據(jù)幀的接口,接下來(lái)繼續(xù)按照通常的過(guò)程轉(zhuǎn)發(fā)該數(shù)據(jù)幀。
到此為止,IGMP窺探的具體工作過(guò)程已經(jīng)明了,可以看出,這種協(xié)議***的一個(gè)缺點(diǎn)就是效率較低,交換機(jī)需要分析每個(gè)組播數(shù)據(jù)幀,看該數(shù)據(jù)幀是否是組播數(shù)據(jù)幀,如果是,繼續(xù)看是否是IP數(shù)據(jù)幀,如果是,繼續(xù)看是否是IGMP加入消息等等。
GMRP協(xié)議
當(dāng)主機(jī)不支持IGMP協(xié)議的時(shí)候就無(wú)法實(shí)現(xiàn)窺探。我們考慮能不能開(kāi)發(fā)一種專門(mén)的針對(duì)組播的協(xié)議,該協(xié)議可以高效的完成其他組播協(xié)議完成的任務(wù)。
這就是GMRP協(xié)議。該協(xié)議需要計(jì)算機(jī)網(wǎng)卡和交換機(jī)一起工作,因此需要計(jì)算機(jī)網(wǎng)卡的支持。由于該協(xié)議是一個(gè)較新的協(xié)議,故大多數(shù)網(wǎng)卡都沒(méi)有支持,但作為一種標(biāo)準(zhǔn)的協(xié)議,將來(lái)的網(wǎng)絡(luò)設(shè)備都會(huì)支持。
該協(xié)議的運(yùn)行過(guò)程很簡(jiǎn)單,想接收組播數(shù)據(jù)的計(jì)算機(jī)只要告訴連接的交換機(jī),它想接收哪個(gè)組的組播數(shù)據(jù)即可。交換機(jī)接收到通知后,就創(chuàng)建相應(yīng)的組播轉(zhuǎn)發(fā)項(xiàng),把接收到組播請(qǐng)求的端口加入組播轉(zhuǎn)發(fā)項(xiàng)中。當(dāng)計(jì)算機(jī)不再想接收組播數(shù)據(jù)了,只簡(jiǎn)單的告訴交換機(jī)就可以了,交換機(jī)接收到通知后,就從組播轉(zhuǎn)發(fā)項(xiàng)中把相應(yīng)的端口刪除掉。
總結(jié)
二層組播的一些基礎(chǔ)概念就講解完了,在這些內(nèi)容中,組播MAC地址,組播和單播數(shù)據(jù)的接收過(guò)程以及三種組播協(xié)議是重點(diǎn)。這些內(nèi)容也是學(xué)習(xí)后續(xù)內(nèi)容(比如三層組播路由協(xié)議)的基礎(chǔ),在實(shí)際中,這些組播概念也是應(yīng)用得最多的。
【編輯推薦】