組播PIM-DM知識要點

PIM(Protocol Independent Multicast)
PIMv2消息格式
        PIMV2消息封裝在IP包頭中,協議號103,除了某些情況下用單播的消息外,PIMV2的IP目的地址是保留的多播地址224.0.0.13,TTL值設爲1。
        PIMV1也很常見,這個版本的IP協議號爲2,使其成爲IGMP協議的一個子集。版本1使用多播地址224.0.0.2。
PIMV2消息頭
所有PIM消息均有標準的包頭,如下圖所示:

版本號(version):定義版本號
類型(type):定義了包頭後的PIM消息類型,如下表所示:

校驗和(chechsum):一個標準IP風格的檢驗和
保留(reserved):全爲0,接收時忽略

HELLO消息格式
用於對鄰居的發現和鄰居的生存保持,這個消息默認爲每30秒發送一個。

可選類型(option type):定義了可選項值中的可選項類型,當前,只有可選項類型1,它定義可選項類型爲保持時間,2~16是保留的。
可選項長度(option length):定義了可選項值的長度,以字節爲單位。當可選項值爲保持時間(可選類型爲1)時,可選值長度爲2
可選項值(option value):可變長度的項,能裝下可選項類型中定義的任何值。保持時間(可選項類型=1,可選長度=2)爲路由器在宣佈鄰居無效前,等待從它發出的HELLO消息的時間,保持時間爲HELLO間隔的3.5倍。
下圖爲採集到的HELLO報文。

Register(註冊)消息格式
        這個消息只用於PIM-SM,是從源DR向RP用單播發送的一個消息,它承載着從源發出的初始多播包。就是說,在還沒有建立從源DR到RP的SPT之前,用Register消息把多播流量從源傳送到RP。

校驗和(checksum):在register消息裏,只計算消息頭,而不包括數據部分
B爲邊界比特,如果消息發起者爲一個直連着源的DR,那麼這個比特設爲0,如果源爲PIM多播邊界路由器(PMBR),則這個比特設爲1。
N爲空註冊比特。DR在註冊抑制計時器超時前查找RP時設置這個比特爲1。
多播數據包爲來自源的一個多播包,它通過register消息傳到RP。
Register Stop(註冊終止)消息格式
        這個消息用於RP響應DR產生的Register消息,此消息在兩種情況下使用RP通過SPT收到多播,而不再需要收到register消息封裝的多播消息沒有直連的,或連到SPT、RPT上的組員等待RP轉發這個包。

經編碼的多播地址(encoded group address):是多播組的IP地址,對於這個地址,接收者要停止發送register消息
經編碼的單播地址(encoded unicast source address):爲多播源的IP地址,這頂也可以被(*,G)路由條目定義爲全0,作爲通配的源地址。
JOIN/PRUNE(加入/剪除)消息格式
        這個消息將向上遊RP或多播源發送,用於加入或退出RPT或SPT,這個消息由多播地址列表組成。對於每一個多播地址,有一個或多個源地址列表,這些列表共同定義了要加入和退出的(S,G)與(*,G)路由條目。

經編碼的單播上游鄰居地址(encoded unicast upstream neighbor address):是RPF或上游鄰居的地址,這個消息將發送到這個地址上。
多播組數目(number of groups)定義了這個消息裏面包含的多播組的數目。
經編碼的多播組地址(encoded multicast groups address):定義了多播組的IP地址。
加入的多播組的數目(number of joined sources):定義了在這個多播組地址中列出的“經編碼的加入多播源地址”的數目。
剪除的多播源的數目(number of pruned sources):定義了這個多播地址中列出的“經編碼的剪除的多播源地址”的數目。
經編碼的加入多播地址(encoded joined source address):定義(S,G)對的源地址或(*,G)對的通配置地址。(*,*,RP)三元組的兩個通配符也可在此定義。除了源地址外,這一項中還規定了3個標識。
S爲稀疏標識比特,這個比特設爲1表示PIM-SM,用於與版本1的兼容
W爲通配(WC)比特。這個比特設爲1,則經編碼的加入多播源地址代表(*,G)或(*,*,RP)路由條目中的通配符。當它設爲0時,經編碼的加入多播源地址代表(S,G)路由條目中的源地址,當向RP發送了JOIN消息,W比特必須設爲1.
R爲RPT比特,當這個比特設爲1時,將向RP發送一個JOIN消息。當這個比特爲0地,向多播源發送JOIN消息。
經編碼的剪除的多播源地址(encoded pruned source address):定義了被剪除的多播源地址。這個編碼與經編碼的加入多播源地址相同,S、W、R比特同樣與加入的地址一樣,適用於被剪除的地址。
下圖爲採集到的報文。

Bootstrap(引導)消息格式
        它由自舉路由器(BSR)每60秒產生一個,擴散到PIM-SM域中,以保證一個組的所有路由器判斷的RP相同,這個消息包含了一個或多個多播地址的列表,對於每一個組地址,都有一個候選RP及它們的優先權的列表,這個列表爲這個組的RP集。收到消息的路由器用同樣的算法從C-CP列表中算出這個組的RP。這個算法保證了PIM域中的路由器能得出相同的RP地址。

分段標籤(fragment tag):用於bootstrap消息必須分爲多個部分的情況。這個標籤爲一個隨機產生的數,相同消息的片段分配同一個標籤。
HASH掩碼長度(hash mask length):用於hash算法的掩碼的長度。
BSR優先權(BSR Priority):取值0~255,它定義了發出這個消息的BSR的優先權。有最高優先樹的C-BSR會成爲BSR。
經編碼的單播BSR地址(encoded unicast BSR address):這個域的BSR的地址
RP計數(RP count):定義了對一個多播組列出的C-RP的總數,也就是RP集的大小。對RP集大小的描述很重要。因爲如果bootstrap消息是分段的,一個分段丟失了,那麼在PIM域中對RP的判斷可能會不一致,因此,如果收到的RP集中的RP數目與RP數目不符,則整個RP集會被丟棄。
分段RP計數(fragment RP count):定義了對於某個組在這個分段中的C-RP的數目。
經編碼的單播RP地址(encoded unicast RP address):爲C-RP的IP地址。
RP保持時間(RPm holdtime):一個BSR在把一個C-RP從RP集中刪除前等待C-RP發出Candidate-RP-Advertisement消息的時間,這個保持時間爲150s。
RP優先權(PRm priority):取值0~255,用於選擇RP的算法中,最高的優先權爲0。
Assert(聲明)消息格式
        這個消息用於在多路訪問網絡中選舉一個指定的轉發路由器,PIM路由器在它的輸出接口上收到多播包之後,會認定該數據鏈路層層上連接了另一臺正在轉發該多播組流量的路由器,因而該PIM路由器會發送一條Assert消息,以便讓共享該多路接入網絡的其它路由器能確定由誰負責轉發該多播組的流量。

已編碼的組地址(encoded group address):這個包的多播IP地址,這個地址觸發了Assert消息。
經編碼的單播源地址(encoded unicast source address):觸發Assert消息的多播包的源地址。
度量優先組(metric preference):分配給提供到源的路由的單播路由器的優先權值。這個值與管理距離的使用相同,在比較不同路由協議發現的路由時提供一致的量度。
下圖爲採集到的報文。

Graft(嫁接)消息
        PIM-DM路由器向上遊鄰居發出PIMV2 Graft消息,請求再次加入到以剪除的樹中。其消息格式與JOIN/PRUNE消息格式類型相似,類型爲6。
下圖爲採集到的報文。

Graft(嫁接確認)消息
        PIM-DM路由器向下遊鄰居發送PIMv2 graft-ack消息,以響應其Graft消息。其消息格式與JOIN/PRUNE消息格式類型相似,類型爲爲7。
下圖爲採集到的報文。

Candidate-RP-Advertisement(候選RP宣告)消息格式
        候選RP向BSR週期性單播發送Candidate-RP-Advertisement消息。BSR用於這個消息中的信息來建立RP集,這個RP集通過bootstrap消息域中的有的PIM-SM路由器來對外宣告。

前綴數目(prefix count):定義了包括在這個消息中的多播組地址的數目,如果發起消息的是一臺多播域中所有多播組C-RP,則前綴數目爲0
優先權(priority):取值0~255,定義了發起C-RP的優先權,這個值被用於選擇RP的算法中,優先權與其值的大小相反:0爲最高優先權,255爲最低。
保持時間(holdtime):這個消息有效的時間
經編碼的單播RP地址(encoded unicast RP address):爲C-RP的地址,這個地址是路由器一個接口的IP地址,這個地址通常爲loopback地址。
經編碼的組地址(encoded group address):定義一個或多個多播組的地址,對於這個多播組,消息發起者爲一個候選RP。
下圖爲採集到的報文。


============================================================


PIM-DM(Protocol Independent Multicast Dense Mode)
PIM-DM使用了5個PIMv2消息。
Hello
Join/Prune
Graft
Graft-Ack
Assert
        在 PIM-DM 域中,運行 PIM-DM 協議的路由器週期性的發送 Hello 消息,發現鄰接的 PIM 路由器,進行葉子網絡、葉子路由器的判斷,並且負責在多路訪問網絡中選舉指定路由器(DR)。
        PIM-DM 協議使用下面的假設:當組播源開始發送組播數據時,域內所有的網絡節點都需要接收數據,因此採用“擴散-剪枝”的方式進行組播數據包的轉發。組播源開始發送數據時,沿途路由器向除組播源對應的 RPF 接口之外的所有接口轉發組播數據包。這樣,PIM-DM 域中所有網絡節點都會收到這些組播數據包。爲了完成組播轉發,沿途的路由器需要爲組 G 和源 S 創建相應的組播路由項 (S, G)。 (S, G) 路由項包括組播源地址、組播組地址、入接口、出接口列表、定時器和標誌等。
        如果網絡中某區域沒有組播組成員,該區域內的路由器會發送剪枝消息,將通往該區域的轉發接口剪枝,並且建立剪枝狀態。剪枝狀態對應着超時定時器。當定時器超時時,剪枝狀態又重新變爲轉發狀態,組播數據得以再次沿着這些分支流下。另外,剪枝狀態包含組播源和組播組的信息。當剪枝區域內出現了組播組成員時,爲了減少反應時間,協議不必等待上游剪枝狀態超時,而是主動向上游發送嫁接報文,以使剪枝狀態變爲轉發狀態。
Prune消息的覆蓋
        如下圖所示,運行PIM-DM的網絡環境中,一臺單獨的路由器有多個多播下游鄰居,上游路由器Mercury,把組內的多播包擴散到通過LAN連接的三臺路由器上,copper路由器的輸出接口表爲空,於是向mercury發送一條剪除消息,但是sliver有一連接的組員,於是希望收到多播報文。

        Mercury根據hello消息明確知道它的下游有兩個鄰居。但hello消息中並沒有描述任何路由相關性信息,因而當copper發送prune消息時,mercury不知道是否要剪除該LAN接口。
        PIM-DM利用剪除覆蓋進程解決這個問題,copper向mercury發送了一條prune消息,但mercury的地址也被編碼在該消息中,攜帶該消息的IP包被髮送到ALL PIM ROUTERS地址224.0.0.13.當mercury接收到該prune消息後,並不立即剪除該接口,而是設置一個3秒定時器,與此同時,sliver也接收到了該prune消息,看到消息中所要剪除的多播組是其希望繼續接收的多播流量的多播組,而且該消息已經被髮送給正在轉發多播流量的其上游鄰居。

        因而sliver向mercury發送了一條join消息。Sliver就覆蓋了由copper發送的prune消息,只要mercury在3秒定時器到期前收到一條join消息,就不會中斷多播流量。
PIM-DM指派路由器
        PIM-DM會在多路接入網絡中選舉一臺指派路由器,需要注意的是,PIM-DM協議本身不需DR,只是由於IGMPV1沒有查詢進程,爲了管理IGMP查詢,IGMP需要依賴該路由協議來選舉DR。
        DR選舉進程很簡單,每臺PIM-DM路由器每隔30秒就發送一條PIMV2 hello消息或一個PIMV1 query消息,以進行鄰居發現,在多路接入網絡上,IP地址最大的PIM-DM路由器將成爲DR,其他的路由器則監控DR發出的hello包,如果在105秒內都沒有收到該hello包,則認爲DR已失效,從而選舉一個新的DR。
PIM轉發路由器選舉
        如下圖所示,在運行PIM-DM的網絡環境中,mercury和copper都有一條去往多播源172.16.1.1的路由,且都有一個下行接口去住多播組239.70.49.238的成員。如果兩臺路由器都轉發相同的多播流量到相同的網絡上,那麼網絡效率會非常低下。

        爲了防止這種情況的發生,PIM路由器將在共享網絡上選擇一臺轉發路由器。由於PIM沒有自己的路由協議,因而需要利用Assert(聲明)消息來選擇轉發路由器。

        當路由器在出站接口上接收到一個多播包時,會向網絡發送一條Assert消息,消息中包含了多播源的地址和多播組的地址、去往多播源的單播路由器的度量值以及單播路由協議用來發現該路由的度量優先值(管理距離)。這兩臺路由器會比較這些信息,根據下面的規則來確定轉發路由器。
所有宣告的度量優先值最低的路由器爲轉發路由器,如果這些路由器是通過不同的單播路由協議來發現這些去往多播源的路由,那麼這些路由器僅宣告不同的度量優先值。
如果度量優先值相等,那麼所宣告的度量值最低的路由器爲轉發路由器。也就是說,最靠近多播源的路由器就成爲轉發路由器。
如果度量優先值和度量值都相等,那麼網絡中IP地址最大的路由器就是轉發路由器。
        由轉發路由器負責繼續將多播流量轉發到多路接入網絡中,其他的路由器則停止轉發該多播流量,並從各自的出站接口上刪除該多路接入接口。

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