【數通面試私房菜之組播專題】第五期:PIM DM詳解

PIM定義

PIM(Protocol Independent Multicast)協議無關組播,目前常用版本是PIMv2,PIM報文直接封裝在IP報文中,協議號爲103,PIMv2組播地址爲224.0.0.13。

在PIM組播域中,以組播組爲單位建立從組播源到組成員的點到多點的組播轉發路徑。由於組播轉發路徑呈現樹型結構,也稱爲組播分發樹(MDT,Multicast Distribution Tree)。組播分發樹的特點:

Ø 無論網絡中的組成員有多少,每條鏈路上相同的組播數據最多隻有一份。

Ø 被傳遞的組播數據在距離組播源儘可能遠的分叉路口才開始複製和分發。


PIM DM基本原理

Ø PIM-DM使用“推(Push)模式”轉發組播報文,一般應用於組播組成員規模相對較小、相對密集的網絡。在實現過程中,它會假設網絡中的組成員分佈非常稠密,每個網段都可能存在組成員。當有活躍的組播源出現時,PIM-DM會將組播源發來的組播報文擴散到整個網絡的PIM路由器上,再裁剪掉不存在組成員的分支。PIM-DM通過週期性的進行“擴散(Flooding)—剪枝(Prune)”,來構建並維護一棵連接組播源和組成員的單向無環SPT(Source Specific Shortest Path Tree)。如果在下一次“擴散-剪枝”進行前,被裁剪掉的分支由於其葉子路由器上有新的組成員加入而希望提前恢復轉發狀態,也可通過嫁接(Graft)機制主動恢復其對組播報文的轉發。

Ø PIM-DM的關鍵工作機制包括鄰居發現、擴散、剪枝、嫁接、斷言和狀態刷新。其中,擴散、剪枝、嫁接是構建SPT的主要方法。


鄰居發現(Neighbor Discovery)

PIM路由器上每個使能了PIM協議的接口都會對外發送Hello報文。封裝Hello報文的組播報文的目的地址是224.0.0.13(表示同一網段中所有PIM路由器)、源地址爲接口的IP地址、TTL數值爲1。

Ø 同一網段中的PIM路由器都必須接收目的地址爲224.0.0.13的組播報文。這樣直接相連的PIM路由器之間通過交互Hello報文以後,就可以彼此知道自己的鄰居信息,建立鄰居關係。

Ø 只有鄰居關係建立成功後,PIM路由器才能接收其他PIM協議報文,從而創建組播路由表項。


擴散(Flooding)

當PIM-DM網絡中出現活躍的組播源之後,組播源發送的組播報文將在全網內擴散。當PIM路由器接收到組播報文,根據單播路由表進行RPF檢查通過後,就會在該路由器上創建(S,G)表項,下游接口列表中包括除上游接口之外與所有PIM鄰居相連的接口,後續到達的組播報文將從各個下游接口轉發出去。

擴散過程如下:

1) 組播源S開始向組播組G發送組播報文。

2) RouterC接收到源發送的組播報文後,根據單播路由表進行RPF檢查。RPF檢查通過,創建(S,G)表項,下游接口列表包括與RouterA和RouterB相連的接口,後續到達的報文向RouterA和RouterB轉發。

3) RouterA接收到來自RouterC的組播報文,RPF檢查成功,在本地創建對應(S,G)表項,下游接口列表添加HostA相連的接口,後續到達的報文向HostA轉發。

4) RouterB接收到來自RouterC的組播報文,由於與RouterB相連下游網段不存在組成員和PIM鄰居,執行剪枝。


剪枝(Prune)

Ø 當PIM路由器接收到組播報文後,RPF檢查通過,但是下游網段沒有組播報文需求。此時PIM路由器會向上遊發送剪枝報文,通知上游路由器禁止相應下游接口的轉發,將其從(S,G)表項的下游接口列表中刪除。剪枝操作由葉子路由器發起,逐跳向上,最終組播轉發路徑上只存在與組成員相連的分支。

Ø 路由器爲被裁剪的下游接口啓動一個剪枝定時器,定時器超時後接口恢復轉發。組播報文重新在全網範圍內擴散,新加入的組成員可以接收到組播報文。隨後,下游不存在組成員的葉子路由器將向上發起剪枝操作。通過這種週期性的擴散-剪枝,PIM-DM週期性的刷新SPT。

剪枝過程如下:

1) RouterB向上遊發送Prune報文,通知RouterC不用再轉發數據到該下游網段。

2) RouterC收到Prune報文後,停止該下游接口轉發,將該下游接口從(S,G)表項中刪除。由於RouterC上還存在其他處於轉發狀態的下游接口,剪枝過程停止。後續到達的報文只向RouterA轉發。


嫁接(Graft)

PIM-DM通過嫁接機制,使有新組成員加入的網段快速得到組播報文。葉子路由器通過IGMP瞭解到與其相連的用戶網段上,組播組G有新的組成員加入。隨後葉子路由器會向上遊發送Graft報文,請求上游路由器恢復相應出接口轉發,將其添加在(S,G)表項下游接口列表中。嫁接過程從葉子路由器開始,到有組播報文到達的路由器結束。

嫁接過程如下:

1) RouterB希望在下一次“擴散-剪枝”來臨前恢復對HostB組播報文的轉發,向上遊路由器RouterC發送Graft報文,請求恢復相應出接口轉發組播報文。

2) RouterC收到Graft報文後,恢復該接口轉發,將該接口添加到(S,G)表項中的下游接口列表中。由於RouterC上有組播報文到達,嫁接過程停止。後續到達的報文向RouterB轉發。


狀態刷新(State Refresh)

在PIM-DM網絡中,爲了避免被裁剪的接口因爲“剪枝定時器”超時而恢復轉發,離組播源最近的第一跳路由器會週期性地觸發State Refresh報文在全網內擴散。收到State Refresh報文的PIM路由器會刷新剪枝定時器的狀態。被裁剪接口的下游葉子路由器如果一直沒有組成員加入,該接口將一直處於抑制轉發狀態。

斷言(Assert)

當一個網段內有多個相連的PIM路由器RPF檢查通過向該網段轉發組播報文時,則需要通過斷言機制來保證只有一個PIM路由器向該網段轉發組播報文。PIM路由器在接收到鄰居路由器發送的相同組播報文後,會以組播的方式向本網段的所有PIM路由器發送Assert報文,其中目的地址爲永久組地址224.0.0.13。其它PIM路由器在接收到Assert報文後,將自身參數與對方報文中攜帶的參數做比較,進行Assert競選。

競選規則如下:

1) 單播路由協議優先級較高者獲勝。

2) 如果優先級相同,則到組播源的開銷較小者獲勝。

3) 如果以上都相同,則下游接口IP地址最大者獲勝。

根據Assert競選結果,路由器將執行不同的操作:

Ø 獲勝一方的下游接口稱爲Assert Winner,將負責後續對該網段組播報文的轉發。

Ø 落敗一方的下游接口稱爲Assert Loser,後續不會對該網段轉發組播報文,PIM路由器也會將其從(S,G)表項下游接口列表中刪除。

Assert競選結束後,該網段上只存在一個下游接口,只傳輸一份組播報文。所有Assert Loser可以週期性地恢復組播報文轉發,從而引發週期性的Assert競選。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章