HCNP Routing&Switching之組播技術-組播路由協議PIM

1874發表於2022-04-01

  前文我們瞭解了組播技術中組播分發樹相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/16019334.html;今天我們來聊一聊組播路由協議PIM相關話題;組播路由協議和我們前邊學習的單播路由協議本質上沒有什麼不同,不同的是組播路由協議主要生成描述組播資料轉發路徑,而單播路由協議是用來生成描述單播資料轉發路徑;

  組播路由協議PIM

  PIM(Protocol Independent Multicast,翻譯成中文就是協議無關組播);所謂協議無關是指給組播提供路由資訊的可以是靜態路由、RIP、OSPF、IS-IS、BGP等任何一種單播路由協議;這裡的無關是指組播路由與是何種單播路由協議無關;只要通過單播路由能夠產生對應組播路由表項即可;之所以PIM高度依賴單播來生成組播路由表項,是因為組播路由是利用單播路由表的路由資訊進行組播報文RPF檢查,從而來建立組播路由表項,轉發組播報文;

  組播路由協議概述

  組播路由協議PIM主要執行在組播路由器之間,負責建立和維護組播路由,建立從組播源到多個接收端的無環轉發路徑,即分發樹;並正確、高效地轉發組播資料包;

  PIM的模式

  提示:PIM有兩種模式, 密集模式和稀疏模式;這兩種模式分別對應組播的兩種型別的分發樹,密集模式對應源樹,稀疏模式對應共享樹;密集模式主要使用者規模不大的組播網路環境中,而稀疏模式主要使用者大規模組播網路環境中;對於不同模式的PIM,其工作流程各不相同,但最終的目的都是生成傳播組播資料的無環路徑;

  PIM-DM工作流程

  PIM-DM(pim Dense Mode ,協議無關組播-密集模式),該模式使用“推(push)”方式來傳送資料,適用於小型網路,組播組成員相對比較密集;

  PIM-DM的工作流程主要經過鄰居發現、擴散、剪枝、狀態重新整理、嫁接、Assert斷言機制;

  1、鄰居發現

  提示:PIM路由器之間會週期性的傳送hello包,用於發現鄰居、建立並維護鄰居關係,這個和單播中的ospf協議很類似,只有建立起鄰居以後,才會有後續的資訊交換生成路由表項;當共享網段路由器執行的IGMP版本是V1時,此時pim會選舉DR來充當igmp裡的查詢器;因為IGMPv1本身不具有查詢器選舉的功能;v2,v3IGMP自身有查詢器選舉功能,不依賴pim;pim鄰居發現過程,雙方都把hello包發往224.0.0.13這個組播地址,這個組播地址就是用於pim hello地址;即執行pim的路由器,都會監聽224.0.0.13這個地址;

  鄰居發現-DR選舉

  選舉DR,充當IGMPv1的查詢器,其選舉規則如下

  1、對比優先順序,優先順序高者成為DR;

  2、如果優先順序一樣,則對比ip地址,ip地址大者成為DR

  注意:igmp v2 查詢器選舉規則是ip地址越小越優先和v1依賴pim選舉dr充當查詢器的規則相反;

  2、組播報文擴散過程(Flooding)

  提示:所謂擴散是將組播報文擴散到每一個執行PIM-DM的網段,沿途每一臺路由器都建立(s,g)表項;不管對應路由器下是否有接收者,對應組播資料都會先擴散過去;當然這種擴散會帶來資源的消耗(頻寬和路由器記憶體等),因為沿途路由器都會建立(s,g)表項;這裡需要注意只有通過RPF檢查後的介面才會建立路由表項;

  3、剪枝加入過程(Prune/Join)

  提示:為了減少資源的消耗,對沒有組播資料轉發到分枝進行剪枝(Prune)操作,只保留包含接收者的分支;剪枝操作就是對應沒有接收者的分枝向上遊介面傳送Prune訊息,用來告訴上游路由器對應介面不需要傳送組播資料;即對應上游路由器相關介面就不需建立(s,g)表項;如果共享網段上有路由器連線接收者,則該路由器需向上遊傳送join訊息覆蓋其他路由器傳送到prune訊息;如上圖RTD傳送prune訊息以後,對應RTC對應介面就不會建立(s,g)表項,但是RTE和RTD是共享網段,RTD傳送Prune訊息,對應RTE也會收到,但是RTE下有接收者,所以RTE會傳送join訊息來覆蓋RTD傳送到prune訊息;所以對應RTC來說,它對應介面還是會建立表項;剪枝是有剪枝超時計時器,這個時間是210秒;也就是說210秒過後如果沒有人傳送prune訊息,對應介面又會恢復成轉發資料的狀態;

  SPT的形成

  提示:經過上述的擴散-剪枝過程以後,形成組播源到組播接收者之間的SPT;擴散-剪枝過程是週期進行,由定時器控制,這個定時器是180s;也就是說每180s就會擴散一次;所以上述的剪枝超時210秒正常情況下都不會超時,即對應沒有接收者的路由對應介面不會變為轉發狀態;

  4、狀態重新整理機制

  提示:狀態重新整理主要用來降低組播報文擴散到頻率,節省網路頻寬;狀態重新整理是離組播源最近的路由器傳送state refresh訊息,該訊息會沿SPT的路徑向每個路由器擴散,收到該訊息的路由器,對應路由器上介面的擴散、剪枝定時器都會重新整理,從而降低擴散-剪枝所帶來的網路資源消耗;狀態重新整理的傳送週期是60秒;

  5、嫁接(Graft)機制

  提示:當被剪枝分支的節點上出現了組播組成員時,為了減少該節點恢復成轉發狀態所需的時間,使用嫁接(graft)機制主動恢復其對應組播資料的轉發;當路由器需要上游傳送組播報文時,向上遊傳送Graft訊息,上游路由器收到Graft訊息後恢復Graft ACK訊息進行確認,對應路由器的介面就會轉變為轉發狀態;如上圖所示,RTF上如果有新的接收者出現,首先接收者通過IGMP傳送成員報告,當RTF收到成員報告以後,它會立即向其上游RTC傳送Graft訊息,RTC收到graft訊息以後,向RTF恢復graft ACK確認,此時,RTC和RTF上對應介面就會建立表項,對應介面也會恢復成轉發狀態,進行資料轉發;

  6、Assert斷言機制

  提示:斷言機制主要針對在一個網段內如果存在多臺組播路由器,則相同的組播報文會被重複傳送到該網段,通過斷言機制可以選定網段上唯一的組播資料轉發者;如上圖所示,RTA和RTB到達組播源是等價路由,那麼對於RTC來說,如果沒有斷言機制,它可能從RTA和RTC都收到組播資料,這樣一來RTC就會收到兩份一模一樣的資料;為了解決RTC收到重複的組播報文,此時RTA和RTB會傳送Assert訊息,對應A和B收到對方的Assert訊息以後,根據規則,其中一方路由器會停止轉發資料;

  Assert選舉網段上唯一的組播資料轉發者規則

  1、比較到組播源的優先順序,優先順序高者勝出成為組播資料轉發者;

  2、如果優先順序一樣,則比較到組播源的度量值,度量值小者成為組播資料轉發者;

  3、如果優先順序、度量值都一樣,則比較本地介面ip地址,ip地址大者成為組播資料轉發者;

  實驗:如下拓撲配置pim 密集模式

  配置PC1

  配置PC2

  配置組播源

  配置R1

HCNP Routing&Switching之組播技術-組播路由協議PIM
sys
sys R1 
int g0/0/0
ip add 11.0.0.254 24
int g0/0/1
ip add 13.0.0.1 24

ospf 123 router-id 1.1.1.1
area 0
net 11.0.0.254 0.0.0.0
net 13.0.0.1 0.0.0.0
q
q

multicast routing-enable

int g0/0/0
pim dm
igmp en
int g0/0/1
pim dm 
View Code

  提示:因為R1是靠近接收者的路由器,所以對應介面下需要開啟igmp;跑ospf是讓三個路由器的網路互通;當然你也可以使用靜態、RIP等都可以,只要網路互通即可;

  配置R2

HCNP Routing&Switching之組播技術-組播路由協議PIM
sys
sys R2 
int g0/0/0
ip add 22.0.0.254 24
int g0/0/1
ip add 23.0.0.2 24

ospf 123 router-id 2.2.2.2
area 0
net 22.0.0.254 0.0.0.0
net 23.0.0.2 0.0.0.0
q
q

multicast routing-enable

int g0/0/0
pim dm
igmp en
int g0/0/1
pim dm 
View Code

  配置R3

HCNP Routing&Switching之組播技術-組播路由協議PIM
sys
sys R3
int g0/0/0
ip add 13.0.0.3 24
int g0/0/1
ip add 23.0.0.3 24
int g0/0/2
ip add 31.0.0.3 24

ospf 123 router-id 3.3.3.3
area 0
net 13.0.0.3 0.0.0.0
net 23.0.0.3 0.0.0.0
net 31.0.0.3 0.0.0.0
q
q

multicast routing-enable

int g0/0/0
pim dm
int g0/0/1
pim dm
int g0/0/2
pim dm
View Code

  驗證R1ospf鄰居和路由情況

  提示:可以看到R1和R3建立起鄰居,其狀態為full;

  提示:可以看到R1已經學習到R2和R3上的路由;

  驗證R2ospf鄰居和路由情況

  提示:可以看到R2已經和R3建立起ospf鄰居,且狀態為full;對應R2已經學習到R1和R3上宣告的路由;

  驗證R3ospf鄰居和路由情況

  提示:可以看到R3和R1和R2分別建立起ospf鄰居,且狀態為full;對應R3也學習到R1和R2上的路由;至此組播的基礎環境已經搭建好;

  驗證:R1、R2、R3組播鄰居

  提示:可以看到R1、R2分別和R3互相建立起鄰居;

  啟動組播源,在R2上抓包

  提示:可以看到我們啟動組播源以後,對應在R2傳送了prune訊息;這是因為R2上沒有接收者,所以在把組播資料擴散到全網路由器以後,沒有接收者的路由器傳送prune訊息,進行剪枝;

  驗證:檢視pim路由

  提示:可以看到三個路由器通過擴散剪枝這個過程後,對應pim的路由就生成了;這三個路由器上生成的pim表項都有一個特點是自由上游口,沒有下游口,這是因為R1和R2都沒有出現接收者;

  將pc2加入組播組,抓包檢視對應資料包

  提示:可以看到pc2加入組播組,對應靠近接收者的介面會收到接收者傳送的igmp 成員報告,R2收到igmp的成員報告後,立刻向上遊R3傳送嫁接(graft)訊息,R3收到R2的嫁接訊息以後,對應恢復graft-ack進行確認;此時R2和R3的pim路由就會有下游介面;

  驗證:檢視R2和R3的pim路由,看看對應是否有下游介面?

  提示:可以看到R2和R3的pim路由中都產生了下游介面;

  把pc1加入組播組,看看R3上的路由有什麼變化?

  提示:可以看到pc1加入組播組以後,對應R3路由中就多了一個下游介面;

  驗證:檢視R1的pim路由,看看有什麼變化?

  提示:可以看到R1的路由表中對應路由也有了下游介面;同時我們也注意到也多了一條共享樹(*,g)的表項;這是因為R1下有了接收者以後,對應就會生成共享樹;

  pc1離開組播組,看看R1的路由有什麼變化?

  提示:可以看到PC1離開組播組以後,對應R1的路由中對應下游介面也沒有了,隨之(*,g)的路由表項也沒有了;

  檢視R2路由表的詳細資訊

  提示:pim都是基於介面的,所以檢視詳細資訊我們需要檢視某一個介面下的詳細資訊;其中我們可以看到詳細資訊中列出了pim版本資訊,模式,DR 的地址,這裡我們使用的是預設igmp v2的版本,所以他這裡不會充當igmp的查詢器,由igmpv2的規則自動選舉產生;除此之外還有hello包間隔時間是30秒,死亡時間是105秒,斷言assert死亡時間是180秒;剪枝加入的間隔時間是60秒,超時時間是210秒,狀態重新整理時間是60秒,嫁接延遲時間是3秒;

  實驗:如下拓撲圖配置pim 抓包檢視assert訊息

  R1的配置

HCNP Routing&Switching之組播技術-組播路由協議PIM
sys
sys R1
int g0/0/0
ip add 11.0.0.1 24
int g0/0/1
ip add 12.0.0.1 24

multicast routing-enable

int g0/0/0
pim dm
int g0/0/1
pim dm 
View Code

  R2的配置

HCNP Routing&Switching之組播技術-組播路由協議PIM
sys
sys R2
int g0/0/0
ip add 11.0.0.2 24
int g0/0/1
ip add 22.0.0.2 24

multicast routing-enable

int g0/0/0
pim dm
int g0/0/1
pim dm 
View Code

  執行組播源,在lsw2上任意介面抓包

  提示:可以看到當我們啟動組播源以後,對應在lsw2上就能抓到assert包,其中R1R2都會傳送的assert包,當assert包都傳送以後,會根據各自包中攜帶的資訊進行對比,根據規則在此環境中R2應該要勝出,因為在在優先順序和開銷都一樣的情況下,本地介面ip地址大者勝出;

  提示:可以看到在assert包沒傳送之前,R1和R2都在轉發組播資料;

  提示:可以看到assert包傳送以後,後續都是R2在轉發資料;

  驗證:檢視R2的g0/0/1口的mac地址是否是12bd?

  提示:可以看到我們抓到組播資料包中對應源mac地址正是R2的g0/0/1的mac地址,說明我們在交換機上抓到包都是由R2轉發,R1因為assert沒有勝出,所以R1並不轉發資料;

相關文章