路由查找方法、装置及设备与流程

文档序号:31052409发布日期:2022-08-06 08:10阅读:96来源:国知局
路由查找方法、装置及设备与流程

1.本技术涉及计算机技术领域,尤其涉及一种路由查找方法、装置及设备。


背景技术:

2.目前,网际协议版本(internet protocol version,ipv)4地址的数量无法满足网络需求,越来越多互联网开始使用ipv6地址。
3.在互联网中传输报文的过程中,通常需要根据报文的目的地址进行路由查找,以查找到报文的下一跳地址,并根据下一跳地址进行报文路由转发。由于ipv6地址的长度较长,可以在最长前缀匹配(longest prefix match,lpm)路由表中进行路由查找。lpm路由表通常存储在内存中,而路由查找是在处理器的缓存中进行,在首次进行路由查找时,缓存中可能未存储有lpm路由表,路由器需在内存中获取lpm路由表,并进行路由查找,导致路由查找的效率较低。


技术实现要素:

4.本技术的多个方面提供一种路由查找方法、装置及设备,用以提高路由查找的效率。
5.第一方面,本技术实施例提供一种路由查找法,包括:
6.确定待处理的n个报文,所述n为大于1的整数;
7.在第i级查找表中查找mi个报文的下一跳地址,若在第i级查找表中未查找到m
i+1
个报文的下一跳地址,则将m
i+1
个报文对应的第i+1级查找表预取至缓存,所述mi为正整数,m1=n,m
i+1
≤mi;
8.其中,所述i依次取1、2、3
……
,直至查找到所述n个报文的下一跳地址,所述i小于k,所述k为查找表的最大级数。
9.在一种可能的实施方式中,在第i级查找表中查找mi个报文的下一跳地址,若在第i级查找表中未查找到m
i+1
个报文的下一跳地址,则将m
i+1
个报文对应的第i+1级查找表预取至缓存,包括:
10.在第i级查找表中查找所述mi个报文中第j个报文的下一跳地址;
11.若在所述第i级查找表中未查找到所述第j个报文的下一跳地址,则将所述第j个报文对应的第i+1级查找表预取至所述缓存;
12.其中,所述j依次取1、2、
……
、mi。
13.在一种可能的实施方式中,将所述第j个报文对应的第i+1级查找表预取至所述缓存,包括:
14.确定所述第j个报文对应的第i+1级查找表的地址;
15.根据所述第j个报文对应的第i+1级查找表的地址,通过预取指令,将所述第j个报文对应的第i+1级查找表预取至所述缓存。
16.在一种可能的实施方式中,确定所述第j个报文对应的第i+1级查找表的地址,包
括:
17.在所述第j个报文对应的第i级查找表中,获取所述第j个报文对应的第i+1级查找表的索引;
18.根据所述第j个报文对应的第i+1级查找表的索引,确定所述第j个报文对应的第i+1级查找表的地址。
19.在一种可能的实施方式中,在第i级查找表中查找所述mi个报文中第j个报文的下一跳地址,包括:
20.若所述i为1,则在第一级查找表中查找所述第j个报文的下一跳地址;
21.若所述i大于1,则在所述缓存中确定所述第j个报文对应的第i级查找表中,并在所述第j个报文对应的第i级查找表中查找所述第j个报文的下一跳地址。
22.在一种可能的实施方式中,在第一级查找表中查找所述第j个报文的下一跳地址,包括:
23.根据所述第一级查找表对应的查找长度x,在所述第j个报文的目的地址中确定x位地址,所述x为大于1的整数;
24.根据所述x位地址,在所述第一级查找表中查找所述第j个报文的下一跳地址。
25.在一种可能的实施方式中,在所述第j个报文对应的第i级查找表中查找所述第j个报文的下一跳地址,包括:
26.根据前i-1级查找表对应的查找长度、以及所述第i级查找表对应的查找长度y,在所述第j个报文的目的地址中确定y位地址,所述y为大于1的整数;
27.根据所y位地址,在所述第j个报文对应的第i级查找表中查找所述第j个报文的下一跳地址。
28.在一种可能的实施方式中,所述第i级查找表为最长前缀匹配lpm查找表中的第i级的查找表,其中,
29.所述lpm查找表包括14级查找表,第一级查找表的查找长度为24,第2级查找表至第14级查找表的查找长度为8。
30.第二方面,本技术实施例提供一种路由查找装置,包括:确定模块、查找模块、预取模块,其中,
31.所述确定模块用于,确定待处理的n个报文,所述n为大于1的整数;
32.所述查找模块用于,在第i级查找表中查找mi个报文的下一跳地址;
33.所述预取模块用于,若在第i级查找表中未查找到m
i+1
个报文的下一跳地址,则将m
i+1
个报文对应的第i+1级查找表预取至缓存,所述mi为正整数,m1=n,m
i+1
≤m;
34.其中,所述i依次取1、2、3
……
,直至查找到所述n个报文的下一跳地址,所述i小于k,所述k为查找表的最大级数。
35.在一种可能的实施方式中,所述查找模块具体用于:
36.在第i级查找表中查找所述mi个报文中第j个报文的下一跳地址;
37.在一种可能的实施方式中,所述预取模块具体用于:
38.若在所述第i级查找表中未查找到所述第j个报文的下一跳地址,则将所述第j个报文对应的第i+1级查找表预取至所述缓存;其中,所述j依次取1、2、
……
、mi。
39.在一种可能的实施方式中,所述预取模块具体用于:
40.确定所述第j个报文对应的第i+1级查找表的地址;
41.根据所述第j个报文对应的第i+1级查找表的地址,通过预取指令,将所述第j个报文对应的第i+1级查找表预取至所述缓存。
42.在一种可能的实施方式中,所述预取模块具体用于:
43.在所述第j个报文对应的第i级查找表中,获取所述第j个报文对应的第i+1级查找表的索引;
44.根据所述第j个报文对应的第i+1级查找表的索引,确定所述第j个报文对应的第i+1级查找表的地址。
45.在一种可能的实施方式中,所述查找模块具体用于:
46.若所述i为1,则在第一级查找表中查找所述第j个报文的下一跳地址;
47.若所述i大于1,则在所述缓存中确定所述第j个报文对应的第i级查找表中,并在所述第j个报文对应的第i级查找表中查找所述第j个报文的下一跳地址。
48.在一种可能的实施方式中,所述查找模块具体用于:
49.根据所述第一级查找表对应的查找长度x,在所述第j个报文的目的地址中确定x位地址,所述x为大于1的整数;
50.根据所述x位地址,在所述第一级查找表中查找所述第j个报文的下一跳地址。
51.在一种可能的实施方式中,所述查找模块具体用于:
52.根据前i-1级查找表对应的查找长度、以及所述第i级查找表对应的查找长度y,在所述第j个报文的目的地址中确定y位地址,所述y为大于1的整数;
53.根据所y位地址,在所述第j个报文对应的第i级查找表中查找所述第j个报文的下一跳地址。
54.在一种可能的实施方式中,所述lpm查找表包括14级查找表,第一级查找表的查找长度为24,第2级查找表至第14级查找表的查找长度为8。
55.第三方面,本技术实施例提供一种路由查找设备,包括:存储器和处理器;
56.所述存储器存储计算机执行指令;
57.所述处理器执行所述存储器存储的计算机执行指令,使得所述处理器执行第一方面任一项所述的路由查找方法。
58.第四方面,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当所述计算机执行指令被处理器执行时用于实现第一方面任一项所述的路由查找方法。
59.第五方面,本技术实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面任一项所示的路由查找方法。
60.在本技术实施例中,路由器可以确定待处理的n个报文,并在第i级查找表中查找mi个报文中第j报文的下一跳地址,若可以查找到第j报文的下一跳地址,则对第j个报文的查找结束。若未查找到第j报文的下一跳地址,则路由器可以在第i级查找表中根据第j个报文对应的路由,获取第j个报文对应的第i+1级查找表的索引,并根据索引确定第i+1级查找表的地址。路由器可以根据第i+1级查找表的地址,通过预取指令,将第i+1级查找表从内存中预取到缓存中,再在第i+1级查找表对第j个报文进行路由查找。由于在每次路由查找中,路由器可以将多个报文分别对应的第i+1级查找表从内存中预取到缓存中,并且路由器可
以将多个报文分别对应的多个第i+1级查找表均预取完成之后,再在对应的第i+1级查找表对各个报文进行路由查找,以确保在缓存中进行路由查找时,多个第i+1级查找表均已存在于缓存中,从而可以减少缓存未命中的情况,以减少路由器在内存中获取路由表的情况,因此提高了路由查找的效率。
附图说明
61.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
62.图1为本技术示例性实施例提供的一种应用场景的示意图;
63.图2为本技术示例性实施例提供的路由表的示意图;
64.图3为本技术示例性实施例提供的一种路由查找方法的流程示意图;
65.图4为本技术示例性实施例提供的另一种路由查找方法的流程示意图;
66.图5为本技术示例性实施例提供的一种路由查找方法的过程示意图;
67.图6为本技术实施例提供的一种路由查找装置的结构示意图;
68.图7为本技术实施例提供一种路由查找设备的结构示意图。
具体实施方式
69.为使本技术的目的、技术方案和优点更加清楚,下面将结合本技术具体实施例及相应的附图对本技术技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
70.图1为本技术示例性实施例提供的一种应用场景的示意图。如图1所示,包括网络设备1、路由器和网络设备2。路由器中设置有路由表。网络设备1可以向路由器发送报文。路由器接收到报文之后,可以根据报文获取报文的目的地址,并根据目的地址在路由表中进行路由查找,确定报文的下一跳地址。若路由器确定报文的下一跳地址为网络设备2的ip地址,则路由器可以根据报文的下一跳地址,向网络设备2转发报文。
71.路由表可能包括多级查找表。在路由器根据路由表进行路由查找时,先在第1级路由表中查找下一跳地址,若在第1级查找表未查找到下一跳地址,则在第2级查找表中查找下一跳地址,依次类推,直至查找到下一跳地址后返回下一跳地址,或者在最后一级查找表中仍未查找到下一跳地址时,查找失败。
72.每个查找表中包括多条路由。针对任意一级查找表中的任意一个路由,该路由中可能包括下一跳地址,也可能不包括下一跳地址。若路由中包括下一跳地址,则该路由不存在下一级关联的查找表;若路由中不包括下一跳地址,则该路由存在下一级关联的查找表。
73.每条路由中包括多个路由参数,可以根据路由参数判断是否可以在该路由中查找得到下一跳地址,以及判断该路由是否存在下一级查找表等。例如,路由中可以包括表1所示的参数:
74.表1
[0075][0076][0077]
请参见表1,其中,next-hop指代下一跳地址或者下一级查找表的索引。
[0078]
valid表示当前路由是否生效。当valid为1时,表示当前路由生效,当valid为0时,表示当前路由无效。
[0079]
ext-enty表示当前路由是否存在对应的下一级查找表。当valid为1,即在当前路由生效的情况下,若ext-enty为0,则表示当前路由不存在下一级查找表;若ext-enty为1,则表示当前路由存在下一级查找表。
[0080]
规则深度是指当前路由支持查找的地址位数。可以根据规则深度划分查找表。例如,可以设定第1级查找表的查找长度为24,则表示在第1级查找表中支持查找报文的目的地址的前24位,则在第1级查找表中任意一条路由的规则深度均为24。
[0081]
当路由器根据路由参数判断当前路由中是否包括下一跳地址,或者是否存在下一级查找表的索引时,路由器可以读取当前路由中valid和ext-enty值,从而判断当前路由中next-hop的指代含义。例如,若当前路由中的valid为1,ext-enty为0,表示当前路由生效,不存在下一级查找表,则查看当前路由的next-hop,可以得知路由的下一跳地址,即报文对应的下一跳地址;若当前路由的valid为1,ext-enty为1,则表示当前路由生效,存在下一级查找表,则查看当前路由的next-hop,可以得知当前路由对应的下一级查找表的索引。
[0082]
下面,结合图2,以路由表为lpm路由表为例,对路由表进行说明。
[0083]
图2为本技术示例性实施例提供的路由表的示意图。如图2,可以将路由表分为14级,则路由表包括14级查找表,分别记为第1级查找表到第14级查找表,第1级查找表的查找长度为24,包括2
24
条路由。第2级查找表至第14级查找表的查找长度为8,分别包括28条路由。
[0084]
针对任意一级查找表中的任意一个路由,该路由中可能包括下一跳地址,也可能不包括下一跳地址。若路由中包括下一跳地址,则该路由不存在下一级关联的查找表;若路由中不包括下一跳地址,则该路由存在下一级关联的查找表。如图2,在第1级查找表中,假设路由1的valid为1,ext-enty为0,则路由1包括下一跳地址,不存在下一级关联的查找表。假设路由2的valid为1,ext-enty为1,则路由2不包括下一跳地址,存在路由2对应的第2级查找表。
[0085]
当路由器在路由表中进行路由查找时,路由器可以根据最长前缀匹配原则,将报文的目的地址与各级查找表中的每条路由进行匹配,查找到匹配位数最多的路由,从而确定报文的下一跳地址,并根据下一跳地址对报文进行转发。
[0086]
例如,当路由器对报文1开始进行路由查找时,可以根据报文1的目的地址在第1级查找表中进行查找。由于第1级查找表的查找长度为24,则路由器可以根据报文1的目的地
址中的第1位至第24位地址,在第1级查找表中进行路由查找。若路由器在第1级查找表中确定报文1匹配的路由为路由1,路由1包括下一跳地址,则对报文1的查找结束。若路由1不包括下一跳地址,而存在路由1对应的第2级查找表,则路由器可以根据报文1的目的地址中的第25位至第32位,在路由1对应的第2级查找表中进行路由查找,匹配到路由2,重复该过程,直至确定得到报文1的下一跳地址。
[0087]
在相关技术中,由于ipv6地址的长度较长,可以在最长前缀匹配查找表中进行路由查找。路由表通常存储在内存中,而路由查找是在处理器的缓存中进行,在首次进行路由查找时,缓存中可能未存储有各级查找表,路由器需在内存中获取路由表,并进行路由查找,导致路由查找花费的时间长,进而导致路由查找的效率较低。
[0088]
在本技术实施例中,路由器对多个报文进行路由查找时,可以采用数据预取的方式,将报文对应的各级查找表从内存中预取到处理器的缓存中,以便进行路由查找;并且,可以结合分级流水的方式,将多个报文分别对应的多个同级查找表均预取完成之后,再在对应的多个同级查找表对各个报文进行路由查找,以确保在缓存中进行路由查找时,多个同级查找表均已存在于缓存中,从而可以减少缓存未命中的情况,以减少路由器在内存中获取路由表的情况。因此,通过上述方式,提高了路由查找的效率。
[0089]
下面,通过具体实施例对本技术所示的技术方案进行详细说明。需要说明的是,下面几个实施例可以单独存在,也可以相互结合,对于相同或相似的内容,在不同的实施例中不再重复说明。
[0090]
图3为本技术示例性实施例提供的一种路由查找方法的流程示意图。请参见图3,该方法可以包括:
[0091]
301、确定待处理的n个报文,n为大于1的整数。
[0092]
路由器可以对报文进行批处理,待处理的n个报文可以为路由器一批处理的报文。路由器可以根据接收到报文的时刻,确定n个报文,例如,路由器可以将在预设时长内接收到的报文确定为需要一批处理的n个报文。可以根据实际需要设置n的大小,例如,n可以为16、8、4等。
[0093]
报文中包括目的地址,报文的目的地址可以为ipv6地址。ipv6地址的长度通常为128位,分为8个地址节,每个地址节包含16个地址位。可以使用4个十六进制数表示ipv6地址,例如,ipv6地址可以为2001:0db8:0000:0000:0008:0800:200c:417a。
[0094]
302、将i初始化为1。
[0095]
当路由器在路由表中对n个报文进行路由查找时,首先要确定路由表中包括的各级查找表。查找表的级数可以通过i表示,i=1、2、3、
……
、k。若路由表分为14级查找表,则k=14。
[0096]
可以将i初始化设置为1,表示从第1级查找表中开始对报文进行路由查找。
[0097]
303、在第i级查找表中查找mi个报文的下一跳地址。
[0098]
其中,mi为正整数。
[0099]
当i=1时,m1=n,则路由器在第1级查找表中查找n个报文的下一跳地址。路由器可以分别提取出n个报文的目的地址,并根据n个报文的目的地址在第1级查找表中分别对各个路由进行匹配,查找到与各个报文的目的地址最匹配的路由,进而确定各个报文的下一跳地址。
[0100]
当i大于1时,则路由器在第i级查找表中查找mi个报文的下一跳地址。mi个报文是指在前i-1级查找表中均未查找下一跳地址的报文,即,在前i-1级查找表中均未查找到该mi个报文的下一跳地址。路由器可以分别提取出mi个报文的目的地址,并根据mi个报文的目的地址在多个第i级查找表中分别对各个路由进行匹配,查找到与各个报文的目的地址最匹配的路由,进而确定各个报文的下一跳地址。
[0101]
304、判断是否查找到n个报文的下一跳地址。
[0102]
若是,则对该n个报文的下一跳地址查找结束。在查找得到n个报文的下一跳地址之后,可以转发该n个报文,或者,也可以在每查找到一个报文的下一跳地址之后,就对该报文进行转发。
[0103]
若否,则执行305。
[0104]
在第i次循环中,需要查找mi个报文的下一跳地址,n个报文中除mi个报文之外的其它报文的下一跳地址已经查找成功,因此,可以判断是否在第i级查找表中查找mi个报文的下一跳地址,若查找到mi个报文的下一跳地址,则可以确定查找到了n个报文的下一跳地址。
[0105]
305、若在第i级查找表中未查找到m
i+1
个报文的下一跳地址,则将m
i+1
个报文对应的第i+1级查找表预取至缓存。
[0106]mi+1
个报文为mi个报文中的一部分,即,在查找mi个报文的下一跳地址的过程,未查找到m
i+1
个报文的下一跳地址。m
i+1
小于或等于mi。
[0107]
针对任意一个报文,路由器可以确定该报文在第i级查找表中匹配的路由,并根据该路由获取该报文对应的第i+1级查找表的索引,进而可以根据索引确定该报文对应的第i+1级查找表的地址。路由器根据该报文对应的第i+1级查找表的地址,通过预取指令,将该报文对应的第i+1级查找表从内存中预取至缓存。
[0108]
需要说明的是,对于m
i+1
个报文,路由器确定m
i+1
个报文分别对应的第i+1级查找表的地址之后,可以将m
i+1
个报文分别对应的第i+1级查找表从内存中全部预取至缓存中,再进行路由查找。
[0109]
例如,若在第1级查找表中未查找到下一跳地址的报文有3个,则路由器确定该3个报文分别对应的第2级查找表的地址之后,路由器可以将该3个第2级查找表从内存中全部预取到缓存中之后,再在对应的第2级查找表中,对该3个报文分别进行路由查找。
[0110]
306、将i更新为i+1。
[0111]
当路由器将m
i+1
个报文分别对应的多个第i+1查找表预取到缓存之后,路由器可以更新i,将i+1作为新的i。
[0112]
307、判断i是否大于k。
[0113]
由于i可以取1、2、3、
……
k,i的最大值为k,则查找表的级数最大为第k级。当路由器判断i小于或者等于k时,由于未查找到n个报文中所有报文的下一跳地址,则可以继续在第i级查找表中对报文进行路由查找;若i大于k,则说明在第k级查找表中已对该报文进行过路由查找,由于不存在比第k级查找表更高级别的查找表,因此当i大于k时,无法再继续进行路由查找,则查找结束。
[0114]
在本技术实施例中,路由器可以确定多个待处理的报文,并且提取出每个报文的目的地址。路由器可以根据每个报文的目的地址在路由表中进行路由查找,确定每个报文
的下一跳地址。若在第i级查找表中可以找到报文的下一跳地址,则对该报文的查找结束;若在第i级查找表中未查找到报文的下一跳地址,则可以将该报文对应的第i+1级查找表从内存中预取至缓存,并再次进行路由查找,直至查找到该报文的下一跳地址,或者查找到第k级查找表,才能结束查找。由于在每次路由查找中,路由器可以将多个报文分别对应的第i+1级查找表从内存中预取到缓存中,并且路由器可以将多个报文分别对应的多个第i+1级查找表均预取完成之后,再在对应的第i+1级查找表对各个报文进行路由查找,以确保在缓存中进行路由查找时,多个第i+1级查找表均已存在于缓存中,从而可以减少缓存未命中的情况,减少了路由器在内存中获取路由表的情况,因此提高了路由查找的效率。
[0115]
在图3所示实施例的基础上,下面,结合图4,对上述303步骤进行进一步详细说明。图4为本技术示例性实施例提供的另一种路由查找方法的流程示意图。请参见图4,该方法可以包括:
[0116]
401、将j初始化为1。
[0117]
当路由器在路由表中对mi个报文开始进行路由查找时,可以将mi个报文中的每个报文分别记为第1个、第2个、
……
、第j个、
……
第mi个,其中,j依次取1、2、
……
、mi。
[0118]
可以将j初始化设置为1,表示对mi个报文中的第1个报文开始进行路由查找。
[0119]
402、在第i级查找表中查找mi个报文中的第j个报文的下一跳地址。
[0120]
当i=1时,m1=n。路由器可以提取出n个报文中的第j个报文的目的地址,并根据第j个报文的目的地址,在第1级查找表中查找n个报文中的第j个报文的下一跳地址。
[0121]
具体的,可以根据第1级查找表对应的查找长度x,在第j个报文的目的地址中确定x位地址,x为大于1的整数;根据x位地址,在第1级查找表中查找第j个报文的下一跳地址。
[0122]
例如,若路由器待处理的报文为3个,可以分别记为报文1,报文2,报文3。假设第j个报文为报文1,由于第1级查找表的查找长度为24,则路由器可以确定报文1的目的地址中的第1位至第24位地址,并根据该第1位至第24位地址在第1级查找表中对各个路由进行匹配,查找到最匹配的路由,进而确定报文1的下一跳地址。路由器对报文1的查找结束之后,同样的,可以依次根据报文2、报文3的目的地址中的第1位至第24位地址在第1级查找表中进行路由查找。
[0123]
当i大于1时,由于mi个报文中的第j个报文对应的第i级查找表可能在内存中,也可能在缓存中,则路由器需先确定缓存中存在第j个报文对应的第i级查找表,再根据第j个报文的目的地址在第i级查找表中对各个路由进行匹配,查找到与第j个报文的目的地址最匹配的路由,进而确定第j个报文的下一跳地址。
[0124]
具体的,可以根据前i-1级查找表对应的查找长度、以及第i级查找表对应的查找长度y,在第j个报文的目的地址中确定y位地址,y为大于1的整数;根据所y位地址,在第j个报文对应的第i级查找表中查找第j个报文的下一跳地址。
[0125]
例如,若i=2,则说明路由器已在第1级查找表对报文进行过路由查找。由于第1级查找表的查找长度为24,则说明已对该报文的目的地址中的第1位至第24位进行过路由查找。由于第2级查找表的查找长度为8,则路由器可以确定该报文的目的地址中的第25位到第32位地址,并根据该报文中的第25位到第32位地址,对该报文对应的第2级查找表中的各个路由进行匹配,查找到最匹配的路由,进而确定该报文的下一跳地址。
[0126]
403、将j更新为j+1。
[0127]
当路由器在第i级查找表中对mi个报文的第j个报文查找完成后,可以更新j,将j+1作为新的j。
[0128]
例如,若j=1,对第1个报文查找完成之后,则将j更新为2,表示对第2个报文开始进行路由查找。
[0129]
404、判断j是否大于mi。
[0130]
由于j依次取1、2、
……
、mi,j的最大值mi,则在第i级查找表中查找的最后一个报文为第mi个报文。当路由器判断j小于或者等于mi时,则执行s402;若j大于mi,则说明路由器已经对第mi个报文查找完成,即已完成对mi个报文的查找,则查找结束。
[0131]
在本技术实施例中,路由器可以确定待处理的n个报文,并在第i级查找表中查找mi个报文中第j报文的下一跳地址,若可以查找到第j报文的下一跳地址,则对第j个报文的查找结束。若未查找到第j报文的下一跳地址,则路由器可以在第i级查找表中根据第j个报文对应的路由,获取第j个报文对应的第i+1级查找表的索引,并根据索引确定第i+1级查找表的地址。路由器可以根据第i+1级查找表的地址,通过预取指令,将第i+1级查找表从内存中预取到缓存中,再在第i+1级查找表对第j个报文进行路由查找。由于在每次路由查找中,路由器可以将多个报文分别对应的第i+1级查找表从内存中预取到缓存中,并且路由器可以将多个报文分别对应的多个第i+1级查找表均预取完成之后,再在对应的第i+1级查找表对各个报文进行路由查找,以确保在缓存中进行路由查找时,多个第i+1级查找表均已存在于缓存中,从而可以减少缓存未命中的情况,减少路由器在内存中获取路由表的情况,因此提高了路由查找的效率。
[0132]
在上述任意一个实施例的基础上,下面,结合图5,通过具体示例,对路由查找的工作过程进行说明。
[0133]
图5为本技术示例性实施例提供的一种路由查找方法的过程示意图。请参见图5,包括过程1、过程2、
……
、过程14。
[0134]
请参见过程1,若路由器需要处理的报文有6个,分别记为报文1、报文2、报文3、报文4、报文5、报文6。当路由器开始对6个报文进行路由查找时,路由器可以根据6个报文,分别获取6个报文的目的地址。路由器可以根据6个报文分别对应的目的地址,在第1级查找表中对各个路由进行匹配,查找6个报文的下一跳地址。此为第1次查找。若可以查找到报文1、报文3的下一跳地址,则对报文1、报文3的查找结束,查找次数为1次。若未查找到报文2、报文4、报文5、报文6的下一跳地址,则可以参见过程2。
[0135]
请参见过程2,若未查找到报文2、报文4、报文5、报文6的下一跳地址,则路由器可以分别确定报文2、报文4、报文5、报文6对应的第2级查找表,并将报文2、报文4、报文5、报文6对应的第2级查找表从内存中全部预取到缓存中,以确保在对报文2、报文4、报文5、报文6分别进行第2次查找时,报文2、报文4、报文5、报文6对应的第2级查找表均已存在于缓存中。若在报文2、报文6对应的第2级查找表中,可以查找到报文2、报文6的下一跳地址,则对报文2、报文6的查找结束,查找次数为2次。若在报文4、报文5分别对应的第2级查找表中,仍未查找到报文4、报文5的下一跳地址,则可以循环过程2,直至查找到第14级查找表,可以参见过程14。
[0136]
请参见过程14,若在报文4、报文5分别对应的第2级查找表至第13级查找表中,都未查找到报文4、报文5对应的下一跳地址,则路由器可以根据报文4、报文5在第13级查找表
中对应的路由,分别确定报文4、报文5对应的第14级查找表,并将报文4、报文5对应的第14级查找表从内存中全部预取到缓存中,再对报文4、报文5分别进行第14次查找。若在报文4对应的第14级查找表中,可以查找到报文14的下一跳地址,则对报文14的查找结束,查找次数为14次。若在报文5对应的第14级查找表中,仍未查找到报文5的下一跳地址,则对报文5的查找失败,结束查找。
[0137]
当路由器批处理的报文数量不同、以及路由表中包括的路由数量不同时,路由查找的性能也不同。可以用进行一次路由查找时,中央处理器(cpu,central processing unit)的循环(cycle)次数来衡量路由查找的性能。在一次路由查找中,cpu cycle次数越多,说明路由查找占用cpu的时间越长,则路由查找的性能越差。
[0138]
例如,当路由器批处理的报文数量为4、6、8、16时,路由查找的cpu cycle数如表2:
[0139]
表2
[0140]
报文数量4681610k路由235cycles/route168cycles/route105cycles/route94cycles/route100k路由742cycles/route569cycles/route463cycles/route331cycles/route
[0141]
当路由表中有10k条路由时,路由器批处理的报文数量分别为4、6、8、16时,对应的cpu cycle分别为235、168、105、94次。当路由表中有100k条路由时,路由器批处理的报文数量分别为4、6、8、16时,对应的cpu cycle分别为742、569、463、331次。
[0142]
(1)从表1中可以对比得出,在路由表中有10k路由时,路由器处理16个报文的路由查找性能(94次),比路由器处理4个报文的路由查找性能(235次),路由查找的性能提升了2.5倍。则说明路由器处理的报文数量越多,路由查找的性能越好。
[0143]
(2)从表1中可以对比得出,路由器处理4个报文时,在10k的lpm表中的路由查找性能(235次),比在100k的路由表中的路由查找性能(742次),路由查找的性能提升了3倍。则说明当路由表中的路由数量越少时,路由查找的性能越好。
[0144]
在本技术实施例中,路由器可以确定待处理的n个报文,并在第i级查找表中查找mi个报文中第j报文的下一跳地址,若可以查找到第j报文的下一跳地址,则对第j个报文的查找结束。若未查找到第j报文的下一跳地址,则路由器可以在第i级查找表中根据第j个报文对应的路由,获取第j个报文对应的第i+1级查找表的索引,并根据索引确定第i+1级查找表的地址。路由器可以根据第i+1级查找表的地址,通过预取指令,将第i+1级查找表从内存中预取到缓存中,再在第i+1级查找表对第j个报文进行路由查找。由于在每次路由查找中,路由器可以将多个报文分别对应的第i+1级查找表从内存中预取到缓存中,并且路由器可以将多个报文分别对应的多个第i+1级查找表均预取完成之后,再在对应的第i+1级查找表对各个报文进行路由查找,以确保在缓存中进行路由查找时,多个第i+1级查找表均已存在于缓存中,从而可以减少缓存未命中的情况,以减少路由器在内存中获取路由表的情况,因此提高了路由查找的效率。
[0145]
图6为本技术实施例提供的一种路由查找装置的结构示意图。请参见图6,该路由查找装置包括:确定模块11、查找模块12和预取模块13,其中,
[0146]
所述确定模块11用于,确定待处理的n个报文,所述n为大于1的整数;
[0147]
所述查找模块12用于,在第i级查找表中查找mi个报文的下一跳地址;
[0148]
所述预取模块13用于,若在第i级查找表中未查找到m
i+1
个报文的下一跳地址,则
将m
i+1
个报文对应的第i+1级查找表预取至缓存,所述mi为正整数,m1=n,m
i+1
≤m;
[0149]
其中,所述i依次取1、2、3
……
,直至查找到所述n个报文的下一跳地址,所述i小于k,所述k为查找表的最大级数。
[0150]
本技术实施例提供的路由查找装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
[0151]
在一种可能的实施方式中,所述查找模块11具体用于:
[0152]
在第i级查找表中查找所述mi个报文中第j个报文的下一跳地址;
[0153]
在一种可能的实施方式中,所述预取模块13具体用于:
[0154]
若在所述第i级查找表中未查找到所述第j个报文的下一跳地址,则将所述第j个报文对应的第i+1级查找表预取至所述缓存;其中,所述j依次取1、2、
……
、mi。
[0155]
在一种可能的实施方式中,所述预取模块13具体用于:
[0156]
确定所述第j个报文对应的第i+1级查找表的地址;
[0157]
根据所述第j个报文对应的第i+1级查找表的地址,通过预取指令,将所述第j个报文对应的第i+1级查找表预取至所述缓存。
[0158]
在一种可能的实施方式中,所述预取模块13具体用于:
[0159]
在所述第j个报文对应的第i级查找表中,获取所述第j个报文对应的第i+1级查找表的索引;
[0160]
根据所述第j个报文对应的第i+1级查找表的索引,确定所述第j个报文对应的第i+1级查找表的地址。
[0161]
在一种可能的实施方式中,所述查找模块11具体用于:
[0162]
若所述i为1,则在第一级查找表中查找所述第j个报文的下一跳地址;
[0163]
若所述i大于1,则在所述缓存中确定所述第j个报文对应的第i级查找表中,并在所述第j个报文对应的第i级查找表中查找所述第j个报文的下一跳地址。
[0164]
在一种可能的实施方式中,所述查找模块11具体用于:
[0165]
根据所述第一级查找表对应的查找长度x,在所述第j个报文的目的地址中确定x位地址,所述x为大于1的整数;
[0166]
根据所述x位地址,在所述第一级查找表中查找所述第j个报文的下一跳地址。
[0167]
在一种可能的实施方式中,所述查找模块11具体用于:
[0168]
根据前i-1级查找表对应的查找长度、以及所述第i级查找表对应的查找长度y,在所述第j个报文的目的地址中确定y位地址,所述y为大于1的整数;
[0169]
根据所y位地址,在所述第j个报文对应的第i级查找表中查找所述第j个报文的下一跳地址。
[0170]
在一种可能的实施方式中,所述lpm查找表包括14级查找表,第一级查找表的查找长度为24,第2级查找表至第14级查找表的查找长度为8。
[0171]
本技术实施例提供的路由查找装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
[0172]
本技术实施例提供一种路由查找设备的结构示意图,请参见图7,该路由查找设备20可以包括处理器21和存储器22。示例性地,处理器21、存储器22,各部分之间通过总线23相互连接。
[0173]
所述存储器22存储计算机执行指令;
[0174]
所述处理器21执行所述存储器22存储的计算机执行指令,使得所述处理器21执行如上述方法实施例所示的路由查找方法。
[0175]
相应地,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当所述计算机执行指令被处理器执行时用于实现上述方法实施例所述的路由查找方法。
[0176]
相应地,本技术实施例还可提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,可实现上述方法实施例所示的路由查找方法。
[0177]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0178]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0179]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0180]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0181]
在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
[0182]
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
[0183]
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算
机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0184]
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0185]
以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1