PIM-DM協議內核觸發機制及協議運行機制記錄

PIM-DM和PIM-SM是組播路由ASM(任意信源組播)中的兩種不同模式。相對PIM-SM的組播註冊機制,PIM-DM的擴散機制顯得更加粗獷。 


一、PIM-DM無需向內核註冊pimreg虛接口。但是同PIM-SM一樣需要將三層接口加入MRT組播接口中。以在內核收到組播報文後觸發cache_miss消息。


二、協議初始化階段,會創建PIM協議套接字和igmp套接字,igmp套接字通過配置同樣可以接收來自內核的igmp組播控制報文(cache_miss、process_whole_packet(pim-dm無需解析))。


三、在接口上使能PIM-DM後,協議接口首先會進行DR選舉維護鄰居路由信息。


四、運行階段,當PIM-DM路由接口收到組播信息後,內核會查找MFC表項,如果MFC表項中存在該組播轉發表,則按轉發表中的轉發規則對組播報文進行轉發,如果MFC表項中不存在該組播轉發表,則內核觸發cache_miss消息通過igmp 套接字送到PIM-DM協議。協議得到這個cache_miss消息後 創建(S,G)表項並維護好出口、入口,下發到內核MFC中。之後,組播報文就會按照下發的MFC轉發規則進行轉發。


五、組播轉發表的維護。 PIM-DM創建(S,G)轉發表時,入口就是收到組播報文的接口,出口是除接口外的所有PIM-DM接口。這樣一來,一旦收到組播報文,PIM-DM路由器就會將組播報文從除接口外的所有PIM-DM接口轉發出去。 這個過程就是sprase mode(稀疏模式)的工作方式。 


六、剪枝過程,當終端PIM-DM路由收到來自源端的組播報文後,也會創建對應的(S,G)轉發表。並檢查是否有該組播的接收者。如果剪枝定時器到期仍然沒有接收者的話,終端DM路由器將會向該組播入口發送pruned 剪枝報文通告上聯路由該路由接口無需接收該組播信息。 這樣上聯路由就會將pruned接口從(S,G)轉發表的出口列表中剔除,暫時加入到pruned接口列表中去。 


七、接收者加入、離開。 當終端路由器接收到igmp report消息時,會將相應的接口加入到自己的(S,G)表項出接口中,並向組播入口發送alert報文,通告上聯路由將自己加入到組播接收者中去。 當終端路由收到igmp leave消息時,則會將相應離開接口從(S,G)表項中剔除,重複六中的剪枝過程。



總而言之:PIM-DM的工作方式,以下面一個情景對話可以概括。

PC 1---------- Router A ------------Router B ------- src

                                                        |

                             PC 2------------Router C


src:   我開始發送組播報文了, 你們看着辦吧。

Router B:   Router A, Router C, 不管你們要不要這個組播, 我先發給你們了。不要再和我說下(sparse, 擴散機制)

Router A:   有人要這個組播嗎(igmp query)? 草,半天沒人回(剪枝定時器到期)。 算了, 我先把這個組播記錄下來(創建(S,G)轉發表),我會定時詢問有沒有人要的。但是 Router B你暫時不用再發給我了(pruned 剪枝)。

Router B:好的,我先不給你轉發這個組播信息了(將和Router A級聯的路由口從(S,G)的出口中剔除並加入到剪枝接口列表中)。

Router C:  有人要這個組播嗎?  (igmp query)

PC 2:      大哥,我要我要。 (igmp report)

Router C:  我先記錄下(創建(S,G)轉發表), 後面再收到這個組播報文,我就給你發一份哈(組播轉發)。 不要的時候告訴我一下。

PC 1: 我靠,我也要。 (igmp report)

Router A:  Router B我這邊有人要這個組播,給我也發一份吧(alert)。

Router B:OK, 後面來的組播我會給你也發一份。(將和Router A級聯的路由口重新加入到(S,G)的出口中)。

PC 1:好像沒什麼用啊。。。 老大,我不要了,別給我發了。

Router A:尼瑪, 你玩我? 受不了了。  Router B我這邊沒人要這個組播了,不用再給我發了(pruned 剪枝)。

Router B: OK。(將和Router A級聯的路由口從(S,G)的出口中剔除並加入到剪枝接口列表中)







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