李卫平, 党 琦
(1.西北工业大学航天学院,西安 710069;2.西安卫星测控中心,西安 710043)
随着网络带宽以及多媒体业务的发展,组播(Multicasting)技术越来越受到用户的青睐。采用组播技术,能有效节省带宽,控制网络流量,减轻服务器负荷,降低网络负载,避免资源的无谓浪费[1]。
目前广泛使用的任意源组播(Any-Source Multicast,ASM)模型对于组播源没有特别要求和限制,支持一对多和多对多的通信。该模型一般采用组成员管理协议IGMPv2和PIM-SM(PIM-稀疏模式)。主机使用IGMP告知路由器加入或离开一个组,路由器将组成员变化情况通告给汇聚点(Rendezvous Point,RP),RP是PIM-SM协议运行的核心,同时维护组成员表(*,G)和有关发送源的表(S,G),并据此形成共享树和最短路径树,从而实现组播数据的转发。但ASM 存在诸如访问控制缺乏、RP单点瓶颈风险、组播转发不经济等缺点[2],所以在一些组播源已知的专用网络中,指定源组播(Specified Source Multicast,SSM)模型逐渐发展起来。
SSM模型的网络相对于传统的ASM网路来说,具有非常突出的优越性。SSM使用组播源地址和组播组地址对(S,G)[3]来标识一个组播会话,不需要RP的帮助,直接建立由(S,G)标识的一个组播最短路径树(Shortest Path Tree,SPT),减少了源的发现过程,跳过了RP和共享树规程。由于网络中不再需要汇聚点,也不再需要共享树或RP的映射,提高了网络对组播业务转发的效率,另外SSM仍保留了主机显式加入组播组的高效性。但是,为了成功实施SSM组播业务,除了要求网络端到端地支持网络组播和SSM模式外,同时还要求网络和应用支持IGMPv3协议。IGMP协议用于主机向邻接的多播路由器报告它们的组成员关系。IGMPv3对v1/v2进行了兼容和改进,增加了关于组播源的过滤模式(Include或Exclude),使主机不仅可以指定要加入的组播组,还能明确要求接收或拒绝从某特定组播源发出的组播信息[4]。
SSM通过IGMPv3来维护主机与路由器之间的关系,但并非所有操作系统都支持IGMPv3。本文通过对静态映射方法、程序实现方法以及IGMPv3模拟方法的论述,以支持 IGMPv3的 Windows XP和不支持IGMPv3的 Windows 2000操作系统为例,说明了在Windows平台下主机实现对SSM模型的支持方法。
SSM模型要求在接收者主机所在的网段,路由器能够了解主机加入组播组时所指定的组播源。如果接收者主机上运行的是IGMPv3,则可以在IGMPv3的报告报文中直接指定组播源的地址。Windows XP以上版本提供了对IGMPv3的支持,可在应用程序中利用IP_ADD_SOURCE_MEMBERSHIP增加对Include和Exclude的通告,利用 IP_DROP_SOURCE_MEMBERSHIP实现源组播的退出通告,这样即可实现主机对SSM的支持。
例如在图1中,网络中存在Source1和Source2两个组播源,均向组播组G发送组播报文。HostB仅对从Source1发往G的信息感兴趣,而对来自Source2的信息没有兴趣。当主机与路由器之间运行了IGMPv3之后,HostB就可以要求加入Source1所对应的组播组G,或要求退出Source2所对应的组播组G,这样就只有来自Source1的组播信息才能传递给HostB了。XP下VC程序示例如图2、图3所示。
图1 指定源组的组播流路径Fig.1 Path of multi-membership
图2 加入源组播Fig.2 Joining the source membership
图3 退出源组播Fig.3 Exit from the source membership
并非所有的主机都支持 IGMPv3,例如 Windows 2000以下版本。这些接收者主机只能运行IGMPv2,IGMPv2的报告报文中无法指定组播源的地址。这种情况下可通过在路由器(或三层交换机)上配置SSM Mapping功能,将IGMPv2报告报文中所包含的(*,G)信息映射为(S,G)信息,从而为运行IGMPv2的接收者主机提供对SSM模型的支持。
当路由器收到来自主机的IGMPv2报告报文时,首先检查该报文中所携带的组播组地址G,然后根据检查结果的不同分别进行处理。
1)如果G不在SSM组地址范围内,则提供ASM组播服务。
2)如果G在SSM组地址范围内:
①若路由器上没有G对应的SSM Mapping规则,则丢弃该报文,不提供该组播的SSM服务;
②若路由器上有G对应的SSM Mapping规则,则依据规则将报告报文中所包含的(*,G)信息映射为(S,G)信息,并提供SSM服务。
以华为三层交换机配置示例,如图4所示。
图4 华为三层交换机配置Fig.4 Huawei switch configuration
利用SSM-Mapping尽管可以实现对SSM的支持,但是网络配置工作量较大,而且无论源或组地址更改都需要重新进行映射配置,给网络维护带来风险。
通过研究IGMPv3协议可以发现,该协议的核心实际是定义了主机与网络设备的查询和应答流程。所以,主机应用程序只需要按协议规定的流程以正确的格式对网络设备的查询进行应答,如图5所示,即可实现对IGMPv3协议的支持。
图5 IGMPv3成员关系查询及上报Fig.5 IGMPv3 membership query and report
利用这个思路,结合IGMPv3协议的要求,以Windows 2000系统为例,可设计模拟IGMPv3协议的应用程序,流程如图6所示。应用程序创建原始套接字[5],监听路由器的成员关系查询消息报文,当收到查询时,根据本地接收组以及已知的源地址,按照IGMPv3规定的格式,加工组成员关系报告消息报文[6]并向网络设备专用组发送,路由器收到该报文,即认为终端设备支持IGMPv3,从而实现了对SSM协议的支持。
图6 主要程序流程Fig.6 Main program flow chart
按此方案开发的测试程序,在 Windows 2000、Windows XP以及Windows 2003系统下进行了测试,测试连接示意图如图7所示,网络设备分别使用华为设备和CISCO设备。
图7 Win 2000系统下测试连接示意图Fig.7 Testing connection under Win 2000
图8为网络发送测试程序运行效果,发送端数据可设置为连续码、固定55码或固定AA码,并在指定位置通过设置发送的帧速率可调节发送速率;图9为指定源接收程序运行效果,通过判断接收数据帧数是否连续,可以测定指定源接收是否存在丢帧、重帧的现象。测试结果说明,利用该方法编制的IGMPv3程序运行正常,功能正确,可以满足指定源组播对终端设备的要求。值得说明的是,考虑到 Windows XP以及Windows 2003本身具备对IGMPv3协议的支持,所以使用此方法,可解决原有任意源组播的应用程序支持指定源组播的特殊需求。即增加IGMPv3模拟程序负责与网络设备进行指定源组播的通告,而原程序版本不需更改。
图8 Win2000系统下发送测试程序Fig.8 Sending program under Win 2000
图9 Win2000系统下接收测试程序Fig.9 Receiving program under Win 2000
在已知组播源的专用网络中,SSM相对于传统的ASM,具有非常突出的优越性,系统网络中不再需要汇聚点,不但效率高,而且简化了网络配置及组播地址分配。随着指定源组播技术的发展和成熟,必将在实时数据传输等方面得到越来越广泛的应用。
Windows平台对SSM的支持有多种方法,对于支持IGMPv3协议的Windows XP以上版本,仅需采用终端应用程序进行(S,G)加入或退出的声明即可。针对不支持IGMPv3的Windows 2000及以下版本,利用在三层交换机上配置SSM-Mapping可实现对SSM的支持。在终端运行外挂IGMPv3模拟软件无疑是一个更好的解决途径。即使对于Windows XP及以上版本,若要使原有支持任意源组播的应用程序具备SSM的支持能力,又不能对原有应用程序改动,也可利用外挂模拟协议的程序。
[1]华为技术有限公司.SSM技术白皮书[S].深圳:华为技术有限公司,2007.
[2]沈富可.特定源组播协议研究[J].西北大学学报,2004,34:21-24.
[3]BHATTACHA PYYA S.特定源组播概述[Z].The Internet Society,2003.
[4]Network Working Group B.RCF3376英特网组管理协议[Z].3版.The Internet Society,2002.
[5]罗军舟,黎波涛,杨明,等.TCP/IP协议及网络编程技术[M].北京:清华大学出版社,2004.
[6]BEHROUZ A,FOROUZAN S,CHUNG F.TCP/IP 协议族[M].谢希仁,等译.北京:清华大学出版社,2006.