1. 程式人生 > >組網基礎之深入解析二層組播

組網基礎之深入解析二層組播

所謂二層組播,即資料幀的轉發是面向二層的,根據組播MAC地址來決定資料幀的轉發方向,而三層組播,即所謂的IP組播,則根據三層組播地址,即組播IP地址來進行資料幀的轉發。

二層組播相關協議包括IGMPGMRP協議。讓我們從分析組播MAC地址開始,逐步而深入的瞭解二層組播。

組播MAC地址

所謂組播MAC地址,是一類邏輯的MAC地址,該MAC地址代表一個組播組,所有屬於該組的成員都接收以該組對應的組播MAC地址為目的地址的資料幀。

注意的是,組播MAC地址是一個邏輯的MAC地址,也就是說,在網路上,沒有一個裝置的MAC地址是一個組播MAC地址。組播MAC地址跟單播MAC地址(物理MAC地址)的區別是,組播MAC地址六個位元組中,最高位元組(第六位元組)的最低位為1,而單播MAC地址則為0,如下圖所示:

為了更進一步瞭解組播的概念,我們先從MAC層的資料幀接收過程說起。

MAC層資料幀的接收

在網絡卡的內部保留一張接收地址列表(可以理解為一個可讀寫的隨機儲存器),其中至少有兩個MAC地址,即網絡卡的物理MAC地址和全1的廣播MAC地址。每當計算機想接收一個組播資料,也就是說要加入一個組播組,那麼上層軟體會給網路層一個通知,網路層做完自己的處理後,也會發一個通知給資料鏈路層,於是,資料鏈路層根據網路層想加入的組播組的組地址(一般是一個組播的IP地址),根據一定的規則對映為一個組播的MAC地址,然後把該MAC地址加入接收地址列表。

每當資料鏈路層接收到一個數據幀的時候,就提取該資料幀的幀頭,找出目的MAC地址,跟接收地址列表中的地址專案比較,如果在列表中遇到一個地址,跟該資料幀的目的MAC地址是相同的,就停止比較,接收該資料幀,並把該資料幀放到上層協議對應的接收佇列中;如果在整個接收列表中沒有找到一個匹配的MAC地址,則丟棄該資料幀。

現假設接收到的資料幀是發給自己的單播資料幀,於是該資料幀的目的MAC地址就是自己的硬體地址。資料鏈路層接收到該資料幀,跟接收列表中的地址比較,第一次比較就會通過,因為接收地址列表中的第一個MAC地址就是自己的硬體地址。所以在任何情況下,發給自己的資料幀一定能接收下來;

假設接收到的資料幀是一個廣播資料幀,則在比較的時候,最後一項是匹配的,因為接收地址列表中肯定包含一個廣播的MAC地址,這樣就保證了任何廣播資料報都會被正確接收;

假設上層軟體想接收組播組G的資料,經過一番對映到資料鏈路層之後,資料鏈路層會在自己的接收資料列表中新增一項組播組G對應的MAC地址,假設為MAC_G,當計算機接收到一個數據幀,該資料幀的目的地址為MAC_G的時候,該資料幀會被接收並傳遞到上層,因為接收列表中有一項MAC_G記錄。

組播轉發表

在前面交換機的轉發方式一節中講到,交換機在轉發組播資料包的時候,也是根據一個轉發表來進行的,但跟單播轉發表不同的是,該組播轉發表對應的出口不是一個元素/埠,而是一組元素/埠,即一個出口列表。在轉發資料的時候,交換機根據組播資料幀的目的組播地址查詢組播轉發表,如果在組播轉發表中查不到相應的轉發項,則把該組播資料幀當做廣播資料幀處理,向所有埠上轉發該資料幀(如果實現了VLAN,則僅僅向接收埠所屬同一個VLAN的埠上轉發);如果能查詢到一個結果,則結果肯定是一個介面列表,於是,交換機把這個組播資料報復製成許多份,每份提交到一個出介面,從而完成資料的交換。

需要注意的是,這個組播轉發項不像單播那樣,是通過學習的方式獲得的(在處理單播資料的時候,交換機每轉發一個數據幀,會進行相應的學習過程,學習到一個單播轉發項),而是通過一些二層的組播協議獲得的,這些流行的組播協議有IGMP(Internet Group Management Protocol, 因特網組管理協議),GMRP(GARP Multicast Register Protocol,GARP組播註冊協議,GARP- General Attribute Registration Protocol)等。下面部分詳細解釋每一種二層組播協議。

二層組播協議

上面我們提到,用於轉發組播資料幀的組播轉發項不是通過學習獲得的,而是通過一些其他的組播協議,比如IGMP窺探,GMRP等協議獲得的。至於為什麼不能通過學習獲得,是因為學習過程是分析一個數據幀的源地址,但組播地址在任何情況下不可能出現在源地址的位置(因為組播MAC地址是一個邏輯的MAC地址,網路上沒有一個終端的MAC地址是一個組播MAC地址)。

下面我們分析二層組播協議,這些協議在構建組播網路的時候,有不可替代的重要地位。尤其是將來的流媒體應用會很廣泛,在這種情況下,二層的組播將是必然的要求。

IGMP協議

在講述IGMP窺探之前,先看一下IGMP協議,理解了IGMP協議,IGMP窺探就很容易了。

一般情況下,組播資料是從路由器的上游流下來的,而組播的接收端一般位於路由器的下游,典型的情況是,路由器通過一個乙太網口連線企業網,另外通過一個串列埠連線Internet。組播資料來源,比如流媒體伺服器一般位於Internet上,組播資料流通過路由器到達企業網上的資料接收端。這種情況下,流媒體伺服器是長時間工作的,也就是說,一天24小時,一週7天都在不停的傳送媒體流資訊,相當於電視訊道。但企業網路中的資料接收端卻不是這樣,只有有限的時間接收端才接收資料,其他時間都是不接收資料的。這樣,在企業網上沒有資料接收端的時候,如果路由器也把大量的媒體流資訊發到企業網內部,必然會浪費大量的資源,理想的情況是,如果企業網上沒有資料接收端,則路由器就不轉發媒體流,但如果只要有一個接收端,路由器就必須把媒體流引入企業網。這樣必須有一種機制來保證路由器對企網上的資料接收端有一個清楚的瞭解,什麼時候網路上有資料接收端,什麼時候沒有資料接收端,這種機制就是IGMP協議。

從上面的分析中,我們可以看出IGMP協議是資料接收端和路由器之間的互動協議,資料接收端使用該協議來通知路由器,自己是否想接收組播資料流。如果想接收的話,接收哪個組播組的資料流。

一般情況下,存在兩種型別的IGMP訊息:組成員報告和組成員查詢,其中組成員報告訊息由計算機發出,用來告訴路由器,自己想加入某個組播組,而組成員查詢訊息則由路由器發出,用來查詢網路上是否存在相應組的成員。一個指導性的原則是,只要網路上有組播組的資料接收端,不管該接收端的數量是多少,路由器必須把該組播組的資料轉發到網路上。

IGMP訊息也是通過組播地址發出的,在IGMP加入訊息中,該組播地址(IGMP訊息的目的地址)就是該計算機想加入的組播組的組地址。比如,計算機想加入224.0.0.2這個組播組,則該計算機發出的IGMP加入訊息的目的IP地址就是224.0.0.2。這樣當路由器接收到該組播訊息後,就知道網路上有一個主機,該主機想接收到組播組224.0.0.2的資料,於是,每當從上游接收到目的地址是該組地址的資料的時候,就把該資料包向企業網上轉發。

還有一類訊息就是組播組成員查詢訊息。在IGMP協議第一版中,沒有規定主機的離開訊息,即如果一個主機不想接收某一組播組的資料了,它也不會通過某種訊息通知路由器,而是靜悄悄的離開該組播組。這樣如果路由器不採取某種措施來掌握網路上組播組接收端的數目情況,就會產生問題,假設網路上所有的主機都不想接收組播資料了,根據IGMP協議第一版,這些主機不會通知路由器,而是不做任何處理。這樣路由器不知道這些原來接收組播資料的主機現在已經不接收資料了,而且還以為網路上有一大批的接收端,於是仍源源不斷的傳送組播資料,這樣必然浪費頻寬。而引入了組成員查詢訊息後,路由器可以每隔一段時間發出該訊息,用來查詢網路上還有沒有主機在接收組播資料。注意的是,該查詢訊息跟成員加入訊息一樣,採用的目的IP地址也是查詢的組的組播IP地址。假設路由器想查詢245.2.2.1這樣一個組播組是否還有成員,發出的查詢訊息的目的IP地址就是245.2.2.1。當網路上接收該組播組資料的成員接收到這個查詢訊息後,就發出一個響應,該響應還是一個組播組成員加入訊息。這樣只要路由器接收到一個這樣的響應,它就知道網路上必然還有終端在接收資料,於是不能停止轉發。但路由器發出查詢訊息後,一段時間內沒有接收到任何響應,它就判斷網路上沒有了資料接收端,於是停止轉發組播資料。

到此為止,IGMP協議的一些細節已經介紹完畢,接下來介紹IGMP窺探。需要注意的是,IGMP協議是三層協議,而IGMP窺探則是二層組播協議,但它利用了IGMP的三層特性。注意,IGMP協議是執行在交換機上的一種協議,它使用該協議來形成轉發組播資料的組播轉發表。

下面是啟動了IGMP窺探的交換機工作過程:

(1) 交換機從每個埠上監聽接收到的資料幀,如果是單播資料幀就按照通常的轉發方式進行轉發,是組播資料幀則進行下一步處理;

(2) 如果接收到的資料幀是組播資料幀,則分析該組播資料幀的協議型別欄位,看是否是IP協議,如果不是,則按照通常的方式轉發(這時候可能查詢組播轉發錶轉發,如果沒有查到結果,則向所有埠上轉發);(3) 如果是IP協議資料,則進一步判斷該資料是不是一個IGMP加入訊息或IGMP查詢訊息。如果不是,則進行通常的組播資料傳送,否則轉下一步;

(4) 如果是一個IGMP加入或查詢訊息,則該交換機就可以判斷,在接收到該資料幀的埠上一定連線一個組播資料接收端,該接收端想接收IGMP加入訊息中目的地址所在的組播組資料。於是,交換機就檢查組播轉發項,看對應的組播MAC地址有沒有在組播轉發項中出現。如果出現了,則把接收到該資料幀的介面加入組播轉發項對應的介面集合,如果沒有出現,說明該組播轉發項還沒有建立,於是建立一個組播轉發項,該轉發項的組播地址是IGMP訊息的目的IP地址的影射MAC地址,介面列表初始化為接收到該資料幀的介面,接下來繼續按照通常的過程轉發該資料幀。

到此為止,IGMP窺探的具體工作過程已經明瞭,可以看出,這種協議最大的一個缺點就是效率較低,交換機需要分析每個組播資料幀,看該資料幀是否是組播資料幀,如果是,繼續看是否是IP資料幀,如果是,繼續看是否是IGMP加入訊息等等。

GMRP協議

當主機不支援IGMP協議的時候就無法實現窺探。我們考慮能不能開發一種專門的針對組播的協議,該協議可以高效的完成其他組播協議完成的任務。

這就是GMRP協議。該協議需要計算機網絡卡和交換機一起工作,因此需要計算機網絡卡的支援。由於該協議是一個較新的協議,故大多數網絡卡都沒有支援,但作為一種標準的協議,將來的網路裝置都會支援。

該協議的執行過程很簡單,想接收組播資料的計算機只要告訴連線的交換機,它想接收哪個組的組播資料即可。交換機接收到通知後,就建立相應的組播轉發項,把接收到組播請求的埠加入組播轉發項中。當計算機不再想接收組播資料了,只簡單的告訴交換機就可以了,交換機接收到通知後,就從組播轉發項中把相應的埠刪除掉。