multicast msdp 2

    理論上,PIM-SM域之間建立MSDP連接來交換組播源信息,是在RP與RP之間建立的,不建議在非RP上建立,MSDP是通過TCP來建立的,端口號爲639,和BGP的鄰居建立相似,所以要建立MSDP,必須手工指定MSDP peer的地址,TCP由地址小的一端主動發起連接,而地址高的一端則在LISTEN狀態等待連接。 待MSDP peer建立成功之後,便開始傳遞SA信息,MSDP之間的Keepalive包每60秒一個,如果75秒沒有收到Keepalive包,則會話被重置,而發送的SA信息也可以被當作Keepalive,即如果75秒沒有收到Keepalive但收到了SA,也表示連接正常。當一個RP擁有多個MSDP peer時,在從一個peer那裏收到SA之後,會轉發給除發送者之外的其它所有peer,如下圖:

    在上圖中,PIM-SM Domain 1中的RP路由器R2與PIM-SM Domain 2中的RP路由器R3以及PIM-SM Domain 3中的RP路由器R5之間建立全互聯的MSDP連接,R2從R3收到的SA會轉發給R5,從R5收到的SA也會轉發給R3,並且R3從R2收到的SA會轉發給R5,從R5收到的SA也會轉發給R2,R5的動作和R2與R3一樣,也會將自己收到的SA轉發給其它MSDP peer,這樣的轉發結果就是對於同一個組播源信息會從多個MSDP peer收到多次重複的,比如對於PIM-SM Domain 2中的組播源信息,R5會同時從R3和R2收到,那麼對於哪一條是正確的,在收到的時候會做一個檢測,然後將正常的SA緩存起來,如上圖中,R5只應該接收R3發來的SA,而R3也應該只接收R5發來的SA,對於PIM-SM Domain 2的SA,R2只應該接收R3發來的,對於PIM-SM Domain 3的SA,R2只應該接收R5發來的;(至於SA是誰發來的,是不是從正常路徑發來的,我本人認爲這並不重要,全部接收好了,我覺得沒什麼,因爲它只是一個消息而已,並且不管是誰發來的,消息的內容都是一模一樣的,有什麼好糾結的呢?是誰發來的只要消息是對的,並不影響組播流量的轉發!),路由器從MSDP peer收到SA之後,需要做Reverse Path Forwarding (RPF)檢測,即反向路徑檢測,普通的RPF檢測的方法是查看自己的路由表中去往發送者IP的數據包該從哪個接口出去,那麼從哪個接口收到的數據包就被認爲是合法有效的,這個合法的接口也被稱爲RPF接口,事實上MSDP對於SA數據包的RPF檢測要比普通RPF檢測複雜的多,但這是MSDP唯一的重點,也是唯一的難點,如果RPF檢測失敗,就表示SA信息被丟棄,那麼組播樹就無法建立,組播也就無法通信。
    注:在當前的IOS版本中,將MSDP的SA信息緩存起來是強制執行的,不能人爲手工開啓或關閉,默認情況下,當MSDP鄰居配置之後,命令“ip multicast cache-sa-state”將被自動添加到running configuration中,如果IOS版本早於IOS Releases 12.1(7) 和12.0(14)S1,默認是不開啓SA信息緩存功能的,但可以通過手工輸入命令“ip multicast cache-sa-state”來開啓SA緩存功能。

    PIM-SM域把SA發來之後,SA數據包裏面明確寫清楚了那個PIM-SM域內的RP地址是多少,這是SA數據包內我們唯一需要關心的內容,因爲該RP地址對SA數據包的RPF檢測至關重要,但是這個SA裏面寫的RP地址可以被人爲更改,更改命令爲ip msdp originator-id加接口,則使用相應接口的IP地址爲SA內的RP地址。
對收到的SA數據包做RPF檢測,和普通的RPF檢測不一樣,普通的RPF檢測是根據所有的IGP路由表以及所有的BGP單播路由表來做檢測的,即命令“show ip route”看到的路由表,而對SA數據包做的RPF檢測只能根據BGP路由表來做檢測,單播BGP和組播BGP都可以,即Unicast Border Gateway Protocol (uBGP)和Multicast Border Gateway Protocol (MBGP),MBGP是Multiprotocol-Border Gateway Protocol (MP-BGP)應用的一種,因爲MP-BGP不僅可以擴展到組播,還可以擴展到IPv6以及MPLS。如果同時存在MBGP和單播BGP,則MBGP優先,既然對SA數據包做的RPF檢測必須依靠BGP路由表,那就意味着PIM-SM域之間必須運行BGP,如果沒有BGP,那麼SA的RPF檢測將失敗,最終導致SA數據包被丟棄。
MSDP RPF檢測詳細規則
在以下3種情況下收到的SA是不需要做RPF檢測的:(相當重要)
1.發送方MSDP peer是default MSDP peer或是唯一的1個MSDP peer(即只配置了1條ip msdp peer命令)的情況下;
2.發送方MSDP peer是MSDP Mesh Group中的一員;
3.發送方MSDP peer的IP地址與SA數據包中的RP地址相同。
所以在以上3種情況下,BGP和MBGP都是不需要的。
    通常情況下,MSDP peer就是BGP或MBGP 鄰居,但也有不是的情況,因爲BGP的鄰居類型分interior BGP (iBGP)和exterior (eBGP),所以SA的RPF具體檢測過程也分如下3種:

1.MSDP peer是iBGP鄰居;
2.MSDP peer是eBGP鄰居;
3.MSDP peer不是BGP鄰居(但域之間也必須有BGP)。

注:在以上3種檢測情況下,都需要對比SA中RP的IP地址信息,所以務必保證將SA中RP的IP地址通告進BGP中;同樣的,也建議使用建立MSDP peer的地址來建立BGP鄰居,更能保證RPF的檢測通過。
 
SA的RPF具體檢測細節如下:
1.當MSDP peer是iBGP鄰居
如果BGP路由表中顯示去往SA數據包中RP地址的最佳路徑就是走這個iBGP鄰居,則檢測通過,否則檢測失敗。(先查多播路由表(MRIB),再查單播路由表(URIB))
解釋:BGP路由表中去往SA數據包中RP地址的最佳路徑的下一跳地址等於發送該SA數據包的MSDP peer的地址。
★所以建議建BGP和建MSDP的地址使用同一個地址。

2.當MSDP peer是eBGP鄰居;
如果BGP路由表中顯示去往SA數據包中RP地址的最佳路徑的下一跳AS號碼就是這個eBGP鄰居的AS號碼,則檢測通過,否則檢測失敗。(先查多播路由表(MRIB),再查單播路由表(URIB))
解釋: 最佳路徑的下一跳AS就是AS_PATH中的第1個AS,即AS_PATH中最左邊的AS。

3.當MSDP peer不是BGP鄰居(但域之間也必須有BGP)
如果BGP路由表中顯示去往SA數據包中RP地址的最佳路徑的下一跳AS號碼和去往MSDP peer的最佳路徑的下一跳AS號碼相同,則檢測通過,否則檢測失敗。(先查多播路由表(MRIB),再查單播路由表(URIB))


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章