王 宇,許生旺,曹彥軍,姚 君
(1.北京跟蹤與通信技術(shù)研究所,北京100094;2.中國電子科技集團(tuán)公司第五十四研究所,河北石家莊050081)
傳統(tǒng)以太網(wǎng)交換機(jī)接收到組播數(shù)據(jù)后直接進(jìn)行廣播處理。在任意源組播模型中,用戶加入組播組去接收所有發(fā)往該組的數(shù)據(jù),互聯(lián)網(wǎng)組管理協(xié)議(Internet Group Management Protocol,IGMP)偵聽和CGMP協(xié)議能有效地解決該模型的二層數(shù)據(jù)擴(kuò)散問題,用組MAC地址作為標(biāo)識(shí),通過一定的手段,在交換機(jī)內(nèi)容訪問存儲(chǔ)器(Content Access Memory,CAM)中相關(guān)的組播表項(xiàng)上增加或刪除主機(jī)所在端口號(hào),據(jù)此完成組播數(shù)據(jù)的轉(zhuǎn)發(fā)。
不同于任意源組播模型,SSM模型為訂閱用戶提供一種能夠在客戶端指定信源的傳輸服務(wù),用戶可以指定接收部分而非所有源發(fā)往某組播組的數(shù)據(jù),交換機(jī)需要同時(shí)使用組播源和組播組地址信息才能將SSM數(shù)據(jù)轉(zhuǎn)發(fā)至正確的訂閱用戶。而IGMP偵聽和CGMP協(xié)議都是僅使用組MAC地址信息來進(jìn)行組播數(shù)據(jù)的二層轉(zhuǎn)發(fā),故不適用于SSM模型。因特網(wǎng)工程任務(wù)組提出可以使用三層信息來進(jìn)行SSM數(shù)據(jù)的二層轉(zhuǎn)發(fā),但這對(duì)交換機(jī)的性能有很高的要求,無法在一般交換機(jī)上實(shí)現(xiàn)。
SSM數(shù)據(jù)在以太網(wǎng)交換機(jī)內(nèi)無法被精確地轉(zhuǎn)發(fā)到訂閱用戶,主要是由于存在以下問題。
在單播、廣播和任意源組播模型中,數(shù)據(jù)的接收者由數(shù)據(jù)包的目的地址確定,以太網(wǎng)交換機(jī)在進(jìn)行這些數(shù)據(jù)的轉(zhuǎn)發(fā)時(shí)根據(jù)其目的MAC地址查找CAM表項(xiàng)來獲取接收端口信息。在SSM模型中,數(shù)據(jù)的接收者由組播源地址和組播組地址共同確定,交換機(jī)無法利用CAM表項(xiàng)來完成數(shù)據(jù)轉(zhuǎn)發(fā),而有必要對(duì)SSM數(shù)據(jù)采取區(qū)別于其他數(shù)據(jù)的處理方式,這要求交換機(jī)能夠從進(jìn)入的數(shù)據(jù)中識(shí)別出SSM數(shù)據(jù)。而在以太網(wǎng)幀中,同一組播MAC地址對(duì)應(yīng)32個(gè)組播組,其中既有任意源組,又有指定源組,交換機(jī)無法依據(jù)二層信息對(duì)二者進(jìn)行區(qū)分,這就需要組播路由器在對(duì)發(fā)送給交換機(jī)的SSM數(shù)據(jù)進(jìn)行二層封裝時(shí)加入SSM數(shù)據(jù)標(biāo)識(shí)。
經(jīng)組播路由器轉(zhuǎn)發(fā)給交換機(jī)的數(shù)據(jù),其源MAC地址會(huì)被替換成與交換機(jī)相連的路由器端口的MAC地址,即會(huì)丟失二層信息中的數(shù)據(jù)源地址信息,而SSM數(shù)據(jù)的二層轉(zhuǎn)發(fā)需要用到組播源地址信息,這就需要組播路由器在發(fā)往交換機(jī)的SSM數(shù)據(jù)的二層信息中加入組播源標(biāo)識(shí)。
在交換機(jī)上實(shí)現(xiàn)SSM數(shù)據(jù)的二層轉(zhuǎn)發(fā)關(guān)鍵是要建立SSM轉(zhuǎn)發(fā)表,轉(zhuǎn)發(fā)表中需要包含組播數(shù)據(jù)的源標(biāo)識(shí)信息,而該標(biāo)識(shí)信息是由組播路由器添加的,這就需要組播路由器和交換機(jī)配合完成SSM轉(zhuǎn)發(fā)表的建立。
傳統(tǒng)以太網(wǎng)幀結(jié)構(gòu)中有源、目的MAC地址、協(xié)議類型、數(shù)據(jù)以及校驗(yàn)和字段,IEEE 802.1Q標(biāo)準(zhǔn)對(duì)以太網(wǎng)幀格式進(jìn)行了修改,在源MAC地址字段和協(xié)議類型字段之間加入4字節(jié)的802.1Q標(biāo)簽(Tag),包含4個(gè)字段,其含義如下:
Type:16比特,取值0x8100時(shí)表示802.1Q Tag幀;
PRI:3比特,表示幀的優(yōu)先級(jí),取值范圍為0~7,值越大優(yōu)先級(jí)越高;
CFI:1比特,取值為0表示以太網(wǎng)格式,取值為1表示非以太網(wǎng)格式;
VID:12比特,表示該幀所屬的VLAN號(hào)。
SSM數(shù)據(jù)標(biāo)識(shí)及源標(biāo)識(shí)的加入可以通過擴(kuò)展802.1Q Tag幀格式來實(shí)現(xiàn),采用擴(kuò)展的幀格式對(duì)SSM數(shù)據(jù)進(jìn)行封裝,其中 Tag中 Type字段取值0x8200,區(qū)別于其他數(shù)據(jù)幀的0x8100,用作SSM數(shù)據(jù)幀的標(biāo)識(shí),在VID字段后加入2字節(jié)的組播組源標(biāo)識(shí)(Group Source ID,GSID)字段來完成組播幀中源標(biāo)識(shí)的加入,該字段為16比特,可標(biāo)識(shí)65 536個(gè)不同組播源。非SSM數(shù)據(jù)幀的封裝格式不變。
SSM數(shù)據(jù)轉(zhuǎn)發(fā)表的建立需要用到組播路由器提供的SSM源標(biāo)識(shí)信息,因此建立SSM數(shù)據(jù)轉(zhuǎn)發(fā)表的協(xié)議應(yīng)該由組播路由器和以太網(wǎng)交換機(jī)來共同參與。在CGMP協(xié)議中,組播轉(zhuǎn)發(fā)表的建立是通過路由器直接發(fā)送命令到交換機(jī)來完成的,根據(jù)這一特點(diǎn),SSM轉(zhuǎn)發(fā)表的建立可以通過對(duì)CGMP協(xié)議進(jìn)行擴(kuò)展來實(shí)現(xiàn)。
對(duì)CGMP協(xié)議的擴(kuò)展主要是增加與SSM模型相關(guān)的命令報(bào)文。CGMP命令報(bào)文中有16比特的Reserved字段為保留字段,協(xié)議擴(kuò)展時(shí)可以將該字段用作GSID字段,不需更改報(bào)文格式,增加的命令報(bào)文如表1所示。

表1 擴(kuò)展CGMP協(xié)議新增報(bào)文
與原有CGMP報(bào)文相比,新增報(bào)文采用不同的類型值(原有消息的類型值為0和1),Reserved字段填入組播源標(biāo)識(shí)GSID,由于該字段只能填入一個(gè)組播源的標(biāo)識(shí),故在擴(kuò)展CGMP協(xié)議中,Count字段取為定值1,表明路由器每次只發(fā)送一個(gè)主機(jī)的SSM加入或離開命令。其他字段的含義不變。
組播路由器內(nèi)維護(hù)一張SSM源標(biāo)識(shí)表,表項(xiàng)內(nèi)容為<組播組 IP地址,組播源IP地址,組播源標(biāo)識(shí)>。組播路由器收到用戶發(fā)送的IGMP加入報(bào)告后,先根據(jù)組播組IP地址和組播源IP地址查找上述三元表,如果沒找到對(duì)應(yīng)表項(xiàng),則根據(jù)組播組IP地址和組播源IP地址生成組播源標(biāo)識(shí),并創(chuàng)建這個(gè)表項(xiàng)。組播源標(biāo)識(shí)的生成滿足2個(gè)條件:①組播源標(biāo)識(shí)是一個(gè)位于0~65 535之間的16比特的數(shù);②同一組播組對(duì)應(yīng)的不同組播源的標(biāo)識(shí)不能相同。組播路由器在發(fā)現(xiàn)/創(chuàng)建表項(xiàng)之后,根據(jù)表項(xiàng)內(nèi)容生成CGMP SSM成員加入報(bào)文發(fā)送給交換機(jī)。
組播路由器收到用戶發(fā)送的IGMP離開報(bào)告后,查找SSM源標(biāo)識(shí)表,根據(jù)表項(xiàng)內(nèi)容生成相應(yīng)的CGMP SSM成員離開報(bào)文發(fā)送給交換機(jī),同時(shí)進(jìn)行正常的IGMP查詢。如果所有接收用戶都離開了該指定源組,組播路由器從組播轉(zhuǎn)發(fā)表中刪除該指定源組,同時(shí)也從SSM源標(biāo)識(shí)表中刪除相應(yīng)的表項(xiàng)。
要完成SSM數(shù)據(jù)的轉(zhuǎn)發(fā),交換機(jī)內(nèi)部需要建立一張SSM轉(zhuǎn)發(fā)表,表項(xiàng)內(nèi)容為<組MAC地址(GMAC),GSID,輸出端口集(OPORTS)>,表項(xiàng)中的每個(gè)輸出端口對(duì)應(yīng)一個(gè)超時(shí)定時(shí)器,一旦定時(shí)器超時(shí),交換機(jī)自動(dòng)刪除該端口。為了完成SSM轉(zhuǎn)發(fā)表的建立和維護(hù),交換機(jī)內(nèi)部還需要維護(hù)一張SSM成員關(guān)系表<GMAC,GSID,交換機(jī)端口號(hào)(PORT),主機(jī)MAC地址集(HMACS)>,表項(xiàng)中的每個(gè)主機(jī)MAC地址對(duì)應(yīng)一個(gè)超時(shí)定時(shí)器,定時(shí)器超時(shí),則從HMACS中刪除該主機(jī)。
交換機(jī)收到CGMP SSM成員加入報(bào)文后,處理流程如圖1所示。

圖1 交換機(jī)對(duì)CGMP SSM成員加入報(bào)文處理流程
該處理流程具體步驟如下:
①搜索CAM表,查找與加入報(bào)文中USA字段相匹配的項(xiàng)獲取主機(jī)所在端口號(hào)PORT;
②搜索SSM成員關(guān)系表查找與GMAC、GSID和PORT相對(duì)應(yīng)的表項(xiàng);
③如果沒有找到表項(xiàng),交換機(jī)創(chuàng)建這個(gè)項(xiàng),并將主機(jī)MAC復(fù)制到HMACS,啟動(dòng)其定時(shí)器,同時(shí)修改相應(yīng)SSM轉(zhuǎn)發(fā)表,并啟動(dòng)端口對(duì)應(yīng)的定時(shí)器;
④如果找到成員關(guān)系表項(xiàng),但HMACS中沒有加入報(bào)文中的主機(jī)MAC,則將其復(fù)制到HMACS中,啟動(dòng)定時(shí)器,并更新相應(yīng)轉(zhuǎn)發(fā)表項(xiàng)中輸出端口的計(jì)時(shí)器;
⑤如果HMACS中存在該主機(jī)MAC,則更新該成員關(guān)系表項(xiàng)計(jì)時(shí)器,并更新相應(yīng)轉(zhuǎn)發(fā)表項(xiàng)的計(jì)時(shí)器。
上述步驟③中對(duì)SSM轉(zhuǎn)發(fā)表的修改,具體操作為:搜索SSM 轉(zhuǎn)發(fā)表,查找GMAC、GSID對(duì)應(yīng)的表項(xiàng),如果不存在該表項(xiàng),則創(chuàng)建這個(gè)表項(xiàng),然后將組播成員關(guān)系表中的端口號(hào)復(fù)制到先前發(fā)現(xiàn)或創(chuàng)建的轉(zhuǎn)發(fā)表項(xiàng)的OPORTS中。步驟④和步驟⑤中輸出端口計(jì)時(shí)器的更新操作為:搜索SSM轉(zhuǎn)發(fā)表,查找GMAC、GSID對(duì)應(yīng)的表項(xiàng),然后在表項(xiàng)的OPORTS中查找對(duì)應(yīng)的輸出端口,更新其計(jì)時(shí)器。
交換機(jī)收到CGMP SSM成員離開報(bào)文后,處理流程如圖2所示。

圖2 交換機(jī)對(duì)CGMP SSM成員離開報(bào)文處理流程
圖2所示的處理流程中具體步驟如下:
①搜索CAM表,查找與加入消息中USA字段相匹配的項(xiàng)獲取主機(jī)所在端口號(hào)PORT;
②搜索SSM成員關(guān)系表查找與GMAC、GSID、PORT相對(duì)應(yīng)的表項(xiàng);
③從表項(xiàng)中的HMACS中刪除該主機(jī)MAC;
④如果該表項(xiàng)中沒有其他主機(jī),刪除該表項(xiàng),并修改SSM轉(zhuǎn)發(fā)表的相應(yīng)表項(xiàng),否則不進(jìn)行其他操作。
步驟④中對(duì)SSM轉(zhuǎn)發(fā)表項(xiàng)修改具體操作為:搜索SSM 轉(zhuǎn)發(fā)表,查找GMAC、GSID對(duì)應(yīng)的表項(xiàng),從OPORTS集中刪除成員關(guān)系表項(xiàng)中的PORT,如果OPORTS中沒有其他PORT,刪除該轉(zhuǎn)發(fā)表項(xiàng)。
SSM數(shù)據(jù)的轉(zhuǎn)發(fā)包括在組播路由器內(nèi)的轉(zhuǎn)發(fā)和在以太網(wǎng)交換機(jī)內(nèi)的轉(zhuǎn)發(fā)2個(gè)部分。
組播路由器收到SSM數(shù)據(jù)后,首先查找組播轉(zhuǎn)發(fā)表,如果存在本地接收者,則根據(jù)組播組IP地址和組播源IP地址查找SSM源標(biāo)識(shí)表,獲取組播源標(biāo)識(shí)。組播路由器在進(jìn)行SSM數(shù)據(jù)組幀時(shí)采用擴(kuò)展802.1Q幀格式,在GSID字段中填入組播源標(biāo)識(shí),并設(shè)置Tag中的Type值為0x8200,然后將該數(shù)據(jù)幀從輸出端口發(fā)送至交換機(jī)。
在以太網(wǎng)交換機(jī)內(nèi),SSM數(shù)據(jù)的轉(zhuǎn)發(fā)需要用到GSID信息,來自路由端口的SSM數(shù)據(jù)中才擁有該標(biāo)識(shí),交換機(jī)需要從路由端口發(fā)送的組播數(shù)據(jù)中識(shí)別出SSM數(shù)據(jù)并根據(jù)SSM轉(zhuǎn)發(fā)表進(jìn)行轉(zhuǎn)發(fā)。具體處理流程為:首先判斷數(shù)據(jù)是否來自路由端口,對(duì)于非路由端口進(jìn)入的數(shù)據(jù),查找CAM表項(xiàng)進(jìn)行正常轉(zhuǎn)發(fā);對(duì)于路由端口進(jìn)入的數(shù)據(jù),如果其目的MAC地址前綴為0x01005E且Tag中的Type字段為0x8200則表明是SSM數(shù)據(jù),交換機(jī)按照SSM轉(zhuǎn)發(fā)表對(duì)其進(jìn)行轉(zhuǎn)發(fā),否則交換機(jī)查找CAM表項(xiàng)進(jìn)行正常數(shù)據(jù)轉(zhuǎn)發(fā)。
方法可行性驗(yàn)證采用OPNET Modeler 14.5軟件,該版本沒有開發(fā)針對(duì)SSM模型的組播進(jìn)程,仿真時(shí)首先根據(jù) RFC3367和 RFC4607進(jìn)行組播進(jìn)程建模,然后依據(jù)所提方法建立了擴(kuò)展CGMP的進(jìn)程模型。
仿真網(wǎng)絡(luò)環(huán)境如圖3所示,其中R1、R2為組播路由器,S1、S2為二層交換機(jī),H1、H2、H3和 H4為4臺(tái)主機(jī)。

圖3 可行性驗(yàn)證網(wǎng)絡(luò)拓?fù)?/p>
各主機(jī)的配置如表2所示。主機(jī)H3申請(qǐng)接收H1發(fā)往232.0.0.1的組播數(shù)據(jù),H4申請(qǐng)接收H2發(fā)往232.0.0.1的組播數(shù)據(jù)。路由器和交換機(jī)之間配置擴(kuò)展的CGMP協(xié)議,SSM數(shù)據(jù)的二層封裝采用擴(kuò)展的802.1Q幀格式。

表2 主機(jī)配置情況
仿真過程中對(duì)主機(jī)H3和H4的IP進(jìn)程模塊接收到的數(shù)據(jù)包進(jìn)行解封裝檢測(cè)發(fā)現(xiàn)接收情況如下:
①H3只接收到1.1.1.2發(fā)往232.0.0.1的組播數(shù)據(jù);
②H4只接收到1.1.1.3發(fā)往232.0.0.1的組播數(shù)據(jù)。
2個(gè)主機(jī)的接收情況與配置情況相符,仿真結(jié)果表明交換機(jī)可以準(zhǔn)確地將SSM數(shù)據(jù)轉(zhuǎn)發(fā)至接收用戶,驗(yàn)證了該方法的可行性。
針對(duì)SSM的二層轉(zhuǎn)發(fā)方法實(shí)現(xiàn)了在以太網(wǎng)交換機(jī)上對(duì)SSM數(shù)據(jù)的精確二層轉(zhuǎn)發(fā),交換機(jī)根據(jù)收到的新增CGMP命令報(bào)文建立SSM轉(zhuǎn)發(fā)表,在收到SSM數(shù)據(jù)后,根據(jù)SSM幀中的二層信息查找SSM轉(zhuǎn)發(fā)表完成轉(zhuǎn)發(fā)。在SSM轉(zhuǎn)發(fā)表的建立和數(shù)據(jù)轉(zhuǎn)發(fā)過程中都不需要CPU過多地參與,對(duì)交換機(jī)的性能沒有過高的要求,可在一般交換機(jī)上實(shí)現(xiàn)。
[1]RFC 4607.Source-Specific Multicast for IP[S].
[2]RFC3376.Internet Group Management Protocol,Version 3[S].
[3]馬東超,彭 達(dá),王立芊,等.以太網(wǎng)交換機(jī)的源指定組播方案[J].計(jì)算機(jī)工程,2009,35(17):106-120.
[4]巖 延,郭江濤.組播路由協(xié)議設(shè)計(jì)及應(yīng)用[M].北京:人民郵電出版社,2002.