一种转发数据流的方法和设备的制作方法

文档序号:7651068阅读:240来源:国知局
专利名称:一种转发数据流的方法和设备的制作方法
技术领域
本发明涉及网络通信领域,特别涉及一种转发数据流的方法和设备。
背景技术
IPTV(Interactive Persionality Television,交互式网络电视)是指基于IP协议的电视广播服务,在全网IP化的趋势下,主要由IP报文承载此类视频节目的多媒体数据,通过互联网传送给用户。而这些多媒体数据主要是从视频节目提供商的服务器流向广大家庭用户的,是一种典型的单点对多点的传送方式。这种报文传送方式特别适合采用数据流转发技术。
数据流转发技术中比较典型的为组播技术,其中,组播也叫“多播”,是IP报文的一种传递方式,根据组播组地址,实现IP报文由点到多点的传递。在组播应用中,使用单一的数据流替代多个数据流,增加有限带宽的使用率。同时,更少的数据被网关、桥等路由转发设备复制与前传,减少数据处理时间,提高网络多点应用的性能。组播报文为数据流的一种形式,现介绍如下组播报文格式如下+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|二层头 | IP头 | 组播数据|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+组播报文IP头的格式如下0 7 15 23 31+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Vcr | HLg | ToS | Totallength |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Identification | Flg | FragmentOffset |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| TTL |Protocol | CheckSum |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Source_IP|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Group_IP |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
其中,Ver版本字段,占4比特。用来表明IP协议实现的版本号,当前一般为IPv4,即0100。
Hlg报头长度字段,占4比特。是头部占32比特的数字,包括可选项。普通IP数据报(没有任何选项),该字段的值是5,即160比特=20字节。此字段最大值为60字节。
ToS业务类型(Type of Service,ToS)字段,占8比特。
Totallength总长度字段,占16比特。指明整个数据报的长度(以字节为单位)。最大长度为65535字节。
Identification标志字段,占16比特。用来唯一地标识主机发送的每一份数据报。通常每发一份报文,它的值会加1。
Flg标志位字段,占3比特。标志一份数据报是否要求分段。
FragmentOffset段偏移字段,占13比特。如果一份数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置。
TTL生存期(Time To Live,TTL)字段,占8比特。用来设置数据报最多可以经过的路由器数。
Protocol协议字段,占8比特。指明IP层所封装的上层协议类型,如ICMP(1)、IGMP(2)、TCP(6)、UDP(17)等。
CheckSum头部校验和字段,占16比特。内容是根据IP头部计算得到的校验和码。计算方法是对头部中每个16比特进行二进制反码求和。
Source_IP源IP地址,占32比特。用来标明发送IP数据报文的源主机地址。
Group_IP组播目的IP地址,占32比特。用来标明接收IP报文的目标主机地址。
通常,路由器中的转发表项由关键字和表项内容两部分组成,用关键字与报文中指定的内容进行匹配,如果匹配成功,则采用与关键字对应的表项内容进行转发。表项内容的信息包括从哪些出口把报文转发出去等相关信息。
关键字的匹配可以是完全匹配或部分匹配,组播报文的转发是需要完全匹配,也就是组播报文中的“源IP地址(Source_IP)和组播组地址(Group_IP)”与表项关键字中的“源IP地址(Source_IP)和组播组地址(Group_IP)”完全一致,匹配才成功。
当某一用户的计算机申请加入一个特定的组播组时,通过组播协议的协商,负责传递组播报文的中间路由器会生成一个转发表项,后续的组播报文根据这个表项的内容进行匹配和转发。通常,把这个转发表项称为(S,G)表。其中,该表项中的关键字由组播报文中的源IP地址和组播组地址组成,S代表Source_IP,G代表Group_IP。
路由器能否实现对组播报文的快速转发,关键在于能否快速匹配到对应的(S,G)表项。现有的匹配算法有如下三种1)树查找,原理如下表以二叉树的形式存储信息,根据二叉树的原理,将关键字每一bit都作为一条分支路径,通过分支遍历,匹配到与报文指定内容完全一致的叶子节点(叶子表项)。
特点占用内存少,性能较好,是路由器中表项匹配最常用的方式。但树查找的性能与关键字的长度成正比,关键字越长,匹配需要的时间就越多。
参见图1,为现有技术中树表的示意图。报文关键字为001,根据树查找原则,找到匹配的分支,根据该分支,得到对应的表项内容。
2)静态表查找,原理如下将关键字与实际的物理内存一一对应,通过直接读取内存的方式获得表项内容。
特点查找速度快,但浪费内存。因为不需要的表项,也要占用一块内存,所以适合数量少、关键字短的表项。
参见图2,为现有技术中静态表的示意图。报文关键字为001时,根据该关键字001找到相应的内存,读取表项内容。同理,报文关键字为111时,根据该关键字111找到相应的内存,读取表项内容。
3)动态链表查找,原理如下动态链表采用单向链表的形式存储信息,除尾节点外,每个节点都指向下一个节点的地址,形成一个链表,增加的节点就从尾部加入,不需要的节点就从链表中删除。匹配的时候,从链表的首节点开始匹配,直到匹配成功或遍历到链表的末尾。
特点查找方式占用内存少,但由于每次查找都需要遍历一遍所有的表项,所以,查找性能与链表节点个数成正比。当表项数量少的时候,性能较高;当表项数量较多的时候,性能较低。比较适合表项有限的情况。
参见图3,为现有技术中动态链表的示意图。根据关键字查找表项时,从链表的首节点开始匹配,如果匹配不成功,查下一个表项,直到找到匹配的节点为止。
针对不同的转发表,分别提到了节点和表项,具体为查找静态表得到的表项,称为静态表项。查找树表得到的表项,称为叶子表项,也称叶子节点。链表中通常都称为节点。
现有技术中常用的组播报文转发方式是将源IP地址和组播组地址合在一起作为关键字,进行树搜索,从而得到出口信息。
这种树搜索技术,关键字的长度与树搜索的路径成正比,而搜索的路径越长,所花费的时间也就越长,路由器的转发性能也就越低。对于IPv4组播报文来说,(S,G)表项的关键字长度为Group_IP的长度32bits加上Source_IP的长度32bits,总共64bits。而普通单播报文只需要查目的IP地址,32bits。相比较而言,如果把Source_IP和Group_IP结合在一起作为关键字进行树搜索,在转发组播报文的树搜索开销将是转发单播报文的2倍。
对于IPv6组播报文而言,Source_IP和Group_IP都为128bits,关键字长度更长,树搜索需要的时间也就越长,转发性能会进一步降低。
当基于流转发的情况下,关键字通常为五元组(源地址,目的地址,源端口号,目的端口号和协议),有时候甚至是七元组,七元组是在五元组的基础上包括TOS(Type Of Service,业务类型)域和报文的入接口,进行树搜索时,需要匹配的关键字的长度更长,转发性能更低。

发明内容
为了缓解现有技术中转发数据流性能较低的问题,本发明实施例提供了一种转发数据流的方法和设备。所述技术方案如下一种转发数据流的方法,所述方法包括当收到数据流后,使用所述数据流的关键字的一部分作为索引在树表中查找到对应表项,根据所述对应表项中的内容查找对应的动态链表;用所述关键字的其余部分作为索引在动态链表中查找到对应节点,在所述对应节点中获取出接口信息,根据所述出接口信息转发所述数据流。
本发明实施例还提供了一种转发数据流的设备,所述设备包括管理模块,用于生成树表和动态链表,并关联所述树表和所述动态链表;树表表项查找模块,用于当收到数据流后,使用所述数据流的关键字的一部分作为索引在所述管理模块生成的树表中查找到对应表项;动态链表查找模块,用于根据所述树表表项查找模块查找到的对应表项中的内容查找到对应的动态链表;转发模块,用于所述动态链表查找模块查找到动态链表后,用所述关键字的其余部分作为索引在动态链表中查找到对应节点,在所述对应节点中获取出接口信息,根据所述出接口信息转发所述数据流。
本发明实施例提供的技术方案带来的有益效果是通过使用关键字的一部分进行树查找,降低数据流转发过程中树查找的索引长度,同时,使用关键字的其余部分进行动态链表查找,提高了数据流的转发性能。


图1是现有技术中树表的示意图;图2是现有技术中静态表的示意图;图3是现有技术中动态链表的示意图;图4是本发明实施例提供的转发数据流的方法流程图;图5是本发明实施例提供的一种具体转发表示意图;图6是本发明实施例提供的转发组播报文的方法流程图;图7是本发明实施例提供的转发数据流的设备示意图。
具体实施例方式
下面结合附图和具体实施例对本发明作进一步说明,但本发明不局限于以下实施例。
本发明实施例通过使用数据流的关键字的一部分作为树表的索引进行树表查找,使用关键字的另一部分作为动态链表的索引进行动态链表查找,提高查找出接口的速度,进而提高转发数据流的性能。
需要转发的数据流的关键字的形式有多种,不同的数据流对应不同的关键字,例如,有的采用五元组的形式作为关键字,有的采用目的地址与源地址的组合作为关键字,这些关键字都有一个共同的特点——比较长。本实施例中的转发表包括树表和动态链表,将数据流的关键字的一部分作为树表的索引存储在树表中,其余的部分作为动态链表的索引存储在动态链表中,数据流的出接口信息存储在动态链表的表项内容中。
参见图4,为本发明实施例提供的一种转发数据流的方法流程图,该转发数据流的方法包括以下步骤步骤401当收到数据流后,使用该数据流的关键字的一部分作为索引在树表中查找对应表项,即用关键字的一部分与树表的索引值进行匹配。
步骤402是否查找成功,如果是,则执行步骤403;否则,执行步骤406。
步骤403根据所查到的树表表项的内容查找对应的动态链表。
树表表项的内容可以是一个静态表的偏移量,也可以是动态链表在内存中的地址(即动态链表的首节点在内存中的地址)。当为静态表的偏移量时,根据该偏移量找到对应的静态表项,该静态表项的内容中事先存储了动态链表首节点在内存中的地址,这样,根据这个地址将找到对应该数据流的动态链表。
步骤404用该数据流的关键字的其余部分作为索引在动态链表中是否查找到匹配的节点,如果是,则执行步骤405,否则,执行步骤406。
步骤405在动态链表的对应节点中获取出接口信息,根据这个出接口信息转发该数据流。
步骤406将数据流上送控制处理器处理或丢弃。
上述方案中的关键字可以为五元组的源地址、目的地址、源端口、目的端口和协议,或为七元组的源地址、目的地址、源端口、目的端口、协议、TOS域和报文的入接口。
为了进一步说明转发数据流的整个过程,下面以组播报文为例进行说明,组播转发表项关键字由组播组地址(Group_IP)和源IP地址(Source_IP)组成,转发表项在路由器上的存储方式采用组播组地址以树表形式存储,组播源地址采用动态链表的形式存储。参见图5,为本实施例提供的一种具体转发表示意图,本实施例中的组播组为Group_A,有三个服务器能提供这个组播组的视频服务,IP地址分别为Source_A、Source_B、Source_C。通过组播协议的一系列协商,负责传送这个组播报文的路由器得知这个组播报文的关键字为Group_A、Source_A、Source_B和Source_C,于是,路由器的管理模块负责生成了两个表项一个表项采用树表的形式,另一个表项采用动态链表的形式。将组播组地址Group_A作为树表的关键字,对应的树表表项(也称这个表项为“Token叶子”)内容——Token值,作为静态表的关键字,查找静态表(可以称为Token静态表),对应的静态表的表项内容是动态链表首节点的内存地址。不同的Token值对应不同的动态链表,在动态链表中,每个节点的内容包括节点关键字,用于匹配源IP地址;节点表项内容,包括转发组播报文的出接口信息;下一节点地址。
其中,“Token叶子”和对应的动态链表的组合是一个组播转发表项。这个Token值由路由器来管理,只要有一个组播转发表项(包括Token叶子表项和对应的动态链表),就会分配给这个表项一个对应的Token值。在路由器当前的表项中,每一个Token值都是唯一的。当这个组播转发表项被删除后,Token就被回收了,当其他的转发表项生成的时候,再次分发出去。
初始化时,用户的计算机向能够提供所需服务的服务器发送一个请求信息,服务器根据用户的请求,通知沿途的路由器将该用户的地址加入到该组播组。
参见图6,为本实施例提供的转发组播报文的方法流程图,转发组播报文的方法包括以下步骤步骤601当路由器收到组播报文后,使用报文中的组播组地址进行树查找,即用组播组地址作为关键字与树表的表项进行匹配。
步骤602判断是否查找成功,查找成功,则执行步骤603;否则,执行步骤607。
步骤603从查到的表项中获取Token值。
步骤604以Token为索引,查找静态表,根据静态表中提供的地址信息查找相应的动态链表。
一个Token值有可能对应一个或多个节点,每个节点对应一个源IP。
步骤605使用报文的源IP地址依次与动态链表节点中的IP地址进行比较,判断是否完全匹配,如果是,则执行步骤506;如果遍历到节点末尾仍然不能匹配到相同的IP地址,执行步骤607。
步骤606从该匹配节点中的表项内容里获取出接口信息,将组播报文从该出接口转发。
步骤607将报文上送控制处理器处理或丢弃,具体根据报文的配置情况进行处理。
由于提供同一个组播组视频服务的源IP地址是有限的,在某些应用场合下,一个组播组地址只对应一个或有限个源IP地址(例如IPTV等视频组播报文转发的情况)。所以动态链表中的节点不会太多,匹配的速度要比树查找快得多,特别是对动态链表的Key值为128bits的IPv6组播报文非常适用。
参见图7,为一种转发数据流的设备示意图。本实施例提供了一种转发数据流的设备,包括管理模块,用于生成树表和动态链表,并关联树表和动态链表;树表表项查找模块,用于当收到数据流后,使用数据流的关键字的一部分作为索引在管理模块生成的树表中查找到对应表项;动态链表查找模块,用于根据树表表项查找模块查找到的对应表项中的内容查找到对应的动态链表;转发模块,用于动态链表查找模块查找到动态链表后,用所述关键字的其余部分作为索引在动态链表中查找到对应节点,在对应节点中获取出接口信息,根据出接口信息转发数据流。
其中,关键字具体为五元组的源地址、目的地址、源端口、目的端口和协议;或具体为七元组的源地址、目的地址、源端口、目的端口、协议、TOS域和报文的入接口;也可以为组播报文的组播组地址和源IP地址。
动态链表查找模块具体包括静态表项查找单元,用于根据树表表项查找模块查找到的对应表项中的偏移量查找到对应的静态表项;
动态链表查找单元,用于静态表项查找单元查找到静态表项后,根据静态表项包含的动态链表在内存中的地址找到对应的动态链表。
以上实施例提供的技术方案,可以通过软件代码实现,即通过c语言、c++语言或汇编语言等程序设计语言实现,这些软件代码可以存储可读取的介质中,例如光盘或硬盘。
本实施例通过使用树表和动态链表相结合的方式存储数据流的转发信息,降低了匹配速度,提高了数据流的转发性能。
以上所述的实施例,只是本发明的较优选的具体实施方式
,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
权利要求
1.一种转发数据流的方法,其特征在于,所述方法包括当收到数据流后,使用所述数据流的关键字的一部分作为索引在树表中查找到对应表项,根据所述对应表项中的内容查找对应的动态链表;用所述关键字的其余部分作为索引在动态链表中查找到对应节点,在所述对应节点中获取出接口信息,根据所述出接口信息转发所述数据流。
2.如权利要求1所述的转发数据流的方法,其特征在于,所述关键字具体为五元组的源地址、目的地址、源端口、目的端口和协议;或七元组的源地址、目的地址、源端口、目的端口、协议、业务类型TOS域和报文的入接口。
3.如权利要求1所述的转发数据流的方法,其特征在于,所述数据流为组播报文,相应地,所述关键字具体为组播组地址和源IP地址。
4.如权利要求1所述的转发数据流的方法,其特征在于,所述数据流为组播报文,相应地,所述关键字的一部分具体为组播组地址,所述关键字的其余部分具体为源IP地址。
5.如权利要求1至4任一权利要求所述的转发数据流的方法,其特征在于,所述根据所述对应表项中的内容查找到对应的动态链表的步骤中的对应表项中的内容具体为动态链表在内存中的地址。
6.如权利要求1至4任一权利要求所述的转发数据流的方法,其特征在于,所述根据所述对应表项中的内容查找到对应的动态链表的步骤具体包括根据所述对应表项中的偏移量查找到对应的静态表项,所述静态表项的内容包含动态链表在内存中的地址,根据所述地址找到对应的动态链表。
7.一种转发数据流的设备,其特征在于,所述设备包括管理模块,用于生成树表和动态链表,并关联所述树表和所述动态链表;树表表项查找模块,用于当收到数据流后,使用所述数据流的关键字的一部分作为索引在所述管理模块生成的树表中查找到对应表项;动态链表查找模块,用于根据所述树表表项查找模块查找到的对应表项中的内容查找到对应的动态链表;转发模块,用于所述动态链表查找模块查找到动态链表后,用所述关键字的其余部分作为索引在动态链表中查找到对应节点,在所述对应节点中获取出接口信息,根据所述出接口信息转发所述数据流。
8.如权利要求7所述的转发数据流的设备,其特征在于,所述关键字具体为五元组的源地址、目的地址、源端口、目的端口和协议;或具体为七元组的源地址、目的地址、源端口、目的端口、协议、业务类型TOS域和报文的入接口。
9.如权利要求7所述的转发数据流的设备,其特征在于,所述关键字具体为组播报文的组播组地址和源IP地址。
全文摘要
本发明提供了一种转发数据流的方法和设备,属于网络通信领域。为了缓解现有技术中转发数据流性能较低的问题,本发明提供了一种转发数据流的方法,包括使用数据流的关键字的一部分作为索引在树表中查找到对应表项,根据所述对应表项中的内容查找对应的动态链表;用所述关键字的其余部分作为索引在动态链表中查找到对应节点,在所述对应节点中获取出接口信息,根据所述出接口信息转发所述数据流。本发明还提供了一种转发数据流的设备,包括管理模块、树表表项查找模块、动态链表查找模块和转发模块。本发明通过使用关键字的一部分进行树查找,使用关键字的其余部分进行动态链表查找,提高了数据流的转发性能。
文档编号H04L29/06GK101047649SQ200710091029
公开日2007年10月3日 申请日期2007年4月5日 优先权日2007年4月5日
发明者陈驱 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1