CN102984071B - 分段地址路由的路由表组织方法及查找路由的方法 - Google Patents
分段地址路由的路由表组织方法及查找路由的方法 Download PDFInfo
- Publication number
- CN102984071B CN102984071B CN201210594875.XA CN201210594875A CN102984071B CN 102984071 B CN102984071 B CN 102984071B CN 201210594875 A CN201210594875 A CN 201210594875A CN 102984071 B CN102984071 B CN 102984071B
- Authority
- CN
- China
- Prior art keywords
- route
- new
- level
- list item
- entry
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种分段地址路由的路由表组织方法及查找路由的方法,路由表组织方法包括以下步骤:根据路由前缀长度将路由分为多类,并相应地添加在路由表的多级表中,路由表的上一级表中设有记录下一级表的路由起始值和结束值的数据域max和min以及指向下一级表中相应表项的起始位置的数据域;初始化后,路由表的第一级表完全展开,下一级表则根据添加路由的前缀长度和当前路由存储空间大小进行比较,选择性的调整存储空间的大小,并利用上一级表中的max和min值间接的记录路由存储空间大小。本发明,路由表的第二、第三级表只有当有路由添加时才根据添加路由的前缀长度选择性地展开,消除了第二、第三级表中的冗余数据,降低了存储空间的消耗量。
Description
技术领域
本发明涉及路由表处理技术,具体涉及分段地址路由的路由表组织方法及查找路由的方法。
背景技术
网络带宽的急剧增加,对处于网络节点的路由器设备的转发速度提出了更高的要求,尤其是处于主干网络中的高端路由器,其存储的路由达到百万之上,因此要求路由查找的速度更快。
传统Radix Trie、多分支Trie树(Multibit Trie)等路由算法通过调整查找步长在存储空间和查找速度上寻求折中。但随着信息量突增,高端路由器设备对查找速度的要求远高于对内存空间存储利用率的要求,于是有人提出了基于SDRAM硬件实现的DIR-24-8-BASIC的地址分段快速路由查找算法。该算法把32位的IPv4地址分成长度分别为24和8的两个部分,采用两级表的方式分别存储这两部分。第一级表(TBL24)用来存储所有前缀长度小于等于24的前缀,如果前缀长度小于24就对路由前缀扩展到24位,第二级表(TBLlong)存储的是长度在25-32之间的路由前缀。
该方法为所有的IP地址都建立一个对应的转发表项,进行路由查找时,仅需要根据目的IP地址进行检索,最多两次访问就可以找到对应的路由信息。查找的过程如下:首先使用目的地址的高24位作为地址查找TBL24对应表项。如果其表项最高为0,表示已经得到下一跳地址;如果其表项最高位=1,得到的TBLlong的地址编号index,以index乘以256加上待查的IP地址的低8位作为地址查找TBLlong的对应表项得到下一跳地址。
该算法的最大优点是结构简单,便于硬件实现,查找速度快。但是,由于上述算法在实现的过程中,在二级及三级地址空间分配过程中采用一次性最大值分配来实现,虽然实现简单,却造成巨大的空间浪费。
为了降低存储空间,又出现了DIR-21-3-8和DIR-16-8-8方案,并且提出了一些压缩机制,减少存储空间,但是这些方法都不能最大限度的解决大量路由冗余信息问题,以DIR-16-8-8为例,当第一级TBL24某个表项的最高位=1,表明第二级TBL8可能存在最长匹配,一般这个二级区域在初始化时,申请连续的256个表项的存储空间,但是这256个表项的存储空间并不是完全被有效利用,存在极大的浪费。
发明内容
本发明所要解决的技术问题是解决二级及三级地址空间不能完全被有效利用、存在极大的浪费的问题。
为了解决上述技术问题,本发明所采用的技术方案是提供一种分段地址路由的路由表组织方法,包括以下步骤:
根据路由前缀长度将路由分为多类,并相应地添加在路由表的多级表中,路由表的上一级表中设有记录下一级表的路由起始值和结束值的数据域max和min以及指向下一级表中相应表项的起始位置的数据域;初始化后,路由表的第一级表完全展开,下一级表则根据添加路由的前缀长度和当前路由存储空间大小进行比较,选择性的调整存储空间的大小,并利用上一级表中的max和min值间接的记录路由存储空间大小。
在上述方法中,当路由前缀长度小于等于16时,添加到路由表的第一级表中;
当路由前缀长度介于17-24之间时,添加到路由表的第二级表中;
当路由前缀长度介于25-32之间时,添加到路由表的第三级表中。
在上述方法中,添加路由包括以下步骤:
步骤10、根据路由前缀长度Mask_len判断是否将其添加到路由表的第一级表中,如果是则在第一级表中添加路由,否则转步骤20;
步骤20、根据路由前缀长度Mask_len判断是否将其添加到路由表的第二级表中,如果是转步骤30,否则转步骤40;
步骤30、判断第二级表的存储空间是否够用,如果够用则结合第一级表中的max和min计算出该路由在第二级表中的偏移起始位置,然后进行添加并更新第一级表中的指向第二级表中相应表项的起始位置的数据域,完成后转步骤50;否则,根据路由的IP地址的17-24位数值重新申请第二级表的相应内存,再进行添加,完成后转步骤50;
步骤40、判断第三级表的存储空间是否够用,如果够用则结合第二级表中的max和min计算出该路由在第三级表中的偏移起始位置,然后进行添加并更新第二级表中的指向第三级表中相应表项的起始位置的数据域,完成后转步骤50;否则,根据路由的IP地址的25-32位数值重新申请第三级表的相应内存,再进行添加,完成后转步骤50;
步骤50:路由表项添加结束。
在上述方法中,步骤10包括以下步骤:
步骤101:判断路由前缀长度Mask_len是否大于16,如果Mask_len小于等于16,转步骤102;否则转步骤20进行处理;
步骤102:结合前缀长度Mask_Len计算出路由的IP地址的高16位有效数值l1_base_idx,以确定该路由对应的表项在第一级表中的偏移起始位置Table[L1_base_idx],并计算表项的作用域num_entry=2^(16Mask_len)-1;
步骤103:自第一级表中的偏移起始位置Table[L1_base_idx]开始至Table[l1_base_idx+num_entry]结束,对表中前缀长度Len小于Maske_len的表项进行添加,添加完成后转步骤50。
上述方法中,步骤30包括以下步骤:
步骤301:找到第一级表中对应的表项Table[L1_base_idx];
步骤302:结合前缀长度Mask_Len计算出路由的IP地址的17-24位有效数值new_l2_first_idx,同时根据前缀长度Mask_Len计算出添加表项作用域长度num_entry=2^(24-Mask_len)-1,将new_l2_first_idx和num_entry+new_l2_first_idx的值分别与第一级表中的表项Table[L1_base_idx]中min和max进行比较,计算出new_min=min{new_l2_first_idx,min}和new_max=max{num_entry+new_l2_first_idx,max},如果old_size=max-min+1大于等于new_size=new_max-new_min+1则表明第二级表的存储空间可以满足添加该路由,进而转步骤303进行处理;否则,表明第二级表的存储空间不够,需要重新申请更大的内存,转步骤305进行处理;
步骤303:结合第一级表中的min值计算出该路由在第二表中的偏移起始位置new_entry_offset=new_l2_first_idx-min;
步骤304:在第二级表中,从偏移起始位置Table[new_entry_offset]到Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,添加完成后转步骤50;
步骤305:根据new_size计算出新的表项在第二级表中需要的存储空间,并申请相应的大小的内存,复制第二级表中原有的表项,并修改第一级表中的l1_entry指向新的起始地址,并计算该路由在第二表中的偏移起始位置new_entry_offset=new_l2_first_idx-min;
步骤306:从第二级表中的表项起始位置到Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,完成后转步骤50。
上述方法中,步骤40包括以下步骤:
步骤401:找到路由表的第二级表中对应的表项Table[L2_base_idx]。
步骤402:结合前缀长度Mask_Len计算路由前缀IP低8位有效数值new_l3_first_idx,同时根据前缀长度Mask_Len计算出添加表项作用域长度num_entry=2^(24-Mask_len)-1,将new_l3_first_idx和num_entry+new_l3_first_idx的值分别与第二级表中的表项Table[L2_base_idx]中min和max进行比较,计算出的new_min=min{new_l3_first_idx,min})和new_max=max{num_entry+new_l3_first_idx,max},如果old_size=max-min+1大于等于new_size=new_max-new_min+1则表明第三级表的存储空间可以满足添加该路由,进而转步骤403进行处理;否则,表明第三级表的存储空间不够,需要重新申请更大的内存,转步骤405进行处理;
步骤403:结合第二级表中的min值计算出该路由在第三级表中的偏移起始位置new_entry_offset=new_l3_first_idx-min;
步骤404:从第三级表的Table[new_entry_offset]开始到Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,完成后进入步骤50;
步骤405:根据new_size计算出新的表项在第三级表中需要的存储空间,并申请相应大小的内存,复制第三级表中的原有表项,并修改第二级表中L2_entry指向新的起始地址,并计算该路由在第三表中的偏移起始位置new_entry_offset=new_l3_first_idx-min;
步骤406:从第三级表中的起始表项Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,完成后进入步骤50。
本发明还提供了一种采用上述路由表组织方法构建的路由表查找路由的方法,包括以下步骤:
路由表的上一级表中设有两个数据域Valid和Cont,Valid为表有效性标志位,取值为1或0,valid=1表明当前表有效,valid=0表明当前表为空;Cont为是否有更长路由可供查找的标志位,取值为1或0,cont=1表明可以在路由表的第二级中进行查找,cont=0表明无须在路由表的第二级中进行查找;
依次根据路由表的上一级表中的valid和cont值判断是否在下一级中继续查找。
在上述查找路由的方法中,依次根据路由表的上一级表中的valid和cont值判断是否在下一级中继续查找的方法如下:
如果valid=1、cont=1表明有比当前长度更长的路由表项存在于下一级表中,需要从路由的IP地址中抽取下一级表的数值计算偏移量,偏移量等于上一级表的表项位置减去指向下一级表中相应表项的起始位置,查找范围为下一级表中相应表项的起始位置到下一级表中相应表项的起始位置+偏移量,直到最长匹配;
如果valib=1,cont=0,表示不存在下一级更长的路由匹配,当前查找的即为最长匹配,则返回当前查找的表项作为最长匹配的路由信息;
如果Valib=0,表示当前表项无效,继续查找则毫无意义。
本发明,路由表初始化后,第一级表是完全展开的,但是路由表的第二级和第三级表没有展开,当有路由添加时,才根据添加路由的前缀长度,在第二级和第三级表中选择性地展开,实现了分段地址存储机制下,第二级和第三级表的表项最小区域空间存储,消除了第二级和第三级表中的冗余数据,降低了存储空间的消耗量。
附图说明
图1为本发明中路由表的第一级表的结构示意图;
图2为本发明中路由的添加方法流程图;
图3为具体实施例所示三条表项在路由表中的存储示意图;
图4为本发明中路由查找的示意图。
具体实施方式
本发明的核心是分段地址路由的路由表结构、如何组织以及如何添加和查找路由,下面以DIR-16-8-8算法为例,结合说明书附图和具体实施方式对本发明作出详细的说明。DIR-21-3-8、DIR-24-8等其它算法与DIR-16-8-8基本类似,在此不再重复介绍。
本发明提供的分段地址路由的路由表组织方法,根据路由前缀长度将路由分为多类,并相应地添加在路由表的多级表中进行路由管理,本实施例中,根据路由前缀长度分为三类,利用三级路由表结构对上述三类路由进行管理,具体地说:
(1)当路由前缀长度小于等于16时,添加到路由表的第一级表itbl_l1_entry中;
(2)当路由前缀长度介于17-24之间时,添加到路由表的第二级表itbl_l2_entry中;
(3)当路由前缀长度介于25-32之间时,添加到路由表的第三级表itbl_l3_entry中。
路由表的上一级表中设有指向下一级表的起始位置和结束位置的两个数据域,同时还设有指向下一级表中相应表项起始位置的数据域。
图1为路由表的第一级表结构,包括如下的数据域:
有效性标志位Valid,取值为1或0,valid=1表明当前表有效,valid=0表明当前表为空。
是否有更长路由可供查找的标志位Cont,取值为1或0,cont=1表明可以在路由表的第二级表中进行查找,cont=0表明无须在路由表的第二级表中进行查找。
如果valid=1、cont=0,则表明当前查找到的路由表项是唯一最长匹配的路由,可以在该表项的info指针指向的地址中直接获取下一跳信息。
当前表项路由前缀长度用len表示。
第二级表的起始位置min和结束位置max,max-min+1表示第二级表中可供查找的表项数,max和min的取值都不超过第二级表的最大有效表项数。
info,路由信息指针,指向路由的下一跳信息。
l1_entry,指向第二级表中相应表项的起始位置。
路由的添加方法如图2所示,包括以下步骤:
步骤10、根据路由前缀长度Mask_len判断是否将其添加到路由表的第一级表中,如果是则在第一级表中添加路由,否则转步骤20;
步骤20、根据路由前缀长度Mask_len判断是否将其添加到路由表的第二级表中,如果是转步骤30,否则转步骤40;
步骤30、判断第二级表的存储空间是否够用,如果够用则结合第一级表中的max和min计算出该路由在第二级表中的偏移起始位置,然后进行添加并更新第一级表中的指向第二级表中相应表项的起始位置的数据域,完成后转步骤50;否则,根据路由的IP地址的17-24位数值重新申请第二级表的相应内存,再进行添加,完成后转步骤50;
步骤40、判断第三级表的存储空间是否够用,如果够用则结合第二级表中的max和min计算出该路由在第三级表中的偏移起始位置,然后进行添加并更新第二级表中的指向第三级表中相应表项的起始位置的数据域,完成后转步骤50;否则,根据路由的IP地址的25-32位数值重新申请第三级表的相应内存,再进行添加,完成后转步骤50;
步骤50:路由表项添加结束。
在上述方法中,步骤10包括以下步骤:
步骤101:判断路由前缀长度Mask_len是否大于16,如果Mask_len小于等于16,表明该路由应添加到第一级表中,转步骤102;否则表明该路由应添加到第二级或第三级表中,转步骤20进行处理。
步骤102:结合前缀长度Mask_Len计算出路由的IP地址的高16位有效数值l1_base_idx,以确定该路由对应的表项在第一级表中的偏移起始位置Table[L1_base_idx],并计算表项的作用域num_entry,num_entry=(2^(16-Mask_len)-1)。
步骤103:自第一级表中的偏移起始位置Table[L1_base_idx]开始至Table[l1_base_idx+num_entry]结束,对表中前缀长度Len小于Maske_len的表项进行添加,添加完成后转步骤50。
步骤30包括以下步骤:
步骤301:找到第一级表中对应的表项Table[L1_base_idx];
步骤302:结合前缀长度Mask_Len计算出路由的IP地址的17-24位有效数值new_l2_first_idx,同时根据前缀长度Mask_Len计算出添加表项作用域长度num_entry,num_entry=(2^(24-Mask_len)-1),将new_l2_first_idx和num_entry+new_l2_first_idx的值分别与第一级表中的表项Table[L1_base_idx]中min和max进行比较,计算出new_min(等于(min{new_l2_first_idx,min})和new_max(等于max{num_entry+new_l2_first_idx,max}),如果old_size=max-min+1大于等于new_size=new_max-new_min+1则表明第二级表的存储空间可以满足添加该路由,进而转步骤303进行处理;否则,表明第二级表的存储空间不够,需要重新申请更大的内存,转步骤305进行处理。
步骤303:结合第一级表中的min值计算出该路由在第二表中的偏移起始位置new_entry_offset(等于new_l2_first_idx-min)。
步骤304:在第二级表中,从偏移起始位置Table[new_entry_offset]到Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,添加完成后转步骤50。
步骤305:根据new_size计算出新的表项在第二级表中需要的存储空间,并申请相应的大小的内存,复制第二级表中原有的表项,并修改第一级表中的l1_entry指向新的起始地址,并计算该路由在第二表中的偏移起始位置new_entry_offset(等于new_l2_first_idx-min)。
步骤306:从第二级表中的表项起始位置到Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,完成后转步骤50。
步骤40包括以下步骤:
步骤401:找到路由表的第二级表中对应的表项Table[L2_base_idx]。
步骤402:结合前缀长度Mask_Len计算路由前缀IP低8位有效数值new_l3_first_idx,同时根据前缀长度Mask_Len计算出添加表项作用域长度num_entry(等于2^(24-Mask_len)-1),将new_l3_first_idx和num_entry+new_l3_first_idx的值分别第二级表中的表项Table[L2_base_idx]中min和max进行比较,计算出的new_min(等于min{new_l3_first_idx,min})和new_max(等于max{num_entry+new_l3_first_idx,max}),如果old_size(等于max-min+1)大于等于new_size(等于new_max-new_min+1)则表明第三级表的存储空间可以满足添加该路由,进而转步骤403进行处理;否则,表明第三级表的存储空间不够,需要重新申请更大的内存,转步骤405进行处理。
步骤403:结合第二级表中的min值计算出该路由在第三级表中的偏移起始位置new_entry_offset(等于new_l3_first_idx-min)。
步骤404:从第三级表的Table[new_entry_offset]开始到Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,完成后进入步骤50;
步骤405:根据new_size计算出新的表项在第三级表中需要的存储空间,并申请相应大小的内存,复制第三级表中的原有表项,并修改第二级表中L2_entry指向新的起始地址,并计算该路由在第三表中的偏移起始位置new_entry_offset(等于new_12_first_idx-min)。步骤406:从第三级表中的起始表项Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,完成后进入步骤50。
例如:路由N:A.B.C.0/24,下一跳是N,如果该路由在第一级表中的原有标志位cont=0,表明对应的下一级表项的空间尚未分配,第一次分配的空间大小为255-C+1,返回的空间起始地址赋给第一级表的L2_entry,并将min设置为C,max设置为255,max-min+1表示下一级表的空间大小,对应的第二级表中的表项从C到255都指向下一跳N。
如果当再有一条路由需要添加,例如M:A.B.D.0/24,如果D>C,则表明表项在第二级表中的有效作用空间为D到255,标号为D到255的下一跳信息被覆盖为M,上一级表中的min、max和L2_entry都不需要进行任何修改。
如果又有一条路由需要添加,为P:A.B.E.0/24,此时E<C<D,表明该表项在第二级表的作用域从E到255,但是此时的表项的存储空间是没有这么大的,需要重新申请大小为255-E+1的连续存储空间,并将原有空间内的数据拷贝到新的空间中,对应的表项中从E到C的标号下一跳指向P。上一级表中min中的值将改为E,L2_entry装入的是新地址块的起始地址。
三条表项在路由表中的存储示意图如图3所示。
这种路由表存储机制,初始化后,路由表的第一级表是完全展开的,并固定为Table[0]到Table[2^16-1],但是路由表的第二级和第三级表没有展开,当有路由添加时,才根据添加路由的前缀长度,在第二级和第三级表中选择性地展开,所以实现了分段地址存储机制下,第二级和第三级表的表项最小区域空间存储,在一定条件下消除了第二级和第三级表中的冗余数据,降低了存储空间的消耗量。
本发明还提供了采用上述路由表组织方法构建的路由表的查找路由的方法,如图4所示,依次根据路由表的上一级中的valid和cont值判断是否在下一级中继续查找。
以路由表的第一级为例:
如果valid=1、cont=1表明有比当前长度更长的路由表项存在于第二级表中,需要从路由的IP地址中的抽取第二级表的数值计算偏移量offset,offset等于new_l2_first_idx减去L2_entry,自第二级表的起始位址L2_entry至L2_entry+offset查找路由,直到最长匹配。
如果valib=1,cont=0,表示不存在下一级更长的路由匹配,当前查找的即为最长匹配,则返回当前查找的表项作为最长匹配的路由信息(info)。
如果Valib=0,表示当前表项无效,继续查找则毫无意义。
路由表的其它级的表项判别过程与此类似,主要对两个标志位valid和cont进行判别,区分是查找成功、失败或还是需要进入下一步中继续查找。
依据权威统计数据显示,现行IPv4路由表项中99.93%的前缀长度小于等于24。如果采用地址分段路由实现查找算法,在二三级上实际存储的有效路由是非常稀疏的。而本发明提供的方法,由于路由表的第一级的表项中,min和max数值记录了下一级的最小和最大的表项标号,对应的表明下一级需要的存储空间就是max-min+1个表项单位,该值总是不会超过256的。在最极端的条件min为0的情况下,该级表项才需要申请256个表项单位的存储空间,但是这种情况显然不可能同时出现在所有的第二级、第三级表项结构中。因此,与传统方法相比,本发明具有如下优点:
(1)与传统查找速度比较:
对于路由表的第一级,查找方法与传统完全一样;
对于路由表的其他级的查找,本发明需要通过该级起始地址和第一级的表项中记录的该级表项最小值min,来推算出查找表项的偏移量,从运算的角度讲,两者在查找过程中时间复杂度基本相同。
(2)与传统存储空间比较:
传统方法进行下一级存储的时,标号总是从0到255,需要的存储块大小统一都是256个表项空间,造成空间的极大浪费。而本发明,初始化后,路由表的第一级是完全展开的,并固定为Table[0]到Table[2^16-1],但是路由表的第二级、第三级没有展开,当有表项添加时,才根据添加路由的前缀长度,在第二级、第三级选上择性地展开,所以实现了分段地址存储机制下,第二级、第三级表项的最小区域空间存储,在一定条件下消除了二、三级表中的冗余数据,降低了存储空间的消耗量。
本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下作出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。
Claims (7)
1.分段地址路由的路由表组织方法,其特征在于,包括以下步骤:
根据路由前缀长度将路由分为多类,并相应地添加在路由表的多级表中,路由表的上一级表中设有记录下一级表的路由起始值和结束值的数据域max和min以及指向下一级表中相应表项的起始位置的数据域;初始化后,路由表的第一级表完全展开,下一级表则根据添加路由的前缀长度和当前路由存储空间大小进行比较,选择性的调整存储空间的大小,并利用上一级表中的max和min值间接的记录路由存储空间大小;
添加路由包括以下步骤:
步骤10、根据路由前缀长度Mask_len判断是否将其添加到路由表的第一级表中,如果是则在第一级表中添加路由,否则转步骤20;
步骤20、根据路由前缀长度Mask_len判断是否将其添加到路由表的第二级表中,如果是转步骤30,否则转步骤40;
步骤30、判断第二级表的存储空间是否够用,如果够用则结合第一级表中的max和min计算出该路由在第二级表中的偏移起始位置,然后进行添加并更新第一级表中的指向第二级表中相应表项的起始位置的数据域,完成后转步骤50;否则,根据路由的IP地址的17-24位数值重新申请第二级表的相应内存,再进行添加,完成后转步骤50;
步骤40、判断第三级表的存储空间是否够用,如果够用则结合第二级表中的max和min计算出该路由在第三级表中的偏移起始位置,然后进行添加并更新第二级表中的指向第三级表中相应表项的起始位置的数据域,完成后转步骤50;否则,根据路由的IP地址的25-32位数值重新申请第三级表的相应内存,再进行添加,完成后转步骤50;
步骤50:路由表项添加结束。
2.如权利要求1所述的分段地址路由的路由表组织方法,其特征在于,
当路由前缀长度小于等于16时,添加到路由表的第一级表中;
当路由前缀长度介于17-24之间时,添加到路由表的第二级表中;
当路由前缀长度介于25-32之间时,添加到路由表的第三级表中。
3.如权利要求1所述的分段地址路由的路由表组织方法,其特征在于,步骤10包括以下步骤:
步骤101:判断路由前缀长度Mask_len是否大于16,如果Mask_len小于等于16,转步骤102;否则转步骤20进行处理;
步骤102:结合前缀长度Mask_Len计算出路由的IP地址的高16位有效数值l 1_base_idx,以确定该路由对应的表项在第一级表中的偏移起始位置Table[L1_base_idx],并计算表项的作用域num_entry=2^(16-Mask_len)-1;
步骤103:自第一级表中的偏移起始位置Table[L1_base_idx]开始至Table[l1_base_idx+num_entry]结束,对表中前缀长度Len小于Maske_len的表项进行添加,添加完成后转步骤50。
4.如权利要求3所述的分段地址路由的路由表组织方法,其特征在于,步骤30包括以下步骤:
步骤301:找到第一级表中对应的表项Table[L1_base_idx];
步骤302:结合前缀长度Mask_Len计算出路由的IP地址的17-24位有效数值new_l2_first_idx,同时根据前缀长度Mask_Len计算出添加表项作用域长度num_entry=2^(24-Mask_len)-1,将new_l2_first_idx和num_entry+new_l2_first_idx的值分别与第一级表中的表项Table[L1_base_idx]中min和max进行比较,计算出new_min=min{new_l2_first_idx,min}和new_max=max{num_entry+new_l2_first_idx,max},如果old_size=max-min+1大于等于new_size=new_max-new_min+1则表明第二级表的存储空间可以满足添加该路由,进而转步骤303进行处理;否则,表明第二级表的存储空间不够,需要重新申请更大的内存,转步骤305进行处理;
步骤303:结合第一级表中的min值计算出该路由在第二表中的偏移起始位置new_entry_offset=new_l2_first_idx-min;
步骤304:在第二级表中,从偏移起始位置Table[new_entry_offset]到Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,添加完成后转步骤50;
步骤305:根据new_size计算出新的表项在第二级表中需要的存储空间,并申请相应的大小的内存,复制第二级表中原有的表项,并修改第一级表中的l1_entry指向新的起始地址,并计算该路由在第二表中的偏移起始位置new_entry_offset=new_l2_first_idx-min;
步骤306:从第二级表中的表项起始位置到Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,完成后转步骤50。
5.如权利要求4所述的分段地址路由的路由表组织方法,其特征在于,步骤40包括以下步骤:
步骤401:找到路由表的第二级表中对应的表项Table[L2_base_idx];
步骤402:结合前缀长度Mask_Len计算路由前缀IP低8位有效数值new_l3_first_idx,同时根据前缀长度Mask_Len计算出添加表项作用域长度num_entry=2^(24-Mask_len)-1,将new_l3_first_idx和num_entry+new_l3_first_idx的值分别与第二级表中的表项Table[L2_base_idx]中min和max进行比较,计算出的new_min=min{new_l3_first_idx,min})和new_max=max{num_entry+new_l3_first_idx,max},如果old_size=max-min+1大于等于new_size=new_max-new_min+1则表明第三级表的存储空间可以满足添加该路由,进而转步骤403进行处理;否则,表明第三级表的存储空间不够,需要重新申请更大的内存,转步骤405进行处理;
步骤403:结合第二级表中的min值计算出该路由在第三级表中的偏移起始位置new_entry_offset=new_l3_first_idx-min;
步骤404:从第三级表的Table[new_entry_offset]开始到Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,完成后进入步骤50;
步骤405:根据new_size计算出新的表项在第三级表中需要的存储空间,并申请相应大小的内存,复制第三级表中的原有表项,并修改第二级表中L2_entry指向新的起始地址,并计算该路由在第三级表中的偏移起始位置new_entry_offset=new_l3_first_idx-min;
步骤406:从第三级表中的起始表项Table[new_entry_offset+num_entry],对表中前缀长度Len小于Maske_len的表项进行添加,并更新路由信息,完成后进入步骤50。
6.采用如权利要求1所述的路由表组织方法构建的路由表查找路由的方法,其特征在于,包括以下步骤:
路由表的上一级表中设有两个数据域Valid和Cont,Valid为表有效性标志位,取值为1或0,valid=1表明当前表有效,valid=0表明当前表为空;Cont为是否有更长路由可供查找的标志位,取值为1或0,cont=1表明可以在路由表的第二级中进行查找,cont=0表明无须在路由表的第二级中进行查找;
依次根据路由表的上一级表中的valid和cont值判断是否在下一级中继续查找。
7.如权利要求6所述的查找路由的方法,其特征在于,依次根据路由表的上一级表中的valid和cont值判断是否在下一级中继续查找的方法如下:
如果valid=1、cont=1表明有比当前长度更长的路由表项存在于下一级表中,需要从路由的IP地址中抽取下一级表的数值计算偏移量,偏移量等于上一级表的表项位置减去指向下一级表中相应表项的起始位置,查找范围为下一级表中相应表项的起始位置到下一级表中相应表项的起始位置+偏移量,直到最长匹配;
如果valib=1,cont=0,表示不存在下一级更长的路由匹配,当前查找的即为最长匹配,则返回当前查找的表项作为最长匹配的路由信息;
如果Valib=0,表示当前表项无效,继续查找则毫无意义。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210594875.XA CN102984071B (zh) | 2012-12-31 | 2012-12-31 | 分段地址路由的路由表组织方法及查找路由的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210594875.XA CN102984071B (zh) | 2012-12-31 | 2012-12-31 | 分段地址路由的路由表组织方法及查找路由的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102984071A CN102984071A (zh) | 2013-03-20 |
CN102984071B true CN102984071B (zh) | 2015-02-25 |
Family
ID=47857830
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210594875.XA Active CN102984071B (zh) | 2012-12-31 | 2012-12-31 | 分段地址路由的路由表组织方法及查找路由的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102984071B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104539540A (zh) * | 2015-01-15 | 2015-04-22 | 浪潮(北京)电子信息产业有限公司 | 一种基于图形处理单元gpu的路由方法和设备 |
CN107204891A (zh) * | 2016-03-18 | 2017-09-26 | 中兴通讯股份有限公司 | 一种海量规则下报文识别的方法及装置 |
CN107708110B (zh) * | 2016-08-09 | 2020-08-28 | 京信通信***(中国)有限公司 | 一种标识分配方法及装置 |
CN112235197B (zh) * | 2020-10-23 | 2022-07-15 | 烽火通信科技股份有限公司 | 一种并行路由查找方法及*** |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1286576A (zh) * | 2000-09-28 | 2001-03-07 | 国家数字交换***工程技术研究中心 | 一种分段式ip路由线速率查表方法 |
CN1585358A (zh) * | 2003-08-19 | 2005-02-23 | 华为技术有限公司 | 路由查找方法及其*** |
CN102333036A (zh) * | 2011-10-17 | 2012-01-25 | 中兴通讯股份有限公司 | 一种实现高速路由查找的方法和*** |
-
2012
- 2012-12-31 CN CN201210594875.XA patent/CN102984071B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1286576A (zh) * | 2000-09-28 | 2001-03-07 | 国家数字交换***工程技术研究中心 | 一种分段式ip路由线速率查表方法 |
CN1585358A (zh) * | 2003-08-19 | 2005-02-23 | 华为技术有限公司 | 路由查找方法及其*** |
CN102333036A (zh) * | 2011-10-17 | 2012-01-25 | 中兴通讯股份有限公司 | 一种实现高速路由查找的方法和*** |
Non-Patent Citations (1)
Title |
---|
Evaluating and Optimizing IP Lookup on Many core Processors;Peng He 等;《IEEE》;20120802;第1-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102984071A (zh) | 2013-03-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2159708B1 (en) | Method for selecting hash function, method for storing and searching routing table and devices thereof | |
US8295286B2 (en) | Apparatus and method using hashing for efficiently implementing an IP lookup solution in hardware | |
US6434144B1 (en) | Multi-level table lookup | |
CN101141389B (zh) | 增强多位Trie树查找方法和装置 | |
US6606681B1 (en) | Optimized content addressable memory (CAM) | |
US6633953B2 (en) | Range content-addressable memory | |
US7058642B2 (en) | Method and data structure for a low memory overhead database | |
US6691124B2 (en) | Compact data structures for pipelined message forwarding lookups | |
US7986696B1 (en) | Method and apparatus for longest prefix matching | |
US9871727B2 (en) | Routing lookup method and device and method for constructing B-tree structure | |
CN101621502A (zh) | 存储、查找路由表的方法及装置 | |
CN101577662A (zh) | 一种基于树形数据结构的最长前缀匹配方法和装置 | |
CN102333036B (zh) | 一种实现高速路由查找的方法和*** | |
WO2003069509A2 (en) | Efficient ipv4/ipv6 best matching prefix method and apparatus | |
JP4995125B2 (ja) | 固定長データの検索方法 | |
CN102984071B (zh) | 分段地址路由的路由表组织方法及查找路由的方法 | |
US20080133494A1 (en) | Method and apparatus for searching forwarding table | |
CN103051543A (zh) | 一种路由前缀的处理、查找、增加及删除方法 | |
CN100511229C (zh) | 一种域名类信息的存储及查询方法以及*** | |
CN101620623A (zh) | 内容可寻址存储器表项管理方法和装置 | |
CN101277252A (zh) | 多分支Trie树的遍历方法 | |
US6590898B1 (en) | Method and apparatus for routing data packets | |
CN101500012B (zh) | 一种报文分类方法和*** | |
US20120054198A1 (en) | Table creating and lookup method used by network processor | |
CN110096458B (zh) | 基于神经网络的命名数据网内容存储池数据检索方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20170324 Address after: 430000 East Lake high tech Development Zone, Hubei Province, No. 6, No., high and new technology development zone, No. four Patentee after: Fenghuo Communication Science &. Technology Co., Ltd. Address before: East Lake high tech city of Wuhan province Hubei Dongxin road 430074 No. 5 East optical communication industry building in Wuhan Fenghuo Network Co Ltd Patentee before: Wuhan Fenghuo Network Co., Ltd. |