一种流分类时关键字匹配的方法和装置与流程

文档序号:32312431发布日期:2022-11-23 12:12阅读:132来源:国知局
一种流分类时关键字匹配的方法和装置与流程

1.本发明涉及通信技术领域,特别是涉及一种流分类时关键字匹配的方法和装置。


背景技术:

2.随着网络技术的飞速发展,基于网络的应用越来越多,越来越复杂。流量的识别分类,能够给网络提供服务质量、流量管理、安全等网络管理功能。流分类的方法是基于报文首部的内容,提取关键字,与预先设置的规则进行匹配,匹配了则根据优先级进行仲裁,然后执行相应的动作。
3.常见的流分类是将所有需要的关键字通过配置是否使能该关键字,组合成一个关键字合集后进行哈希查找。使用哈希匹配查找流,当流分类所需的关键字越来越多时,哈希冲突也会越来越大。随着这个关键字的种类越来越多,且两包之间的间隔越来越小,甚至是两拍一个包的场景,这种查表方式不够灵活,也难以支持各种组合的关键字需求。
4.对于以上问题,传统的方法是将各种关键字线性组合成多组组合关键字,根据配置确定每组组合关键字中某个关键字是否生效。采用这种方式的缺点是:1)随着关键字的种类越来越多,组合关键字的位宽越来越宽,每个组合中无效关键字越来越多,哈希冲突变大的同时造成资源浪费;2)没法满足各种关键字之间的任意组合的需求。3)可能存在某个组合关键字的资源不够用,而另外一个组合关键字的资源浪费的情况。
5.鉴于此,如何克服现有技术所存在的缺陷,解决现有流分类场景中关键字种类多造成的查表不灵活的现象,是本技术领域待解决的问题。


技术实现要素:

6.针对现有技术的以上缺陷或改进需求,本发明解决了现有流分类场景中关键字种类多造成的查表不灵活的问题。
7.本发明实施例采用如下技术方案:
8.第一方面,本发明提供了一种流分类时关键字匹配的方法,具体为:将需要进行匹配的关键字组成二维查表结构,每个表项对应一个关键字类型且具有唯一的表号,二维查表结构的行数和列数与关键字类型的数量对应,第一行为全部关键字类型的级联,后续每一行依次去掉前一行的第一个表项;获取数据包中的关键字,每一行依次向后逐列匹配二维查表结构中的对应表项或同时匹配对应表项和借用表项;当关键字对应的表项和/或借用的表项击中时,通过关键字对应的行为表确定后续执行的动作,直至完成查找。
9.优选的,将需要进行匹配的关键字组成二维查表结构,具体包括:将所有需匹配的关键字级联根据位宽由小到大和优先级由高到低的顺序排列,每组关键字依次作为第一行的一个表项;自第二行起,每行依次去掉上一行的第一组关键字,直至最后一行仅有一组关键字。
10.优选的,将需要进行匹配的关键字组成二维查表结构,还包括:当新增关键字时,将新增的关键字根据位宽由小到大和优先级由高到低插入每一行对应的位置,并按照新增
关键字的数量和位置增加相应的行数;当删除关键字时,在每一行中删除对应的表项,并删除相应的行数。
11.优选的,每一行依次向后逐列匹配二维查表结构中的对应表项或同时匹配对应表项和借用表项,具体包括:按照每一行表项对应的关键字顺序,由每一行的第一个表项开始,计算当前表项对应的关键字的哈希值,根据哈希值对表项进行匹配查找;根据查表结果击中的行为表项判断下一级查找是否需要进行表项借用,同步查找对应的表项和借用表项。
12.优选的,根据查表结果击中的行为表项判断下一级查找是否需要进行表项借用,还包括:向比本次查找的关键字位宽大或者相等的关键字对应的表项借用,若一个关键字的位宽小于预设位宽下限,对应的表项不被其它表项借用。
13.优选的,每一行依次向后逐列匹配二维查表结构中的对应表项或同时匹配对应表项和借用表项,还包括:对于每个表项,需要匹配的关键字内容为:{表号,{前级击中的表号,前级击中的槽位编号,前级哈希值},本次查找的关键字};当用于匹配的表项为借用表时,所述表号为本次查找关键字原本的表号。
14.优选的,需要匹配的关键字内容还包括:将{前级击中的表号,前级击中的槽位编号,前级哈希值}进行归一化处理,以最大需求位宽作为归一化处理后的位宽。
15.优选的,每一行依次向后逐列匹配二维查表结构中的对应表项和借用表项,还包括:每个表项被借用的最大次数为处理一个数据包的拍数减一。
16.优选的,通过关键字对应的行为表确定后续执行的动作,具体包括:当关键字同时击中多个表项时,根据行为表项中的优先级确定最终的查表结果。
17.另一方面,本发明提供了一种流分类时关键字匹配的装置,具体为:包括至少一个处理器和存储器,至少一个处理器和存储器之间通过数据总线连接,存储器存储能被至少一个处理器执行的指令,指令在被处理器执行后,用于完成第一方面中的流分类时关键字匹配的方法。
18.与现有技术相比,本发明实施例的有益效果在于:提供了一种灵活的串行级联流分类方法,采用梯形的串行级联方法实现各种关键字的任意组合,同时通过给每个表标识表号并匹配表号实现表项之间的资源借用,还可通过资源借用并随着级联的增加而增加槽位号或者表项深度的方式减少哈希冲突,在多个关键字随意组合匹配的场景下尽可能的加快匹配速度,并节省表项的存储资源。
附图说明
19.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
20.图1为本发明实施例提供的一种流分类时关键字匹配的方法流程图;
21.图2为本发明实施例中使用的一种二维查表结构示意图;
22.图3为本发明实施例中使用的一种4槽位的哈希查找表项示意图;
23.图4为本发明实施例中串联排序后获得的一种二维查找表结构示意图;
24.图5为本发明实施例中使用的一种行为表示意图;
25.图6为本发明实施例提供的一种流分类时关键字匹配的查找时序示意图;
26.图7为本发明实施例提供的另一种流分类时关键字匹配的查找时序示意图;
27.图8为本发明实施例提供的另一种流分类时关键字匹配的查找时序示意图;
28.图9为本发明实施例中获得的一种关键字匹配结果示意图;
29.图10为本发明实施例提供的一种流分类时关键字匹配的装置结构示意图;
30.其中,附图标记如下:
31.11:处理器;12:存储器。
具体实施方式
32.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
33.本发明是一种特定功能系统的体系结构,因此在具体实施例中主要说明各结构模组的功能逻辑关系,并不对具体软件和硬件实施方式做限定。
34.此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。
35.实施例1:
36.随着网络应用越来越复杂,管理也越来越精细化,同时网络速率也越来越高,因此对流分类的要求也越来越高。同时,随着应用的灵活多变的,流分类的种类越来越多,所需要的资源也是变化的,具体分配多少资源难以确定。
37.现有的多关键字查找方法,是基于配置选择某个关键字是否使能,对每个组合分别进行匹配。
38.以四个关键字a、b、c、d为例,需要提供四种配置选择,例如:1)a+b;;2)a+c;3)a+b+c;4)a+b+c+d。
39.由于不确定会配置哪些域,所以关键字表的位宽需要设计为a+b+c+d四个关键字位宽的和,比较浪费资源。同时考虑到尽可能资源共享,在两拍一个包的场景下,会把资源分成两个表,每一拍对两个表各查找一次,即一拍查找两次,在两拍中对于一个包查找四次,但是这两个表之间的资源没有办法共享。
40.如果想支持更多的关键字组合,那就需要把资源分成更多个表,表项位宽仍然为所有关键字位宽之和,造成资源浪费,同时表之间的资源没有办法共享,可能造成有些表的资源浪费,有的表项资源不够,组合越多这种情况越明显。
41.如图1所示,本发明实施例提供的流分类时关键字匹配的方法具体步骤如下。
42.步骤101:将需要进行匹配的关键字组成二维查表结构。
43.为了提高多个关键字的查找效率,本实施例提供的方案中,将所有关键字对应的哈希查找表项进行串行级联,组成类似梯形的二维查表结构。二维查表结构中的每个表项对应一个关键字类型且具有唯一的表号,二维查表结构的行数和列数与关键字类型的数量对应,第一行为全部关键字类型的级联,后续每一行依次去掉前一行的第一个表项。进行关键字的匹配查找时,每一拍可以同步查找多个表项,进行上述排列后,各列的表项对应了所
有的关键字类型组合,依照二维查表结构逐列向后查找,即可快速对所有可能的关键字组合进行匹配。
44.以三个关键字a、b、c为例,组成如图2所示的二维查表结构。其中,a1对应关键字a,b1和b2对应关键字b,c1、c2和c3对应关键字c。第一步同步查找a1、b1、c1表,第二步同步查找b2、c2表、第三步查找c3表。每个表都存在击中与不击中两种情况,可以覆盖a、b、c单独击中、a+b级联击中、a+c级联击中(隐含a+b优先级高于a+c)、b+c级联击中、a+b+c级联击中,以及所有关键字都未击中,总共8种情况,能够满足a、b、c单独查找、以及a+b、a+c、b+c、a+b+c的组合查找需求。
45.由于需要通过级联的方式对不同的关键字组合进行匹配,本实施例中,表项都对应一个行为表,当关键字与表项匹配时,读取相应行为表对应条目的内容作为查表的结果,并根据行为表中的行为进行下一步的动作。
46.在进行关键字匹配时,为了减少表的深度,可以使用哈希值作为查找的索引,将关键字压缩为哈希值索引以减少位宽。但是,使用哈希值作为索引,就可能导致哈希冲突。为了避免哈希冲突,在表项中为每个关键字分配多个槽位,每个槽位对应一个关键字的一个哈希值,以避免多个关键字的哈希值相同的情况。在进行匹配时,当关键字与表项中某个槽位对应的关键字一致,关键字击中该槽位,即在表项中查找到该关键字。具体的槽位数根据实际需要确定,本实施例提供的方法中,为了避免表项过深,还可以使用表项借用,而不是直接增加原表的深度。每个表项的深度根据关键字的位宽确定,假设关键字的位宽为n,那么深度为2n,每个表项真实可以容纳关键字的最大个数为表的深度*槽位数。考虑到越往后级联哈希冲突越大,所以随着级联数的增加,可以根据压缩比和实际需要适当增加槽位数或表项的深度,也可以同时增加槽位数和深度。如图3所示,为某个具体实例中4槽位的哈希查找表项示意图,图中每个槽位代表一个哈希值,每个序号相同的槽位对应一个关键字,每个关键字的具体槽位数根据关键字位宽决定。
47.步骤102:获取数据包中的关键字,每一行依次向后逐列匹配二维查表结构中的对应表项或同时匹配对应表项和借用表项。
48.二维查找表项组织完成后,即可按照表项顺序完成查找,每一列的表项可以在一拍之内同步完成查找,并向后继续查找或借用。具体的:按照每一行表项对应的关键字顺序,由每一行的第一个表项开始,计算当前表项对应的关键字的哈希值,根据哈希值对表项进行匹配查找。根据查表结果击中的行为表项判断下一级查找是否需要进行表项借用,同步查找对应的表项和借用表项。
49.本实施例提供的方法中,可以通过表项借用节省资源。步骤101中,为每个表项分配一个具有唯一性标识的表号,在进行借用时,通过表号确定原本需查找的关键字,以避免借用造成的混乱。
50.在图2所示的二维查找表结构中,第一步同步查找a1、b1、c1表,第二步查找b2、c2表、第三步查找c3表。a1表存在击中与不击中两种情况,击中则用a-hash为具体的计算值,否则使用配置的值(0)代替。b2表击中时则使用b-hash作为key中的前级哈希值查找c3表,否则使用a-hash去查找c3表,以此类推。对于多于3个key的情况,逐列依次往后往下叠加,直至所有关键字和所有表项都进行匹配,即完成了所有可能的关键字组合的查找匹配。
51.在实际实施中,如图2所示的3个关键字的二维查找表结构中,各种关键字组合实
现说明如下。
52.1)a、b、c:通过直接查找a1、b1、c1表项实现每个关键字的单独查表;
53.2)a+b:在a1表击中的情况下,查找b2表;
54.3)b+c:在a1没有击中的情况且b2击中的情况下,查找c3;或在b1击中的情况下,查找c2。这两组之间资源互不冲突,可以共用。
55.4)a+c:在a1击中且b2没有击中的情况下,查找c3表;在具体实施中,a+b和a+c的优先级可以通过表项排列顺序进行确定,当b排序在c之前时,按照查表顺序,a+b的优先级高于a+c。
56.5)a+b+c:在a1和b2击中的情况下,查找c3。
57.通过上述过程,可以仅通过3次查找即完成3个关键字8中组合的查找匹配,在多个关键字组合的情况下明显提高了查找效率。
58.步骤103:当关键字对应的表项和/或借用的表项击中时,通过关键字对应的行为表确定后续执行的动作,直至完成查找。
59.在步骤103的匹配过程中,当某个关键字内容击中时,通过对应行为表确定该查找结果的优先级、以及是否停止往后级联查找的指示。行为表中需要对每个关键字都设定行为,具体的行为根据需求和配置资源来确定。本实施例提供的方法中,后续的行为根据需要可以设置为:停止查找、继续向后查找、使用借用表查找等。
60.当某个表项的资源紧张时,为了在同一拍中完成一组关键字组合的查找,可以向其他表项中借用资源。前级击中模块通过行为表确定要借用的表号,同步查找原本应查找的表和借用的表,需要匹配的关键字内容不变,根据关键字内容中的第一个表号唯一性关联本次查找的关键字。评判匹配结果时,以原本应查找的表作为关键字对应表的查找结果,若只有借用的表击中时,也认为本次查找的关键字击中原本的表项,借用表击中后的行为与原本的表项一致。
61.为了避免反向借用,仅向比本次查找的关键字位宽大或者相等的关键字借用。比如b和c两个关键字,本次查找的关键字b位宽比c大,那么c表可以向b表借用。
62.在实际的匹配过程中,由于原本应查找的表和借用的表同步查找,查找完毕后,可能存在多个表都击中的情况,因此,还需要对所有行为表项配置一个优先级,用于仲裁使用的结果。当有多个表击中时,查找结束后根据表项中的优先级确定最终的查表结果。
63.经过本实施例中提供的步骤101-步骤103后,通过将关键字串联组成二维查找表项全方位的覆盖多种关键字的任意组合,还能通过表项借用节省资源。
64.在步骤101中,为了使每一行表项的排列顺序和关键字的优先级顺序一致,在具体实施中,把优先级高关键字的排在前面。另一方面,位宽越大的情况下哈希冲突的可能性越大,为了减少哈希冲突,同优先级的关键字把位宽小的排在前。进一步的,对于位宽较大的关键字,可以进一步通过增加加深表项深度或者扩宽槽位数的方式减少哈希冲突,整体上节省资源。具体的,可以将所有需匹配的关键字级联根据位宽由小到大和优先级由高到低的顺序排列,每组关键字依次作为第一行的一个表项。自第二行起,每行依次去掉上一行的第一组关键字,直至最后一行仅有一组关键字。
65.进一步的,在实际实施场景中,关键字的数量和类型可能会发生变化。当关键字发生变化时,还需要按照上述顺序对关键字进行排列,完成二维查找表的组织。当新增关键字
时,将新增的关键字根据位宽由小到大和优先级由高到低插入每一行对应的位置,并按照新增关键字的数量和位置增加相应的行数;当删除关键字时,在每一行中删除对应的表项,并删除相应的行数。通过该方式,可以方便快速的调整关键字组合,使得设置调整更灵活,能够更灵活的适应适应业务变化。
66.在进行匹配时,为了方便进行级联匹配以及表项借用,在步骤102进行匹配查找时,对于每个表项,需要匹配的关键字(key)内容为:{表号,{前级击中的表号,前级击中的槽位编号,前级哈希值},本次查找的关键字}。表号表示关键字对应的表号,唯一性标识本次查找的是哪个关键字。为了避免借用导致的混乱或冲突,当用于匹配的表项为借用表时,表号为本次查找关键字原本的表号,而非借用的表号。第一次查找或者前级没有击中之前,所有前级信息默认为0或者为某个配置值。{前级击中的表号,前级击中的槽位编号,前级哈希值}:上一次查找结果的唯一性标识,前级击中的表号表示前一次级联的表,前级击中的槽位编号为前一次击中的哈希槽位号的一个编号,区分不同的槽位的查找结果,减少后续查表的哈希冲突。当单独查找某个关键字时,表号为自身所对应的表号,由于是直接查找不存在前一级的级联,因此{前级击中的表号,前级击中的槽位编号,前级哈希值}所有值都为0。当出现表项借用的情况时,key的所有值保持不变。如图3所示的表项结构中,该关键字类型对应的表项包含4个槽位,表示该条目可以容纳4个匹配的关键字内容,分别为槽位0、1、2、3,各槽位分别编号为二进制3’h00、3’h01、3’h10、3’h11。假设本次击中的是槽位1,那么后续查找使用的编号就为3’h01,该标号唯一标识此条目的此槽位号。
67.本实施例中,在表项资源紧张时,无需扩大表项本身的资源,而是通过表项借用减少资源占有。本实施例中,资源借用通过具有唯一性标识的表号来实现的,在匹配关键字的同时,需要匹配表号,通过表号确定匹配的真实key。通过在所有表的行为表项中,为下一级查表需要借用的表设置标记来实现,例如:不存在借用时标记值为0,存在借用时标记值为借用的表号。
68.在实际实施过程中,两拍及以上处理一个数据包的情形下,向比本次查找的关键字位宽大或者相等的关键字对应的表项借用。如图2的场景中,可以存在如下借用情况:1)c表项之间可以互相借用;2)b表项之间可以互相借用;3)如果c的key位宽小于等于b,那么c可以借用b的表。以c3借用b2的key为例,即查找c3表的同时,还需要查找b2表项,若b2表击中,则认为c key被击中。若发生击中,对应的行为表索引和行为表也同步借用,即c3表使用b2表对应的行为表项,索引为b2表常规击中时的索引。另一方面,若一个关键字的位宽小于预设位宽下限,可以考虑直接使用关键字索引,对应的表项不被其它表项借用。同时,由于不能在同一拍中对一个表项进行两次查询,因此同步查找的表之间不互相借用,需要错拍借用。
69.进一步的,由于表项槽位数或者深度不一样,为了支持表项借用,将{前级击中的表号,前级击中的槽位编号,前级哈希值}进行归一化处理,以最大需求位宽作为归一化处理后的位宽。例如,当表项的个数为n时,用二进制唯一性表示每个表,表号依然使用自身的表号不变,槽位标号和前级哈希值则取最大的位宽来归一化,位宽较小的在高位补0。
70.进一步的,本实施例中,bn、cn、dn的内容本身不相同,借用表项时可能会有相同的内容形式,但是除了特殊的直接查找表之外,为了表项之间能够相互借用,除了本次或新增查找的关键字不一样之外,所有表项中的内容格式也可以进行归一化。
71.在进行表项资源借用时,一个表可以被几个表借用,取决于一个表对于一个数据包能够被查表的次数。由于不能在同一拍中对一个表项进行两次查询,因此每个表项被借用的最大次数为处理一个数据包的拍数减一。当两拍处理一个数据包时,由于自己本身需要进行查表,因此只能被一个表借用;如果是n(n》=2)拍处理一个数据包,即可被n-1个表借用。
72.本实施例提供的流分类时关键字匹配的方法,设计了一种类似梯形结构的串行级联流分类方法,在查找匹配是快速全覆盖各种关键字的任意组合,并通过匹配表号实现表项借用,节省了表项存储资源;通过匹配表号、编号,还可通过资源借用并随着级联的增加而增加槽位号或者表项深度的方式减少哈希冲突,能同时适用性低、中和高速率的数据包处理场景,实现多个关键字组合时的快速匹配。
73.实施例2:
74.基于实施例1提供的流分类时关键字匹配的方法,在不同的具体应用场景中,还可以根据使用需求或实际场景的不同进行补充和调整。本实施例中,提供一个具体场景中的实例,可以根据实施例1中提供的方法,参考本实施例中的实例完成实施。以下仅为一种可能的实现方式,在具体实施中可以根据实际,在不冲突的情况下与现有实施方式相结合,或对具体实施过程进行调整。本实施例中的各具体数值是为了便于描述而提供的某个具体场景中的一组可用值,在具体实施过程中,各数值根据实际需求和业务特性确定。
75.本实施例的具体场景中,以4个关键字a、b、c、d为例进行具体说明。关键字a为位宽7比特的端口号,关键字b为位宽12比特的虚拟局域网编号(virtual local area network identity,简写为vlan id),关键字c为位宽3比特的vlan服务类别(class of service,简写为cos)、d为位宽16比特的以太网类型。
76.首先,根据步骤101,将4个关键字对应的表项串联为二维查找表结构。具体的,第一行包含所有四个关键字的所有对应表项,根据实际业务需求确定关键字之间的优先级并考虑关键字的位宽,端口默认需要查找因此优先级最高,本实施例的业务场景中vlan的优先级高于以太网类型。本实施例的关键字组合中,考虑到实际应用中vlan cos与vlan id绑定,且通常先查找vlan id,后查找vlan cos,因此vlan id排序在vlan cos之前。根据优先级排序后,第一行的表项为:端口—vlan id—vlan cos—以太网类型。
77.后续每一行去掉前一行的第一个表项,第二行的表项为:vlan id—vlan cos—以太网类型,第三行的表项为:vlan cos—以太网类型,第四行的表项为:以太网类型。由于vlan cos不会单独出现,为了减少查表量,进一步将第3行vlan cos为首的串行表舍弃。
78.进行上述一个如图4所示。
79.二维查找表中包含8个表项,因此使用3个比特唯一性标识某个表,表号的二进制值分别为:000、001、010、011、100、101、110、111,分别对应十进制的0-7。
80.对于每个表项,还需要确定每个表的哈希槽位数和位宽。具体的槽位数和位宽根据实际业务需求决定。。
81.1)表0为直接查找表,深度为128;
82.2)表1使用4槽位,深度为512的表;
83.3)表2使用8槽位,深度为1k的表;
84.4)表3使用8槽位,深度为2k的表;
85.5)表4使用4槽位,深度为256的表;
86.6)表5使用4槽位,深度为512的表;
87.7)表6使用8槽位,深度为1k的表;
88.8)表7使用4槽位,深度为256的表。
89.为了便于表项借用,对关键字结构中的{前级击中的表号,前级击中的槽位编号,前级哈希值}进行归一化,前级击中的表号的位宽与唯一性标识表号的位宽一致为3比特,前级击中的槽位编号与最大槽位数8的位宽一致为3比特,前级哈希值根据实际需求使用11比特。对于位宽不够的表,每个参数的高比特补0。
90.根据如图5所示的行为表,确定行为表项内容中借用的表项编号和查表结果优先级的位宽,表项编号的位宽与表号位宽一致为3比特,查表结果优先级位宽根据表项数量8设置为3比特。
91.本实施例的场景中,每两拍处理一个数据包,因此一个表项能够被借用的最大次数为1次。
92.根据步骤102,对数据包中的关键字进行匹配查找,在本实施例中2拍处理一个数据包的高速场景中,查找时序如图6所示,clock表示基准时钟的时序,pkt_vld行表示数据包解码处理的时序,pkt表示数据包的时序,后四行表示表项查找的时序,数字代表查找的表号。第一拍同步查找表0、表4和表7;第二拍同步查找表1和表5;第三拍同步查找表2和表6,第四拍同步查找表3。根据本实施例的方法进行查找,仅需四拍即可完成8种关键字组合的查找,并且不会改变现有的查找时序,提高了查找效率,并且易于与现有系统进行整合。在其它场景中,当处理时序为4拍处理一个数据包时,时序图如图7所示。当处理时序为4拍处理一个数据包时,时序图如图8所示,图7和图8中2_6_find_en行对比可见,图8中由于发生了表3向表6的借用,因此表2和表6的总处理时长加倍,但与表3的查找并行进行,整体的查找时长未变长。由图6-图8可知,实施例1中提供的方法可以适用于低、中、高速率的流分类场景中。在具体实施场景中,处理时序可以根据实际需要进行调整。
93.对于本实施例中的数据包1,关键字匹配如图9所示。图中第二列为关键字表的内容,第三列到第九列为查找击中后关键字表对应的行为表的内容。根据步骤103,依照上述匹配查找方法和时序,结合行为表中的动作,对于数据包1中各关键字和关键字组合具体的查找过程如下。
94.1)查找第一行以端口为首的串行级联表:
95.a)查找表0:直接使用端口查找0表,端口查找结果有效,下级不需要借用表,优先级为0,继续往下查找表1。
96.b)查找表1:用{3’h0,3’h0,端口}表示前级表0的信息,本次新增的关键字为vlan id。计算的哈希结果为v1-hash,使用哈希值v1-hash去查找表1。查表结果为有效,击中的槽位号为2,下级不需要借用表,优先级为3,继续往下查找表2。
97.c)查找表2:用{3’h1,3’h2,v1-hash}表示前级表1的信息,本次新增的关键字为vlan cos。计算的哈希结果为c1-hash,使用哈希值c1-hash去查找表2。查表结果为有效,击中的槽位号为6,下级需要借用表6,优先级为5,继续往下查找表3。
98.d)同步查找表3和借用的表6:{3’h2,3’h6,c1-hash}表示前级表2的信息,本次新增的关键字为以太网类型,查找的关键字内容都为{3’h3,{3’h2,3’h6,c1-hash},以太网类
型}。计算的哈希结果为e1-hash,使用哈希值e1-hash去查找表3和表6。查表6结果为无效,查表3结果为有效,表3对应的行为表结果是优先级为7,停止查找指示为1,正常结束本条以端口为首的串行级联查找结束。
99.2)查找第二行以vlan id为首的串行级联表:
100.a)查找表4:前级信息都为0,本次查找关键字为vlan id,直接使用计算的哈希值v2-hash去查找表4。查表结果为有效,击中的槽位号为1,下级不需要借用表,优先级为2,继续往下查找表5;
101.b)查找表5:用{3’h4,3’h1,v2-hash}表示前级表4的信息,本次新增的关键字为vlan cos。计算的哈希结果为c2-hash,使用哈希值c2-hash去查找表5。查表结果为有效,优先级为4,停止查找指示为1,提前结束本条以vlan id为首的串行级联查找结束,无需再查找表6。
102.3)单独查找第三行以太网类型表:
103.a)查找表7:前级信息都为0,本次查找关键字为以太网类型,直接使用计算的哈希值e2-hash去查找表7。查表结果为有效,优先级为1,停止查找指示为1,正常结束本条查找结束。
104.对所有表项和关键字都查找完毕后,即可仲裁查找的结果,根据匹配到的关键字或关键字组合完成流分类。在上述过程中,通过比较有效查找结果,以借用表6实现查找表3的结果优先级最高,以该结果为最终的查找结果,完成流的分类操作,后续根据该流分类的结果对包进行后续处理。。
105.本实施例基于实施例1,在一个具体实例中完成了串行级联查找流分类,全覆盖各种关键字的任意组合,在关键字和关键字的组合越多的场景下优势越明显,并减少了过多关键字组合或过多表项造成的哈希冲突。同时,通过表项之间的借用,节省了资源,提高了资源利用率
106.实施例3:
107.在上述实施例1至实施例2提供的流分类时关键字匹配的方法的基础上,本发明还提供了一种可用于实现上述方法的流分类时关键字匹配的装置,如图10所示,是本发明实施例的装置架构示意图。本实施例的流分类时关键字匹配的装置包括一个或多个处理器11以及存储器12。本装置能够以集成电路、单片机或片上系统的形式进行具体实现,广泛适用于分组和宽带接入芯片电路设计中。在通信技术领域中网络应用灵活、管理精细的场合下,快速有效的完成多关键字场景中的流分类的功能实现。其中,图10中以一个处理器11为例。
108.处理器11和存储器12可以通过总线或者其他方式连接,图10中以通过总线连接为例。
109.存储器12作为一种流分类时关键字匹配方法非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1至实施例2中的流分类时关键字匹配方法。处理器11通过运行存储在存储器12中的非易失性软件程序、指令以及模块,从而执行流分类时关键字匹配的装置的各种功能应用以及数据处理,即实现实施例1至实施例1的流分类时关键字匹配的方法。
110.存储器12可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器12
可选包括相对于处理器11远程设置的存储器,这些远程存储器可以通过网络连接至处理器11。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
111.程序指令/模块存储在存储器12中,当被一个或者多个处理器11执行时,执行上述实施例1至实施例2中的流分类时关键字匹配的方法,例如,执行以上描述的图1所示的各步骤,或图6-图8所示的各个时序。
112.本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(read only memory,简写为:rom)、随机存取存储器(random access memory,简写为:ram)、磁盘或光盘等。
113.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1