1. 程式人生 > 其它 >計算機網路-4-11-IP多播

計算機網路-4-11-IP多播

IP多播

IP多播的基本概念

與單播相比,在一對多的通訊中,多播可以大大減少網路資源。在網際網路上進行多播就叫做IP多播,IP多播所傳送的分組需要使用多播IP地址。能夠執行多播協議的路由器叫做多播路由器,當然多播路由器也可以轉發普通的IP資料報。

在網際網路中的每一臺主機都必須有一個全球唯一的IP地址,如果某臺主機現在想接受某個特定多播組的分組,那麼怎樣才能使這個多播資料報傳送到這臺主機呢?

其實多播組的識別符號就是 IP 地址中的 D 類地址。D 類 IP 地址的前四位是 1110,因此D 類地址範圍是 224.0.0.0 到 239.255.255.255。我們就用每一個 D 類地址標誌一個多播組。這樣,D 類地址共可標誌 228 個多播組,也就是說,在同一時間可以允許有超過 2.6 億的多播組在網際網路上執行。多播資料報也是“盡最大努力交付”,不保證一定能夠交付多播組內的所有成員。因此,多播資料報和一般的IP資料報的區別就是它使用D類IP地址作為目的地址,並且首部中的協議欄位值是2,表明使用網際組管理協議IGMP。

顯然,多播地址只能用於目的地址,而不能用於源地址。此外,對多播資料報不產生ICMP 差錯報文。因此,若在 PING 命令後面鍵入多播地址,將永遠不會收到響應。

IP多播可以分為兩種:在區域網上進行硬體多播和在網際網路範圍進行多播

在區域網上進行硬體多播

網際網路號碼指派管理局 IANA 擁有的乙太網地址塊的高 24 位為 00-00-5E, 因此 TCP/IP協議使用的乙太網多播地址塊的範圍是從00-00-5E-00-00-00到00-00-5E-FF-FF-FF。在第3章講過,乙太網硬體地址欄位中的第 1 位元組的最低位為 1 時即為多播地址,這種多播地址數佔 IANA 分配到的地址數的一半。因此 IANA 擁有的乙太網多播地址的範圍是從01-00-5E-00-00-00到01-00-5E-FF-FF-FF。不難看出,在每一個地址中,只有23位可用作多播。這隻能和D類IP 地址中的23位有一一對應的關係。D類 IP 地址可供分配的有 28 位,可見在這 28 位中的前 5 位不能用來構成乙太網硬體地址(圖 4-54)。例如,IP 多播地址224.128.64.32(即 E0-80-40-20)和另一個 IP 多播地址 224.0.64.32(即 E0-00-40-20)轉換成乙太網的硬體多播地址都是 01-00-5E-00-40-20。由於多播 IP 地址與乙太網硬體地址的對映關係不是唯一的,因此收到多播資料報的主機,還要在 IP 層三利 片用軟體進濾,把不是本主機要接收的資料報丟棄。

下面就討論IP多播所需要的協議

網際組管理協議IGMP和多播路由選擇協議

IP多播需要兩種協議

如圖4-55是網際網路傳送多播資料的例子。圖中標有IP地址的四臺主機都參加了一個多播組,其地址是226.15.37.123。顯然多播資料報應當傳送到路由器R1、R2、R3,而不是R4,因為R4連線的區域網並沒有成員接入到多播組中。但這些路由器又怎麼知道多播組的成員呢?這就要利用一個協議,叫做網際組管理協議IGMP(Internet Group Managerment Protocol)

圖 4-55 強調了 IGMP 的本地使用範圍。請注意,IGMP 並非在網際網路範圍內對所有多播組成員進行管理的協議。IGMP 不知道 IP 多播組包含的成員數,也不知道這些成員都分佈在哪些網路上,等等。IGMP 協議是讓連線在本地區域網上的多播路由器知道本區域網上是否有主機(嚴格講,是主機上的某個程序)參加或退出了某個多播組。

顯然,僅有 IGMP 協議是不能完成多播任務的。連線在區域網上的多播路由器還必須和網際網路上的其他多播路由器協同工作,以便把多播資料報用最小代價傳送給所有的組成員。這就需要使用多播路由選擇協議。

網際組管理協議IGMP

與網際控制報文協議ICMP類似,IGMP使用IP資料報傳送報文(即在IGMP首部加上IP資料首部構成了IP資料報),但它也向IP提供服務。因此,我們不能把IGMP看成是一個單獨的協議,而是屬於整個網際協議IP的一個組成部分。從概念上來講,IGMP的工作可分為兩個階段:

  1. 第一個階段:當某臺主機加入新的多播組的時候,該主機應向多播組的多播地址傳送一個IGMP報文,宣告自己要成為該組的成員。本地的多播路由器收到IGMP報文後,還要利用多播路由選擇協議把這種組成員關係轉發給網際網路上的其它多播路由器。

  2. 第二個階段:組成員關係是動態的。本地多播路由器要週期性地探詢本地區域網上的主
    機,以便知道這些主機是否還繼續是組的成員。只要有一臺主機對某個組響應,那麼多播路由器就認為這個組是活躍的。但一個組在經過幾次的探詢後仍然沒有一臺主機響應,多播路由器就認為本網路上的主機已經都離開了這個組,因此也就不再把這個組的成員關係轉發給其他的多播路由器。

IGMP協議設計的很仔細,避免了多播控制資訊給網路增加大量的開銷,IGMP採用的具體措施如下:

  1. 主機和多播路由器之間的所有通訊都是使用IP多播。只要有可能,攜帶IGMP報文的資料報都用硬體多播來傳送。因此在支援硬體多播的網路上,沒有參加IP多播的主機不會接收到IGMP報文。

  2. 多播路由器在探詢組成員關係時,只需要對所有的組傳送一個請求資訊的詢問報文,而不需要對每一個組傳送一個詢問報文(雖然也允許對一個特定組傳送詢問報文)。預設的詢問速率是每 125 秒傳送一次(通訊量並不太大)。

  3. 當同一個網路上連線有幾個多播路由器時,它們能夠迅速和有效地選擇其中的一個來探詢主機的成員關係。因此,網路上多個多播路由器並不會引起IGMP通訊量的增大。

  4. 在 IGMP 的詢問報文中有一個數值 N,它指明一個最長響應時間(預設值為 10秒)。當收到詢問時,主機在 0 到 N 之間隨機選擇傳送響應所需經過的時延。因此,若一臺主機同時參加了幾個多播組,則主機對每一個多播組選擇不同的隨機數。對應於最小時延的響應最先發送。

  5. 同一個組內的每一臺主機都要監聽響應,只要有本組的其他主機先發送了響應,自己就可以不再發送響應了。這樣就抑制了不必要的通訊量。

多播路由器並不需要保留組成員關係的準確記錄,因為向區域網上的組成員轉發資料報是使用硬體多播。多播路由器只需要知道網路上是否至少還有一臺主機是本組成員即可。實際上,對詢問報文每一個組只需有一臺主機發送響應。

如果一臺主機上有多個程序都加入了某個多播組,那麼這臺主機對發給這個多播組的每個多播資料報只接收一個副本,然後給主機中的每一個程序傳送一個本地複製的副本。最後我們還要強調指出,多播資料報的傳送者和接收者都不知道(也無法找出)一個多播組的成員有多少,以及這些成員是哪些主機。網際網路中的路由器和主機都不知道哪個應用程序將要向哪個多播組傳送多播資料報,因為任何應用程序都可以在任何時候向任何一個多播組傳送多播資料報,而這個應用程序並不需要加入這個多播組。

多播路由選擇協議

雖然TCP/IP中IP多播協議已經成為了建議標準,但多播路由選擇協議尚未標準化。

在多播過程中,一個多播組的成員是動態變化的。多播路由選擇協議實際上是找出以源主機為根節點多播轉發樹,在多播轉發樹上,每一個多播路由器向樹的葉節點方向轉發收到的多播資料報,但在多播轉發樹上的多播路由器上不會收到重複的多播資料報(即多播資料報不會在網際網路中兜圈子)。不難看出,對於不同的多播組對應於不同的多播轉發樹,同一個多播組,對不同的源點也會有不同的多播轉發樹。

已有了多種實用的多播路由選擇協議,它們在轉發多播資料報的時候使用了以下三種方法:

  1. 洪泛與剪除:這種方法適用於較小的多播組,而所有的組成員接入的區域網也是相鄰的。一開始,路由器轉發多播資料報使用的是洪泛的方法(也就是廣播)。為了避免兜圈子,採用了叫做反向廣播路徑RPB(Reverse Path Broadcasting)的策略。RPB的要點是:每一個路由器在收到一個多波資料報的時候,先檢查資料報是否從源點經最短路徑傳來,進行這種檢查很容易,只要從本路由器尋找到源點的最短路徑上(之所以叫做反向路徑,因為在計算最短路徑的時候把源點當做終點)的第一個路由器是否就是剛才把多播資料報送來的路由器。若是,就向所有其他地方轉發剛才收到的多播資料報(進入的方向除外),否則就丟棄而不轉發。如果本路由器有好幾個相鄰路由器都處在源點的最短路徑上(也就是說,存在多條同樣長度的最短路徑),那麼只能選擇一條最短路徑,選擇的轉則是看這幾條最短路徑中誰的IP地址最小嗎,如圖4-57:

為了簡單起見,在圖4-57中的網路用路由器之間的鏈路來表示,我們假定各路由器之間的距離都是1。路由器R1在收到源點發來的多播資料報之後,向R2和R3進行轉發。R2發現R1就在自己到源點的最短路徑上,因此向R3和R4轉發收到的多播資料報,R3發現R2不在自己的源點的最短路徑上,因此丟棄R2傳送過來的資料報。其他路由器也照樣轉發。R6到源點有兩條最短路徑:R7->R4->R2->R1->源點;R7->R5->R3->R1->源點。我們假定R4的IP地址比R5的IP小,所以我們只使用前一條最短路徑。因此R7只轉發R4發過來的IP資料報。而丟棄R5傳過來的資料報。最後就得到了用來轉發多播資料報的多播轉發樹(圖中粗線),以後就按照這個多播轉發樹來轉發多波資料報。這樣就避免了多播資料報兜圈子問題。

如果在多播轉發樹上的某個路由器發現它的下游樹枝(即葉節點方向)已沒有該多播組成員,就應該把它和下游的樹枝一起剪除,例如,在圖4-57中虛線橢圓表示剪除的部分,當某個樹枝有新增加的組成員的時候,可以再接入到多播轉發樹上。

  1. 隧道技術(tunneling):隧道技術適用於多播組的位置在地理上很分散的情況。例如在圖4-58中,網1和網2都支援多播,現在網1的一些主機向網2的一些主機進行多播。但路由器R1和R2之間的網路並不支援多播,因而R1和R2路由器不能按多播地址進行轉發資料報。為此。R1路由器就對多播資料報進行再封裝,再加上普通資料報首部,使之成為一個向單一目的站傳送的單播(unicast)資料報,然後通過隧道(tunnel)從R1傳送到R2。

單播資料報到達路由器R2後,再由路由器R2剝去其首部,使之又恢復成原來的多播資料報,繼續向多個目的站進行轉發。使用隧道技術傳送資料報又叫做IP中的IP(IP in IP)。

  1. 基於核心的發現技術:這種方法對於多播組的大小在較大範圍內變化都合適。這種方法是對每一個多播組G指定一個核心路由器,給出它的IP單播地址。核心路由器按照前面講過的方法創建出對應於多播組G的轉發樹。如果有一個路由器R1向這個核心路由器傳送資料報,那麼它在途中經過的每一個路由器都要檢查其內容。當資料報到達參加了多播組G2的組地址時候,R2就向多播組G的成員轉發這個多波資料報。如果R1傳送的資料報是一個請求加入多播組G的資料報,R2就把這個資訊加到它的路由中,並用隧道技術向R1轉發每一個多播資料報副本。這樣,參加組G的路由器就從核心向外增多了。擴大了多播轉發樹的範圍。