PIM-DM 組播路由協議仿真


目的

  • 理解PIM-DM 的應用場景
  • 掌握PIM-DM 的基本配置
  • 理解PIM-DM 中剪枝和嫁接的原理
  • 理解PIM-DM 中的Assert 機制

原理

Source-Specific Multicast 即指定信源組播模型,是指接收者已經通過其它手段預先知道了組播源的具體位置,直接在接收者與其制定的組播源之間通過 Tree 等結構建立專用的組播轉發路徑的行為。

樹 (Tree)和圖 (Graph)是計算機科學領域中兩個常用的概念,前者具有層次化結構,而后者沒有。從組播的角度來看,網絡可以抽象為 Tree,也稱為組播樹 (Multicast Tree):從單播的角度來看,網絡可以抽象為 Graph。組播樹又可以分為兩大類,一類稱為 SourceBased Tree,另一類稱為 Group-Shared Tree。

PIM-DM (Protocol Independent Multicast Dense Mode) 和 PIM-SM (Protocol Independent Multicast Sparse Mode)是兩個常見的組播路由協議,前者基於 Source-Based Tree,后者基於 Group-Shared Tree。

PIM-DM 主要采用擴散-剪枝的方式來轉發組播數據流。對於組播組成員稀少的網絡,PIM-DM 會產生大量的剪枝報文,而如果網絡規模較大,則擴散-剪枝的周期就會比較長,因此 PIM-DM 一般適合於規模較小、組播組成員比較密集的網絡,使用“推(Push) 模式”傳送組播數據。

PIM-DM 假設網絡中的每個子網都存在至少一個組播成員,因此組播數據將被擴散 (Flooding)到網絡中所有節點。然后 PIM-DM 對沒有組播組的網絡節點進行剪枝 (Prune),只保留包含接收者的分支。所謂“剪枝”,就是路由器向上游節點發剪枝消息, 通知上游節點不再轉發組播消息到該分支。“擴散”“剪枝”現象會周期性的發生,被剪枝的分支節點可以周期性的恢復成轉發狀態(在檢測到沒有出接口的時候會再次剪枝)。 當剪枝節點出現新的組播成員時,為了減少該節點恢復成轉發狀態的時間,PIM-DM 使用嫁接(Graft)機制主動恢復其對組播成員數據的轉發。

在 PIM-DM 網絡中,路由器需要周期性地發送 Hello 消息來發現鄰居並維護 PIM 鄰居關系。此外,Hello 消息還有一個重要的作用:路由器會通過比較 Hello 消息中攜帶的優先級和 IP 地址,為多路由器網段選舉出DR (Designated Router),並以它作為 IGMPv1 中的查詢器

平台

自帶計算機,安裝 VLC 視頻播放器、eNSP 及相關仿真工具包

內容

本次仿真模擬了一個園區內的小型網絡場景,包含了 5 台路由器、一台交換機、一台組播服務器 Source-1 和 3 台終端電腦。所有的路由器都運行 OSPF,並且都位於區域 0。管理員需要在網絡中部署 PIM-DM,從而實現以組播的方式向員工播放培訓視頻。

實驗拓撲如圖所示:

image-20211112192618097

基本配置

配置路由器的基本配置,以R1為例:

sys
sysname R1
int g0/0/3
ip add 172.16.1.10 24
int g0/0/0
ip add 10.0.12.1 24
int g0/0/1
ip add 20.0.13.1 24
int g0/0/2
ip add 30.0.14.1 24
q

配置IGP

在每台路由器上配置OSPF 路由協議,並通告直連網段。

[R1]ospf 1 
[R1-ospf-1]area 0 
[R1-ospf-1-area-0.0.0.0]network 10.0.12.0 0.0.0.255 
[R1-ospf-1-area-0.0.0.0]network 20.0.13.0 0.0.0.255 
[R1-ospf-1-area-0.0.0.0]network 30.0.14.0 0.0.0.255 
[R1-ospf-1-area-0.0.0.0]network 172.16.1.0 0.0.0.255 
 
[R2]ospf 1 
[R2-ospf-1]area 0 
[R2-ospf-1-area-0.0.0.0]network 10.0.12.0 0.0.0.255 
[R2-ospf-1-area-0.0.0.0]network 10.0.2.0 0.0.0.255 
 
[R3]ospf 1 
[R3-ospf-1]area 0 
[R3-ospf-1-area-0.0.0.0]network 10.0.13.0 0.0.0.255 
[R3-ospf-1-area-0.0.0.0]network 20.0.2.0 0.0.0.255 
 
[R4]ospf 1 
[R4-ospf-1]area 0 
[R4-ospf-1-area-0.0.0.0]network 20.0.2.0 0.0.0.255 
[R4-ospf-1-area-0.0.0.0]network 30.0.14.0 0.0.0.255 
 
[R5]ospf 1 
[R5-ospf-1]area 0 
[R5-ospf-1-area-0.0.0.0]network 20.0.2.0 0.0.0.255 
[R5-ospf-1-area-0.0.0.0]network 30.0.2.0 0.0.0.255

查看R1鄰居建立情況

display ospf peer brief

image-20211112192916892

在路由器上查看路由表。

image-20211105182029720

配置PIM-DM

在所有路由器上開啟組播功能,並在每台路由器的每個接口下配置命令pim dm

[R1]multicast routing-table 

[R1]interface GigabitEthernet 0/0/0 

[R1- GigabitEthernet0/0/0]pim dm …… //重復配置到每個接口 

[R5-GigabitEthernet0/0/0] interface GigabitEthernet 0/0/1        

[R5-GigabitEthernet0/0/1]pim dm

配置完成后,在路由器上查看 PIM 鄰居關系的建立情況,以 R1 為例

<R1>display pim neighbor

image-20211112203052873

在 R2-R5 的用戶側接口下使能 IGMP。

[R2]interface GigabitEthernet 0/0/1 

[R2-GigabitEthernet0/0/1]igmp enable 

[R3]interface GigabitEthernet 0/0/0 

[R3-GigabitEthernet0/0/0]igmp enable

[R4]interface GigabitEthernet 0/0/0 

[R4-GigabitEthernet0/0/0]igmp enable 

[R5]interface GigabitEthernet 0/0/1 

[R5- GigabitEthernet0/0/1]igmp enable 

查看各個路由器的 IGMP 接口信息,以 R2 為例

<R2>display igmp interface

image-20211105183706686

組播服務器配置

組播服務器 Source-1 需要使用 VLC 播放視頻的方式來發送組播。首先,在網上下載並安裝一個 VLC 軟件,然后,在 eNSP 軟件的主界面中點擊右上方工具欄的設置按鈕。在“工具設置”頁面中設置 VLC 軟件路徑。

打開組播服務器 Source-1 的配置界面,在“基礎配置”頁面中配置 IP 地址、子網掩碼等,並應用。然后在“組播源”頁面中配置組播組 IP 地址 224.1.1.1 和組播組 MAC 地址 01-00-5E-01-01-01 。

在組播服務器 Source-1 上使用組播地址 224.1.1.1 播放視頻,當路由器接收到組播 源發送的組播數據后便會自動生成組播路由。查看 R1 的組播路由表的示例指令:

<R1>display pim routing-table

image-20211105192232223

Source-1 使用組播地址 224.1.1.1 播放視頻后,由於 PC-1 並沒有在第一時間加入該 組播組觀看視頻,所以 R2 沒有收到 IGMP 加入消息,於是 R2 會認為自己沒有連接任 何組成員。因此,R2 在收到 R1 發送的組播數據包后,會向 R1 發送剪枝消息。R1 收到剪枝消息后,會立即停止向 R2 發送組播數據包。使用 wireshark 在 R2 的 GE 0/0/0 接口捕獲並查看剪枝消息的數據包,並進行解析。

從下圖可以看出,,R2的的GE0/0/0接口捕獲的數據報中,Join字段為0,Prune字段為1,地址為172.16.1.1/32。R2收到R1發送的組播數據報后,向R1發送了剪枝消息。

PC1離開時,可以看到剪枝包。

image-20211105194151799

image-20211112204901633

在R2的GE0/0/0接口捕獲的數據包中,Join字段為0,Prune字段為1表示,路由器R2收到R1發送的組播數據包后,向R1發送剪枝消息。

接下來,讓 PC-1 使用 IGMPv2 加入組播組 224.1.1.1,R2 收到 PC-1 的加入消息后, 會立即發送 Graft 消息給 R1,R1 收到后會立即開始重新轉發組播數據包給 R2,R2 再 轉發給 PC-1。在 PC-1 上啟動 VLC,便可觀看視頻了。 設置 PC-1 並讓其使用 IGMPv2 加入組播組 224.1.1.1。

啟動 PC-1 上的 VLC,可看到其播放源地址為 127.0.0.1: 15608,並與服務器端同步 播放視頻。

使用 wireshark 捕獲上述環節的數據並解析,看到 R2 發送了 Graft 消息后,R1 立回應了一個 Graft-Ack 消息。然后就開始向 R2 轉發 UDP 的組播數據流。

image-20211105193843957

觀察PIM-DM中DR的選舉

為了便於觀察 PIM-DM 中的 DR 選舉,假定 PC-2 將使用 IGMPv1 加入組播組224.1.1.1,為此,在 R3 和 R4 上修改 IGMP 為版本 1。

[R3]interface GigabitEthernet 0/0/0 
[R3- GigabitEthernet0/0/0]igmp version 1 
[R4]interface GigabitEthernet 0/0/0 
[R4- GigabitEthernet0/0/0]igmp version 1 

查看端口情況:

<R3>display pim interface 
<R4>display pim interface

查看端口情況

image-20211105194556639

image-20211112210909541

可以看出,PIM-DM選舉了R4作為IGMPv1的查詢器,首先比較路徑的開銷,會選擇路徑開銷小者,由於此時R3和R4的開銷相同,則選擇IP大的路由器為轉發者。

接下來,驗證一下 IGMPv1 的查詢路由器是否就是 PIM-DM 選舉出來的 DR。在 R3 和 R4 上查看關於查詢器 (Querier)的情況。

<R3>display igmp interface 
<R4>display igmp interface

image-20211112211320118

image-20211112211336272

可以看出,R4也是PIM-DM的DR。

觀察PIM-DM中的Assert機制

由於 R3 和 R4 從上游接收到組播報文后,都會向下游網絡轉發該組播報文,這樣就會導致下游節點 R5 收到兩份完全相同的組播報文。為了避免這種情況的發生、PIM-DM 采用了 Assert 機制來選定一個唯一的轉發者,即:對於一個特定的組播組,如果同一網段上存在多個上游路由器,則這些上游路由器中到組播源的路徑開銷最小者將被選舉為轉發者;若開銷相同,則 IP 地址最大的路由器將被選舉為轉發者。只有轉發者才能向該網段轉發相應的組播數據報文,其他落選路由器應裁剪掉對應的接口,禁止向該網段轉發相應的組播數據報文。在 PC-3 上使用 IGMPv2 加入組播組 224.1.1.1,使用 wireshark 在 R5 的 GE 0/0/0 接口查看報文情況,捕獲並解析其收到的 R3 和 R4 的 Assert 報文。

image-20211112212502109

image-20211112212941328

在R3和R4中,由於路徑開銷相同,選擇IP大的為轉發者。查看 R5 端口數據,查看並找出 R4 轉發給 R5 的組播視頻流。

image-20211112213644531

查看 R5 的多播路由列表並給出結果,R5 的上游節點是哪個設備?為什么?

<R5>display pim routing-table

image-20211112213903623

R5上游節點是R4,因為R5到R3和R4的路徑開銷一致,則選擇ip地址更大的R4。

思考

1.PIM-DM 中 Assert 機制的作用是什么?

  • 比較路由優先級,優先級高的獲勝
  • 比較到組播源的開銷,開銷小的獲勝
  • 比較端口IP,大的獲勝

2.IGMP 是一個路由協議嗎?

IGMP協議Internet Group Management Protocol,顧名思義,是用於網際組管理的協議。多播通信中由一個發送者給一組接受者發送報文,這些接受者都是同一個組成員,由於發送者只需要發送報文的一個副本,路由器就需要對這個報文進行復制和轉發,所以多播路由器必須掌握一張多播組的列表,這些組中至少有一個成員與其某個接口相關,即多播路由器需要收集組成員的相關信息並且與其他多播路由器共享。連接着某一個網絡的多播路由器負責在本地收集信息,收集到的信息傳播到全球的其他路由器。前者由IGMP完成,后一個任務由多播路由選擇協議完成,因此,IGMP並不是一個路由選擇協議。

3.給出兩層 IGMP Snooping 與三層組播協議的區別和關聯點。

我們把工作在網絡層的IP組播成為“三層組播”,相應的組播協議稱為“三層組播協議”,包括IGMP, PIM等,我們把工作在數據鏈路層的IP組播成為“二層組播”,相應的組播協議稱為“二層組播協議”,包括IGMP Snooping。

組播路由器不需要也不可能保存所有主機的成員關系,它只需要通過IGMP協議了解自己的每個接口連接的網段上是否存在某個組播組的接受者,即組成員。而主機方只需要保存自己加入了哪些組播組。IGMP在主機和路由器之間是不對稱的:主機需要響應組播路由器的IGMP查詢報文,即以IGMP membership report報文響應;路由器周期性地發送成員資格查詢報文,然后根據收到的響應報文確定某個特定組在自己所在的子網上是否有主機加入,並且收到主機的退出組報文時,發出特定的查詢報文,確定某個特定的組是否已無成員存在。

IGMP Snooping和IGMP協議一樣,兩者都用於組播組的管理和控制,都是用IGMP報文。IGMP協議在網絡層,而IGMP Snooping在鏈路層。二層設備通過對收到的IGMP報文進行分析,為端口和MAC組播地址建立起映射關系,並且分局這樣的映射關系轉發組播數據。當二層設備沒有運行IGMP Snooping時,組播數據在二層被廣播,只有當運行了IGMP Snooping時,組播數據才會給指定的接收者。

當二層以太網交換機收到主機和路由器之間傳送的IGMP報文時,IGMP Snooping分析IGMP報文所帶的信息,在二層建立和維護MAC表,以后從路由器下發的組播報文就根據MAC表進行轉發。IGMP Snooping只有在收到某一端口的IGMP離開報文或者某一端口的老化時間定時器超過的時候才會主動向端口發送IGMP特定組查詢報文,除此之外不會向端口發送任何IGMP報文。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM