曹雪峰, 于萬國, 蔡永華, 朱會卿, 陳日升
(河北民族師范學(xué)院 數(shù)學(xué)與計算機(jī)系, 河北 承德 067000)
基于虛擬網(wǎng)絡(luò)的IP多播原理實驗設(shè)計
曹雪峰, 于萬國, 蔡永華, 朱會卿, 陳日升
(河北民族師范學(xué)院 數(shù)學(xué)與計算機(jī)系, 河北 承德 067000)
采用GNS3中整合的IOU和VirtualBox構(gòu)建虛擬網(wǎng)絡(luò)實驗環(huán)境,設(shè)計了IP多播原理實驗方案。利用Wireshark協(xié)議分析軟件捕獲報文,通過對報文的分析闡述了IGMP協(xié)議加入、離開多播組的工作過程,PIM-SM協(xié)議共享樹和最短路徑樹的加入、剪枝過程,多播源注冊過程,共享樹和最短路徑樹之間的切換過程。驗證了IGMP和PIM-SM協(xié)議的工作過程,使學(xué)生從理論和實踐兩方面更好地理解IP多播的工作原理。
虛擬網(wǎng)絡(luò); IP多播; PIM-SM; 共享樹; 最短路徑樹
隨著數(shù)據(jù)通信技術(shù)的發(fā)展,IP多播技術(shù)支持下的視頻點播、網(wǎng)絡(luò)電視和視頻會議等點到多點業(yè)務(wù)已經(jīng)被廣泛應(yīng)用[1-2],成為計算機(jī)網(wǎng)絡(luò)教學(xué)的一個重要內(nèi)容。而學(xué)習(xí)計算機(jī)網(wǎng)絡(luò)協(xié)議的最好方法,就是通過對網(wǎng)絡(luò)中捕獲報文的分析,理解協(xié)議的報文格式、協(xié)議的工作原理和交互過程[3-4]。思科模擬軟件GNS3是一款開源的網(wǎng)絡(luò)模擬軟件[5-7],適用于多種操作系統(tǒng),其整合的IOU占用物理機(jī)資源非常少,配合GNS3中集成的VirtualBox虛擬機(jī),能夠完成一些非常復(fù)雜的網(wǎng)絡(luò)環(huán)境模擬配置,然后利用Wireshark分析虛擬網(wǎng)絡(luò)中捕獲的報文,以輔助學(xué)習(xí)計算機(jī)網(wǎng)絡(luò)協(xié)議。
1.1 因特網(wǎng)組管理協(xié)議
因特網(wǎng)組管理協(xié)議(internet group management protocol,IGMP)是一個組成員關(guān)系管理協(xié)議,主機(jī)通過此協(xié)議告訴本地路由器希望加入某個特定多播組的信息[8-11]。同時,路由器通過此協(xié)議周期性地查詢局域網(wǎng)內(nèi)是否仍有屬于某個多播組的成員,實現(xiàn)所連網(wǎng)絡(luò)組成員關(guān)系的收集與維護(hù)。
主機(jī)發(fā)送組成員報告報文請求加入多播組,此報文有時也用于響應(yīng)本地路由器發(fā)出的組成員查詢報文。當(dāng)主機(jī)退出組時,向組地址224.0.0.2發(fā)送離開組報文,通知本地網(wǎng)絡(luò)中的所有路由器。
路由器只發(fā)送IGMP查詢報文,包括General Query和Group-Specific Query。路由器通過General Query報文向與其連接的所有網(wǎng)絡(luò)進(jìn)行輪詢,來檢測網(wǎng)絡(luò)中有沒有組成員的情況。
通過上述機(jī)制,在多播路由器里建立起一張表,其中包含路由器的各個端口以及端口所對應(yīng)的子網(wǎng)上都有哪些組的成員。當(dāng)路由器接收到某個組G的多播報文后,只向那些有組G成員的端口上轉(zhuǎn)發(fā)多播報文。
1.2 多播路由選擇協(xié)議
協(xié)議無關(guān)多播稀疏模式(PIM-SM)是常用的多播路由選擇協(xié)議[12-14],適用于組成員分布相對分散而且范圍較廣,或者網(wǎng)絡(luò)帶寬資源有限等情況。運行PIM-SM協(xié)議的路由器周期性地發(fā)送Hello報文,用以發(fā)現(xiàn)鄰接的PIM-SM路由器,維護(hù)鄰居關(guān)系,并且負(fù)責(zé)在多路訪問網(wǎng)絡(luò)中進(jìn)行指定路由器(DR)的選舉,通過建立多播分發(fā)樹來進(jìn)行多播報文的轉(zhuǎn)發(fā)。多播分發(fā)樹包括以組G的匯聚點RP(RP可以通過手工指定或利用自舉機(jī)制動態(tài)選舉)為根的共享樹(RPT)和以多播源為根的基于源的樹,也稱為最短路徑樹(SPT)。
當(dāng)主機(jī)加入一個多播組G 時,就發(fā)送組成員報告報文給DR,DR在多播路由表中生成了(*,G)表項,將接收到多播報文的接口IP地址加入該多播組的出站接口列表,并向該組所對應(yīng)的RP方向發(fā)送join/prune加入報文。上游路由器如果沒有加入RPT,先在轉(zhuǎn)發(fā)表中生成(*,G)表項,將接收到加入報文的接口IP地址加入多播組的出站接口列表,并向該組的RP方向繼續(xù)發(fā)送加入報文,否則只需將收到加入報文的接口IP地址加入多播組的出站接口列表。重復(fù)此操作直到到達(dá)RP。這樣從DR到RP所經(jīng)過的路由器就形成了RPT。當(dāng)有多播組G的多播報文到達(dá)RP時,就會沿著已建立好的RPT到達(dá)DR,進(jìn)而到達(dá)接收者。
當(dāng)組成員離開多播組G時,與其直連的DR會逆著RPT向該組的RP方向逐跳發(fā)送join/prune剪枝報文;上游節(jié)點收到該報文后,在其出站接口列表中刪除與下游節(jié)點相連的接口,并檢查自己是否擁有該多播組的接收者,如果沒有,則繼續(xù)向其上游轉(zhuǎn)發(fā)該剪枝報文。另外,RPT建立后,路由器周期性向上游鄰居發(fā)送join/prune報文,以保持激活。如果在保持時間內(nèi)沒有收到下游鄰居的join/prune加入報文,則將下游鄰居從其多播組的出站接口列表中刪除,從而完成剪枝。
多播源通過多播源注冊向RP通知多播源的存在。當(dāng)多播源S向多播組G發(fā)送第一個多播報文時,連接多播源的DR就將收到的多播報文封裝成注冊報文,并以單播方式發(fā)送給對應(yīng)的RP。RP收到該報文解封裝后,將其中的多播報文沿著RPT轉(zhuǎn)發(fā)給組成員,同時向多播源逐跳發(fā)送源為S的組G的join/prune加入報文,這樣從RP到多播源所經(jīng)過的路由器就構(gòu)建了SPT。然后,多播源沿著已建立好的SPT,在發(fā)送源注冊報文的同時也直接轉(zhuǎn)發(fā)對應(yīng)的多播報文。RP收到直接轉(zhuǎn)發(fā)來的多播報文后,向與多播源直連的DR單播發(fā)送注冊停止報文,多播源注冊過程結(jié)束。此后,多播源沿SPT只轉(zhuǎn)發(fā)多播報文,不再封裝發(fā)送源注冊報文。
當(dāng)連接接收者的DR發(fā)現(xiàn)從RP發(fā)往多播組G的多播報文速率超過了一定的閾值時,將由其發(fā)起從RPT向SPT的切換。首先是連接接收者的DR向多播源S逐跳發(fā)送(S,G)加入報文,并最終送達(dá)連接多播源的DR,沿途經(jīng)過的所有路由器在其多播路由表中都生成了(S,G)表項和出站接口列表,從而建立了SPT;然后連接接收者的DR向RP逐跳發(fā)送包含RP位的剪枝報文。如果只有一個接收者,這時RP收到該報文后會向多播源方向繼續(xù)發(fā)送剪枝報文,從而最終實現(xiàn)從RPT向SPT的切換。從RPT切換到SPT后,多播報文直接從多播源發(fā)送到接收者。
1.3 多播高層協(xié)議
RTP是針對多媒體數(shù)據(jù)流的一種傳輸協(xié)議,位于UDP協(xié)議之上來傳輸單播或多播數(shù)據(jù)流,允許應(yīng)用傳送音頻和視頻的實時負(fù)載,主要提供了時間信息和實現(xiàn)流同步。RTCP屬于RTP協(xié)議的一部分,它提供了流量控制和擁塞控制服務(wù)。
2.1 實驗拓?fù)浣Y(jié)構(gòu)
按圖1所示拓?fù)浣Y(jié)構(gòu)搭建基于虛擬網(wǎng)絡(luò)的IP多播原理實驗網(wǎng)絡(luò)[14-15]。其中7臺路由器是IOU Router,4臺主機(jī)是安裝了Windows XP操作系統(tǒng)的VirtualBox虛擬機(jī),設(shè)備端口IP地址分配見表1。
圖1 IP多播原理實驗網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖
表1 虛擬機(jī)及路由器端口IP地址分配表
2.2 設(shè)備配置
R2路由器主要配置如下[15]:
R2#configure terminal R2(config)#interface ethernet 0/0 R2(config-if)#ip address 172.16.20.1 255.255.255.0 R2(config-if)#ip pim sparse-mode ! 配置PIM的模式為稀疏模式 R2(config-if)#no shutdown R2(config-if)#interface ethernet 0/1 R2(config-if)#ip address 172.16.21.1 255.255.255.0 R2(config-if)#ip pim sparse-mode R2(config-if)#no shutdown R2(config-if)#interface ethernet 0/2 R2(config-if)#ip address 172.16.22.1 255.255.255.0 R2(config-if)#ip pim sparse-mode R2(config-if)#no shutdown R2(config-if)#exit R2(config)#router ospf 1 R2(config-router)#network 172.16.11.0 0.0.0.255 area 0R2(config-router)#network 172.16.12.0 0.0.0.255 area 0R2(config-router)#network 172.16.13.0 0.0.0.255 area 0 R2(config)#ip multicast-routing !啟用多播路由功能 R2(config)#ip pim rp-address 1.1.1.1 !指定RP地址
其他路由器參考R2路由器進(jìn)行配置。在4臺虛擬機(jī)上安裝VLC播放器,配置PC1為多播源。在VLC的“流輸出”對話框中,添加要播放的媒體文件,“新目標(biāo)”選擇“RTP/MPEG Transport Stream”,設(shè)置地址為225.0.0.1,基本端口為5004。
在各鏈路段上執(zhí)行捕獲報文命令,啟用Wireshark軟件開始抓包。在PC3虛擬機(jī)上選擇“打開網(wǎng)絡(luò)串流”選項,輸入地址RTP://225.0.0.1:5004,準(zhǔn)備接收多播視頻。在虛擬機(jī)PC4、PC2上依序執(zhí)行相同的操作。在虛擬機(jī)PC1上播放視頻,在另外3臺虛擬機(jī)上都能接收多播視頻后,按PC3、PC4、PC2和PC1的順序依次退出虛擬機(jī)上的VLC程序,并停止抓包。把各鏈路段上捕獲報文的文件進(jìn)行合并,通過設(shè)置顯示過濾規(guī)則,可以只顯示與多播工作原理分析相關(guān)協(xié)議的報文。
3.1 IGMP協(xié)議工作過程分析
主機(jī)PC3發(fā)送9171號組成員報告報文,請求加入組地址為225.0.0.1的多播組,如圖2所示。路由器R5和R3發(fā)送9175、6132和6308號普通組成員查詢報文;當(dāng)PC3離開多播組時,發(fā)送10796號離開組報文,連接PC3的R5發(fā)送10797號特殊組查詢報文,以確定在地址為225.0.0.1的多播組中是否還有其他的組成員。因此IGMP是用來在主機(jī)和與其直接相連的多播路由器之間建立、維護(hù)多播組成員關(guān)系的。
圖2 捕獲的IGMP報文
3.2 加入RPT過程分析
路由器R5收到PC3發(fā)送加入組成員的報告報文后,因為自己不是RP,又沒在RPT上,所以先在多播路由表中創(chuàng)建(*,225.0.0.1)表項,將Ethernet0/0加入出站接口列表,然后向RP方向發(fā)送15615號join/prune加入報文,如圖3所示。組地址為225.0.0.1,RP地址為1.1.1.1。路由器R6收到此報文后,同樣先創(chuàng)建(*,225.0.0.1)表項,并將Ethernet0/3加入出站接口列表,再向上游發(fā)送6455號join/prune加入報文;此報文到達(dá)R3(RP)后,由于路由器中沒有225.0.0.1多播組的路由表項,先創(chuàng)建(*,225.0.0.1)表項,并將Ethernet0/2加入出站接口列表,構(gòu)建了一條以R3為根的RPT分支。
圖3 捕獲的PIM-SM加入或剪枝報文
路由器R7收到PC4發(fā)送加入組成員報告報文后,創(chuàng)建(*,225.0.0.1)表項,將Ethernet0/0加入出站接口列表,向上游發(fā)送13486號join/prune加入報文;路由器R6收到此報文后,因為已經(jīng)加入了共享樹,因此只將Ethernet0/2加入(*,225.0.0.1)表項的出站接口列表,不再向上游發(fā)送join/prune加入報文,RPT又增加了一個分支。路由器R4收到PC2發(fā)送加入組成員報告報文后,創(chuàng)建(*,225.0.0.1)表項,將Ethernet0/0加入出站接口列表,向RP方向發(fā)送6314號join/prune加入報文,R3收到此報文后,只將Ethernet0/1加入(*,225.0.0.1)表項的出站接口列表,至此構(gòu)建了完整的RPT,如圖4所示。
圖4 構(gòu)造RPT和SPT示意圖
3.3 多播源注冊過程分析
通過對捕獲報文分析可以看到,多播源PC1發(fā)送的RTP報文封裝在42號UDP報文中,其源IP地址為172.16.20.10,目的IP地址為225.0.0.1。R2路由器收到此報文后,先把它封裝在3206號多播源注冊報文中,此報文源IP地址為172.16.20.1,目的IP地址為1.1.1.1,如圖5所示。
圖5 多播源注冊過程捕獲的報文
此注冊報文以單播方式傳送到R1,R1再通過6155號注冊報文轉(zhuǎn)發(fā)給R3。R3收到此報文后解封裝注冊報文,并將封裝在其中的多播報文沿著RPT轉(zhuǎn)發(fā)給R6和R4,這就是圖5中的6484和6331號報文。
R3收到6155號第一個注冊報文后,在沿著RPT轉(zhuǎn)發(fā)多播報文的同時,向多播源方向發(fā)送6156號join/prune加入SPT報文;R1收到此報文后,在多播路由表中創(chuàng)建(172.16.20.10,255.0.0.1)表項,將Ethernet0/1加入出站接口列表,同時R1向多播源方向發(fā)送3207號join/prune加入SPT報文;R2收到此報文后,向多播路由表中(172.16.20.10,255.0.0.1)表項的出站接口列表添加Ethernet0/1。至此,從RP到多播源所經(jīng)過的路由器就構(gòu)建了SPT。
此時R2收到PC1發(fā)送的第60號多播報文,既沿著SPT向R1發(fā)送3226號多播源注冊報文,同時也發(fā)送3227號直接轉(zhuǎn)發(fā)多播報文,R1收到這兩個報文后又轉(zhuǎn)發(fā)到R3,這就是圖5中的6176和6177號報文。R3在收到注冊報文的同時又收到了同一個UDP多播報文后,向與多播源直連的R2發(fā)送6179號多播源注冊停止報文,此報文的源IP地址是1.1.1.1,目的IP地址是172.16.21.1。R1收到此報文后向R2轉(zhuǎn)發(fā),這就是圖5中的3229號多播源注冊停止報文。R2收到此報文后停止發(fā)送多播源注冊報文,多播源注冊過程結(jié)束,以后R2直接沿SPT轉(zhuǎn)發(fā)多播報文。
3.4 SPT切換過程分析
引起RPT向SPT切換的條件是DR發(fā)現(xiàn)從RP發(fā)往多播組G的多播報文速率超過了一定的閾值,在思科路由器上,這個值被默認(rèn)設(shè)置為0,因此R5收到從R3轉(zhuǎn)發(fā)的第一個多播報文后,就向多播源方向的R2發(fā)送3390號join/prune加入SPT報文(見圖3),R2收到此報文,將Ethernet0/2加入(172.16.20.10,255.0.0.1)表項的出站接口列表。同樣,R7向多播源方向的R6發(fā)送13510號join/prune加入SPT報文。R6收到此報文,創(chuàng)建(172.16.20.10,255.0.0.1)表項,將Ethernet0/2加入出站接口列表,R6向R5發(fā)送15654號join/prune加入報文。R5收到此報文,將Ethernet0/1加入(172.16.20.10,255.0.0.1)表項的出站接口列表。R4向R6發(fā)送10891號join/prune加入報文,R6收到此報文后將Ethernet0/1加入(172.16.20.10,225.0.0.1)表項的出站接口列表。此時在R6路由器上顯示多播路由表內(nèi)容如下:
R5#show 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, E-Extranet, Outgoing interface flags: H-Hardware switched, A-Assert winner Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (*, 225.0.0.1), 00:02:41/00:02:57, RP 1.1.1.1, flags: S Incoming interface: Ethernet0/0, RPF nbr 172.16.32.1 Outgoing interface list: Ethernet0/2, Forward/Sparse, 00:02:30/00:02:57 Ethernet0/3, Forward/Sparse, 00:02:41/00:02:47 (172.16.20.10, 225.0.0.1), 00:00:49/00:02:10, flags: T Incoming interface: Ethernet0/3, RPF nbr 172.16.63.2 Outgoing interface list: Ethernet0/1, Forward/Sparse, 00:00:49/00:02:40 Ethernet0/2, Forward/Sparse, 00:00:49/00:02:57
至此完成了從RPT向SPT切換后的SPT的構(gòu)建。
但是這時RP還通過RPT向接收者轉(zhuǎn)發(fā)多播報文,造成接收者收到重復(fù)的多播報文,因此R4向R3發(fā)送6347號join/prune剪枝報文,通知R3不再通過Ethernet0/1接口轉(zhuǎn)發(fā)源地址為172.16.20.10的多播報文;同樣R5向R6發(fā)送15655號剪枝報文,R6繼續(xù)向R3方向發(fā)送6501號剪枝報文,R3收到該報文后向多播源方向的R1發(fā)送6192號剪枝報文,R1繼續(xù)向R2發(fā)送3242號剪枝報文,至此實現(xiàn)從RPT向SPT的切換。
當(dāng)PC2、PC3和PC4離開多播組時,采用類似的join/prune剪枝報文剪枝SPT和RPT,在此不再贅述。
通過實驗,初步驗證了IGMP協(xié)議加入、離開多播組的工作過程,PIM-SM協(xié)議共享樹和最短路徑樹的加入、剪枝過程,多播源注冊過程,共享樹和最短路徑樹之間的切換過程等內(nèi)容,體會了IP多播技術(shù)的實際應(yīng)用,使學(xué)生從理論和實踐兩方面加深了對IP多播原理的理解。
References)
[1] 童文,許勇,胡雯.IP多播技術(shù)在遠(yuǎn)程監(jiān)控系統(tǒng)中的應(yīng)用[J].計算機(jī)技術(shù)與發(fā)展,2013,23(9):174-177.
[2] 李亮,黃石平,臧勝鯤.組播技術(shù)高清數(shù)字電視直播系統(tǒng)在校園網(wǎng)中的應(yīng)用[J].實驗室研究與探索,2015,34(1):118-121,237.
[3] Sanders C. Wireshark數(shù)據(jù)包分析實戰(zhàn)[M].諸葛建偉,陳琳,許偉林,譯.2版.北京:人民郵電出版社,2013.
[4] Orebaugh A, Ramirez G, Burke J, et al. Wireshark & Ethereal Network Protocol Analyzer Toolkit[M].Rockland:Syngress Publishing Inc,2007.
[5] 李林林,孫良旭,吳建勝.基于GNS3與VirtualBxo構(gòu)建虛擬網(wǎng)絡(luò)工程實驗室研究[J].實驗技術(shù)與管理,2015,32(9):144-148.
[6] 顧春峰,李偉斌,蘭秀風(fēng).基于VMware、GNS3實現(xiàn)虛擬網(wǎng)絡(luò)實驗室[J].實驗室研究與探索,2012,31(1):73-75.
[7] Welsh C. GNS3 Network Simulation Guide[M]. Birmingham:Packt Publishing Ltd,2013.
[8] Williamson B.IP組播網(wǎng)絡(luò)設(shè)計開發(fā):第1卷[M].顧金星,張擁軍,南親良,等譯.北京:電子工業(yè)出版社,2000.
[9] 謝希仁.計算機(jī)網(wǎng)絡(luò)[M].5版.北京:電子工業(yè)出版社,2008.
[10] 曹雪峰.計算機(jī)網(wǎng)絡(luò)原理:基于實驗的協(xié)議分析方法[M].北京:清華大學(xué)出版社,2014.
[11] Weinstein F. Internet Group Management Protocol: Version 2[J].Work in Progress,1997,17(6):241-243.
[12] Doyle J, Carroll J D.TCP/IP路由技術(shù):第二卷[M].夏俊杰,譯.北京:人民郵電出版社,2009.
[13] Estrin D,Farinacci D,Helmy A,et al. Protocol Independent Multicast-Sparse Mode (PIM-SM): Protocol Specification[S].IETF RFC 2362,1998.
[14] Fenner B,Handley M,Holbrook H,et al. Protocol Independent Multicast-Sparse Mode (PIM-SM):Protocol Specification (Revised)[S].IETF RFC 4601,2006.
[15] Solie K, Lynch L.CCIE實驗指南:第2卷[M].姚軍玲,顧彬,梅洪濤,等譯.北京:人民郵電出版社,2006.
Experimental design for principle of IP multicast based on virtual network
Cao Xuefeng, Yu Wanguo, Cai Yonghua, Zhu Huiqing, Chen Risheng
(Department of Mathematics and Computer,Hebei Normal University for Nationalities,Chengde 067000,China)
By using integrated IOU in GNS3 and VirtualBox software to build a virtual network experimental environment in a single computer, this paper designs the experimental scheme of IP multicast. Using Wireshark software to capture packets, through the analysis of packets, this paper expounds on the working processes of the IGMP protocol to join and leave the multicast group, the joining process and the pruning process of the PIM-SM(Protocol Independent Multicast-Sparse Mode) rendezvous point tree and the shortest path tree, the registration process of the multicast source, the switchover process between the rendezvous point tree and the shortest path tree. This paper verifies the IGMP protocol and the PIM-SM protocol’ working process, and can let students better understand the working principle of IP multicast from both theoretical and practical aspects.
virtual network; IP multicast; PIM-SM; rendezvous point tree; the shortest path tree
10.16791/j.cnki.sjg.2016.12.033
2016-06-28
國家民委高等教育教學(xué)改革研究項目(15114);河北民族師范學(xué)院科研項目(201406)
曹雪峰(1967—),男,河北隆化,碩士,副教授,主要研究方向為計算機(jī)網(wǎng)絡(luò)技術(shù).
E-mail:cxf_cd@163.com
TP391.9
: A
: 1002-4956(2016)12-0132-05