李光明
(西安政治學院,陜西 西安710068)
組播(Multicasting),是一種讓數據從一個成員送出,然后復制給其他多個成員的技術。采用這種技術,可有效地節省帶寬,控制網絡流量,減輕服務器的負荷、降低網絡負載,避免資源的無謂浪費,因此在實時數據傳送、多媒體會議、數據拷貝等諸多方面都有廣泛的應用。
SSM是指定組播源的組播技術,SSM和IGMP V3相結合,能夠在組播源和組播數據接收者之間直接建立最短路徑樹,不但效率高,而且簡化了組播地址分配。但是在Windows 2000下,沒有提供對IGMP V3協議的支持,本文主要介紹IGMP V3協議及在2000系統下實現IGMP V3協議的方法。
通過和單播以及廣播的數據傳輸方式的比較,可以得到組播中最關鍵的兩部分:組的管理和維護以及組播報文的路由。
任意源組播(ASM)是RFC1112定義的組播模型。一個IP報文被傳送到一個“主機組”,這組主機(或路由器)被一個IP目的地址(224.0.0.0到239.255.255.255)指定。終端主機可以在任何時間加入或離開該組,并且對他們的所在地和數量沒有限制。
這個模型支持任意多個發送者的組播,即任意一個終端主機都可以發送數據給一個主機組,即使它可能不是那個組的成員。
特定源組播(SSM)是中定義的組播服務模型。組播源可以發送一個IP報文給SSM目的地址G,接收者可以加入通道(S,G)來接收該報文。SSM提供給主機應用程序一個“通道”抽象,每個通道擁有一個源和多個接收者。
IGMP全稱為Internet組管理協議(Internet Group Management Protocol),主要被IPV4系統用于向鄰接的多播路由器報告它們的組成員關系。到目前為止,IGMP有三個版本:IGMP V1(由RFC1112定義)、IGMP V2(由 FRC2236定義)和IGMP V3(由RFC3376定義)。目前應用最多的是版本2。
IGMP V1是第1個被廣泛使用的版本,也是第1個成為因特網標準的版本。在該協議中,主機可以加入組播組,但是沒有離開信息(Leave Messages)。路由器使用基于超時的機制去發現其成員不關注的組。
IGMP V2增加了對“低離開延遲”的支持,允許迅速向路由協議報告組成員終止情況,這對高帶寬組播組或易變型組播組成員而言是非常重要的。
IGMP V3增加了對“源過濾”的支持,允許主機指定它要接收通信流量的主機對象。來自網絡中其它主機的流量是被隔離的。IGMP V3也支持主機阻止那些來自于非要求的主機發送的網絡數據包。
在IGMP V3中主要關注與IGMP V3有關的兩種IGMP消息:查詢消息(Membership Query)和V3成員報告消息(Version 3 Membership Report),同時還要支持其他三類IGMP消息,如表1。

表1 IGMP V3支持的消息
下面主要說明查詢消息和V3成員報告消息。
成員關系查詢消息由IP多播路由器發出,用于查詢鄰接接口的多播接收狀態,查詢具有如下的格式(見表2):

表2 成員關系查詢消息格式
(1)Max Rsp Code(最大響應代碼)
該字段指定在發送一個響應報告之前所允許的最大時間。其單位是1/10 s。
(2)Check Sum
校驗和是對整個IGMP數據報以16位為一段進行取反求和。
(3)Group Address
當發送一個普通查詢的時候,組地址字段必須被置0。在發送一個指定組查詢或者發送一個指定組和源的查詢時,必須被設置成要被查詢的組地址。
(4)Resv(保留)
該字段在傳輸時必須被置0,接收時忽略。
(5)S(禁止路由處理)
該字段被置成1時,表示任何接收路由器禁止更新它們在收到查詢時要更新的那些定時器。但它不禁止查詢者選舉或者普通的在路由器上執行的主機端的查詢處理。
(6)QRV(查詢者的健壯變量)
該字段非0時作為[健壯變量]的值;如果為0,則使用缺省的健壯性變量值,或者靜態配置值。
(7)QQIC(查詢者的查詢間隔代碼)
查詢者的查詢間隔代碼字段指定查詢者使用的[查詢間隔],以秒為單位表示。
(8)Number of Source[N]
表示該查詢中存在多少個源地址。在普通查詢或指定組查詢中這個值是0,在指定組和源的查詢中,這個值為非0值。
(9)Source Address[n]IP單播地址數組。
第3版成員關系報告由IP系統發出,用于向鄰接路由器報告當前的多播接收狀態,或者修改它們的接口的多播接收狀態。報告具有以下的格式(見表3):

表3 第3版成員關系報告消息格式
(1)Reserved
該字段在傳輸時被設為0,接收時忽略。
(2)Check Sum
同3.1節相關內容。
(3)Number of Group Records(M)
標明在報告中存在多少個組記錄。
(4)Group Record m
該字段標明在報告發送接口上的某一個多播組的成員關系。每一個組記錄字段是一整塊數據(見表4)。

表4 組記錄字段
(1)Record Type
組紀錄類型可以是下列值:

(2)Aux Data Len
輔助數據長度含有在組記錄中的輔助數據的實際長度,其單位是32bit字。
(3)Number of Sources
源數量(N)字段標明在組記錄中存在多少源地址。
(4)Multicast Address
多播地址字段標明該組記錄從屬的多播IP地址。
(5)Source Address
源地址[i]字段是一個數組,含有n個單播地址。
(6)Auxiliary Data
目前的IGMP V3協議沒有定義任何輔助數據。
Windows 2000雖然沒有提供對IGMP V3協議的支持,但是,該系統卻支持原始套接字(Raw Socket)。利用“原始套接字”,可實現對IP/ICMP/IGMP的訪問以及構造特殊IP報文。因此利用原始套接字截獲路由器的組成員查詢報文,按照IGMP V3協議格式加工組成員報告消息報文,以此欺騙路由器,實現對IGMP V3協議的支持。
在需要IGMP V3協議支持的網絡環境中,設計實現一個IGMP的補丁程序(流程見圖1)。使用原始套接字綁定Socket,監聽路由器的成員關系查詢消息報文,當收到查詢時,根據本地接收組以及已知的源地址,按照IGMP V3組成員關系報告消息報文的格式,模擬組織加工并向路由器發送IGMP V3協議的成員關系報告消息報文,以實現對路由器的欺騙,從而實現對SSM協議的支持。

圖1 主要程序流程圖
開發的測試程序,在Windows2000系統下進行了測試。測試結果說明,該測試程序在 Windows 2000系統下運行正常,功能正確,可以滿足指定源組播對終端設備要求。
在組播技術應用中,SSM網絡相對于傳統的ASM網絡,具有非常突出的優越性,系統網絡中不再需要匯聚點,在已知組播源的情況下,不但效率高,而且簡化了組播地址分配。SSM技術正在不斷發展和成熟,必將在實時數據傳輸等方面得到越來越廣泛的應用。
但SSM網絡中的終端設備和路由器離不開IGMP V3協議的支持。本文給出了在Windows 2000下實現IGMP V3協議的方法,為不支持IGMP V3協議的終端設備實現SSM提供了一個很好的解決方案。
[1]SSM 技術白皮書[Z].華為技術有限公司,2007.
[2]沈富可.特定源組播協議研究[J].西北大學學報,2004,34(10):11-12.
[3]羅軍舟.TCP/IP協議及網絡編程技術[M].北京:清華大學出版社,2004.