組播技術II

首先要強調一下組播的環境,組播的目的是爲多客戶端傳輸數據的時候儘量節約帶寬資源,只在有必要的時候纔將數據幀複製,所以對於組播來講,天生就是來對付“一對多”這樣的網絡環境的。
 
所以雖然傳輸模式有很多種,多對一,一對一的模式是用不着組播的,因爲這裏的一就是指的一個客戶端,單播就可以搞定。組播要解決的傳輸模型是一對多和多對多。
 
PIM-SM可以很好的解決一對多的組播環境,因爲RP和組成員之間是共享樹,不管有多少成員加入,在RP那裏都是維護一個(*,G)條目,建立的是一棵共享樹。但是RP對於源維護的是(S,G)條目,所以一旦源增多,維護的開銷會很大。
 
PIM-SM Bidir 可以很好的解決多對多的組播環境,因爲RP與源之間,RP與組成員之間全部用RPT搞定,源有多少,成員有多少,全都不Care,再多也是兩棵樹。
 
PIM SSM 可以在一對多的組播環境中更爲有效的傳輸數據,不存在RP,因爲全部用SPT搞定,接收者一旦通過目錄服務瞭解到某個源的信息,就能直接從該信源獲得數據。
 
這裏強調一下RP,RP的概念針對一個Group,即凡屬於這個Group的成員都要知道自己組的RP是誰,RP爲所有的組成員建立一棵共享樹。但是一般我們在部署的時候只設一個RP地址來擔當多個組的RP,實際上是超載使用了,這個實際RP就要爲每個組建立一棵RPT。
 
PS:所謂SPT切換就是最後一跳路由收到第2個組波包的時候開始建立(S,G)條目,到向沿源RPF向上遊發送(S,G)加入信息,然後逐臺上遊路由器將(*,G)建立一個(S,G)條目的這樣一個過程。當上遊路由器的(S,G)從空到非空,那麼觸發也會沿源的方向發送(S,G)加入信息。最後所有上游路由器將(S,G)的in接口生產,最後沿RP方向進行(S,G)RP-bit修剪。導致(*,G)條目的out接口爲空。從而將前面生成的共享樹刪除,建立一條SPT。

PIM-DM 推的模式,該模式在設計的時候,前提是假設網絡裏的每個子網至少有一個(S,G)組播信息的接收者。
 
PIM-SM 拉的模式 假定組播不被需要,除非用一個顯式的加入機制來專門申請,否則不會發送。
 
有RP做中間人,即使沒有有效信源,接收站點也能加入共享樹;即使沒有接收者,源也能註冊成功。
 
注意:RP本身是每個Group一個!不過有時候幾個組用一個RP也沒有什麼關係,共享樹就相應的有幾棵,只不過根相同而已。 該組的成員都找自己組的RP,有流量轉發到這個組的源都會到RP這裏來註冊。
 
PIM-SM用的是單向共享樹,即以組播數據只能通過共享樹由根到接收者。而雙向共享樹,可以經過也可以不經過,就近選擇。
 
共享樹是用*來代表所有的源,不管哪個信源的數據,要給組成員傳輸,都要通過這棵共享樹(至少一開始是這樣),因爲一開始RP是信源唯一的聯繫人,只能先到它那,再通過共享樹傳輸。
 
在組播實驗中,我們用命令 ip igmp join-group 238.1.1.1來仿真客戶端主機。可以通過 show ip igmp int loop 0 命令來進行驗證。
 
運行PIM協議的接口會自動啓用IGMP協議。
 
啓用PIM協議,不管是DM還是SM,都是在接口下完成的,ip pim dense-mode 或者 sparse-mode,不過能在接口啓用的前提是全局支持組播路由,ip multicast-routing
在PIM-DM中,雖然(*,G)條目並不能用來轉發組播數據,但是在加入組的時候,各DM路由器還是會建立(*,238.1.1.1)這樣的條目。
 
PIM-DM從發送第一個數據包開始,全網泛洪之後伴隨修剪,形成SPT,這個動作完成之後即定格,OIL接口是Forward就爲Forward,是Prune就爲Prune,任憑你其間有組成員的加入或退出,一律要等到3mins之後的重新修剪再改動。
 
PIM-DM每隔3mins都要進行一次全網泛洪+修剪的過程,只要源服務器發送數據包這個過程就不會停止。因此泛洪的間隔等於修剪掉的路由的老化時間。這和上一段的意思差不多。
 
PIM-SM採用拉的模式進行,RP地址一定要指定,因爲是共享樹的根,共享樹並不是PIM-SM賴以轉發的路徑,只是在一開始用一下,讓RP知道該組的組成員的具體位置,一旦源沿共享樹到達各組成員,會切換到SPT,那會RP就不承擔轉發數據的任務了。
 
理論上而言RP可以放在網絡中的任何一個位置,不過要可達,RP的位置也要顯示的告知其他PIM路由器,因爲他們必須得知道,通告方式有多種,比如在每一臺PIM-SM路由器上手動指定 ip pim rp-add,或者通過具體協議,Auto-RP或者BSR
所以說PIM-SM開始是 源到RP最短路徑樹,RP到組成員共享樹,後來RP不介入,均爲源和組成員之間的最短路徑樹。默認情況下,只有第一個組播數據包使用RPT,而後繼的全部爲SPT。
 
RP概念針對的是一個Group,比如238.1.1.1,RP所形成的共享樹,枝葉衍生到所有屬於238.1.1.1這個組的組成員,而之所以容易混淆,是因爲我們在部署PIM-SM的時候,往往只指定一個RP,這個RP事實上承擔着多個組的RP的角色,針對每一個組都會形成一課共享樹。

224.0.0.0/4代表所有的組播地址。
 
在IOS中使用Ping命令發送組播報文,如果不定義源地址,那麼會以所有運行PIM的接口地址爲源。如果手動指定以Loopback口爲源,除非在該Loopback口啓用PIM-SM,否則不會觸發向RP發送源註冊信息。
 
所以一旦發現註冊有問題,排查接口是否啓用PIM-SM是最關鍵的。
 
當前的IOS,允許切換至SPT之後,仍保留RPT(而不被修剪),通過全局命令 ip pim spr-threshold infinity實現,但實際上在部署組播的時候沒有什麼意義。
 
PIM-SM Bidir
 
在PIM-SM初始的時候,RP和組成員之間建立的是(*,G)的條目,組成員這會兒還不能沿共享樹向上轉發流量(事實上就是那註冊消息,我一接收者還要給你源傳數據不成?),一來不知道給誰,二來路由器對於向上轉發的流量還是憑藉那個(*,G)條目,勢必造成接口既in又out,這過不了RPF檢查。
 
所以只有等源端的數據沿着共享樹發下來,才能知道源在哪裏,然後從共享樹切換爲源樹,通過(S,G)條目轉發。
 
但事實上PIM-SM之所以從共享樹平滑過渡到源樹,目的是爲了讓源通過最短路徑到達接收者,而不是讓接收者有向上遊轉發的能力(都說是接收者了),當然我們這裏考慮的是數據流量,不是機制中的註冊消息。
 
總的來說,PIM-SM是借用一下共享樹,最終的流量轉發還是要回歸源樹,但是雙向PIM就不同了,整套機制都不涉及源樹,全靠共享樹搞定,也就不能期待什麼“數據先通過共享樹發下來,我就能獲取點源的信息”,在這樣的機制下,如果沒有沿共享樹向上遊轉發的能力,像實驗中R4同時源和組的接收者,就這麼一個(*,G)條目,這輩子都等不來轉發的時候了。
 
所以雙向PIM要實現流量的雙向轉發,有的接口需要既IN又OUT,同時在每個網段內引入DF選舉機制來保證轉發。
 
在PIM-SM中,共享樹的路由器"不能向上遊轉發流量"和不能註冊是兩把事,你註冊了共享樹纔會有枝節伸到你那裏,說明你和RP是有聯繫的,不能向上轉發流量是因爲共享樹建立的時候相應的(*,G)條目的OIL和IIL已經確定好,你沿共享樹向上轉發過不了RPF那一關。

注意:啓用PIM-SM bidir的配置(DF自動選舉,無需手動指定):
 
 1)在所有已啓用PIM-SM的路由器上全局加上兩條命令:
 
    ip pim bidir-enable  ip pim rp-add bidir
 
 2)RP所在接口也要運行PIM-SM模式,否則不會安裝下游的組加入信息。
 
在雙向PIM的組播路由條目中,OIL包含有Bidir-Upstream標記的接口代表該接口相對於RP有最短的距離。
 
PIM SSM協議(Source Specific Multicast)常用來部署域間組播,默認情況下使用232.0.0.0/8的組播地址,路由器識別出是加入在這個範圍內的組播地址,均採用SSM的方式來運作。
 
SSM並不依賴RP,因此純SSM的環境下不需要配置RP,啓用SSM使用全局命令 ip pim ssm default。
 
PIM SSM 可以在一對多的組播環境中更爲有效的傳輸數據,SSM使得接收者一旦通過目錄服務瞭解到某個源的信息,就能直接從該信源獲得數據,不需要RP的介入。
SSM不需要MSDP來發現其他PIM域內的活動信源。一種應用層的外帶服務(out-of-web),比如Web服務器,就可以完成信源發現的任務,所以這裏也不用RP。
 
在傳統的組播實現中,應用程序必須加入IP組播地址組,因爲組播數據要發到這裏。
如果具有不同<信源 & 接收者>的兩個應用程序使用了相同的組播組,接收者可能同時收到兩個應用程序的數據。(如果使用的是(*,G)條目,Group又相同,很可能發生這種情況)
 
即使接收者這裏可以過濾掉不需要的數據,不過不必要的網絡流量已經產生了。
 
SSM可以解決這種地址衝突的問題,因爲SSM路由器依據完整的(S,G)條目對數據進行選路,只要信源的地址是在Internet上可路由的公有地址,就可以保證(S,G)條目的唯一性。
 
在SSM中,距離接收者最近的路由器會收到接收端應用程序加入特定組的請求,接收端應用程序可以使用IGMP V3的Include模式來表示這個意向。
 
而組播路由器可以直接向信源發送請求,不需要RP的介入,然後形成SPT傳輸數據。
 
SSM能夠明確指定包含或者排除特定信源,在Include列表中沒有列出的信源發出的數據包不會被轉發。
 
末端客戶端支持IGMPv3,即可加入到SSM網絡中,如果不知道IGMPv3,還有另外3種解決方案:
 
1.IGMPv3 lite主機信令,即在客戶端安裝一個程序使之部分支持IGMP v3(這一部分是SSM所需要的)
 
2.URD 主機信令,依賴URD web服務器以及Cisco路由器在末跳(最接近客戶端位置)截獲(S,G)信道訂閱(同時客戶端使用IGMPv2加入組)
 
3.DNS解析,SSM Mapping建立組播加入組和源的映射關係,不過新版本似乎已經取消這個功能。
 
用路由器模擬支持一個IGMPv3的客戶端主機,可以使用命令:ip igmp static-group 232.1.1.1 source 5.5.5.5,不過這樣加入組,是不支持用ping命令進行測試的,即不可能ping通,不過這是目前在路由器環境下仿真加入(S,G)的唯一方法。

Auto-RP & BSR
 
在大型的組播環境中,靜態指定RP並不具備很好的擴展性,Cisco有一種自動通告RP地址的機制成爲Auto-RP。Auto-RP使用組播地址224.0.1.39(RP候選者,即C-RP使用)和224.0.1.40(映射代理,這個地址正是在路由表中看到的)
 
基本流程如下:
 
1.C-RP將RP地址通告到整個網絡

2.映射代理收到C-RP的通告,每60s向域中其他設備發送一次通告。
 
Auto-RP所用的組播地址224.0.1.39和224.0.1.40相關條目仍使用祕籍模式轉發。C-RP和映射代理也是同一臺路由器,C-RP和映射代理在大型網絡中部署往往設置多個,起到冗餘和分擔組播註冊流量的作用。
 
這樣做有一些矛盾的地方:
 
1.Auto-RP依賴組播通告,但是組播依賴於RP來形成轉發樹。
 
2.PIM-SM路由器基本無法在獲得RP之前進行組播轉發。
 
爲解決這個問題,思科設置了密集-稀疏模式(ip pim sparse-dense-mode),即在沒有獲得RP之前,先採用PIM-DM模式完成組播轉發。新版本可以用命令 ip pim autorp listener (每臺PIM路由器上都要敲)
 
配置候選RP:
 
ip pim send-rp-announce loop 0 scope 100 [group-list]
 
宣告自己的loopback 0的IP地址爲RP地址,該通告信息的TTL爲100,Group-list可以定義做那些組的RP。配置候選RP的時候要注意,RP地址所在接口一定要運行PIM-SM,否則會報錯。映射代理的源地址也需要啓用PIM-SM。
 
配置映射代理(相當於一箇中繼器):
 
ip pim send-rp-discovery loop 0 scope 100 (以loopback 0爲源地址)
 
和IGP一樣,組播中的測試有時也需要清空一次組播路由表,排除測試命令過程中因組播路由條目尚未老化造成的問題。 (clear ip mroute *)
 
PIMv2 BSR和Auto-RP作用相同,但是機制上有些差別:
 
1.PIMv2 BSR使用PIM協議來通告RP,逐跳通告,不需要依賴密集模式。
 
2.BSR是PIMv2的一個組成部分,而Auto-RP是獨立的思科專有協議。
 
3.BSR不能設置通告範圍,但是可以設置邊界。
 
4.BSR可以設置優先級,選擇出最優的C-RP和C-BSR
 
在一個PIM-SM域中,RP可以有多個,服務於不同的Group,但是BSR作爲域的核心只能有一個,C-BSR可以來做備份。一個RP可以同時服務於多個Group,但是一個Group只能對應一個RP。一臺設備可以同時充當C-RP和C-BSR。
 
BSR工作流程:
 
1.從宣稱自己爲C-BSR的路由器中選舉出一個BSR,這個BSR是C-BSR之間自己商量選出來的。
 
2.凡是宣稱自己爲C-RP的路由器會發出通告信息,BSR只負責蒐集這些信息,然後通告給域內所有的PIM-SM路由器。
 
3.PIM路由器會先比較這些C-RP的優先級,選低優先級的,如果優先級一樣就會通過相同的RP哈希算法選出自己的RP,告訴BSR。
 
注意參與這個hash算法的數據有RP地址,hash碼和Group地址等,單是這三個參數就決定了同屬一個Group的PIM路由器選出來的RP應該是一樣的。
 
4.BSR宣佈RP的選舉結果。
 
需要注意的是RP是由PIM路由器民主選舉出來的,因爲他們可能要爲不同的Group選出各自的RP。
 
BSR選舉C-RP的價值觀 1)較低的優先級 2)較大的hash值 3)較大的RP地址
 
BSR選舉C-BSR的價值觀 1)較高的優先級 2)較高的源IP地址
 
Auto-RP中RP選舉不涉及優先級,只比源地址,較高的IP地址優選。
 
配置C-RP
 
 ip pim rp-candidate loopback 0 [group-list]
 
 group-list 可以爲C-RP定義要成爲哪些組的RP
 
配置C-BSR
 
 ip pim bsr-candidate loopback 0 0 (hash掩碼長度) 50 (優先級)
 
 C-BSR這裏可以通過hash碼定義將那些Group分給一個RP
 
如果多個RP同時工作,建議使用hash掩碼,用Group-list則屬於靜態配置,存在單點失效的可能。
 
Hash運算的過程並不複雜,根據唯一原則,只要在掩碼範圍內相同的組地址,一定會分到相同的RP。
 
比如設hash碼爲24,那麼意味着凡是前24位相同的組都分給同一個RP,即一個RP最多會分配到2^8-2=254個Groups。
 
MSDP & 任播RP
 
多個ISP之間實現域間組播,如果使用一個RP,會導致單點故障和RP負載過重,因爲最好每個域(AS)使用各自的RP,實現冗餘和分擔機制:但由於信源,接收者可能註冊到不同的RP,因此需要在RP上交換源信息,這種信息是通過MSDP交換的。
另外爲實現迅速在不同RP間切換,用任播RP方式通告。而所謂任播RP,就是不同區域使用相同的RP地址,實現冗餘。
 
配置MSDP Peer
 
ip msdp peer 5.5.5.5 connect-source loop 0
 
指定對等體的IP地址是5.5.5.5,用自己Loop 0的接口地址作爲源IP地址進行TCP的連接。
ip msdp originator-id loop 0
 
指定以自己的loop 0的接口地址作爲RP地址放進 Source-Active Message 中通告給對等體。
show ip msdp peer 2.2.2.2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章