报文转发方法及装置与流程

文档序号:17355737发布日期:2019-04-09 21:38阅读:313来源:国知局
报文转发方法及装置与流程

本发明涉及数据通信技术领域,具体而言,涉及一种报文转发方法及装置。



背景技术:

在数据通信技术领域中,数据通信设备(比如,路由器)的转发平面需要处理一些控制业务,比如,访问控制列表(accesscontrollist,acl)、服务质量(qualityofservice,qos)等。目前,acl、qos等控制业务可根据报文的六元组(源地址、源端口、目的地址、目的端口、层四协议号和接口索引)或者八元组(源地址、源端口、目的地址、目的端口、层四协议号、服务类型、层四标志和接口索引)唯一定义一条流,使用六元组或者八元组作为关键值构建流表项,流表项中包括关键值和其它字段。而现有技术中的流表查找方法比较耗时,一般不能满足数据报文转发性能要求。

因此,如何提供一种可解决上述问题的方法及装置,以成为本领域技术人员亟需解决的技术问题。



技术实现要素:

为了克服上述现有技术中的不足,本发明提供一种报文转发方法及装置,通过连续存储流表项提高流表项的查找速度,进而解决上述问题。

为了实现上述目的,本发明较佳实施例所提供的技术方案如下所示:

就方法而言,本发明较佳实施例提供一种报文转发方法,应用于通信设备,所述方法包括:

接收报文,并从接收的所述报文中提取关键值进行hash计算,以得到与所述报文对应的hash值;

根据所述hash值判断在hash索引表对应的一级流表中是否查找到与所述关键值相匹配的流表项,其中,所述一级流表为使用一块连续内存来保存所述流表项的存储结构;

若是,则根据所述一级流表中匹配的流表项转发所述报文;

若否,则根据计算出的hash值在hash索引表对应的二级流表中查找与所述关键值匹配的流表项,根据所述二级流表中匹配的流表项转发所述报文,其中,所述二级流表为使用冲突链表来保存流表项的存储结构。

在本发明的较佳实施例中,上述根据所述hash值判断在hash索引表对应的一级流表中是否查找到与所述关键值相匹配的流表项的步骤,包括:

根据所述hash值在所述hash索引表中查找匹配的hash表项,根据查找的匹配的hash表项中的索引指针,在所述一级流表中的对应连续存储单元查找与所述关键相匹配的流表项;所述匹配的hash表项中的索引指针指向的所述一级流表中能够存储的冲突流表项的存储单元的个数,小于所述二级流表中冲突链表能够存储的流表项的个数。

在本发明的较佳实施例中,上述方法还包括:

若在所述二级流表中未查找到与所述关键值匹配的流表项,则判断所述匹配的hash表项中的索引指针指向的所述一级流表中用于存储冲突流表项的存储单元是否有空闲;

若是,则在空闲的存储单元中存储包括所述关键值的所述报文对应的流表项;

若否,则在所述二级流表中创建包括所述关键值的所述报文对应的流表项。

在本发明的较佳实施例中,上述根据所述hash值判断在hash索引表对应的一级流表中是否查找到与所述关键值相匹配的流表项的步骤,包括:

从所有所述冲突流表项中选取hash值与所述报文的hash值相同的冲突流表项;

将所述报文的所述关键值与选出的所述冲突流表项的关键值进行对比,若两者的关键值相同,则该冲突流表项为与所述报文成功匹配的流表项。

在本发明的较佳实施例中,上述接收报文的步骤之前,所述方法还包括:

分配包括多个连续的存储单元的内存空间以构建所述一级流表,每个所述存储单元用于保存一个流表项。

在本发明的较佳实施例中,上述分配包括多个连续的存储单元的内存空间以构建所述一级流表的步骤,包括:

用采用二维数组的结构形式存储多个流表项,以构建得到所述一级流表。

就装置而言,本发明的较佳实施例提供一种报文转发装置,应用于通信设备,所述装置包括:

接收计算单元,用于接收报文,并从接收的所述报文中提取关键值进行hash计算,以得到与所述报文对应的hash值;

第一匹配判断单元,用于根据所述hash值判断在hash索引表对应的一级流表中是否查找到与所述关键值相匹配的流表项,其中,所述一级流表为使用一块连续内存来保存所述流表项的存储结构;

第一转发单元,用于在所述第一匹配判断单元的判断结果为是时,根据所述一级流表中匹配的流表项转发所述报文;

第二转发单元,用于在所述第一匹配判断单元的判断结果为否时,根据计算出的hash值在hash索引表对应的二级流表中查找与所述关键值匹配的流表项,根据所述二级流表中匹配的流表项转发所述报文,其中,所述二级流表为使用冲突链表来保存流表项的存储结构。

在本发明的较佳实施例中,上述第一匹配判断单元还用于:

根据所述hash值在所述hash索引表中查找匹配的hash表项,根据查找的匹配的hash表项中的索引指针,在所述一级流表中的对应连续存储单元查找与所述关键相匹配的流表项;所述匹配的hash表项中的索引指针指向的所述一级流表中能够存储的冲突流表项的存储单元的个数,小于所述二级流表中冲突链表能够存储的流表项的个数。

在本发明的较佳实施例中,上述装置还包括第二匹配判断单元,用于:

若在所述二级流表中未查找到与所述关键值匹配的流表项,则判断所述匹配的hash表项中的索引指针指向的所述一级流表中用于存储冲突流表项的存储单元是否有空闲;

若是,则在空闲的存储单元中存储包括所述关键值的所述报文对应的流表项;

若否,则在所述二级流表中创建包括所述关键值的所述报文对应的流表项。

在本发明的较佳实施例中,上述第一匹配判断单元还用于:

从所有所述冲突流表项中选取hash值与所述报文的hash值相同的冲突流表项;

将所述报文的所述关键值与选出的所述冲突流表项的关键值进行对比,若两者的关键值相同,则该冲突流表项为与所述报文成功匹配的流表项。

相对于现有技术而言,本发明提供的报文转发方法及装置至少具有以下有益效果:该方法及装置通过查找连续存储的流表项,提高了查找流表项的速度,有助于提高内存的使用效率。具体地,该方法通过接收报文,并从接收的所述报文中提取关键值进行hash计算;根据计算的hash值判断在hash索引表对应的一级流表中是否查找到与所述关键值相匹配的流表项,其中,所述一级流表为使用一块连续内存来保存所述流表项的存储结构;若是,则根据所述一级流表中匹配的流表项转发所述报文。本发明提供的方案减少了分配内存时的管理开销,进而提高了流表项的查找速度以及内存的使用效率。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举本发明较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明较佳实施例提供的报文转发方法的流程示意图之一。

图2为本发明较佳实施例提供的组织流表项的结构示意图。

图3为本发明较佳实施例提供的报文转发方法的流程示意图之二。

图4为本发明较佳实施例提供的报文转发装置的方框示意图之一。

图5为本发明较佳实施例提供的报文转发装置的方框示意图之二。

图标:100-报文转发装置;110-接收计算单元;120-第一匹配判断单元;130-第一转发单元;140-第二转发单元;150-第二匹配判断单元。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。此外,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

下面结合附图,对本发明的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。

在数据通信的设备(比如,路由器)中,其转发面需要处理一些控制业务如访问控制列表(accesscontrollist,acl)、服务质量(qualityofservice,qos)等。acl、qos等控制业务需要使用报文中的五元组(源地址、源端口、目的地址、目的端口和层四协议号)或者七元组(源地址、源端口、目的地址、目的端口、层四协议号、服务类型(typeofservice,tos)和层四标志)对报文进行分类控制。

因此,可以以报文的元组定义一条流。例如,以报文的六元组(源地址、源端口、目的地址、目的端口、层四协议号和接口索引)或者八元组(源地址、源端口、目的地址、目的端口、层四协议号、服务类型、层四标志和接口索引)可以唯一定义一条流;使用六元组或者八元组作为关键值构建流表项,流表项中包括关键值和其它字段(比如转发信息)。当该设备接口接收到报文后,先在流表中查找流表项,然后根据查找的流表项执行相应的操作,比如,根据转发信息转发报文。

第一实施例:

请参照图1,是本发明较佳实施例提供的报文转发方法的流程示意图之一。本发明提供的报文转发方法可以应用于通信设备,该方法通过首先查询连续存储在通信设备中的多个流表项,提高了查询流表项的速度,有助于提升acl、qos等控制业务的处理速度。

下面将对图1中所示的报文转发方法的具体流程和步骤进行详细阐述。在本实施例中,报文转发方法可以包括以下步骤:

步骤s210,接收报文,并从接收的所述报文中提取关键值进行hash计算,以得到与所述报文对应的hash值。

在步骤s210之前,该方法还可以包括创建一级流表的步骤。例如,分配包括多个连续的存储单元的内存空间以构建所述一级流表,每个所述存储单元用于保存一个流表项。该流表项可以包从对应的报文提取关键值(如五元组或者七元组等),然后利用所述关键值进行哈希运算得到对应的hash值等,将具有相同hash值且不同关键值的流表项作为冲突流表项。

进一步地,可采用二维数组的结构形式存储多个流表项,以构建得到所述一级流表,也就是一级流表在连续的内存中存储流表项。所述二维数组的每个存储单元存储一个流表项,冲突流表项的数目是固定的,对于hash值冲突的流表项来说,一级流表无空置存储单元存储冲突流表项时,便将冲突流表项放入同一hash索引表项所对应的二级流表中,二级流表为使用冲突链表来保存流表项的存储结构。基于上述设计,相比于离散存储,连续存储的流表项减少了分配内存时的管理开销,有助于提升内存的使用效率。

步骤s220,根据所述hash值判断在hash索引表对应的一级流表中是否查找到与所述关键值相匹配的流表项,其中,所述一级流表为使用一块连续内存来保存所述流表项的存储结构。

进一步地,所述关键值可以为从报文中提取的五元组或者七元组。hash值以得到的关键值为基础,通过对关键值进行如上述的hash计算得到hash值。其中,关键值与报文相对应,不同关键值可能存在相同的hash值,也可能存在不同的hash值,其中,所述hash值及关键值可作为该报文的特征值。

可以理解的是,流表项的数目可以根据通信设备所分配的连续存储单元的大小以及每个流表项所占字节大小而设置,这里不作具体限定。

在本实施例中,步骤s220可以包括:根据所述hash值在所述hash索引表中查找匹配的hash表项,根据查找的匹配的hash表项中的索引指针,在所述一级流表中的对应连续存储单元查找与所述关键相匹配的流表项;所述匹配的hash表项中的索引指针指向的所述一级流表中能够存储的冲突流表项的存储单元的个数,小于所述二级流表中冲突链表能够存储的流表项的个数。由于一级流表早于二级流表生成,所以从使用频率来说一级流表的命中频率更高。一级流表中冲突流表项的个数可以根据实际情况进行设定。

进一步地,请参照图2,是本发明较佳实施例提供的组织流表项的结构示意图,其中图2中所示的key为所述关键值的简称。在本实施例中,一级流表中所有的流表项位于一块连续的内存中。例如,其存储形式可以为二维数组l1flow[p][q](p和q根据实际情况确定,p可以为哈希值的个数,q可以为同一哈希值的冲突流表项的个数,均为大于等于0的整数)或者其它形式。可理解地,数组l1flow[p][q]最多存储p*q个流表项,其内存大小为p*q个流表项占用的内存大小。一级流表的访问则为二维数组的访问,其具体存储方式,比如:hash值为0的流表项存储在hash值0为的冲突链上,比如,l1flow[0][0],l1flow[0][1],…,l1flow[0][q-1];hash值为1的流表项存储在成员hash值1为的冲突链上l1flow[1][0],l1flow[1][1],…,l1flow[1][q-1],依次类推。

请再次参照图1,步骤s230,若是,则根据所述一级流表中匹配的流表项转发所述报文。

在本实施例中,从匹配的hash表项中的索引指针指向的一级流表中的所有冲突流表项中选取关键值与所述报文的关键值相同的流表项;若检测到关键值在匹配的hash表项中的索引指针指向的一级流表所包含的冲突流表项的关键值中,则所包含该关键值的冲突流表项便为目标流表项,该目标流表项也就是根据接收的报文所需要查找的流表项。

可以理解地,由于一级流表的流表项保存在地址连续的存储单元中;处理器(比如,cpu)的高速缓存根据其读取内容宽度一次可以从内存中读取多个流表项,在进行报文转发前先从高速缓存中进行查询,可减少读内存的次数,进而提高查找速度。

步骤s240,若否,则根据计算出的hash值在hash索引表对应的二级流表中查找与所述关键值匹配的流表项,根据所述二级流表中匹配的流表项转发所述报文,其中,所述二级流表为使用冲突链表来保存流表项的存储结构。

在本实施例中,由于一级流表中保存同一hash值对应的冲突流表项的个数是有限定的,在一级流表没有放置同一hash值冲突流表项的冲突单元时,将冲突流表项放入同一hash索引表项所对应的二级流表中。在查找到目标流表项后,该方法还可以包括将查找到的所述目标流表项对应的流表项指针存储记录到第一预设位置。该第一预设位置可根据实际情况进行设置,比如为报文描述符。其中,报文描述符是存储报文信息的控制块。

acl、qos等控制业务可以通过首次查找的查询路径记录在第一预设位置中。若要再次根据该报文执行acl、qos等控制业务或执行其他业务时,可直接使用在第一预设位置中记录的查询路径,进一步加快控制业务的处理速度。

第二实施例:

请参照图3,是本发明较佳实施例提供的报文转发方法的流程示意图之二。第二实施例提供的报文转发方法其步骤原理以及达到技术效果与第一实施例中的基本相同,不同之处在于,第二实施例提供的方法还可以包括步骤s250、步骤s260及步骤s270。

步骤s250,若在所述二级流表中未查找到与所述关键值匹配的流表项,则判断所述匹配的hash表项中的索引指针指向的所述一级流表中用于存储冲突流表项的存储单元是否有空闲。

步骤s260,若是,则在空闲的存储单元中存储包括所述关键值的所述报文对应的流表项。

步骤s270,若否,则在所述二级流表中创建包括所述关键值的所述报文对应的流表项。

可理解地,由于一级流表中保存同一hash值对应的冲突流表项的个数是有限定的,在一级流表没有放置同一hash值冲突流表项的冲突单元时,便将冲突流表项放入同一hash索引表项所对应的二级流表中。若在一级流表及二级流表均未匹配到与报文关键值对应的流表项,则在一级流表中查找是否存在空置的存储单元,若一级流表中无空的存储单元,则分配离散存储单元以创建与所述报文对应的流表项,也就是在二级流表中创建该流表项。

其中,查找空置的存储单元可理解为查找上述的l1flow[p][q]中是否有未存储有流表项的成员(比如,l1flow[1][1])存在,若存在的话,便将该成员作为空的存储单元以存储所接收的报文对应的流表项。

若上述的l1flow[p][q]成员中,均存储有流表项,则在二级流表中创建与该报文对应的流表项。而二级流表一般为离散的存储空间中所存储的一个或多个流表项构成。

需要说明的是,由于在两级流表中均未查找到匹配的流表项,则该报文交给对应的业务模块进行对应流程的处理。

基于上述设计,当再次接收到与该报文相同的报文时,可直接查找到对应的流表项,进一步提高查找流表项的速度。

在本实施例中,在查找到目标流表项后,该方法还可以包括将查找到的所述目标流表项对应的流表项指针存储记录到上述的第一预设位置,这里不再赘述。

一般地,在一级流表中某一hash值对应的用于存储冲突流表项的存储单元个数有限,当该冲突流表项对应的在该存储单元全部存满时,便从二级流表中构建对应的流表项。例如,首先根据需要接收的报文计算该报文的关键值、hash值,根据关键值、hash值以及报文的转发信息等形成流表项;若一级流表中与该hash值对应的存储空间存满流表项时,不存在多余的存储空间存储该流表项,则分配离散的存储空间,并将流表项存储在与该hash值对应的存储空间中。

第三实施例:

请参照图4,是本发明较佳实施例提供的报文转发装置100的方框示意图之一。该报文转发装置100可以适用于图1所示的报文转发方法,进而可提高查找流表项的速度。该报文转发装置100可以包括接收计算单元110、第一匹配判断单元120、第一转发单元130以及第二转发单元140。

接收计算单元110,用于接收报文,并从接收的所述报文中提取关键值进行hash计算,以得到与所述报文对应的hash值。具体地,接收计算单元110可以用于执行图1所示的步骤s210,具体操作内容可参照对步骤s210的详细描述。

第一匹配判断单元120,用于根据所述hash值判断在hash索引表对应的一级流表中是否查找到与所述关键值相匹配的流表项,其中,所述一级流表为使用一块连续内存来保存所述流表项的存储结构。具体地,第一匹配判断单元120可以用于执行图1所示的步骤s220,具体操作内容可参照对步骤s220的详细描述。

第一转发单元130,用于在所述第一匹配判断单元120的判断结果为是时,根据所述一级流表中匹配的流表项转发所述报文。具体地,第一转发单元130可以用于执行图1所示的步骤s230,具体操作内容可参照对步骤s230的详细描述,这里不再赘述。

第二转发单元140,用于在所述第一匹配判断单元120的判断结果为否时,根据计算出的hash值在hash索引表对应的二级流表中查找与所述关键值匹配的流表项,根据所述二级流表中匹配的流表项转发所述报文,其中,所述二级流表为使用冲突链表来保存流表项的存储结构。具体地,第二转发单元140可以用于执行图1所示的步骤s240,具体操作内容可参照对步骤s240的详细描述,这里不再赘述。

进一步地,请参照图5,是本发明较佳实施例提供的报文转发装置100的方框示意图之二。该报文转发装置100还可以包括第二匹配判断单元150。

第二匹配判断单元150,用于若在所述二级流表中未查找到与所述关键值匹配的流表项,则判断所述匹配的hash表项中的索引指针指向的所述一级流表中用于存储冲突流表项的存储单元是否有空闲;若是,则在空闲的存储单元中存储包括所述关键值的所述报文对应的流表项;若否,则在所述二级流表中创建包括所述关键值的所述报文对应的流表项。

具体地,第二匹配判断单元150可以用于执行图3所示的步骤s250、步骤s260及步骤s270,具体操作内容可参照对步骤s250至步骤s270的详细描述,这里不再赘述。

综上所述,本发明提供一种报文转发方法及装置。该方法及装置通过查找连续存储的流表项,提高了查找流表项的速度,有助于提高内存的使用效率。具体地,该方法通过接收报文,并从接收的所述报文中提取关键值进行hash计算;根据计算的hash值判断在hash索引表对应的一级流表中是否查找到与所述关键值相匹配的流表项,其中,所述一级流表为使用一块连续内存来保存所述流表项的存储结构;若是,则根据所述一级流表中匹配的流表项转发所述报文。其中,连续存储在一级流表中的流表项提高了内存的访问效率并且减少了分配内存时的管理开销,进而提高了流表项的查找速度以及内存的使用效率。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1