開放式組播最短路徑優先(MOSPF)由FRC1584爲OSPF組播的擴展,是OSPFV2單播路由協議的一個擴展。算法
組播擴展 OSPF(MOSPF)在原 OSPF 第二版本的基礎上做了加強使之支持 IP 組播路由。這種改進具備向後兼容性,當轉發通常的(單播)IP 數據通訊量時,具備組播能力的路由器能夠和無組播能力 OSPF 路由器互操做。數據庫
MOSPF 是經過在 OSPF 連接狀態通告中包含組播信息而工做的。一個 MOSPF 路由器學到哪一個局域網(LAN)上的哪一個組播組在活動。MOSPF 爲每對源/組創建一個分配樹而且爲發送到組的活動源肯定一個樹。樹的狀態被緩存,而且當連接狀態發生變化或高速緩存器超時的狀況,必須從新肯定樹。bootstrap
MOSPF 提供了經過因特網路由器在兩個 IP 網絡之間轉發組播數據包的能力。MOSPF 轉發一個組播數據包是創建在該數據包的源和目的地址兩方面的基礎上。OSPF 鏈路狀態數據庫提供了一套關於自治系統(AS)拓樸的完整描述。經過加入新的鏈路狀態通告類型,即組成員(LSA),在該數據庫中能夠查到全部組播組成員的位置。如此,再經過創建以數據包源爲根的最短路徑樹,能夠計算出組播數據包的路徑。樹上全部不包含組播的分支都被剪除。當接收到第一個數據包時,也就初步造成了剪除過的最短路徑樹。最短路徑的計算結果被緩存起來以供具備相同源和終端的後續數據包使用。緩存
MOSPF 被用於單個自治系統內部。當須要在整個因特網上支持 IP 組播時,MOSPF 就得與用於自治系統間的組播路由協議如 DVMRP 共同使用。網絡
運行 MOSPF 的路由器只能工做於使用 MOSPF 的 internet 網絡中,但能夠與非組播 OSPF 路由器混合使用。當轉發通常的(單播)IP 數據庫通訊量時,兩種類型的路由器能夠交互操做。在 MOSPF 中,與基本的 OSPF 協議中同樣,數據包(組播或單播)被原樣發送 ,當它們通過自治系統時,再也不進行封裝或解裝。less
組成員關係LSA攜帶標準的LSA頭部,其類型號爲6,只在MOSPF指定路由器纔會發送組成員關係LSA。ide
鏈路狀態ID(link state ID):攜帶被宣告多播組的地址工具
宣告路由器(Advertising Router):是多路訪問網絡中MOSPF指定路由器的路由器ID,由於只有指定路由器才能產生類型6的LSAoop
頂點類型(vertex type):定義了目的地是一個路由器(類型=1),仍是一個轉接的網絡(類型=2),若是發起路由器正在運行的某些應用程序須要其成爲多播組成員,那麼就指定類型1,轉接網絡指的是發起路由器直連的網絡,只有穿越該網絡,多播包才能到達所鏈接的組成員。測試
頂點ID(Vertex ID):發起路由器的路由器ID
經擴展、支持MOSPF的路由器LSA(類型1)的格式,與OSPF基本相同,只是Rtype項目中有一個W比特由區域間多播轉發路由器和AS間的多播轉發路由器進行設置,以便向區域中的其它MOSPF路由器指示其爲萬能多播轉發路由器。
l bit B ― B 即指邊界。將路由器設置爲一個區域邊界路由器。這些路由器在 OSPF 區域內轉發單播數據流量。
l bit E ― E 即指外部。將路由器設置爲一個 AS 邊界路由器。這些路由器在自治系統間轉發單播數據流量。
l bit V ― V 即指虛擬。將路由器設置爲活動虛擬鏈路的終端,而將區域看成 Transit 區域使用。
l bit W ― 將路由器設置爲 Wild-Card 組播接收端。這些路由器接收全部組播數據報,而無論目的地是什麼。在某些時候,區域內組播轉發者和 AS 內組播轉發者就是 Wild-Card 組播接收端。
MOSPF 數據包格式與 OSPF 第二版相同,但在 OSPF Hello 數據包、Database Description 數據包以及全部鏈路狀態廣告中另加了 Option 字段。該新選項指出了路由器或網絡的組播容量。但全部非組播路由器忽略該新選項。
l T-bit ― 描述路由器的 TOS 容量。
l E-bit ― 因爲外部鏈路廣告沒有被擴散到 OSPF 子區域,E-bit 確保全部 Stub 區域的會員在區域配置上達成一致。
l MC-bit ― 描述 OSPF 路由選擇域的不一樣部分的組播容量。
三、CBT(Core-Based-Trees)CBT(Core-Based-Trees)核心樹,是和種與協議無關的、稀疏模式的共享樹。DVNRP與MOSPF有兩個共同的侷限:
l 都是密集模式的協議,不能在稀疏拓撲中有很好的擴展性。當網絡中組員的數量相對總的主機數要少不少,且組員分佈於整個網絡中,DVMRP和MOSPF都會消耗大量的網絡資源才能到達組員。不少資源消耗在用於計算的開銷和爲每個以多播源爲根的樹保持狀態。
l 兩個均受限於以單播的路由協議來判斷多播樹——DVMRP是基於RIP的協議,而MOSP是基於OSPF的。
CBT能夠用於下層任何路由協議,而不是爲了多播加一個新的協議,從而減小了開銷。CBT樹根植於一個核心CBT路由器,而非源網絡,這個核心能夠被放置在網絡中的任何位置,許多個組的樹均可以根植在一個核心上,以使協議更適於稀疏多播拓撲。
目前CBT有3個版本,CBTv2在RFC2189中描述。CBTv2代替CBTv1,CBTv3正處於提議狀態。這3個版本的CBT都試驗性的,沒有一個被普遍使用。CBTv2和CBTv3都不能與CBTv1版本兼容。
CBT使用瞭如下9種類型消息。
l JOIN_REQUEST
l JOIN_ACK
l ECHO_REQUEST
l ECHO_REPLY
l QUIT_NOTIFICATION
l FLUSH_TREE
l Candidate Core Advertisement
l Bootstrap
l HELLO
CBT消息以IP頭封裝,它的協議是7,包傳送的目的地址爲224.0.0.15(除了在單播特殊狀況下),TTL設爲1。以下圖爲CBT消息的報頭。
消息報頭
版本(Version):指定CBG版本號
類型(type):消息類型,具體以下表所示
Type |
Message |
0 |
HELLO |
1 |
JOIN_REQUEST |
2 |
JOIN_ACK |
3 |
QUIT_NOTIFICATION |
4 |
ECHO_REQUEST |
5 |
ECHO_REPLY |
6 |
FLUSH_TREE |
7 |
Bootstrap |
8 |
Candidate Core Advertisement |
地址長度(address length):定義了屬地海戰上包含的單播或多播的地址長度,以字節爲單位
檢驗和(chechsum):採用標準算法
HELLO消息
HELLO消息用於選舉多播網絡中的指定路由器,它們也由DR每隔60s發送一次,以保持存活。
優先權(preference):取值爲0~255,1~254表示由發起路由器變爲DR的合格程序,優先權值越低就越合格。值爲0表示這個HELLO消息由DR產生。
可選項(option type):定義了可選項值中的可選類型。BR產生的HELLO消息的可選類型爲0.
選項長度(option length):可選項值的長度,以字節計
可選項值(option value):可變長,用於承載可選項值,由BR產生的HELLO消息的可選項爲0。
JOIN_REQUEST消息類型
當路由器想要嫁接到CBT樹中時發送的信息。
組地址(group address):要加入的組的多播地址
目標路由器(target router):這個組的核心路由器地址
發起路由器(originating router):爲產生這個消息的路由器的地址
可選項類型(option type)、可選長度(option length)、可選項值(option value)與HELLO消息中定義相同。
JOIN_ACK消息
核心路由器或嫁接多播樹的路由器以JOIN_ACK消息來響應JOIN_REQUEST消息。
組播地址(group address):加入組的多播地址
目標路由器(target router):爲JOIN_ACK發向的那個路由器的地址
可選項類型(option type)、可選長度(option length)、可選項值(option value)與HELLO消息中定義相同。
QUIT_NOTIFICATION消息
此消息是向父路由器發送的,以請求從一個特定的多播樹剪除。
組地址(group address):退出的組的多播地址
發起子路由器(originating child router):發起這個消息的路由器的地址
ECHO_REQUEST消息
子路由器有義務維護父路由器的鏈路狀態,子路由器每隔60s發送ECHO_REQUEST消息來完成這個任務。
ECHO_REPLY消息
父路由器以ECHO_REPLY消息來響應子路由器的ECHO_REQUEST消息
發起父路由器(originating parent router):消息發起的地下
組地下(group address):一個或多個列出地址的項父路由器爲子路由器轉發這些組的包。
FLUSH_TREE消息
當路由器失去與父路由器鏈接,它向下遊子路由器發送這個消息,子路由器收到FLUSH_TREE消息後,將清除全部列在這個消息中的多播組的相關信息。
與支持SPT的協議相比,從路由器建立的組播狀態的數量來看,CBT的最大優勢是效率更高。在具備大量源和組的網絡中能把組狀態最小化爲O(G)。然而,在網絡延遲存在時,這種高效率致使對SPT的支持不夠。在CBTV2中維護的簡單(*,G)狀態不能很好處理非成員發送或域間邊界路由器。
四、PIM協議(Protocol Independent Multicast)DVMRP同單播的距離向量協議有共同的特徵,那就是很容易實現——所須要的工做僅僅是把它啓動,但其簡單性將帶很的開銷,除了在小型的、寬帶的網絡中有較密集的組員的狀況下,這個協議都存在擴展性的問題。
MOSFP把鏈路狀態的優勢帶入了路由表中,不過代價是設計複雜性的增長.MOSPF基於源樹使用協議不適於稀疏的拓撲,因爲這個侷限,許多網絡設計者不肯意在MOSPF較爲複雜的拓撲需求上花費不少。
MOSFP是一個單播協議的擴展,因此不須要單獨的單播協議,它不能獨立於OSFP運行。
CBT與協議真正無關,它經過查詢單播的路由表找到單播的目的地址,而不關心什麼單播協議來維護這個路由表,CBT在稀疏拓撲中能夠擴展,由於它還不成熟,因此實際應用對它的興趣頗有限。
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消息類型,以下表所示:
Type |
Message |
0 |
Hello |
1 |
Register (used in PIM-SM only) |
2 |
Register-Stop (used in PIM-SM only) |
3 |
Join/Prune |
4 |
Bootstrap (used in PIM-SM only) |
5 |
Assert |
6 |
Graft (used in PIM-DM only) |
7 |
Graft-Ack (used in PIM-DM only) |
8 |
Candidate-RP-Advertisement (used in PIM-SM only) |
校驗和(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消息。
l Hello
l Join/Prune
l Graft
l Graft-Ack
l 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消息,消息中包含了多播源的地址和多播組的地址、去往多播源的單播路由器的度量值以及單播路由協議用來發現該路由的度量優先值(管理距離)。這兩臺路由器會比較這些信息,根據下面的規則來肯定轉發路由器。
l 全部宣告的度量優先值最低的路由器爲轉發路由器,若是這些路由器是經過不一樣的單播路由協議來發現這些去往多播源的路由,那麼這些路由器僅宣告不一樣的度量優先值。
l 若是度量優先值相等,那麼所宣告的度量值最低的路由器爲轉發路由器。也就是說,最靠近多播源的路由器就成爲轉發路由器。
l 若是度量優先值和度量值都相等,那麼網絡中IP地址最大的路由器就是轉發路由器。
由轉發路由器負責繼續將多播流量轉發到多路接入網絡中,其餘的路由器則中止轉發該多播流量,並從各自的出站接口上刪除該多路接入接口。
下面是配置 PIM-DM的兩個實例。
實例1:在多路訪問的網絡環境以下拓撲圖所示:
具體配置以下所示:
R1#sh running-config Building configuration... Current configuration : 1106 bytes ! version 12.4 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R1 ! boot-start-marker boot-end-marker ! ! no aaa new-model ! resource policy ! ip subnet-zero ip cef ! ! ip multicast-routing ! ! interface FastEthernet0/0 ip address 10.1.1.1 255.255.255.0 ip pim dense-mode duplex half ! interface Ethernet1/0 ip address 172.16.1.1 255.255.255.0 ip pim dense-mode duplex half ! interface Ethernet1/1 ip address 172.16.2.1 255.255.255.0 ip pim dense-mode duplex half ! interface Ethernet1/2 no ip address shutdown duplex half ! interface Ethernet1/3 no ip address shutdown duplex half ! router ospf 10 log-adjacency-changes network 10.1.1.0 0.0.0.255 area 0 network 172.16.1.0 0.0.0.255 area 0 network 172.16.2.0 0.0.0.255 area 0 ! ip classless no ip http server no ip http secure-server ! ! ! logging alarm informational ! control-plane ! ! ! gatekeeper shutdown ! ! line con 0 exec-timeout 0 0 stopbits 1 line aux 0 stopbits 1 line vty 0 4 login ! ! End @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ R2#sh running-config Building configuration... Current configuration : 1042 bytes ! version 12.4 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R2 ! boot-start-marker boot-end-marker ! ! no aaa new-model ! resource policy ! ip subnet-zero ip cef ! ! ! ! ip multicast-routing ! ! ! ! interface FastEthernet0/0 ip address 172.16.3.1 255.255.255.0 ip pim dense-mode duplex full ! interface Ethernet1/0 ip address 172.16.1.2 255.255.255.0 ip pim dense-mode duplex half ! interface Ethernet1/1 no ip address shutdown duplex half ! interface Ethernet1/2 no ip address shutdown duplex half ! interface Ethernet1/3 no ip address shutdown duplex half ! router ospf 10 log-adjacency-changes network 172.16.1.0 0.0.0.255 area 0 network 172.16.3.0 0.0.0.255 area 0 ! ip classless no ip http server no ip http secure-server ! ! logging alarm informational ! ! ! control-plane ! ! ! ! gatekeeper shutdown ! ! line con 0 exec-timeout 0 0 stopbits 1 line aux 0 stopbits 1 line vty 0 4 login ! ! End @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ R3#sh run Building configuration... Current configuration : 1042 bytes ! version 12.4 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R3 ! boot-start-marker boot-end-marker ! ! no aaa new-model ! resource policy ! ip subnet-zero ip cef ! ! ! ! ip multicast-routing ! ! interface FastEthernet0/0 ip address 172.16.3.2 255.255.255.0 ip pim dense-mode duplex full ! interface Ethernet1/0 ip address 172.16.2.2 255.255.255.0 ip pim dense-mode duplex half ! interface Ethernet1/1 no ip address shutdown duplex half ! interface Ethernet1/2 no ip address shutdown duplex half ! interface Ethernet1/3 no ip address shutdown duplex half ! router ospf 10 log-adjacency-changes network 172.16.2.0 0.0.0.255 area 0 network 172.16.3.0 0.0.0.255 area 0 ! ip classless no ip http server no ip http secure-server ! logging alarm informational ! ! control-plane ! ! gatekeeper shutdown ! ! line con 0 exec-timeout 0 0 stopbits 1 line aux 0 stopbits 1 line vty 0 4 login ! ! End @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ R4#sh running-config Building configuration... Current configuration : 1038 bytes ! version 12.4 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname R4 ! boot-start-marker boot-end-marker ! ! no aaa new-model ! resource policy ! ip subnet-zero ip cef ! ! ! ! ip multicast-routing ! ! ! ! interface FastEthernet0/0 ip address 10.1.2.1 255.255.255.0 ip pim dense-mode duplex half ! interface Ethernet1/0 ip address 172.16.3.3 255.255.255.0 ip pim dense-mode duplex full ! interface Ethernet1/1 no ip address shutdown duplex half ! interface Ethernet1/2 no ip address shutdown duplex half ! interface Ethernet1/3 no ip address shutdown duplex half ! router ospf 10 log-adjacency-changes network 10.1.2.0 0.0.0.255 area 0 network 172.16.3.0 0.0.0.255 area 0 ! ip classless no ip http server no ip http secure-server ! ! ! logging alarm informational ! ! ! ! control-plane ! ! ! gatekeeper shutdown ! ! line con 0 exec-timeout 0 0 stopbits 1 line aux 0 stopbits 1 line vty 0 4 login ! ! end R4# |
配置完成後,可使用組播工具進行測試,分別在多播源端發出多播包,在組成員端接收多播包。以下圖所示:
使用sh ip pim neighbor命令查看PIM鄰居表
R2#sh ip pim neighbor PIM Neighbor Table Neighbor Interface Uptime/Expires Ver DR Address Prio/Mode 172.16.3.2 FastEthernet0/0 00:21:14/00:01:42 v2 1 / S 172.16.3.3 FastEthernet0/0 00:21:14/00:01:42 v2 1 / DR S 172.16.1.1 Ethernet1/0 00:22:39/00:01:22 v2 1 / S |
如上圖所示,選舉的DR是172.16.3.3,由於拓撲中IP地址最大的則是172.16.3.3。
使用sh ip mroute命令顯示多播轉發表
R2#sh ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group Outgoing interface flags: H - Hardware switched, A - Assert winner Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 224.0.1.40), 00:28:19/00:02:21, RP 0.0.0.0, flags: DCL Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 00:28:19/00:00:00 FastEthernet0/0, Forward/Dense, 00:28:19/00:00:00 (*, 228.13.20.216), 00:00:18/stopped, RP 0.0.0.0, flags: D Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 00:00:18/00:00:00 FastEthernet0/0, Forward/Dense, 00:00:18/00:00:00 (10.1.1.88, 228.13.20.216), 00:00:18/00:02:41, flags: PT Incoming interface: Ethernet1/0, RPF nbr 172.16.1.1 Outgoing interface list: FastEthernet0/0, Prune/Dense, 00:00:18/00:02:41 R3#sh ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group Outgoing interface flags: H - Hardware switched, A - Assert winner Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 224.0.1.40), 00:29:12/00:02:03, RP 0.0.0.0, flags: DCL Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 00:29:12/00:00:00 FastEthernet0/0, Forward/Dense, 00:29:12/00:00:00 (*, 228.13.20.216), 00:01:40/stopped, RP 0.0.0.0, flags: D Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Forward/Dense, 00:01:40/00:00:00 FastEthernet0/0, Forward/Dense, 00:01:40/00:00:00 (10.1.1.88, 228.13.20.216), 00:01:40/00:02:58, flags: T Incoming interface: Ethernet1/0, RPF nbr 172.16.2.1 Outgoing interface list: FastEthernet0/0, Forward/Dense, 00:01:40/00:00:00, A R1#sh ip mroute IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group Outgoing interface flags: H - Hardware switched, A - Assert winner Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 224.0.1.40), 00:32:36/00:02:04, RP 0.0.0.0, flags: DCL Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/1, Forward/Dense, 00:30:51/00:00:00 Ethernet1/0, Forward/Dense, 00:31:14/00:00:00 FastEthernet0/0, Forward/Dense, 00:32:36/00:00:00 (*, 228.13.20.216), 00:03:21/stopped, RP 0.0.0.0, flags: DC Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: FastEthernet0/0, Forward/Dense, 00:03:21/00:00:00 Ethernet1/1, Forward/Dense, 00:03:21/00:00:00 Ethernet1/0, Forward/Dense, 00:03:21/00:00:00 (10.1.1.88, 228.13.20.216), 00:03:21/00:02:55, flags: T Incoming interface: FastEthernet0/0, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/0, Prune/Dense, 00:00:15/00:02:44 Ethernet1/1, Forward/Dense, 00:00:13/00:00:00 (*, 239.255.255.250), 00:31:53/00:02:03, RP 0.0.0.0, flags: DC Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet1/1, Forward/Dense, 00:30:52/00:00:00 Ethernet1/0, Forward/Dense, 00:31:15/00:00:00 FastEthernet0/0, Forward/Dense, 00:31:53/00:00:00 |
在上面所示,路由器R2和R3的FastEthernet0/0接口狀態是不一樣的,一個是修剪一個是轉發,在這裏這兩臺路由器須要選舉轉發路由器。由於都採用的OSPF路由協議,度量優先值相同,而其路徑開銷也是相同的,因此只有IP地址最大的採能成爲轉發路由器。
使用sh ip igmp groups命令查看記錄在IGMP成員關係表中所鏈接的組成員
R4#sh ip igmp groups 228.13.20.216 IGMP Connected Group Membership Group Address Interface Uptime Expires Last Reporter 228.13.20.216 FastEthernet0/0 00:07:28 00:02:36 10.1.2.113 |
待續。。。。。。