摘 要: 提出了一種在MPLS網(wǎng)絡中構建多播樹的新方法——逆向構建算法。用數(shù)值分析和仿真方法證明了逆向構建多播樹不僅可以解決MPLS多播標簽數(shù)不足的問題,,還可以有效地減小多播轉(zhuǎn)發(fā)表的體積,,提高帶寬利用率,。
關鍵詞: MPLS 聚集 多播 服務質(zhì)量
1多播發(fā)展簡介
隨著Internet的發(fā)展,視頻廣播、視頻會議等應用迅速增加。其中大部分應用需要通過一對多或多對多的通信方式來完成,,并且在傳輸數(shù)據(jù)的同時,需要服務質(zhì)量" title="服務質(zhì)量">服務質(zhì)量QoS(Quality of Service)保障,。因此,,多播技術的應用和QoS的支持成為網(wǎng)絡應用拓展的重要因素。
多協(xié)議標簽交換MPLS(Multi Protocol Label Swit-ching)[1]作為IETF的一個標準,,很有可能成為下一代主干網(wǎng)絡的主要傳輸方式,。它對帶寬控制和QoS保障提供了很好的支持。整合多播與MPLS不僅可以加強網(wǎng)絡性能的發(fā)揮,,而且有利于多播的拓展和應用,。
本文提出了使用逆向多播樹算法在MPLS上構建多播應用的方法,使用定源多播SSM(Source Specific Multicast)協(xié)議構建多播樹,,即從葉子節(jié)點到根節(jié)點逆向構建多播樹,。
2 MPLS與多播相結合的問題與解決
IETF提出了關于如何在MPLS域內(nèi)構建多播的整體框架[2],。將所有標準多播協(xié)議以MPLS的方式進行了分析,,并且考慮了MPLS下多播的特性,如聚集,、洪泛和剪枝等,。指出要在MPLS下實現(xiàn)多播就意味著實現(xiàn)一對多的標簽交換路徑LSP(Label Switched Path)或者多對多的LSP,而目前的MPLS只提供了一對一的LSP,。
解決方法之一是使用映射方法,,將一對多的LSP映射為多組一對一的LSP。使用該方法在MPLS域內(nèi)構建稀疏模式多播協(xié)議PIM-SM" title="PIM-SM">PIM-SM(Protocol Independent Multicast-Sparse Mode)[3],,需要使用加入/剪枝信息構建LSP多播樹,。將邊界路由器LER(Label Edged Router)作為多播組的集合點RP(Rendezvous Point),當入口LER接收到加入請求后,,將請求轉(zhuǎn)發(fā)至RP,。RP在多播轉(zhuǎn)發(fā)表MFT(Multicast Forwarding Table)內(nèi)加入記錄,新記錄為指向新加入LER的LSP,。標簽交換路由LSR器(Label Switched Router)只需要按照標簽進行轉(zhuǎn)發(fā),,不需要保存多播組狀態(tài)。但是,,該方法存在嚴重的隱患:當有大量的活動組存在于域內(nèi)時,,很有可能導致標簽不足,;而且,MFT的體積會隨著多播組的增加不斷增大,。隨之而來的是路由器內(nèi)存消耗的迅速上升,、查表時間的延長和轉(zhuǎn)發(fā)速度的下降。
為減少路由器內(nèi)保存的多" title="的多">的多播組狀態(tài)數(shù)和MFT的體積,,提出了聚集多播樹(Aggregated Multicast)算法,。該算法并不需要為每個多播組建立相應的多播樹,而是用一棵聚集樹支持多個多播組,。文獻[4]以此方法為基礎構建MPLS上可靠多播應用,,即當有鏈路" title="鏈路">鏈路斷開時,該聚集樹失效,,由后備鏈路重新組合生成新的聚集樹,,以提高多播傳遞的可靠性。但是某個多播組很可能與聚集樹并不完全匹配,,可能發(fā)生多播信息被傳送到一些節(jié)點,,而這些節(jié)點并非該多播組的成員,從而造成帶寬的浪費,。
文獻[5]中通過第2層的支持實現(xiàn)了MPLS廣播機制,,并對其進行了擴展,使其在MPLS域內(nèi)支持稠密模式(Dense Mode)的多播通信,。但稠密模式本身就會造成帶寬的浪費,。
3 逆向多播樹構建算法
聚集樹算法會在部分枝節(jié)點處產(chǎn)生帶寬的浪費,PIM-SM的實施會消耗過多的資源,。于是本文采用了仿SSM多播路由協(xié)議的方法,,通過逆向構建多播樹在MPLS域內(nèi)實施多播。
3.1 通過質(zhì)數(shù)法則聚集標簽
為實現(xiàn)多播信息在路由器內(nèi)的復制轉(zhuǎn)發(fā),,對每個路由器添加多播轉(zhuǎn)發(fā)表MFT,。每個表中包含該路由器的接口號IFID(Interface ID)以及通過該接口轉(zhuǎn)發(fā)的多播組的聚集標簽號AMID(Aggregated Multicast Group ID)。這里使用了標簽聚集算法,,使MFT的體積不會隨著多播組的增加而變大,,一直保持常量,其數(shù)目為該路由器的接口數(shù),。為了使一個聚集標簽號代表多個多播組,,為每個多播組分配一個組標簽號GID(Group ID),并且要求該標簽號必須為質(zhì)數(shù),。把從同一個接口轉(zhuǎn)發(fā)的多播組標簽號的乘積作為該接口的AMID,。
公式1:
設有質(zhì)數(shù)GID1,GID2,GID3,,GID4,。
乘積AMID1= GID1*GID2*GID4,必不可被GID3整除,,必可被GID1,、GID2、GID4中任意一個數(shù)整除,,這是由質(zhì)數(shù)本身的特點決定的,。
因此,以組GID能否整除聚集標簽號AMID來判斷是否需要向接口發(fā)送來自于多播組GID的多播信息,。以樹形結構表示某MPLS域內(nèi)的多播拓撲結構,,如圖1所示。多播組G1,、G2,、G3的多播源主機通過LSR1連接到MPLS域,LSR3連接著多播組G1和G3的組成員,,LSR4連接著多播組G1和G2的組成員,。
假定多播組G1、G2,、G3都已經(jīng)分配了多播組標簽號GID,,分別為質(zhì)數(shù)2、3,、5,,則如圖1中所示,可得到LSR2內(nèi)MFT表,,如表1所示,。
?
3.2 逆向構建多播樹
多播源發(fā)送建立信息至相連的LER,,該LER為其分配一個組標簽GID,,LER內(nèi)部保存GLT(Group Label Table)表。表內(nèi)包括:多播源S,、多播組G,、多播組在該MPLS域內(nèi)的組標志號GID,并保證S,、G,、GID在該MPLS域內(nèi)一一對應。當LER為某多播組分配好GID后,,即通過相連的LER廣播該GID,,防止相同的GID被分配給不同的多播組。
多播組成員發(fā)送加入請求、申請加入多播組時,,請求經(jīng)過的從葉子節(jié)點到根節(jié)點的路徑就成為多播樹的一部分,。多播源將按照該路徑自上而下發(fā)送多播信息。因此,,新成員加入多播組的過程即為樹枝節(jié)點內(nèi)MFT建立的過程,,亦為多播樹建立的過程。
(1)加入多插組,。逆向構建多播樹算法,,類似于SSM協(xié)議。組成員發(fā)送的加入請求到達LER后,,LER分析該數(shù)據(jù)內(nèi)的多播組地址,,然后查找LER內(nèi)部的GLT表,找到該多播組的源地址S,,按照指向該地址的LSP把數(shù)據(jù)包發(fā)往該多播樹的根節(jié)點——多播源,。LSR從接口i接收到加入請求后,從數(shù)據(jù)包中提取組信息GID,,然后在MFT中對該接口i對應的AMID進行檢查和更新:
If(mod(AMID[i],,GID)!=0))
AMID[i]=AMID[i]*GID;
如果GID可以整除AMID[i],,則說明該接口會將GID代表的多播組信息從該接口轉(zhuǎn)發(fā)出去,;否則,更新該AMID[i],,與新GID作乘法運算,。
(2)多播數(shù)據(jù)包轉(zhuǎn)發(fā)。MPLS網(wǎng)絡中,,單播包和多播包被賦予不同的標簽號,。當LER收到多播源發(fā)送的數(shù)據(jù)包后,即查找GLT表,,將對應的GID壓入數(shù)據(jù)包,。然后,采取與LSR相同的操作——查找MFT,,判斷該從哪些接口向外發(fā)送該包,。方法如下:
/*n為路由器接口數(shù),從0到n-2為n-1個接口(除去接收多播包的接口)*/
for(int i=0,;i<n-1,;i++) /*當該接口的AMID非默認值時,AMID默認值為1*/
if(AMID[i]!=1)
if(mod(AMID[i],,GID)==0)
Send(Packet,,IFID[i]),;
參照公式1,由于所有GID為質(zhì)數(shù),,AMID為若干質(zhì)數(shù)的乘積,,所以AMID一定不會被其他質(zhì)數(shù)整除。當AMID可以被GID整除時,,該AMID對應的接口一定為該GID所屬多播組的多播數(shù)據(jù)經(jīng)過的接口,。
如圖1所示,當LSR2從接口1接收到GID為5的多播包后,,即計算mod(10,,5)=0;mod(6,,5)=1,。因此,判斷該包應該從接口2傳至LSR3,。
(3)退出多播組,。當葉子節(jié)點想要退出多播組時,發(fā)送退出信息至與它連接的LER,。LER查找GLT,,將該多播組對應的標簽號GID壓入退出數(shù)據(jù)包,并沿LSP傳至該多播源,。當LSR接收到退出信息時,,會更新它的MFT。方法如下:
If(mod(AMID[i],,GID)==0)
AMID[i]=AMID[i]/GID,;
即使該接口對應的AMID[i]不再可以被GID整除。當一個LSR所有下游接口都返回退出信息時,,該節(jié)點向上游節(jié)點發(fā)送退出信息,。
4 數(shù)值分析與仿真
4.1 質(zhì)數(shù)耗盡問題
由于MPLS域內(nèi)采取20bit作為傳輸標記。所以,,質(zhì)數(shù)的數(shù)量是否會由于多播組的增加被用盡是個需要考慮的問題,。為此,計算100~1 000內(nèi)質(zhì)數(shù)分布,,得到的質(zhì)數(shù)分布圖如圖2所示,。可以看出質(zhì)數(shù)隨著自然數(shù)增大逐漸增多,。
4.2 逆向法與稀疏模式法比較
與MPLS上建立PIM-SM多播樹方法相比,逆向構建多播樹算法可以節(jié)省轉(zhuǎn)發(fā)表體積,,減少查詢時間,。假設一個LSR節(jié)點有n個接口,該域內(nèi)有m個多播組。則最壞的情況下,,轉(zhuǎn)發(fā)表體積為TableSize=n*m,,而逆向構建算法的MFT始終保持MFTableSize=n。逆向構建多播樹不需要RP節(jié)點的支持,。在MPLS域間,,多播組標簽號、多播組和多播源分別一一對應,。
4.3 逆向法與傳統(tǒng)聚集法比較
與聚集多播樹相比,,逆向構建多播樹不需要核心控制節(jié)點生成聚集樹,并且可以節(jié)省大量帶寬,。為更好地說明問題,,擴展網(wǎng)絡仿真工具jns[6]對聚集樹算法和逆向構建多播樹算法進行仿真。仿真拓撲結構如圖1所示,,通過收集LSR3和LSR4在兩種不同多播算法下的流量來比較帶寬使用情況,。
在聚集多播樹算法下,LSR2節(jié)點把G1,、G2,、G3多播組的信息分別傳遞給LSR3和LSR4。因此,,對于聚集樹算法,,通過節(jié)點LSR3與LSR4的流量是相同的。在逆向構建多播樹算法下,,LSR2只把G1和G2多播組的信息傳給LSR3,,把G1、G3多播組的信息傳給LSR4,。
兩種算法下LSR3與LSR4多播流量對比分別如圖3和圖4所示,。從圖3、圖4中可以看出,,在完成同樣的多播信息的傳遞與接收時,,使用逆向構建多播樹算法,經(jīng)過LSR3,、LSR4兩個節(jié)點的多播流量明顯低于聚集樹算法,。因此,使用逆向建立多播樹算法可以有效地節(jié)省帶寬,。
MPLS技術解決了傳統(tǒng)網(wǎng)絡中IP分組交換的問題,,能提供靈活的流量工程與虛擬專用網(wǎng)絡的業(yè)務。MPLS與多播的結合可以有效解決多播的擴展問題,。本文提出了逆向構建多播樹算法,,并且將其與傳統(tǒng)的MPLS上構建多播樹的方法進行比較,,證明了其實施的可行性和優(yōu)越性。
逆向構建多播樹在縮減轉(zhuǎn)發(fā)表的同時,,降低了潛在的帶寬浪費,,為MPLS域內(nèi)實現(xiàn)多播提供了一種新方法。但是,,其具體實現(xiàn)細節(jié),,如健壯性、安全性及利用MPLS的特性對多播應用提供QoS保障等問題還需要進一步研究,。
參考文獻
1 Rosen E,,Viswanathan A,Callon R.Multi-protocol label switching architecture[S].IETF RFC3031,,2001
2 Ooms D,,Sales B,Livens W et al.Overview of IP multicast in a multi-protocol label switching MPLS environment[S].IETF RFC 3353,,2002
3 Cho J Y,,Chung M Y.A simple method for implementing PIM to ATM based MPLS networks[C].In:Proceedings ninth IEEE international conference networks,2001
4 Cui J H,,F(xiàn)aloutsos M,,Gerla M.An architecture for scalable,efficient,,and fast fault-tolerant multicast provisioning[J].IEEE Network,,2004;18(2):26~34
5 Bag M M,,Samadian B S,,Nikoopour M et al.A case for dense-mode multicast support in MPLS[C].In:Computers and communications proceedings,ISCC 2004:1063~1070
6 Java Network Simulator.Open source project from sourceforge.http://jns.sourceforge.net/,,2002-07-16