李光明
(西安政治學(xué)院,陜西 西安710068)
組播(Multicasting),是一種讓數(shù)據(jù)從一個成員送出,然后復(fù)制給其他多個成員的技術(shù)。采用這種技術(shù),可有效地節(jié)省帶寬,控制網(wǎng)絡(luò)流量,減輕服務(wù)器的負(fù)荷、降低網(wǎng)絡(luò)負(fù)載,避免資源的無謂浪費,因此在實時數(shù)據(jù)傳送、多媒體會議、數(shù)據(jù)拷貝等諸多方面都有廣泛的應(yīng)用。
SSM是指定組播源的組播技術(shù),SSM和IGMP V3相結(jié)合,能夠在組播源和組播數(shù)據(jù)接收者之間直接建立最短路徑樹,不但效率高,而且簡化了組播地址分配。但是在Windows 2000下,沒有提供對IGMP V3協(xié)議的支持,本文主要介紹IGMP V3協(xié)議及在2000系統(tǒng)下實現(xiàn)IGMP V3協(xié)議的方法。
通過和單播以及廣播的數(shù)據(jù)傳輸方式的比較,可以得到組播中最關(guān)鍵的兩部分:組的管理和維護以及組播報文的路由。
任意源組播(ASM)是RFC1112定義的組播模型。一個IP報文被傳送到一個“主機組”,這組主機(或路由器)被一個IP目的地址(224.0.0.0到239.255.255.255)指定。終端主機可以在任何時間加入或離開該組,并且對他們的所在地和數(shù)量沒有限制。
這個模型支持任意多個發(fā)送者的組播,即任意一個終端主機都可以發(fā)送數(shù)據(jù)給一個主機組,即使它可能不是那個組的成員。
特定源組播(SSM)是中定義的組播服務(wù)模型。組播源可以發(fā)送一個IP報文給SSM目的地址G,接收者可以加入通道(S,G)來接收該報文。SSM提供給主機應(yīng)用程序一個“通道”抽象,每個通道擁有一個源和多個接收者。
IGMP全稱為Internet組管理協(xié)議(Internet Group Management Protocol),主要被IPV4系統(tǒng)用于向鄰接的多播路由器報告它們的組成員關(guān)系。到目前為止,IGMP有三個版本:IGMP V1(由RFC1112定義)、IGMP V2(由 FRC2236定義)和IGMP V3(由RFC3376定義)。目前應(yīng)用最多的是版本2。
IGMP V1是第1個被廣泛使用的版本,也是第1個成為因特網(wǎng)標(biāo)準(zhǔn)的版本。在該協(xié)議中,主機可以加入組播組,但是沒有離開信息(Leave Messages)。路由器使用基于超時的機制去發(fā)現(xiàn)其成員不關(guān)注的組。
IGMP V2增加了對“低離開延遲”的支持,允許迅速向路由協(xié)議報告組成員終止情況,這對高帶寬組播組或易變型組播組成員而言是非常重要的。
IGMP V3增加了對“源過濾”的支持,允許主機指定它要接收通信流量的主機對象。來自網(wǎng)絡(luò)中其它主機的流量是被隔離的。IGMP V3也支持主機阻止那些來自于非要求的主機發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包。
在IGMP V3中主要關(guān)注與IGMP V3有關(guān)的兩種IGMP消息:查詢消息(Membership Query)和V3成員報告消息(Version 3 Membership Report),同時還要支持其他三類IGMP消息,如表1。
表1 IGMP V3支持的消息
下面主要說明查詢消息和V3成員報告消息。
成員關(guān)系查詢消息由IP多播路由器發(fā)出,用于查詢鄰接接口的多播接收狀態(tài),查詢具有如下的格式(見表2):
表2 成員關(guān)系查詢消息格式
(1)Max Rsp Code(最大響應(yīng)代碼)
該字段指定在發(fā)送一個響應(yīng)報告之前所允許的最大時間。其單位是1/10 s。
(2)Check Sum
校驗和是對整個IGMP數(shù)據(jù)報以16位為一段進行取反求和。
(3)Group Address
當(dāng)發(fā)送一個普通查詢的時候,組地址字段必須被置0。在發(fā)送一個指定組查詢或者發(fā)送一個指定組和源的查詢時,必須被設(shè)置成要被查詢的組地址。
(4)Resv(保留)
該字段在傳輸時必須被置0,接收時忽略。
(5)S(禁止路由處理)
該字段被置成1時,表示任何接收路由器禁止更新它們在收到查詢時要更新的那些定時器。但它不禁止查詢者選舉或者普通的在路由器上執(zhí)行的主機端的查詢處理。
(6)QRV(查詢者的健壯變量)
該字段非0時作為[健壯變量]的值;如果為0,則使用缺省的健壯性變量值,或者靜態(tài)配置值。
(7)QQIC(查詢者的查詢間隔代碼)
查詢者的查詢間隔代碼字段指定查詢者使用的[查詢間隔],以秒為單位表示。
(8)Number of Source[N]
表示該查詢中存在多少個源地址。在普通查詢或指定組查詢中這個值是0,在指定組和源的查詢中,這個值為非0值。
(9)Source Address[n]IP單播地址數(shù)組。
第3版成員關(guān)系報告由IP系統(tǒng)發(fā)出,用于向鄰接路由器報告當(dāng)前的多播接收狀態(tài),或者修改它們的接口的多播接收狀態(tài)。報告具有以下的格式(見表3):
表3 第3版成員關(guān)系報告消息格式
(1)Reserved
該字段在傳輸時被設(shè)為0,接收時忽略。
(2)Check Sum
同3.1節(jié)相關(guān)內(nèi)容。
(3)Number of Group Records(M)
標(biāo)明在報告中存在多少個組記錄。
(4)Group Record m
該字段標(biāo)明在報告發(fā)送接口上的某一個多播組的成員關(guān)系。每一個組記錄字段是一整塊數(shù)據(jù)(見表4)。
表4 組記錄字段
(1)Record Type
組紀(jì)錄類型可以是下列值:
(2)Aux Data Len
輔助數(shù)據(jù)長度含有在組記錄中的輔助數(shù)據(jù)的實際長度,其單位是32bit字。
(3)Number of Sources
源數(shù)量(N)字段標(biāo)明在組記錄中存在多少源地址。
(4)Multicast Address
多播地址字段標(biāo)明該組記錄從屬的多播IP地址。
(5)Source Address
源地址[i]字段是一個數(shù)組,含有n個單播地址。
(6)Auxiliary Data
目前的IGMP V3協(xié)議沒有定義任何輔助數(shù)據(jù)。
Windows 2000雖然沒有提供對IGMP V3協(xié)議的支持,但是,該系統(tǒng)卻支持原始套接字(Raw Socket)。利用“原始套接字”,可實現(xiàn)對IP/ICMP/IGMP的訪問以及構(gòu)造特殊IP報文。因此利用原始套接字截獲路由器的組成員查詢報文,按照IGMP V3協(xié)議格式加工組成員報告消息報文,以此欺騙路由器,實現(xiàn)對IGMP V3協(xié)議的支持。
在需要IGMP V3協(xié)議支持的網(wǎng)絡(luò)環(huán)境中,設(shè)計實現(xiàn)一個IGMP的補丁程序(流程見圖1)。使用原始套接字綁定Socket,監(jiān)聽路由器的成員關(guān)系查詢消息報文,當(dāng)收到查詢時,根據(jù)本地接收組以及已知的源地址,按照IGMP V3組成員關(guān)系報告消息報文的格式,模擬組織加工并向路由器發(fā)送IGMP V3協(xié)議的成員關(guān)系報告消息報文,以實現(xiàn)對路由器的欺騙,從而實現(xiàn)對SSM協(xié)議的支持。
圖1 主要程序流程圖
開發(fā)的測試程序,在Windows2000系統(tǒng)下進行了測試。測試結(jié)果說明,該測試程序在 Windows 2000系統(tǒng)下運行正常,功能正確,可以滿足指定源組播對終端設(shè)備要求。
在組播技術(shù)應(yīng)用中,SSM網(wǎng)絡(luò)相對于傳統(tǒng)的ASM網(wǎng)絡(luò),具有非常突出的優(yōu)越性,系統(tǒng)網(wǎng)絡(luò)中不再需要匯聚點,在已知組播源的情況下,不但效率高,而且簡化了組播地址分配。SSM技術(shù)正在不斷發(fā)展和成熟,必將在實時數(shù)據(jù)傳輸?shù)确矫娴玫皆絹碓綇V泛的應(yīng)用。
但SSM網(wǎng)絡(luò)中的終端設(shè)備和路由器離不開IGMP V3協(xié)議的支持。本文給出了在Windows 2000下實現(xiàn)IGMP V3協(xié)議的方法,為不支持IGMP V3協(xié)議的終端設(shè)備實現(xiàn)SSM提供了一個很好的解決方案。
[1]SSM 技術(shù)白皮書[Z].華為技術(shù)有限公司,2007.
[2]沈富可.特定源組播協(xié)議研究[J].西北大學(xué)學(xué)報,2004,34(10):11-12.
[3]羅軍舟.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù)[M].北京:清華大學(xué)出版社,2004.