由IP網(wǎng)絡(luò)承載點(diǎn)到多點(diǎn)的分配式業(yè)務(wù)正成為網(wǎng)絡(luò)應(yīng)用熱點(diǎn),如IPTV、網(wǎng)絡(luò)視頻會(huì)議等,組播技術(shù)是這類(lèi)應(yīng)用的關(guān)鍵。組播數(shù)據(jù)從一個(gè)源發(fā)送到多個(gè)接收目的地址,傳統(tǒng)的單播路由必須確定每一個(gè)目的地址,并分別向這些地址發(fā)送數(shù)據(jù)包,而組播則可以通過(guò)一個(gè)組播地址只發(fā)送一個(gè)數(shù)據(jù)包的拷貝,因此,組播能夠有效地利用網(wǎng)絡(luò)帶寬并減少服務(wù)器的負(fù)載。網(wǎng)絡(luò)理論與協(xié)議的研究多采用模擬網(wǎng)絡(luò)來(lái)進(jìn)行,可以不受實(shí)際網(wǎng)絡(luò)條件的限制沒(méi)置模擬網(wǎng)絡(luò)環(huán)境,并能夠精確控制網(wǎng)絡(luò)事件的產(chǎn)生。NS2(Network Simulation version 2)是一個(gè)開(kāi)放源代碼的網(wǎng)絡(luò)模擬器,其開(kāi)放結(jié)構(gòu)便于進(jìn)行協(xié)議擴(kuò)展及仿真研究。
一、基本原理
IPv6網(wǎng)絡(luò)中組播組成員管理和組播分組轉(zhuǎn)發(fā)是由路由器實(shí)現(xiàn)的,實(shí)現(xiàn)上述功能依賴(lài)專(zhuān)門(mén)的協(xié)議。IPv6組播組成員管理通過(guò)組播偵聽(tīng)者發(fā)現(xiàn)協(xié)議(MLD:Muhicast Listener Discovery)來(lái)實(shí)現(xiàn),該協(xié)議是IPv6的Internet控制消息協(xié)議(ICMPv6)的一部分;組播分組轉(zhuǎn)發(fā)則通過(guò)組播路由協(xié)議來(lái)實(shí)現(xiàn),協(xié)議無(wú)關(guān)組播(PIM:Protocol Independent Multicast)是一種不依賴(lài)于特定單播路由協(xié)議的組播路由協(xié)議,現(xiàn)已成為事實(shí)上的域內(nèi)標(biāo)準(zhǔn)組播路由協(xié)議,該協(xié)議又分為密集模式(PIM-DM:Protocol lndependem Multicast - Dense Mode)和稀疏模式(PIM-SM:Protocol IndependentMuhicast - Sparse Mode),分別采用不同策略生成和維護(hù)組播樹(shù)。特定源組播(SSM:Source Specific Multieast)是PIM協(xié)議的擴(kuò)展,在組播源相對(duì)穩(wěn)定的情況下,采用PIM-SSM能夠更加有效地傳送數(shù)據(jù)。
1、PIM-SM協(xié)議
PIM-SM協(xié)議采用了匯聚點(diǎn)機(jī)制,它規(guī)定每個(gè)組播組必須有一個(gè)有效的匯聚點(diǎn)路由器,組播轉(zhuǎn)發(fā)捌分為兩種,即以組G的匯聚點(diǎn)(RP)為根的共享樹(shù)(RPT)和以組播源為根的最短路徑樹(shù)(SPT)。PIM-SM允許有直連組播數(shù)據(jù)接收者的路由器從RPT切換到SPT來(lái)接收組播數(shù)據(jù)。PIM-SM協(xié)議工作的基本機(jī)制主要包括以下幾個(gè)方面。
(1)共享樹(shù)的建立
共享樹(shù)的根結(jié)點(diǎn)稱(chēng)為RP。如果某一主機(jī)準(zhǔn)備加入一個(gè)組播組會(huì)將“MLD組成員關(guān)系”消息發(fā)送到上游直連指定路南器(DR:Designated Router),這意味著該主機(jī)可以接收該組的組播數(shù)據(jù)了。為此,中間路由器必須通知RP,申請(qǐng)加入RPT。這一過(guò)程是通過(guò)沿著RP方向向上游PIM-SM鄰居發(fā)送“Join”消息來(lái)完成的。PIM-SM路由器接收到來(lái)白下游路由器的(*,G)的“join”消息時(shí),檢查組播路由表,如果關(guān)于G組的(*,G)狀態(tài)己存在,則表明“Join”消息己到達(dá)了共享樹(shù),且接收“Join”消息的接口己加入到出口列表中;如果狀態(tài)不存在,則將創(chuàng)建一個(gè)(*,G)項(xiàng),并把接收“Join”消息的接口加入到出口列表,然后繼續(xù)向RP發(fā)送“Join”消息,直至到達(dá)RP。一旦創(chuàng)建從DR路由器到RP路由器的(*,G)狀態(tài),則從RP到主機(jī)的RIYF就建立起來(lái)了,組播組G的數(shù)據(jù)就能通過(guò)RP沿著RPT樹(shù)下行發(fā)送到已經(jīng)加入該組的主機(jī)。
(2)組播源注冊(cè)到RP
在組播流量初始傳送時(shí),PIM-SM通過(guò)一個(gè)注冊(cè)機(jī)制,將源主機(jī)的組播包傳遞給RP。當(dāng)與源主機(jī)直連的路由器DR最初接收到組播數(shù)據(jù)時(shí),將組播數(shù)據(jù)封裝進(jìn)“Regisler”消息中,目的地址為RP的地址,源地址為組播源的地址,將該消息單播至該組的RP。RP解析“Register”消息,并將其解封,取出數(shù)據(jù)包,然后將數(shù)據(jù)包轉(zhuǎn)發(fā)至下游成員。
(3)最短路徑樹(shù)和共享樹(shù)的切換
在有組播組成員直連路由器上,配置一個(gè)閾值,當(dāng)數(shù)據(jù)傳輸速率超過(guò)一個(gè)規(guī)定的閾值時(shí),路由器將從RPT切換到SPT。由于組播源與RP位置不同,這種切換有可能減少剛絡(luò)的擁塞,提高網(wǎng)絡(luò)的服務(wù)質(zhì)量,但這種情況下路由器必須保留更多的組播組狀態(tài)。
(4)剪枝接口
當(dāng)RP接收到“Prune”消息時(shí),就不再為“Prune”消息中指出的源轉(zhuǎn)發(fā)數(shù)據(jù)。剪枝從一個(gè)葉路由器(即與接收者南連的路由器)開(kāi)始。假設(shè)葉路由器為DR,如果組播組的最后一個(gè)成員向DR發(fā)送了一個(gè)MLD“Prune”消息,那么DR的MLD狀態(tài)將被刪除,同叫從(S,G)和(*,G)出口列表中刪除該出口信息。
(5)“聲明(assert)”消息的傳遞
為避免組播包在多路訪問(wèn)網(wǎng)絡(luò)中重復(fù)流動(dòng),PIM-SM引入了“聲明”信息,用以為一個(gè)多路訪問(wèn)網(wǎng)絡(luò)指定一個(gè)轉(zhuǎn)發(fā)路由器,PIM-SM通過(guò)assert機(jī)制來(lái)選定一個(gè)惟一的轉(zhuǎn)發(fā)者,通過(guò)發(fā)送assert報(bào)文,選出一個(gè)最優(yōu)的路徑。
2、PIM-SSM協(xié)議
PIM-SSM組播用一個(gè)組播源地址S和組播組地址G對(duì)(S,G)來(lái)表示一個(gè)會(huì)話(huà),也稱(chēng)為一個(gè)頻道。接收主機(jī)不僅要知道組播組地址G,還要知道組播源地址S。在路由復(fù)雜性方面,SSM進(jìn)行了很好的簡(jiǎn)化。在PIM-SM協(xié)議中,路由器不但要處理從RPT到SPT切換等復(fù)雜的問(wèn)題,而且要處理(*,*,RP)、(*,G)、(S,G)、(S,G,RPT)等4種不同的組播路由表項(xiàng)。采用SSM之后,路由器中只需要處理(S,G)這一種路由表項(xiàng),便于使用硬件進(jìn)行組播數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā),從而提高路由器組播數(shù)據(jù)的處理效率。SSM能夠部分解決傳統(tǒng)組播面臨的訪問(wèn)控制問(wèn)題,由于接收者明確告訴了路由器要接收來(lái)自哪個(gè)源地址的數(shù)據(jù),這樣就可以實(shí)現(xiàn)對(duì)數(shù)據(jù)源的控制,來(lái)自非法數(shù)據(jù)源的數(shù)據(jù)會(huì)被丟棄。SSM還解決了組播地址沖突的問(wèn)題.IETF已經(jīng)為SSM專(zhuān)門(mén)保留了地址段,IPv6地址段為FF3x∷/32。
3、PIM-DM協(xié)議
PIM-DM采用“擴(kuò)散/剪枝”機(jī)制建立組播轉(zhuǎn)發(fā)樹(shù)。在PIM-DM域中,運(yùn)行PIM-DM協(xié)議的路由器周期性地發(fā)送Hello消息,發(fā)現(xiàn)鄰接的PIM路由器,進(jìn)行葉子網(wǎng)絡(luò)、葉子路由器的判斷,并且負(fù)責(zé)在多路訪問(wèn)網(wǎng)絡(luò)中選舉DR。PIM-DM協(xié)議假定當(dāng)組播源開(kāi)始發(fā)送數(shù)據(jù)時(shí)域內(nèi)所有的網(wǎng)絡(luò)節(jié)點(diǎn)都需要接收,因此首先將數(shù)據(jù)擴(kuò)散到全網(wǎng),然后通過(guò)協(xié)議剪枝不需要數(shù)據(jù)的網(wǎng)段。為了完成組播轉(zhuǎn)發(fā),沿途的路由器需要為組G和源S創(chuàng)建相應(yīng)的組播路由項(xiàng)(S,G)。(S,G)路由項(xiàng)包括組播源地址、組播組地址、入接口列表、出接口列表、定時(shí)器和標(biāo)志等。
二、IPv6組播路由協(xié)議仿真
NS2是面向?qū)ο蟮、離散事件驅(qū)動(dòng)的網(wǎng)絡(luò)模擬器。NS2由OTc1語(yǔ)言、網(wǎng)絡(luò)模塊、調(diào)度模塊和網(wǎng)絡(luò)仿真四個(gè)部分組成。OTc1語(yǔ)言和c++分層結(jié)構(gòu)是NS2的特征;網(wǎng)絡(luò)模塊是其主體部分,并具有可擴(kuò)展性;調(diào)度模塊是總控模塊,控制仿真的進(jìn)程;網(wǎng)絡(luò)仿真則實(shí)現(xiàn)特定功能的網(wǎng)絡(luò)仿真。NS2網(wǎng)絡(luò)仿真是按照網(wǎng)絡(luò)協(xié)議分層模型來(lái)實(shí)現(xiàn)的,由低到高依次為:離散事件調(diào)度、網(wǎng)絡(luò)拓?fù)?結(jié)點(diǎn)、鏈路)、路由、傳輸層和應(yīng)用層。NS2中建立了一些Node、Agent等類(lèi),通過(guò)這些類(lèi)來(lái)仿真網(wǎng)絡(luò)層、傳輸層和應(yīng)用層實(shí)體。
1、PlM仿真系統(tǒng)模型
圖1所示基類(lèi)TclObject是NS2所有編譯類(lèi)的基類(lèi),它的子類(lèi)NsObject是所有網(wǎng)絡(luò)組件的基礎(chǔ),其主要任務(wù)是處理數(shù)據(jù)包(Packet),它的子類(lèi)包括一個(gè)分類(lèi)器(Classfier),此分類(lèi)器包括組播地址分類(lèi)器McaslClassfier,完成組播地址分類(lèi)的初始化工作和基本的組播路由功能,預(yù)留join-group()和leave-group()接口。它下面的繼承類(lèi)完成各個(gè)路由協(xié)議的路由計(jì)算功能,路由計(jì)算類(lèi)用Tcl腳本語(yǔ)言編寫(xiě)。其中的SSMcast和SSMeaslcomp是筆者添加的新類(lèi),目的是使NS2能夠支持PIM-SSM協(xié)議的仿真。
圖1 部分組播類(lèi)結(jié)構(gòu)
2.PIM-SSM協(xié)議擴(kuò)展
由于NS2不提供對(duì)SSM模型的仿真支持,為了能實(shí)現(xiàn)對(duì)SSM協(xié)議的應(yīng)用仿真,通過(guò)修改NS2,添加對(duì)SSM協(xié)議的支持。
利用擴(kuò)展集中式組播中的路由計(jì)算單元(CtrComp)來(lái)支持SSM組播路由計(jì)算,同時(shí)要使節(jié)點(diǎn)支持(S,G)方式的SSM組播加入方式,這僅限于擴(kuò)展NS2的Otcl腳本,主要方法如下:
(1)增加兩個(gè)擴(kuò)展名為tcl的SSM類(lèi)和SSMComp類(lèi),代碼如下。
if{$mproto==”CtrMcast”}
{set MrtHandle_[new CtrMcastComp $self]}
if{$mproto=="SSM"}
{set MrtHandle_new SSMComp $self]}
(2)修改ns-mcast.tcl文件中的源代碼,該文件功能是建立由Simulator類(lèi)派生出來(lái)的層類(lèi),該類(lèi)描述了用戶(hù)運(yùn)行組播仿真所需的特定命令。其中的“mrtproto”函數(shù)的主要功能是通過(guò)創(chuàng)建相應(yīng)的組播對(duì)象來(lái)說(shuō)明在仿真過(guò)程中采用的組播協(xié)議類(lèi)型。隨后可以利用tcl腳本命令來(lái)配置組播協(xié)議。具體命令為:set mproto SSM和sel mrthandle [$ns mrtproto $mproto]。
(3)修改ns-packet.tcl,在foreach proc{…}中加入SSMcast,激活分組頭。
(4)在tcl/lib/ns-lib.tcl中加入SSMcast.tcl和SSMcastcomp.tcl,重新編譯生成新的ns_tcl.cc,從而將tcl/lib/ns-lib.tcl中所聲明的所有Tcl腳本通過(guò)EmbeddedTcl對(duì)象封裝,以便在NS2開(kāi)始運(yùn)行時(shí)載入。
(5)修改Makefile.in加入tcl/ssm-mcast/SSM cast.tcl\和tcl/ssm-mcast/SSMcastcomp.tcl \,使擴(kuò)展的Otcl腳本放在ns/tcl/目錄下。
3、仿真數(shù)據(jù)處理
仿真模擬結(jié)束后,會(huì)產(chǎn)生兩個(gè)文件,一個(gè)是以.nam為后綴的文件,這是給nam用的,用來(lái)把模擬的過(guò)程用可視化的方式表現(xiàn)出來(lái);另一個(gè)是以.tr為后綴的文件,這個(gè)文件記錄了模擬過(guò)程中的所有事件。
用awk語(yǔ)言編寫(xiě)代碼從龐大的.tr文件中提取需要的性能參數(shù),包括端到端延時(shí)、丟包特性等,同時(shí)在NS2中直接新增模組來(lái)測(cè)量以用戶(hù)數(shù)據(jù)報(bào)(UDP)為傳輸協(xié)議的OWD(0ne Way Delay)、IPDV(IP Delay Vatiance,或是Jitter)和Packet Loss。方法如下:①新增sendtime_欄,修改文件common/packet.h;②tools目錄內(nèi)新增measure.h和measure.cc;③修改ns-defaul.tcl,定義Agent/measure中的缺省值;④將tools/measure.o加入Makefile中OBJ_CC內(nèi),再重新用make命令編譯。
三、仿真結(jié)果分析
定義一個(gè)13個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò),拓?fù)浣Y(jié)構(gòu)如圖2所示。采用UDP傳輸,在UDP上綁定流量發(fā)生器虛擬發(fā)送數(shù)據(jù)包。建立兩個(gè)源(節(jié)點(diǎn)3、9),五個(gè)接收節(jié)點(diǎn)(節(jié)點(diǎn)1,4,5,1O,11),接收節(jié)點(diǎn)加入組播組,源向組內(nèi)的節(jié)點(diǎn)發(fā)送數(shù)據(jù)包,其中每個(gè)接收節(jié)點(diǎn)和源都要實(shí)現(xiàn)通信。應(yīng)用PIM-SM協(xié)議時(shí)指定節(jié)點(diǎn)O為RP(中心點(diǎn))。對(duì)PIM-SM、PIM-DM、PIM-SSM三個(gè)協(xié)議進(jìn)行分析比較。
圖2 仿真網(wǎng)絡(luò)拓?fù)?/p>
1.基于恒定比特率仿真分析
在這部分仿真中,設(shè)置節(jié)點(diǎn)9以恒定比特率(CBR)發(fā)出組播數(shù)據(jù)包。數(shù)據(jù)包大小為1000 byte,發(fā)送速率為1024 kbit/s,發(fā)送的目的地址為組地址。各節(jié)點(diǎn)問(wèn)采用全雙工鏈路傳輸,帶寬是1.5 Mbit/s,9-4-2鏈路的延時(shí)為30 ms,采用先來(lái)先服務(wù)(FCFS)的原則,其余鏈路延時(shí)為10 ms。針列節(jié)點(diǎn)9發(fā)出的組播數(shù)據(jù),各鏈路丟包率如表1。
表1 鏈路丟包率(源:節(jié)點(diǎn)9)
鏈路丟包主要發(fā)生在0-l、2-5、2-6鏈路。PIM-SM協(xié)議采用RPT-SPT結(jié)合的策略,在把數(shù)據(jù)單播到中心點(diǎn)過(guò)程中基本上沒(méi)有包丟失的情況,這條鏈路的路由器不用維護(hù)很多的路由信息。而當(dāng)轉(zhuǎn)換成SPT時(shí),不通過(guò)中心點(diǎn)向接收節(jié)點(diǎn)轉(zhuǎn)發(fā)數(shù)據(jù),即建立9-4-2-6-10這種最短路徑,出現(xiàn)了丟包現(xiàn)象,這是由于SPT需要路南器維護(hù)更多的信息。從0節(jié)點(diǎn)傳到節(jié)點(diǎn)2的鏈路數(shù)據(jù)包很少,這主要是由于應(yīng)用PIM-SM協(xié)議的組播樹(shù)建立以后,從源到中心點(diǎn)的單播數(shù)據(jù)包,會(huì)在與接收節(jié)點(diǎn)最近的組播樹(shù)路由器轉(zhuǎn)發(fā),而不用到中心點(diǎn)再到共享樹(shù)發(fā)送,即這些包在節(jié)點(diǎn)2轉(zhuǎn)發(fā)。司以看出,PIM-SSM協(xié)泌和PIM-DM協(xié)議都應(yīng)用SPT樹(shù),其丟包特性在對(duì)應(yīng)鏈路上是基本一致的。
2.可變比特率仿真分析
為了更好地比較協(xié)議性能,將節(jié)點(diǎn)9發(fā)送組播數(shù)據(jù)的速率設(shè)為可變,范圍從864~992 kbit/s,間隔為32 kbit/s,網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)不變?紤]鏈路總的丟包率,即所有鏈路總丟包數(shù)占應(yīng)收包數(shù)的比例,仿真結(jié)果見(jiàn)表2。
表2 不同比特率丟包率
表2數(shù)據(jù)用圖表示如圖3所示。從圖3可見(jiàn),就三個(gè)協(xié)議而言,PIM-SM協(xié)議的性能較優(yōu),其包的丟失率一直低于另外兩個(gè)協(xié)議。
圖3 不同發(fā)送速率的丟包示意
進(jìn)一步統(tǒng)計(jì)了PIM-SM和PIM-SSM協(xié)議下的兩個(gè)源節(jié)點(diǎn)至節(jié)點(diǎn)10的端到端延時(shí)特性,結(jié)果如圖4所示。
圖4 端到端延時(shí)特性
在O.5秒附近,由于源節(jié)點(diǎn)9開(kāi)始發(fā)送數(shù)據(jù)。兩個(gè)協(xié)議下至源點(diǎn)3的延時(shí)在這以后明顯遞增。由于PIM-SM要利用共享樹(shù)轉(zhuǎn)發(fā),即單播到中心點(diǎn)0,再經(jīng)過(guò)0轉(zhuǎn)發(fā)到接收點(diǎn),延遲要大一些。而PIM-SSM協(xié)議要建立SPT樹(shù),并不需要通過(guò)中心點(diǎn)進(jìn)行轉(zhuǎn)發(fā),而直接在端到端間建立最短路徑樹(shù)。
四、結(jié)語(yǔ)
本文利用NS2仿真軟件模擬分析了常用的IPv6組播路由協(xié)議,仿真結(jié)果與理論預(yù)期一致。從丟包率來(lái)看,PIM-SM協(xié)議具有優(yōu)勢(shì);從實(shí)現(xiàn)原理來(lái)看,PIM-SSM協(xié)議實(shí)現(xiàn)起來(lái)較PIM-SM協(xié)議簡(jiǎn)單,能夠避免中心點(diǎn)的擁塞,但在發(fā)送節(jié)點(diǎn)較多的情況下會(huì)增大鏈路的丟包率;在延時(shí)特性方面,由于PIM-SM協(xié)議需要涉及RPT,有一個(gè)階段不使用最短路徑發(fā)送信息,這就使鏈路的延時(shí)比PIM-DM和PIM-SSM協(xié)議要長(zhǎng),即在減少路由信息并降低鏈路丟包率的同時(shí)增加了鏈路延時(shí)。
作者:周金和 鄭飛 孫暉 來(lái)源:泰爾網(wǎng)