linux 實現pimd-sm 設計詳解

設計總覽

爲了在linux 環境實現多播路由,內核和用戶端進程進行交互和處理,主要實現我們用戶端的實現。
內核處理轉發數據主要是根據內核多播轉發表multicast forwarding cache(MFC)。 我們用戶端的pim守護進程主要是處理控制包和其他路由器的包, 然後維護用戶端的轉發表。
在這裏插入圖片描述
pim 守護進程處理用戶端的所有pim的控制信息, 然後設置一個合適的內核環境,然後內核轉發組播數據報文。
pim控制報文在用戶空間,組播報文在內核空間。

根據上圖,當 內核收到IP packet以後 ,傳遞給[ip-intr()] , ip 中斷處理函數根據目的地址和協議號分配數據包到相應的模塊,分三種情況去處理。

  1. 如果數據包是多播數據包,傳遞給內核 ip-mforward() , 如果在MFC 裏面匹配源地址和組播地址, 返回hit , 然後轉發到對應出口,如果,源地址或者主播地址或者入口不匹配,返回miss ,內核發送internal control message 傳遞給用戶態的守護進程去處理。
  2. 如果這個報文是PIM 報文, 傳送給 [ pim-input()] , 再傳送給socket 通道 raw-input() 傳遞給用戶層經常處理。
  3. 如果這個報文是IGMP報文, 同pim , 傳遞給內核igmp 處理模塊 igmp-input(), 然後調用 raw-input() 通過socket 隊列傳遞給用戶空間。

用戶空間 pim守護進程

所有的 PIM IGMP 和 internal control (e.g. cache miss and wrong incoming interface) 消息 都會被轉遞給 PIM 進程。
PIM進程根據這些信息去創建 多播路由表 multicast routing table (MRT) , pim 使用 ’ setsockopt()'系統調用把轉發表同步給內核MFC, 確保多播數據的轉發。

在這裏插入圖片描述
pim進程 監聽socket隊列的pim和igmp消息, 根據是pim還是igmp 傳遞到對應接口去處理,根據報文信息動態更形MRT 和內核的MFC。

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