一、PIM基本概念
協議無關協議,運行在組播路由器之間
- 協議無關指與單播路由協議無關,即PIM不需要維護專門的單播路由信息。但是需要存在單播路由器表項
RPF反向路徑檢查
在單播路由與轉發中,單播報文沿着一條單點到單點的路徑傳輸,路由器只需要考慮報文“需要到達的位置”,即目的地址,就知道從哪個接口轉發出去。組播路由與轉發則不同。由於組播報文的目的地址為組播地址,只是標識了一組接收者,無法通過目的地址來找到接收者的位置,但是組播報文的“來源位置”,即源地址是確定的。所以組播報文的轉發主要是根據其源地址來保證轉發路徑正確性
作用:避免組播流量的重復
實現
- 組播路由器接收組播源的組播流量,查看數據源IP;
- 利用源IP查找單播路由表;
- 對比去往組播源的出接口和組播流量的入接口,一致則RPF檢查通過
- 出接口稱為RPF接口;單播路由表去往組播源的下一跳地址稱為RPF鄰居
RPF檢查接口選擇方式
-
靜態組播路由表
-
#配置方式 IP rpf-route-static {目的IP} {掩碼} {下一跳}
-
-
MP-BGP路由
-
單播路由表
優先級:靜態組播路由 >M-BGP >單播路由表
SPT和RPT的RPF檢查是否相同?
SPT樹上的RPF檢查:收到組播流量,查看組播流量的源,根據源IP查找路由表,路由表中到達源IP的接口為RPF接口
RPT樹上的RPF檢查:根據RP的IP地址選擇RPF接口
是否對每一個組播報文都進行RPF檢查?
在實際組播數據轉發過程中,不會對每一份接收到的組播數據報文進行RPF檢查,而是先查詢是否有對應的(S,G)組播轉發表項
- 不存在對應的(S,G)表項,對報文執行RPF檢查,將檢查的RPF接口作為入接口,創建(S,G)組播轉發表項,入接口為上游接口
- 對報文檢查通過,從其他下游接口轉發出去
- 對報文檢查失敗,丟棄報文
- 存在對應的(S,G)表項
- 接收該報文的接口與(S,G)表項的入接口一致,從所有出接口發出報文
- 接受該報文的接口與(S,G)表項的入接口不一致,對報文執行RPF檢查
- RPF檢查選取出的RPF接口與(S,G)表項的入接口一致
- 說明(S,G)表項無誤,報文來源有誤,丟棄報文
- RPF檢查選取出的RPF接口與(S,G)表項的入接口不一致
- 說明(S,G)表項已經過時。更新RPF接口。對比報文的入接口是否與RPF接口相同
- 相同,從其他出接口發出
- 不同,報文來源有誤,丟棄報文
RPF檢查查詢單播路由表時,發現去往源(或去往RP)的下一跳是負載的,選擇IP地址大的
組播路由表項
PIM路由表通過PIM協議建立的組播路由表項
接口
- 上游接口:組播流量入接口(只能有一個)
- 下游接口:組播流量的出接口,離組播成員最近的接口(可以有多個)
上游RPF鄰居:只接受最優鄰居發送的流量
組信息
-
(S,G):路由表現主要用於在PIM網絡中建立SPT。適用於PIM-DM和PIM-SM
-
(*,G):路由表項主要用於在PIM網絡中構建RPT。適用於PIM-SM
組播分發樹MDT
從組播源到成員主機之間形成的一個單向無環的數據傳輸路徑
1.SPT樹
接收者到組播源之間的路徑是最短的
最短路徑樹,源樹
- 從組播源向組播成員構建最短路徑樹
只存在(S,G)表項
- 上游接口:離源最近的接口
- 下游接口:離接收者最近的接口
- 上游RPF鄰居:去往源最優的下一跳鄰居
優點:接收者到組播源之間路徑是最短的
缺點:多個組播源會構建多顆SPT樹,消耗設備性能
2.RPT樹
接收者到RP之間的路徑是最短的
共享樹
- 從RP(匯聚點)向組播成員構建的最短路徑樹
只存在(*,G)表項
- 上游接口:離RP最近的接口
- 下游接口:離接收者最近的接口
- 上游RPF鄰居:去往RP最優下一跳鄰居
優點:多個源共享一棵樹
缺點:成員主機到組播源之間的路徑可能不是最短的
PIM DM | PIM SM | |
---|---|---|
密集模式 | 稀疏模式 | |
組播成員分布較為密集,每個網段都可能存在組播成員 | 組播成員分布較為稀疏,一個網段內存在較多較復雜的組播信息 | |
一般應用於組播成員規模較小的場景 | 一般應用於組播成員規模相對較大 | |
采用"推(push)"模式轉發組播報文 | 采用"拉(pull)"模式轉發組播報文 | |
構建組播源到組播成員的SPT樹 | 構建RP到組播成員的RPT樹;構建組播源到RP的SPT樹 |
二、PIM DM
密集模式
- 接收者分布密集
- 每個網段可能存在組成員,並且每個網段的網絡規模較小
- 只構建SPT樹,只存在(S,G)表項
采用“推”的模式轉發組播報文
- 擴散剪枝,將流量在PIM-DM路由器之間擴散,路由器根據自己的接收情況進行修剪
配置PIM-DM
1.PIM網絡中運行三層協議保證全網可達(靜態、OSPF、ISIS)
2.所有組播路由器開啟組播功能
multicast routing-table
PIM ##激活pim協議
3.組播路由器接口開啟PIM DM協議
路由器連接組播源的接口、組播路由器相連接口、運行IGMPv1的接口
interface g0/0/0
pim dm
4.組播路由器和成員主機所在網段開啟IGMP協議
interface g0/0/1
igmp enable
igmp version 1/2/3
檢查
display pim neighbor ##檢查PIM鄰居關系
display pim interface *** ##檢查開啟PIM的接口
display pim routing-table ##檢查組播路由表
工作流程
1.鄰居發現
通過發送hello報文發現、建立、維護鄰居關系
- hello報文DIP=224.0.0.13
- 周期30s發送,超時時間105s
選舉DR,充當IGMPv1的查詢器
-
比較優先級(默認1、范圍0--2^32),再比較IP地址;越大越優
-
interface g0/0/0 pim hello-option dr-priority 100 ##修改DR優先級為100 display pim interface g0/0/1 verbose ##查看pim hello報文的參數
2.擴散join
由組播源下發流量,組播路由器收到組播流量后執行RPF檢查;創建表項;將流量發送給所有鄰居
- RPF檢查:針對組播流量,根據流量源IP地址查找對應的單播路由表條目;對比去往流量源IP的出接口與組播流量的入接口是否一致(如果存在負載均衡,選擇下一跳IP地址大的)
- 一致;檢查通過,創建表項、將流量發送給所有鄰居
- 不一致,丟棄
- 創建表項:創建(S,G)表項
- 上游接口
- RPF鄰居
- 下游接口
3.剪枝prune
無下游接口,向上游接口剪枝
當組播路由器發現(S,G)表項下游接口為空,觸發剪枝機制,向上游接口發現剪枝報文
上游設備收到剪枝報文將接口從(S,G)下游接口刪除
剪枝報文(prune)
- DIP:224.0.0.13
上游設備收到剪枝報文
設備收到剪枝報文后,判斷收到報文的接口是否還存在其他PIM鄰居
- 存在;開啟剪枝延時3s,等待其他鄰居的剪枝否決報文(join報文的一種)
- 收到其他鄰居的剪枝否決,保留接口
- 沒收到其他鄰居的剪枝否決報文,直接刪除(S,G)中的該下游接口
- 不存在,直接刪除該(S,G)中的該下游接口
刪除下游接口后會開啟一個周期210s的抑制時間
- 超時后會恢復該接口、將其重新加入進入(S,G)的下游接口
4.狀態刷新state-refresh
被剪枝的接口存在210s的剪枝抑制時間,周期性的恢復。
- 如果一直不存在接收者,會頻繁的周期性的擴散剪枝,浪費流量
為了避免被裁剪的接口因為剪枝抑制時間超時而恢復轉發,離組播源最近的第一跳路由器會周期性(60s)發送state refresh報文在全網擴散。刷新被剪枝接口的抑制時間
state refresh報文
- 全網擴散
- DIP:224.0.0.13,TTL=1
PIM路由器收到狀態刷新報文
- 刷新表項;刷新抑制時間
- 產生新的一份狀態刷新報文,源IP為出接口,繼續泛洪
5.嫁接graft
作用:當接收者重新加入組播組時,能夠快速獲得組播流量
工作流程:
-
成員側路由器收到成員報告報文
- 將下游接口恢復
- 向上游設備單播發送嫁接報文,請求上游設備恢復接口
- 嫁接報文內容
- 組播組地址
- 組播源地址
- 上游鄰居字段;表明嫁接報文目的地
- 嫁接報文內容
-
上游設備收到嫁接報文(graft)后
-
有嫁接報文內對應(S,G)
- 將對應下游接口加入到(S,G)表項的下游接口列表;單播回復graft ack報文
- 根據情況判斷是否需要繼續向上游嫁接
- 但設備有實際組播流量經過,不需要嫁接
-
5.斷言機制(Assert)
作用:避免MA網絡出現重復組流量
觸發條件:組播路由器將組播流量從一個接口發出又從該接口收到相同的組播流量
工作流程:組播路由器發送斷言報文,選舉出winner和loser;winner繼續轉發組播流量,loser將下游接口從列表中刪除(剪枝;抑制時間為210s)
- 選舉條件
- 比較設備去網往組播源的路由協議優先級,越小越優
- 比較設備去往組播源的路由協議開銷,越小越優
- 比較設備的接口IP地址,越大越優
- loser會向winner發送剪枝報文,剪進行選舉的接口
- 如果接口所在的MA網絡還有鄰居,鄰居會進行剪枝否決
- 斷言機制產生的剪枝接口,不會被狀態刷新報文刷新 剪枝計時器
- 是通過周期180s的斷言報文刷新剪枝計時器