专利名称:基于DSA TAG及自定义协议栈的网桥IGMP Snooping实现方法
技术领域:
本发明涉及一种基于DSA TAG及自定义协议栈的网桥IGMP Snooping实现方法,属于网络通信技术领域。
背景技术:
很多多媒体网络应用,如电视会议系统、远程教学系统、多媒体点播系统等,都要求把信息从一个源发送到多个目的地,即采用一对多的发送方式。由于多媒体信息的数据量非常大,使用一对一的方式模拟一对多的方式将浪费大量带宽。如果采用广播方式,又会造成信息泛滥。因此,在IP协议栈上实现了一种一对多的IP组播协议。IP组播协议分为 两类三层网络设备(网关、路由器)之间的通信协议和三层网络设备与主机、二层交换机之间的协议。三层网络设备之间的通信协议用于获得组播路径信息,包括PM-DM(Pix)t0C0lIndependent Multicast-Dense Mode)>PIM-SMCProtocoI Independent Multicast-SparseMode)>DVMRP (Distance Vector Multicast Routing Protocol)等协议。三层网络设备与主机、二层交换机之间的协议根据组播路径信息转发组播数据报文,使用IGMP Snooping来侦听三层的IGMP协议报文来建立和维护二层组播功能,对组播组以及组播成员进行动态学习从而避免组播报文在设备中进行广播,而只会将组播报文转发给组播成员。对于有IGMP Snooping功能的网关设备,只会将IGMP报文传给组播成员,而无IGMP Snooping功能的网关设备会广播IGMP报文。由此可见,IGMP Snooping功能提高了带宽利用率,增强了网络安全性和可靠性。目前,现有的三层网络设备对IGMP Snooping的实现方法有两种,一种单纯依靠网络设备中的二层芯片,把IGMP Snooping的算法、组播组MAC与物理端口的映射表都由芯片实现,这种方法配置简单,使用方便,但是提高了设备成本,而且对于没有使用这种高级芯片的三层设备,就无法实现了。另外一种是单纯的依靠网桥IGMP Snooping算法模块实现,网桥IGMP Snooping算法模块可以将网桥的成员端口与组播组建立对应关系,控制组播报文能否到达网桥的成员端口,但是无法将网桥的成员端口与设备的物理端口建立一一对应关系,所以就无法将组播组与组播成员关联,也就无法控制组播报文只到达组播成员而不进行广播。在这种方式下,如果要将网桥的成员端口与设备的物理端口建立一一对应关系,可以将每个端口划为一个VLAN,每个VLAN设备组成HASH表链接到ptype_base链表中,然后将每个VLAN设备绑定到网桥上作为桥的成员端口,这样就将网桥的成员端口与设备的物理端口建立了一一对应关系,于是就可以实现IGMP Snooping 了。但是这种每个端口划为一个VLAN势必影响了设备本身的VLAN功能。如果要求多物理端口属于同一 VLAN,IGMPSnooping功能就无法实现了。
发明内容
本发明提供一种在三层设备或三层以上设备上实现一种基于Linux网桥下的IGMP Snooping实现方法,以解决当今IGMP Snooping实现方法所存在的问题和缺陷。本发明的目的通过以下技术方案来实现
基于DSA TAG及自定义协议栈的网桥IGMP Snooping实现方法,特点是涉及网桥IGMP Snooping算法模块、自定义数据链路层协议栈以及交换芯片;由网桥IGMP Snooping算法模块通过对收到的IGMP报文进行分析,为网桥端口和组播组MAC地址建立起映射关系,并根据映射关系转发组播数据;自定义数据链路层协议栈是网桥端口与交换芯片沟通的桥梁,利用IGMP报文中的DSA TAG信息建立网桥端口与交换芯片物理端口的对应关系;交换芯片根据IGMP报文内部DSA TAG信息将报文转发到指定物理端口,到达组播组的组播成员。进一步地,上述的基于DSA TAG及自定义协议栈的网桥IGMP Snooping实现方法,网桥IGMP Snooping算法模块工作在Linux网桥模块下,通过侦听IGMP报文建立和维 护组播组和网桥成员端口的对应关系,当网桥的成员端口加入到某个组后,相应组的组播报文只转发到这些成员端口,使组播报文只在网桥的这些成员端口内进行组播,不进行广播;IGMP Snooping算法模块建立组播组和网桥的成员端口之间的映射关系,但是没有实现
IGMP Snooping功能,如果将网桥的成员端口与组播成员之间建立起--对应关系,那就实
现IGMP Snooping功能,也就是说,如果将网络设备的网桥的成员端口与其物理端口建立起一一对应关系,那就IGMP Snooping ;交换芯片的DSA TAG,通过自定义数据链路层协议栈,在网络设备的网桥的成员端口与其物理端口之间架起桥梁,建立一一对应关系;
规划交换芯片的运行方式,使其以DSA TAG方式运行,并设定交换芯片的上行端口,交换芯片在此模式下运行,识别IGMP数据帧还是其他数据帧,获知数据帧的源端口,对于上行IGMP数据帧,直接将其发送到交换芯片的上行口,对于下行所有数据帧,根据数据帧中的DSA TAG信息指定数据帧出口路径;
自定义数据链路层协议栈,链接到内核ptype_baSe协议链表上,所有IGMP报文都经由自定义数据链路层协议栈处理;其他的数据帧,如VLAN的数据帧经由802. Iq协议栈处理,独自工作,互不干扰。更进一步地,上述的基于DSA TAG及自定义协议栈的网桥IGMP Snooping实现方法,自定义数据链路层协议栈上注册IGMP虚拟设备,每一个IGMP虚拟设备与实际的设备物理端口——对应,所有的IGMP虚拟设备组成一个HASH表作为IGMP Group ;所有的IGMP虚拟设备绑定到Linux网桥上,作为网桥的成员端口 ;
对于下行IGMP报文,网桥IGMP Snooping算法模块通过对收到的IGMP报文进行分析,转发IGMP报文到相应的IGMP成员端口,IGMP虚拟设备将报文打上DSA TAG,此TAG中含有与其对应的物理端口信息,然后转发给交换芯片,交换芯片根据DSA TAG里面的信息,直接转发到交换芯片的对应物理端口 ;对于上行IGMP数据帧,交换芯片直接发送到交换芯片的上行口,同时将数据帧打上DSA TAG,处理器通过交换芯片的上行口收到此数据帧后,根据DSA TAG的信息,将报文转发给自定义数据链路层协议栈的对应IGMP虚拟设备,然后再传送到网桥IGMP Snooping算法模块;这样,对于上下行IGMP数据报,将设备的网桥成员端口一IGMP端口与设备的物理端口建立——对应关系,也是将设备的网桥成员端口一IGMP端口与组播成员之间建立了——对应关系,完整的实现IGMP Snooping功能。再进一步地,上述的基于DSA TAG及自定义协议栈的网桥IGMP Snooping实现方法,所述的网桥IGMP Snooping算法模块工作在Linux网桥下。所述方法用于三层设备或三层以上设备,如网关、路由器等;所述的设备主处理器上运行Linux操作系统;所述的二层交换芯片具有DSA TAG功能,但不具备IGMP Snooping功能。本发明技术方案突出的实质性特点和显著的进步主要体现在
网桥IGMP Snooping算法模块、自定义数据链路层协议栈以及交换芯片相互协作而实现Iinux网桥下IGMP Snooping,利用软件与硬件相结合,很好地实现IGMP Snooping功能,节约了硬件成本,填补了市场空白。
下面结合附图对本发明技术方案作进一步说明
图I:网桥IGMP Snooping算法模块、自定义数据链路层协议栈以及交换芯片在三层网络设备中的位置示意 图2 :上行DSA TAG帧结构示意 图3 :下行Forward DSA TAG巾贞结构不意 图4 :下行From_CPU DSA TAG帧结构示意图。
具体实施例方式本发明提出一种基于DSA (Distributed Switching Architecture) TAG 及自定义协议栈的网桥 IGMP( Internet Group Management Protocol) Snooping 实现方法,利用软件与硬件相结合,很好地实现IGMP Snooping功能,节约了硬件成本,填补了市场空白。基于DSA TAG及自定义协议栈的网桥IGMP Snooping实现方法,涉及网桥IGMPSnooping算法模块、自定义数据链路层IGMP协议栈以及交换芯片,三者共同协作实现Linux网桥下IGMP Snooping功能。三者在三层网络设备中的位置如图I所示,设定此网络设备的交换芯片有n个物理端口,ethl是网络设备节点,是主处理器MAC (Media Accesscontroller)在Linux系统中的抽象,在LAN侧,主处理器MAC与交换芯片的上行口相连,交换芯片每个物理端口收到的报文都通过其上行口转发给主处理器MAC,同样,所有的下行报文都由主处理器MAC通过交换芯片的上行口将其转发给其他端口,然后发送出去。网桥IGMP Snooping算法模块建立组和网桥的成员端口的映射关系,实现IGMPSnooping功能,在组和组播成员之间建立映射关系,也即是,在组和设备的物理端口之间建立映射关系;对于上下行IGMP数据报,如果能将网桥的成员端口与设备的物理端口建立起--对应关系,那就可以IGMP Snooping。设定交换芯片的上行端口,规划交换芯片上行端口的运行方式,使其以DSA TAG模式运行。在这种模式下,对于上行数据报,即进入交换芯片除上行端口外每个端口的数据帧,交换芯片都会在该数据帧的目标地址和原地址之后加上DSA TAG,而且不广播IGMP数据帧,而是直接将其转发到交换芯片的上行口,然后通过ethl转发到数据链路层协议栈。DSA TAG包含4个字节的数据,如图2所示,其中重要的是,bitl7,bitl8两位Code[2:1]表示进入交换芯片的数据帧的类型,特别的,0x2表示该数据帧是IGMP数据帧;bitl9 bit23五位Src_Port表示该数据巾贞是从交换芯片的哪个端口进入的,即该数据巾贞的源端口。对于下行报文,即协议栈进入交换芯片上行端口的数据报,交换芯片根据DSA TAG的信息进行转发。交换芯片支持两种不同的DSA TAG的信息,分别如图3和图4,图3为Forward DSA TAG,上行端口收到带有此DSA TAG信息的报文后,根据交换芯片的VLAN功能进行转发;图4为From_CPU DSA TAG,其中bitl9 bit23这5位为Trg_Port该报文的目标端口,即根据Trg_P0rt直接将该报文转发到那个端口,这个特征为网桥的成员端口与设备的物理端口建立一一对应关系创造了条件。根据这些特征, 设计IGMP数据链路层协议栈,定义其协议号为0x4100,将其链接到内核ptype_baSe协议链表上,并在此协议栈上注册IGMP虚拟设备,IGMP虚拟设备的个数等同实际的设备物理端口个数,绑定这些IGMP虚拟设备到Linux网桥上作为网桥的成员端口。所有这些IGMP虚拟设备组成一个HASH表作为IGMP Group,即IGMPl, IGMP2-IGMPn组成一个HASH表。对于上行数据报,在其进入数据链路层协议栈之前,一、通过扩展Skb结构,增加成员变量来存储源端口信息;二、规划报文的上行路径。数据报在转发到网桥之前会遍历ptype_base链表,根据协议号决定该报文经由什么协议栈处理。在此,对数据报进行分类,如果是IGMP报文,改变DSA TAG前二个字节为0x4100,如果是其他的数据报,改变DSA TAG前二个字节为0x8100。这样就保证了 IGMP报文经由IGMP协议栈处理,其他的报文经由802. Iq协议栈处理。三、以Src_Port为索引,建立IGMP虚拟设备与实际物理端口的一一对应关系。IGMP报文上行到IGMP协议栈后,转发给IGMP虚拟设备,那么它会转发到哪个IGMP虚拟设备呢?先找到IGMP Group的HASH表,然后以该数据报DSA TAG中的Src_Port为IGMP虚拟设备的索引值,在HASH中找到该设备,然后转发给该IGMP虚拟设备,即Src_Port为I的数据报转发给了 IGMPl,Src_Port为2的数据报转发给了 IGMP2,以此类推。而由交换芯片的DSA TAG属性可知,Src_Port表示该数据帧是从交换芯片的哪个端口。所以,也就是说,物理端口 I进来的数据报转发给IGMPl,物理端口 2进来的数据报转发给了 IGMP2,以此类推。即建立了 IGMP虚拟设备与实际物理端口的一一对应关系。而IGMP虚拟设备是网桥的成员端口,所以将网桥的成员端口与设备的物理端口建立起了一一对应关系。对于下行的IGMP报文,IGMP虚拟设备对其收到的报文打上From_CPU DSA TAG,用这个虚拟设备的index作为From_CPU DSA TAG信息中的Trg_Port,即虚拟设备IGMPl会设置下行IGMP报文From_CPU DSA TAG信息中的Trg_Port为1,虚拟设备IGMP2会设置下行IGMP报文From_CPU DSA TAG信息中的Trg_Port为2,以此类推。而Trg_Port即是报文的目标物理端口,也就是说,IGMP虚拟设备IGMPl将会把它收到的下行IGMP数据报直接转发到物理端口 1,IGMP虚拟设备IGMP2将会把它收到的下行IGMP数据报直接转发到物理端口 2,以此类推。即建立了 IGMP虚拟设备与实际物理端口的——对应关系。而IGMP虚拟设备是网桥的成员端口,所以将网桥的成员端口与设备的物理端口建立起了一一对应关系。对于上下行IGMP数据报,都将网桥的成员端口与设备物理端口建立了一一对应关系,成功地实现了 IGMP Snooping。需要理解到的是以上所述仅是本发明的优选实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.基于DSATAG及自定义协议栈的网桥IGMP Snooping实现方法,其特征在于涉及网桥IGMP Snooping算法模块、自定义数据链路层协议栈以及交换芯片;由网桥IGMPSnooping算法模块通过对收到的IGMP报文进行分析,为网桥端口和组播组MAC地址建立起映射关系,并根据映射关系转发组播数据;自定义数据链路层协议栈是网桥端口与交换芯片沟通的桥梁,利用IGMP报文中的DSA TAG信息建立网桥端口与交换芯片物理端口的对应关系;交换芯片根据IGMP报文内部DSA TAG信息将报文转发到指定物理端口,到达组播组的组播成员。
2.根据权利要求I所述的基于DSATAG及自定义协议栈的网桥IGMP Snooping实现方法,其特征在于网桥IGMP Snooping算法模块工作在Linux网桥模块下,通过侦听IGMP报文建立和维护组播组和网桥成员端口的对应关系,当网桥的成员端口加入到某个组后,相应组的组播报文只转发到这些成员端口,使组播报文只在网桥的这些成员端口内进行组播;网桥IGMP Snooping算法模块建立组播组和网桥的成员端口之间的映射关系,交换芯片的DSA TAG,通过自定义数据链路层协议栈,在网络设备的网桥的成员端口与其物理端口之间建立起对应关系; 规划交换芯片的运行方式,使其以DSA TAG方式运行,并设定交换芯片的上行端口,交换芯片在此模式下运行,识别IGMP数据帧还是其他数据帧,获知数据帧的源端口,对于上行IGMP数据帧,直接将其发送到交换芯片的上行口,对于下行所有数据帧,根据数据帧中的DSA TAG信息指定数据帧出口路径; 自定义数据链路层协议栈,链接到内核ptype_baSe协议链表上,所有IGMP报文都经由自定义数据链路层协议栈处理。
3.根据权利要求I所述的基于DSATAG及自定义协议栈的网桥IGMP Snooping实现方法,其特征在于自定义数据链路层协议栈上注册IGMP虚拟设备,每一个IGMP虚拟设备与实际的设备物理端口一一对应,所有的IGMP虚拟设备组成一个HASH表作为IGMP Group ;所有的IGMP虚拟设备绑定到Linux网桥上,作为网桥的成员端口 ; 对于下行IGMP报文,网桥IGMP Snooping算法模块通过对收到的IGMP报文进行分析,转发IGMP报文到相应的IGMP成员端口,IGMP虚拟设备将报文打上DSA TAG,此TAG中含有与其对应的物理端口信息,然后转发给交换芯片,交换芯片根据DSA TAG里面的信息,直接转发到交换芯片的对应物理端口 ;对于上行IGMP数据帧,交换芯片直接发送到交换芯片的上行口,同时将数据帧打上DSA TAG,处理器通过交换芯片的上行口收到此数据帧后,根据DSA TAG的信息,将报文转发给自定义数据链路层协议栈的对应IGMP虚拟设备,然后再传送到网桥IGMP Snooping算法模块;这样,对于上下行IGMP数据报,将设备的网桥成员端口一IGMP端口与设备的物理端口建立——对应关系,也是将设备的网桥成员端口一IGMP端口与组播成员之间建立了对应关系。
4.根据权利要求I所述的基于DSATAG及自定义协议栈的网桥IGMP Snooping实现方法,其特征在于所述的网桥IGMP Snooping算法模块工作在Linux网桥下。
全文摘要
本发明提供一种基于DSA TAG及自定义协议栈的网桥IGMP Snooping 实现方法,网桥IGMP Snooping算法模块通过对收到的IGMP报文进行分析,为网桥端口和组播组MAC地址建立起映射关系,并根据这样的映射关系转发组播数据;自定义数据链路层协议栈是网桥端口与交换芯片沟通的桥梁,利用IGMP报文中的DSA TAG信息建立网桥端口与交换芯片物理端口的对应关系;交换芯片根据IGMP报文内部DSA TAG信息将报文转发到指定物理端口,到达组播组的组播成员。相互协作,软件与硬件相互配合,完美地实现IGMP Snooping功能。
文档编号H04L29/08GK102647359SQ20121012597
公开日2012年8月22日 申请日期2012年4月26日 优先权日2012年4月26日
发明者刘继明, 吴先亮, 林恩峰, 程杰, 谢炜 申请人:网经科技(苏州)有限公司