PIM-DM協議只需要從核心接收cache-miss訊息。
二、SPT建立過程
1. linux核心協議棧收到組播源S的組播報文後檢查MFC表項中是否存在該組播的轉寄表項,如果沒有,核心將產生一條cache-miss訊息上送給接收igmp管理報文的應用程式層程式(例如PIM-DM)。
2.PIM-DM的igmp管理報文socket收到來自核心的cache-miss訊息後,解包得到組播報文的內容,並通過一系列的計算,隨後下發MFC建立命令到核心,建立組播S的(S,G)路由表項。
3.產生的(S,G)轉寄表項出介面預設選擇除入口以外的所有PIM-DM路由口,這樣組播報文就會從入口外的所有其他路由介面轉寄出去。
4.各個收到組播報文的PIM-DM級聯路由也會建立相應(S,G)表項,將入口以外的PIM-DM路由介面加入到表項出口和pruned口,並建立對應的剪枝定時器。
5.剪枝定時器到期前,組播報文會向所有PIM-DM路由和介面轉寄。剪枝定時器到期後,級聯路由上的(S,G)表項中剪枝介面會從出口中刪除,這樣一來報文就無法轉寄了。
6.PIM-DM路由在加入-剪枝保持定時器到期後會重新發起剪枝過程。以維護SPT樹。
7.級聯路由在收到組播接收者的加入請求後會將介面者對應的路由口加入(S,G)轉寄表的出口和pruned口中,並同時向上聯路由發送graft(嫁接報文)通告接收者資訊,上聯路由收到graft報文後會將報文接收埠加入到(S,G)轉寄表的出口和pruned口中,後面級聯的路由同上。 一直到源路由收到此嫁接報文,整條鏈路上的SPT樹通過嫁接操作又完整了。
綜上: 以上就是PIM-DM,密集模式的整個處理過程,總結一下就是:源路由向所有路由通告:我把這個組播都給你們先,你們不要的話和我說下哈。 然後需要的路由就保持沉默,不需要的路由就告知源路由:這個組播我不需要,不要給我發了。 過了一段時間,源路由怕其他的路由器有資訊更新,於是又問了一次... ... and so on.