一种针对SSM的二层转发方法
2011-09-26许生旺曹彦军
王 宇,许生旺,曹彦军,姚 君
(1.北京跟踪与通信技术研究所,北京100094;2.中国电子科技集团公司第五十四研究所,河北石家庄050081)
0 引言
传统以太网交换机接收到组播数据后直接进行广播处理。在任意源组播模型中,用户加入组播组去接收所有发往该组的数据,互联网组管理协议(Internet Group Management Protocol,IGMP)侦听和CGMP协议能有效地解决该模型的二层数据扩散问题,用组MAC地址作为标识,通过一定的手段,在交换机内容访问存储器(Content Access Memory,CAM)中相关的组播表项上增加或删除主机所在端口号,据此完成组播数据的转发。
不同于任意源组播模型,SSM模型为订阅用户提供一种能够在客户端指定信源的传输服务,用户可以指定接收部分而非所有源发往某组播组的数据,交换机需要同时使用组播源和组播组地址信息才能将SSM数据转发至正确的订阅用户。而IGMP侦听和CGMP协议都是仅使用组MAC地址信息来进行组播数据的二层转发,故不适用于SSM模型。因特网工程任务组提出可以使用三层信息来进行SSM数据的二层转发,但这对交换机的性能有很高的要求,无法在一般交换机上实现。
1 SSM模型的以太网交换问题
SSM数据在以太网交换机内无法被精确地转发到订阅用户,主要是由于存在以下问题。
1.1 缺少SSM数据标识
在单播、广播和任意源组播模型中,数据的接收者由数据包的目的地址确定,以太网交换机在进行这些数据的转发时根据其目的MAC地址查找CAM表项来获取接收端口信息。在SSM模型中,数据的接收者由组播源地址和组播组地址共同确定,交换机无法利用CAM表项来完成数据转发,而有必要对SSM数据采取区别于其他数据的处理方式,这要求交换机能够从进入的数据中识别出SSM数据。而在以太网帧中,同一组播MAC地址对应32个组播组,其中既有任意源组,又有指定源组,交换机无法依据二层信息对二者进行区分,这就需要组播路由器在对发送给交换机的SSM数据进行二层封装时加入SSM数据标识。
1.2 缺少SSM源标识
经组播路由器转发给交换机的数据,其源MAC地址会被替换成与交换机相连的路由器端口的MAC地址,即会丢失二层信息中的数据源地址信息,而SSM数据的二层转发需要用到组播源地址信息,这就需要组播路由器在发往交换机的SSM数据的二层信息中加入组播源标识。
1.3 缺少SSM数据转发表
在交换机上实现SSM数据的二层转发关键是要建立SSM转发表,转发表中需要包含组播数据的源标识信息,而该标识信息是由组播路由器添加的,这就需要组播路由器和交换机配合完成SSM转发表的建立。
2 SSM数据标识及源标识的加入
传统以太网帧结构中有源、目的MAC地址、协议类型、数据以及校验和字段,IEEE 802.1Q标准对以太网帧格式进行了修改,在源MAC地址字段和协议类型字段之间加入4字节的802.1Q标签(Tag),包含4个字段,其含义如下:
Type:16比特,取值0x8100时表示802.1Q Tag帧;
PRI:3比特,表示帧的优先级,取值范围为0~7,值越大优先级越高;
CFI:1比特,取值为0表示以太网格式,取值为1表示非以太网格式;
VID:12比特,表示该帧所属的VLAN号。
SSM数据标识及源标识的加入可以通过扩展802.1Q Tag帧格式来实现,采用扩展的帧格式对SSM数据进行封装,其中 Tag中 Type字段取值0x8200,区别于其他数据帧的0x8100,用作SSM数据帧的标识,在VID字段后加入2字节的组播组源标识(Group Source ID,GSID)字段来完成组播帧中源标识的加入,该字段为16比特,可标识65 536个不同组播源。非SSM数据帧的封装格式不变。
3 SSM转发表的建立
SSM数据转发表的建立需要用到组播路由器提供的SSM源标识信息,因此建立SSM数据转发表的协议应该由组播路由器和以太网交换机来共同参与。在CGMP协议中,组播转发表的建立是通过路由器直接发送命令到交换机来完成的,根据这一特点,SSM转发表的建立可以通过对CGMP协议进行扩展来实现。
3.1 CGMP协议的扩展
对CGMP协议的扩展主要是增加与SSM模型相关的命令报文。CGMP命令报文中有16比特的Reserved字段为保留字段,协议扩展时可以将该字段用作GSID字段,不需更改报文格式,增加的命令报文如表1所示。
表1 扩展CGMP协议新增报文
与原有CGMP报文相比,新增报文采用不同的类型值(原有消息的类型值为0和1),Reserved字段填入组播源标识GSID,由于该字段只能填入一个组播源的标识,故在扩展CGMP协议中,Count字段取为定值1,表明路由器每次只发送一个主机的SSM加入或离开命令。其他字段的含义不变。
3.2 组播路由器对扩展CGMP协议的处理
组播路由器内维护一张SSM源标识表,表项内容为<组播组 IP地址,组播源IP地址,组播源标识>。组播路由器收到用户发送的IGMP加入报告后,先根据组播组IP地址和组播源IP地址查找上述三元表,如果没找到对应表项,则根据组播组IP地址和组播源IP地址生成组播源标识,并创建这个表项。组播源标识的生成满足2个条件:①组播源标识是一个位于0~65 535之间的16比特的数;②同一组播组对应的不同组播源的标识不能相同。组播路由器在发现/创建表项之后,根据表项内容生成CGMP SSM成员加入报文发送给交换机。
组播路由器收到用户发送的IGMP离开报告后,查找SSM源标识表,根据表项内容生成相应的CGMP SSM成员离开报文发送给交换机,同时进行正常的IGMP查询。如果所有接收用户都离开了该指定源组,组播路由器从组播转发表中删除该指定源组,同时也从SSM源标识表中删除相应的表项。
3.3 交换机内SSM转发表的建立
要完成SSM数据的转发,交换机内部需要建立一张SSM转发表,表项内容为<组MAC地址(GMAC),GSID,输出端口集(OPORTS)>,表项中的每个输出端口对应一个超时定时器,一旦定时器超时,交换机自动删除该端口。为了完成SSM转发表的建立和维护,交换机内部还需要维护一张SSM成员关系表<GMAC,GSID,交换机端口号(PORT),主机MAC地址集(HMACS)>,表项中的每个主机MAC地址对应一个超时定时器,定时器超时,则从HMACS中删除该主机。
交换机收到CGMP SSM成员加入报文后,处理流程如图1所示。
图1 交换机对CGMP SSM成员加入报文处理流程
该处理流程具体步骤如下:
①搜索CAM表,查找与加入报文中USA字段相匹配的项获取主机所在端口号PORT;
②搜索SSM成员关系表查找与GMAC、GSID和PORT相对应的表项;
③如果没有找到表项,交换机创建这个项,并将主机MAC复制到HMACS,启动其定时器,同时修改相应SSM转发表,并启动端口对应的定时器;
④如果找到成员关系表项,但HMACS中没有加入报文中的主机MAC,则将其复制到HMACS中,启动定时器,并更新相应转发表项中输出端口的计时器;
⑤如果HMACS中存在该主机MAC,则更新该成员关系表项计时器,并更新相应转发表项的计时器。
上述步骤③中对SSM转发表的修改,具体操作为:搜索SSM 转发表,查找GMAC、GSID对应的表项,如果不存在该表项,则创建这个表项,然后将组播成员关系表中的端口号复制到先前发现或创建的转发表项的OPORTS中。步骤④和步骤⑤中输出端口计时器的更新操作为:搜索SSM转发表,查找GMAC、GSID对应的表项,然后在表项的OPORTS中查找对应的输出端口,更新其计时器。
交换机收到CGMP SSM成员离开报文后,处理流程如图2所示。
图2 交换机对CGMP SSM成员离开报文处理流程
图2所示的处理流程中具体步骤如下:
①搜索CAM表,查找与加入消息中USA字段相匹配的项获取主机所在端口号PORT;
②搜索SSM成员关系表查找与GMAC、GSID、PORT相对应的表项;
③从表项中的HMACS中删除该主机MAC;
④如果该表项中没有其他主机,删除该表项,并修改SSM转发表的相应表项,否则不进行其他操作。
步骤④中对SSM转发表项修改具体操作为:搜索SSM 转发表,查找GMAC、GSID对应的表项,从OPORTS集中删除成员关系表项中的PORT,如果OPORTS中没有其他PORT,删除该转发表项。
4 SSM数据的转发
SSM数据的转发包括在组播路由器内的转发和在以太网交换机内的转发2个部分。
4.1 组播路由器对SSM数据的转发
组播路由器收到SSM数据后,首先查找组播转发表,如果存在本地接收者,则根据组播组IP地址和组播源IP地址查找SSM源标识表,获取组播源标识。组播路由器在进行SSM数据组帧时采用扩展802.1Q帧格式,在GSID字段中填入组播源标识,并设置Tag中的Type值为0x8200,然后将该数据帧从输出端口发送至交换机。
4.2 交换机对SSM数据的转发
在以太网交换机内,SSM数据的转发需要用到GSID信息,来自路由端口的SSM数据中才拥有该标识,交换机需要从路由端口发送的组播数据中识别出SSM数据并根据SSM转发表进行转发。具体处理流程为:首先判断数据是否来自路由端口,对于非路由端口进入的数据,查找CAM表项进行正常转发;对于路由端口进入的数据,如果其目的MAC地址前缀为0x01005E且Tag中的Type字段为0x8200则表明是SSM数据,交换机按照SSM转发表对其进行转发,否则交换机查找CAM表项进行正常数据转发。
5 可行性验证
方法可行性验证采用OPNET Modeler 14.5软件,该版本没有开发针对SSM模型的组播进程,仿真时首先根据 RFC3367和 RFC4607进行组播进程建模,然后依据所提方法建立了扩展CGMP的进程模型。
仿真网络环境如图3所示,其中R1、R2为组播路由器,S1、S2为二层交换机,H1、H2、H3和 H4为4台主机。
图3 可行性验证网络拓扑
各主机的配置如表2所示。主机H3申请接收H1发往232.0.0.1的组播数据,H4申请接收H2发往232.0.0.1的组播数据。路由器和交换机之间配置扩展的CGMP协议,SSM数据的二层封装采用扩展的802.1Q帧格式。
表2 主机配置情况
仿真过程中对主机H3和H4的IP进程模块接收到的数据包进行解封装检测发现接收情况如下:
①H3只接收到1.1.1.2发往232.0.0.1的组播数据;
②H4只接收到1.1.1.3发往232.0.0.1的组播数据。
2个主机的接收情况与配置情况相符,仿真结果表明交换机可以准确地将SSM数据转发至接收用户,验证了该方法的可行性。
6 结束语
针对SSM的二层转发方法实现了在以太网交换机上对SSM数据的精确二层转发,交换机根据收到的新增CGMP命令报文建立SSM转发表,在收到SSM数据后,根据SSM帧中的二层信息查找SSM转发表完成转发。在SSM转发表的建立和数据转发过程中都不需要CPU过多地参与,对交换机的性能没有过高的要求,可在一般交换机上实现。
[1]RFC 4607.Source-Specific Multicast for IP[S].
[2]RFC3376.Internet Group Management Protocol,Version 3[S].
[3]马东超,彭 达,王立芊,等.以太网交换机的源指定组播方案[J].计算机工程,2009,35(17):106-120.
[4]岩 延,郭江涛.组播路由协议设计及应用[M].北京:人民邮电出版社,2002.