1. 程式人生 > 實用技巧 >multicast-9 MSDP

multicast-9 MSDP

MSDP 域間組播

例項

RP : 按理說RP應該是每個AS都有,不可以所有AS共用一個RP,共享樹的規模就太大了,

如果是在AS內部都有RP的話,那麼共享樹,只在自己的AS內完成

需要解決的問題

兩側所使用的RP選舉方法不同,左側使用BSR,右側使用AUTORP

另外,兩個AS之間需要 執行MBGP嗎?

不用,因為並不需要使用MBGP去進行RPF校驗,和這個關係

而BSR的工作原理,就是向外泛洪bootstrap訊息,並且這個訊息會從R2的F0/1口發出去,發出去不要緊,但是做為右側的AS,是否就會收到這個bootstrap訊息,從而進行選舉,導致最後兩個AS所選舉出來的RP是一樣的,

這顯然是不行的,

怎麼辦呢?

AS之間的RP 訊息過濾

讓R2不從F0/1口向外傳送BSR的訊息

R2(config-router)#inter f0/1
R2(config-if)#ip pim bsr-border

不會跨越AS傳送BSR訊息

而做為R3,上面要對AUTORP的訊息進行限制,

從R3 的f0/0介面上, 無論是進還是出,都阻止224.0.1.39和224.0.1.40這兩個地址的流量

R3(config)#access-list 1 deny 224.0.1.39
R3(config)#access-list 1 deny 224.0.1.40
R3(config)#access-list 1
per any R3(config)#inter f0/0 R3(config-if)#ip multicast boundary 1 //呼叫組播ACL列表

後面還可以加引數 ,in ,out ,很好理解 了吧,進來的,發出去的,

如果什麼都不加,那就代表都生效。

在做域間組播時,先做的一定是RP的訊息的阻止泛洪

現在我們讓R2成為as100的RP,還是BSR

讓R4成為AS200 的MA 和RP

這樣一來,共享樹得以構建完成

讓PC加組224.1.1.1

然後就可以在R4上可以看到*,G表項

而R3上毛都看不到,

因為此時他沒有收到igmp report 訊息,以及沒有收到*,G 的join 訊息,

它也不可能收到,因為在AS200 裡,RP是R4

同再AS100也是一樣的,

但是不會出現*,G表項,是空的,為什麼?因為使用的是BSR模式來選舉的RP,不會AUTORP那樣,可以看到239,240的

那現在要怎麼辦呢?

讓SERVER傳送組播流量即可

現在是肯定不通的,為什麼呢?

到底發生了什麼?

此時到R1上看一下,現在的*,G表項和S,G表項都是空的,怎麼辦?

在sparse 模式裡面找RP啊~要怎麼找呢?

單播註冊啊~

但是R1傳送出來的register 訊息,R2馬上就給回覆了?~

為啥這麼快呢?

什麼時候才會回覆register stop訊息呢?

要麼是R2是真正的收到了組播流量,顯然這裡有收到真正的組播流量

要麼是R2下面沒有接收者,顯然,R2下面就真的沒有接收者,所以立刻回覆了註冊停止的訊息

也就是說沒有形成共享樹,

那如何解決這一問題呢?

解決的問題就是

當R2收到註冊訊息以後,複製一份給AS200 的RP

這時候就要用到MSDP,域間組播 組播源發現協議

組播源發現協議MSDP

1 MSDP 在多個AS之間的RP之間建立 TCP 連線,TCP源埠是高位隨機埠,TCP的目的埠號是639

該TCP連線負責將組播資料包封裝在P2P 的TCP資料包中進行傳輸,從而讓其它AS內的2 RP可以收到組播資料包,並且獲知源的資訊,

3 組播資料包封裝到單播包以後稱之為SA (source active)message,就是一個AS的RP,傳送給另外一個AS的RP 源是自己的IP,目標是另一個AS的RP地址

4 其它AS內的RP在獲知源的資訊後,可以按照SPARSE MODE中的源樹的構建方法來主動向源發起(S,G)join message 從而建立 真正的組播路徑

並且這個包的源是AS100的RP 目標是AS200 的RP

並且傳送的是SA訊息,實際就是register訊息

配置也很簡單

直接指定MSDP的鄰居

建立方法

R2(config)#ip msdp peer 4.4.4.4 connect-source lo 1 remote-as 200
                  鄰居地址   連線的源是我本地的RP介面 對端 的AS號
R4(config)#ip msdp peer 2.2.2.2 connect-source lo 1 remote-as 100
Ip msdp peer [peer address] connect-source [int][remote-as][as number]
Ip msdp originator-id [interface]

Peer 是TCP的遠端的地址,必須有路由可達,

Remote-as 用於指定對端 AS號,不設定不影響TCP的建立 和MSDP的工作

Originator id 是可選項,如果沒有設定,則用本地的RP地址作為ID ,就是RP的RID 標識

兩端輸入完成後,會由先配置的一方主動發起tcp的建立 ,

2.2.2.2---4.4.4.4 發起SYN

4.4.4.4---2.2.2.2 回覆SYN+ ACK

2.2.2.2---4.4.4.4 回覆ACK

並後發起請求時使用的是高階口號隨機的

去和對端建立639埠號

兩側建立形成之後,使用keepalive 進行維持鄰居關係

來看一下SA訊息

R2給R4傳送SA訊息,

裡面包含了真正的組播流量

從而形成了S,G表項

並且會向著S,G的in 口傳送S,G的join訊息

建立S,G表項

4-3傳送S,G join訊息

3-2傳送S,Gjoin 訊息

一直傳到了R1

整個的過程圖是這樣的

由於使用了sparse 模式,並且兩側AS都配置了RP 以及bsr,和MA

得以建立共享樹

然而兩側的AS之間內部的RP無法實現資料的互動,無法完成註冊資訊的傳遞,也就無法完成組播流量的正常傳遞,

這時候的解決辦法是使用MSDP

收到了SA訊息之後,由於SA訊息中包含了真正的組播流量,所以為R4建立S,G表項提供了幫助,

剩下的就是建立 S,G表項的事兒了,以構建最短路徑樹,不再贅述了

SA 過濾

2 指對源接收,只收誰,或者是不收誰 標準ACL

3 對SA訊息的內容,哪個源針對於哪個組發的流量, 擴充套件ACL

擴充套件ACL

Ip msdp sa-filter [in][out][peer address][list | route-map]

PS:

1 List 和route-map 均可以用來匹配擴充套件ACL,如果是route-map的話,就需要用route-map呼叫ACL

2 擴充套件ACL 用於限制哪些源到哪些組地址的資訊可以用於構建組播路由表

那什麼時候需要 修改originator Id呢?

別急,後面說,anycast 時,會用到

例項

在server處又新加了一臺裝置,當做源 R5 192.168.1.20

此時 在R2上(SA的過濾配置肯定是在RP上的)

Extended IP access list 100
    10 permit ip host 192.168.1.10 host 224.1.1.1 (5 matches)
R2(config)#ip msdp sa-filter out 4.4.4.4 list 100

當然也可以先寫deny 再寫permit ,這個和 正常的ACL沒啥區別

現在只允許192.168.1.10 這個源向組播224.1.1.1 地址傳送流量時,才會進行SA的轉發,而其它的源地址將不給予轉發SA ,

沒有SA也就意味著無法建立S,G,沒有S,G也就意味著沒有辦法通訊

此時R5是死活也通不了的。

是現在我們再來修改一下ACL

允許192.168.1.20 這個源, 然後再來看一下吧

好,加完了,

這樣就過來了,

然後我們再來試一下,現在是在R2上配置Out 的,

我們現在在R4上(另外一臺RP上)做In 方向上的filter,

現在兩個源都可以,

我在R4上將192.168.1.10 deny 掉,看看有什麼變化

此時源為192.168.1.10的server ,打死也通不了了

那麼R5呢?另外一臺192.168.1.20 的 server呢?

等待一段時間,等組播路由表收斂完成,就可以了

但是通過wireshark 抓包可以明顯的看到,SA的訊息是發出去了,但是到達對端的時候有什麼問題和我這邊沒有關係了,問題是出在了對端 的RP上

現在再加上RP-LIST 和 rp-route-map

標準ACL

Ip msdp sa-filter [in] [out] [peer address] [rp-list] [rp-route-map]

Rp-list 和rp-route-map均可以用來匹配標準ACL

標準ACL用於限制 哪些peer 產生的SA可以傳送,其中的ACL 匹配的是peer 上的originator id

Originator id 如果不手動配置的話,就會以RP的地址來代替這個地址,

如果想要修改的話,可以使用命令來修改

Ip msdp originator-id [interface]
R4(config)#ip msdp sa-filter in 2.2.2.2 rp-list 1    //呼叫RP-LIST
R4(config)#ip access-list standard  1
R4(config-std-nacl)#deny 2.2.2.2
R4(config-std-nacl)#per any

這樣就可以直接deny 掉R2這臺RP所發來的SA訊息,針對的是RP,而不是RP所發來的具體內容。直接就給你拍死了。

但是如果說現在將R2的RP 的originator 地址改一下會發生什麼呢?

來看一下,

由於預設會使用RP的地址來做為originatorID ,並且我們在R4上配置的filter 也是針對的2.2.2.2 這個地址,現在來改一下看看

R2(config)#ip msdp originator-id f0/0

然後用SERVER 去Ping 一下組播地址,

發現可以通,

抓包來分析一下

現在傳送的SA 訊息中,源是2.2.2.2 到4.4.4.4 外層IP沒有問題

但是裡面的MSDP中發生了變化,RP address 變成了12.0.0.2

變了,那麼在R4上面針對2.2.2.2 所做的策略,自然也就不生效了

在是server 和 R5都沒有問題

那麼此時,我們在R4上再針對於12.0.0.2這個新的originatorID 來做一個filter呢?

R4(config)#ip msdp sa-filter in 2.2.2.2  rp-list 2

你所指向的還是RP,因為RP的地址不變,你所變的是originator ID

都不通了,

這也就是Originator ID的做用,

預設情況下是RP的地址,當然是可以改的,如果是改完之後,必須要重新的針對這個ID做filter才可以

-------------------------------------------

CCIE成長之路 ---梅利