CN103107945A - 一种快速查找ipv6路由的系统及方法 - Google Patents
一种快速查找ipv6路由的系统及方法 Download PDFInfo
- Publication number
- CN103107945A CN103107945A CN201310009618XA CN201310009618A CN103107945A CN 103107945 A CN103107945 A CN 103107945A CN 201310009618X A CN201310009618X A CN 201310009618XA CN 201310009618 A CN201310009618 A CN 201310009618A CN 103107945 A CN103107945 A CN 103107945A
- Authority
- CN
- China
- Prior art keywords
- route
- bits
- hash table
- value
- prefix
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 29
- 238000000151 deposition Methods 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 description 5
- 230000006872 improvement Effects 0.000 description 3
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- RJKFOVLPORLFTN-LEKSSAKUSA-N Progesterone Chemical compound C1CC2=CC(=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H](C(=O)C)[C@@]1(C)CC2 RJKFOVLPORLFTN-LEKSSAKUSA-N 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种快速查找IPV6路由的系统及方法,包括一个路由存储表,所述路由存储表包括一个一级线性索引表和一个以上的存储模块;所述一级线性索引表用于存储一个以上的索引值,每个索引值对应一个存储模块;其中,每个索引值为一个路由前缀的第4-16比特的值;所述存储模块用于存储17比特之后的路由前缀;所述方法根据IPV6路由前缀的层次关系和IPV6路由前缀长度的分布规律将17比特之后的路由前缀添加到相应存储模块中;本法明提供了一个一级的线性索引,提高了路由查找的效率;根据路由前缀长度的分布规律和前缀层次关系选择无冲突哈希表和多比特树,减少了比较次数,且该方法的稳定性较好。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种快速查找IPV6路由的方法。
背景技术
近年来,随着计算机网络规模的不断扩大,互联网络的迅猛发展,路由技术在网络技术中已逐渐成为关键部分,路由器也随之成为最重要的网络设备之一。它的处理速度是网络通信的主要瓶颈之一,其性能则直接影响着网络互联的质量。高效的路由表查找算法是影响路由器转发效率的重要因素。随着Internet网络规模的扩大,路由表的大小与日俱增,随着无分类域间路由(Classless Inter Domain Routing,CIDR)的引入,IP地址查找从一个精确匹配的问题转变成为一个最优匹配的问题,必须采用最长前缀匹配(Longest Prefix Match,LPM)算法解决,从而大大增加了IP地址查找的复杂性。特别是IPv6协议带来了巨大的地址空间和更长的地址格式,这些都对提高路由表查找算法效率提出了挑战。因此,必须研究适合IPv6的路由查找算法。目前,针对IPv6的路由查找方法主要有基于trie树的方法、基于多分支trie树的方法、基于前缀长度的二分查找(binary Search onPrefix Lengths)以及基于TCMA的算法等。
(1)基于Trie树的方法,用二进制Trie结构来表示地址前缀是一个常用的方法。Trie采用一种基于树的数据结构,通过前缀中每一位的值来决定树的分支用二进制Trie结构表示的地址前缀表,树中每个节点最多有两个孩子节点。在Trie树中,处于第L层的节点代表了一个地址前L比特均相同的地址空间,并且这L个比特串就是由从根节点到这个节点路径上的L比特组成。该方法的缺点是存储空间浪费较多,Trie树中间结点可以进行压缩和优化,因此有路径压缩的Trie树方法。
(2)多分支Trie树设计的关键是步宽的选择。较大的步宽产生深度较浅的Trie树,但需要消耗较多的表项存储空间,前缀更新涉及的节点也比较多,因此步宽的选择也就是在算法查找速度、存储空间和更新复杂度之间的折衷。
(3)按前缀长度进行二分查找(binary Search on Prefix Lengths)的算法,该算法将最长前缀匹配按前缀长度分解成一系列的精确匹配,并将前缀按长度分别存储在不同Hash表中,地址查找时,按前缀长度对所有的Hash表进行二分查找。该算法查找的平均次数为O(log2W),存储空间复杂度为O(Nlog2W)。该算法具有良好的扩展性,但引入了大量的标记来进行二分查找以避免回溯,因此增加了存储的复杂度。
(4)TCAM是一种基于硬件的方法,TCAM中每一个表项以<地址,掩码>序偶的形式保存。假设地址的长度范围从1到W,则地址和掩码分别占用W比特。若某个地址前缀的长度为Y,则其掩码的前Y个比特为1,其它比特为0,而地址的后W-Y个比特可为1或0。查找时TCAM判断查找关键字的前Y比特是否与目的地址的前Y比特相等,若相等则表示关键字与该表项匹配,否则不匹配。
基于TCAM的查找方案的最大优点是速度快,实现简单。完成一次查找只需三步操作:查找TCAM、查找下一跳(next-hop)索引表和查找next-hop映射表。若应用流水线技术,可以进一步提高查找速度。缺点是TCAM容量小,代价高,功耗大,更新复杂。
发明内容
本发明所要解决的技术问题是针对现有技术的不足,提供一种查找速度快、效率高、稳定性好的快速查找IPV6路由的系统及方法。
本发明解决上述技术问题的技术方案如下:一种快速查找IPV6路由的系统,包括一个路由存储表,所述路由存储表包括一个一级线性索引表和一个以上的存储模块;
所述一级线性索引表用于存储一个以上的索引值,每个索引值对应一个存储模块;其中,每个索引值为一个路由前缀的第4-16比特的值;
所述存储模块用于存储17比特之后的路由前缀。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述存储模块包括一个或一个以上的存储单元,存储单元包括一个单独的多比特树或一个以上的无冲突哈希表,每个无冲突哈希表附带若干个多比特树。
进一步,所述无冲突哈希表的种类包括hash32、hash40和hash48表。
进一步,所述每个无冲突哈希表包括一个一级哈希表和若干个二级哈希表;
一级哈希表包含若干个表项,每个表项包含三个单元,第一单元存储二级哈希表可存储元素个数m,第二单元存储调节参数a的值,第三单元存储指向二级哈希表的数组指针p;
二级哈希表包含若干个存储单元,用于存储路由前缀。
本发明解决上述技术问题的另一技术方案如下:一种快速查找IPV6路由的方法,包括如下步骤:
步骤1:初始化路由前缀层次关系为一棵层次树;
步骤2:读取一条IPV6路由,计算其第4至16比特的值;
步骤3:判断该值在一级线性索引表中是否已存在,如果存在则进入步骤4;否则创建该索引值对应的存储模块,进入步骤4;
步骤4:根据IPV6路由前缀的层次关系和IPV6路由前缀长度的分布规律将17比特之后的路由前缀添加到相应存储模块中;
步骤5:查找路由时,根据目的地址的前缀的第4至16比特的值在一级线性索引表中找到对应的存储模块;
步骤6:根据存储模块包含存储单元的情况查找下一跳路由。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述步骤4中将17比特之后的路由前缀添加到相应的存储模块中的具体步骤如下:
步骤4.1:读取IPV6路由前缀长度,记为x;
步骤4.2:根据x值的大小进行如下操作,
若16<x<32,将路由前缀的17至x比特存入步宽为4,深度为4的多比特树的中;
若x=32,将路由前缀的17至32比特存入哈希表hash32中;
若32<x<40,将路由前缀的17至32比特存入哈希表hash32中,33至x比特存入hash32对应的步宽为2,深度为4的多比特树中;
若x=40,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至40比特存入哈希表hash40中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中;
若40<x<48,判断该路由信息是否处于层次树最底层,且无父节点,如果是则将路由前缀的17至40比特存入哈希表hash40中,41至x比特存入hash40对应的步宽为2,深度为4的多比特树中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中,将41至x比特存入hash40对应的多比特树中;
x=48,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至48比特存入哈希表hash48中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中,将17至48比特存入hash48中;
若x>48,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至48比特存入哈希表hash48中,49至x比特存入步宽为4的多比特树中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中,将17至48比特存入hash48中,将49至x比特存入hash48对应的多比特树中。
进一步,将路由前缀存入hash32、hash40和hash48表的具体步骤如下:
步骤4.2.1:初始化无冲突哈希表,每个无冲突表包含一级哈希表和二级哈希表表;一级哈希表包含若干个表项,每个表项包含三个单元:第一单元存储二级哈希表可存储元素个数m,第二单元存储调节参数a的值,第三单元存储指向二级哈希表的数组指针。
步骤4.2.2:将路由前缀的17至x(x可取32、40或48)比特分成两部分,分别为x1和x2,对x1进行hash运算,将运算得到的值作为一级索引值,指向二级哈希表;
步骤4.2.3:对x2+a的值进行hash运算,得到的值用于确定前缀在二级哈希表中的存储的位置;
步骤4.2.4:判断步骤4.2.3所得的值确定的二级哈希表的位置是否为空,如果该位置为空,则将前缀17至x比特的值存储在该位置中,进入步骤4.2.6;如果不为空则发生了哈希碰撞,进入步骤4.2.5;
步骤4.2.5:调整a的值(a取不同的素数值),返回步骤4.2.3;
步骤4.2.6:将一级哈希表第一存储单元中的m值加1,同时调整二级哈希表的长度,其中二级哈希表的长度为2*m。
进一步,所述步骤6根据存储模块包含存储单元的情况查找下一跳路由的具体步骤:
步骤6.1:查看所述存储模块中是否存储有数据,如果有则进入步6.2,否则进入步骤6.8;
步骤6.2:根据所述存储模块中包含存储单元的情况,进行如下操作:
对于只包含一个单独的多比特树的,则直接进入该多比特树中进行查找,找到则返回下一跳路由,否则跳至6.8;
对于包含hash32表的,则以hash32表为入口地址,进入步骤6.3;
对于不包含hash32表、包含hash40表的,则以hash40表为入口地址,进入步骤6.5;
对于只包含hash48表的,则以hash48表为入口地址,进入步骤6.7;
步骤6.3:以hash32表为入口地址,查找路由前缀的前32比特的值在hash32表中是否存在,如果存在则进入步骤6.4;否则进入步骤6.8;
步骤6.4:查看路由前缀是否处于层次树的根节点处,且该根节点不包含叶子节点,如果是则在本哈希表中进行查找,否则进入步骤6.5或步骤6.7;
步骤6.5:以hash40表为入口地址,查找前40比特的值在hash40表中是否存在,如果存在则进入步骤6.6;否则进入步骤6.8;
步骤6.6:查看路由前缀是否处于层次树的根节点处,且该根节点不包含叶子节点,如果是则在本哈希表中进行查找,否则进入步骤6.7;
步骤6.7:以hash48表为入口地址,查找前48比特的值在hash48表中是否存在,如果存在则在本哈希表中进行查找;否则进入步骤6.8;
步骤6.8:跳转至默认路由。
进一步,所述步骤6.4、6.6和6.7中所述在本哈希表中查找的具体步骤为:
步骤a:根据无冲突哈希表的结构,在无冲突哈希表的二级索引表中查找,若找到进入步骤b;否则进入步骤c;
步骤b:查看本哈希表对应的多比特树是否为空,为空则将本哈希表中的值作为下一跳的路由返回,否则进入本哈希表对应的多比特树中继续查找,找到则返回下一跳路由,否则进入步骤c;
步骤c:跳至默认路由。
进一步,所述在多比特树中查找的步宽为2或4。
本发明的有益效果是:1)本法明提供了一个一级的线性索引,提高了路由查找的效率;2)根据路由前缀长度的分布规律选择无冲突哈希表,与骨干网中真实的IPv6数据相吻合,依据前缀层次关系对路由信息进行划分,减少比较次数;3)对于前缀长度不是32、40和48比特的前缀,对其取模,所得到的多余的比特存储在多比特树中,对树的步宽和深度做了权衡,提高查找速度;4)随着IPv6的普及和子网化的深入,该算法的稳定性较好
附图说明
图1为本发明所述一种快速查找IPV6路由的系统结构图;
图2为无冲突哈希表的结构图;
图3为本发明所述一种快速查找IPV6路由的方法流程图;
图4为步骤4的流程图;
图5为步骤4.2的流程图;
图6为步骤6的流程图。
附图中,各标号所代表的部件列表如下:
1、一级线性索引表,2、存储模块,101、一级哈希表,102、二级哈希表。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,一种快速查找IPV6路由的系统,包括一个路由存储表,所述路由存储表包括一个一级线性索引表1和一个以上的存储模块2;
所述一级线性索引表1用于存储一个以上的索引值,每个索引值对应一个存储模块;其中,每个索引值为一个路由前缀的第4-16比特的值;
所述存储模块2用于存储17比特之后的路由前缀。
其中,所述存储模块2包括一个或一个以上的存储单元,存储单元包括一个单独的多比特树或一个以上的无冲突哈希表,每个无冲突哈希表附带若干个多比特树。
其中,所述无冲突哈希表的种类包括hash32、hash40和hash48表。
如图2所示,所述每个无冲突哈希表包括一个一级哈希表101和若干个二级哈希表102;
一级哈希表101包含若干个表项,每个表项包含三个单元,第一单元存储二级哈希表可存储元素个数m,第二单元存储调节参数a的值,第三单元存储指向二级哈希表的数组指针p;
二级哈希表102包含若干个存储单元,用于存储路由前缀。
如图3所示:一种快速查找IPV6路由的方法,包括如下步骤:
步骤1:初始化路由前缀层次关系为一棵层次树;
其中,前缀层次关系体现在一棵层次关系树中,父节点的前缀区间覆盖其子孙节点的前缀区间;同一层的节点,前缀区间没有交集;
步骤2:读取一条IPV6路由,计算其第4至16比特的值;以路由前缀的第4-16比特的值作为索引表中的索引值,每个索引值对应一个存储模块,可包含8192个存储模块;
步骤3:判断该值在一级线性索引表中是否已存在,如果存在则进入步骤4;否则创建该索引值对应的存储模块,进入步骤4;
步骤4:根据IPV6路由前缀的层次关系和IPV6路由前缀长度的分布规律将17比特之后的路由前缀添加到相应存储模块中;
步骤5:查找路由时,根据目的地址的前缀的第4至16比特的值在一级线性索引表中找到对应的存储模块;
步骤6:根据存储模块包含存储单元的情况查找下一跳路由。
如图4所示,所述步骤4中将17比特之后的路由前缀添加到相应的存储模块中的具体步骤如下:
步骤4.1:读取IPV6路由前缀长度,记为x;
步骤4.2:根据x值的大小进行如下操作,
若16<x<32,将路由前缀的17至x比特存入步宽为4,深度为4的多比特树的中;
若x=32,将路由前缀的17至32比特存入哈希表hash32中;
若32<x<40,将路由前缀的17至32比特存入哈希表hash32中,33至x比特存入hash32对应的步宽为2,深度为4的多比特树中;
若x=40,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至40比特存入哈希表hash40中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中;
若40<x<48,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至40比特存入哈希表hash40中,41至x比特存入hash40对应的步宽为2,深度为4的多比特树中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中,将41至x比特存入hash40对应的多比特树中;
x=48,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至48比特存入哈希表hash48中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中,将17至48比特存入hash48中;
若x>48,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至48比特存入哈希表hash48中,49至x比特存入步宽为4的多比特树中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中,将17至48比特存入hash48中,将49至x比特存入hash48对应的多比特树中。
如图5所示,将路由前缀存入hash32、hash40和hash48表的具体步骤如下:
步骤4.2.1:初始化无冲突哈希表,每个无冲突表包含一级哈希表和二级哈希表表;一级哈希表包含若干个表项,每个表项包含三个单元:第一单元存储二级哈希表可存储元素个数m,第二单元存储调节参数a的值,第三单元存储指向二级哈希表的数组指针。
步骤4.2.2:将路由前缀的17至x(x可取32、40或48)比特分成两部分,分别为x1和x2,对x1进行hash运算,将运算得到的值作为一级索引值,指向二级哈希表;
步骤4.2.3:对x2+a的值进行hash运算,得到的值用于确定前缀在二级哈希表中的存储的位置;
步骤4.2.4:判断步骤4.2.3所得的值确定的二级哈希表的位置是否为空,如果该位置为空,则将前缀17至x比特的值存储在该位置中,进入步骤4.2.6;如果不为空则发生了哈希碰撞,进入步骤4.2.5;
步骤4.2.5:调整a的值(a取不同的素数值),返回步骤4.2.3;
步骤4.2.6:将一级哈希表第一存储单元中的m值加1,同时调整二级哈希表的长度,其中二级哈希表的长度为2*m。
其中,当发生冲突时,即当路由前缀X≠Y,Hash1(X)=Hash1(Y)且Hash2(X+α)=Hash2(Y+α),调整算法因子α使得Hash2(X+α)≠Hash2(Y+α),即使第二层的hash不发生碰撞。为了提高查找速度,Hash1和Hash2的计算复杂度不能太高,应该尽可能的简单高效,算法因子α每个表项都不相同,经验值取不同的素数。
如图6所示,所述步骤6根据存储模块包含存储单元的情况查找下一跳路由的具体步骤:
步骤6.1:查看所述存储模块中是否存储有数据,如果有则进入步6.2,否则进入步骤6.8;
步骤6.2:根据所述存储模块中包含存储单元的情况,进行如下操作:
对于只包含一个单独的多比特树的,则直接进入该多比特树中进行查找,找到则返回下一跳路由,否则跳至6.8;
对于包含hash32表的,则以hash32表为入口地址,进入步骤6.3;
对于不包含hash32表、包含hash40表的,则以hash40表为入口地址,进入步骤6.5;
对于只包含hash48表的,则以hash48表为入口地址,进入步骤6.7;
步骤6.3:以hash32表为入口地址,查找路由前缀的前32比特的值在hash32表中是否存在,如果存在则进入步骤6.4;否则进入步骤6.8;
步骤6.4:查看路由前缀是否处于层次树的根节点处,且该根节点不包含叶子节点,如果是则在本哈希表中进行查找,否则进入步骤6.5或步骤6.7;
步骤6.5:以hash40表为入口地址,查找前40比特的值在hash40表中是否存在,如果存在则进入步骤6.6;否则进入步骤6.8;
步骤6.6:查看路由前缀是否处于层次树的根节点处,且该根节点不包含叶子节点,如果是则在本哈希表中进行查找,否则进入步骤6.7;
步骤6.7:以hash48表为入口地址,查找前48比特的值在hash48表中是否存在,如果存在则在本哈希表中进行查找;否则进入步骤6.8;
步骤6.8:跳转至默认路由。
其中,所述步骤6.4、6.6和6.7中所述在本哈希表中查找的具体步骤为:
步骤a:根据无冲突哈希表的结构,在无冲突哈希表的二级索引表中查找,若找到进入步骤b;否则进入步骤c;
步骤b:查看本哈希表对应的多比特树是否为空,为空则将本哈希表中的值作为下一跳的路由返回,否则进入本哈希表对应的多比特树中继续查找,找到则返回下一跳路由,否则进入步骤c;
步骤c:跳至默认路由。
其中在哈希表中的查找过程与向哈希表中添加路由的过程一致:
1)将路由前缀的17至x(x可取32、40或48)比特分成两部分,分别为x1和x2,对x1进行hash运算,将运算得到的值作为一级索引值,指向二级哈希表;
2)对x2+a的值进行hash运算,得到的值用于确定前缀在二级哈希表中的存储的位置,进而进行相应查找;其中a值与添加时的值一致。
其中,所述在多比特树中查找的步宽为2或4。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种快速查找IPV6路由的系统,其特征在于,包括一个路由存储表,所述路由存储表包括一个一级线性索引表和一个以上的存储模块;
所述一级线性索引表用于存储一个以上的索引值,每个索引值对应一个存储模块;其中,每个索引值为一个路由前缀的第4-16比特的值;
所述存储模块用于存储17比特之后的路由前缀。
2.根据权利要求1所述一种快速查找IPV6路由的系统,其特征在于,所述存储模块包括一个或一个以上的存储单元,存储单元包括一个单独的多比特树或一个以上的无冲突哈希表,每个无冲突哈希表附带若干个多比特树。
3.根据权利要求2所述一种快速查找IPV6路由的系统,其特征在于,所述无冲突哈希表的种类包括hash32、hash40和hash48表。
4.根据权利要求2所述一种快速查找IPV6路由的系统,其特征在于,所述每个无冲突哈希表包括一个一级哈希表和若干个二级哈希表;
一级哈希表包含若干个表项,每个表项包含三个单元,第一单元存储二级哈希表可存储元素个数m,第二单元存储调节参数a的值,第三单元存储指向二级哈希表的数组指针p;
二级哈希表包含若干个存储单元,用于存储路由前缀。
5.一种快速查找IPV6路由的方法,其特征在于,包括如下步骤:
步骤1:初始化路由前缀层次关系为一棵层次树;
步骤2:读取一条IPV6路由,计算其第4至16比特的值;
步骤3:判断该值在一级线性索引表中是否已存在,如果存在则进入步骤4;否则创建该索引值对应的存储模块,进入步骤4;
步骤4:根据IPV6路由前缀的层次关系和IPV6路由前缀长度的分布规律将17比特之后的路由前缀添加到相应存储模块中;
步骤5:查找路由时,根据目的地址的前缀的第4至16比特的值在一级线性索引表中找到对应的存储模块;
步骤6:根据存储模块包含存储单元的情况查找下一跳路由。
6.根据权利要求5所述一种快速查找IPV6路由的方法,其特征在于,所述步骤4中将17比特之后的路由前缀添加到相应的存储模块中的具体步骤如下:
步骤4.1:读取IPV6路由前缀长度,记为x;
步骤4.2:根据x值的大小进行如下操作,
若16<x<32,将路由前缀的17至x比特存入步宽为4,深度为4的多比特树的中;
若x=32,将路由前缀的17至32比特存入哈希表hash32中;
若32<x<40,将路由前缀的17至32比特存入哈希表hash32中,33至x比特存入hash32对应的步宽为2,深度为4的多比特树中;
若x=40,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至40比特存入哈希表hash40中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中;
若40<x<48,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至40比特存入哈希表hash40中,41至x比特存入hash40对应的步宽为2,深度为4的多比特树中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中,将41至x比特存入hash40对应的多比特树中;
x=48,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至48比特存入哈希表hash48中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中,将17至48比特存入hash48中;
若x>48,判断该路由信息是否处于层次树的最底层,且无父节点,如果是则将路由前缀的17至48比特存入哈希表hash48中,49至x比特存入步宽为4的多比特树中;否则将路由前缀的17至32比特存入hash32中,将17至40比特存入hash40中,将17至48比特存入hash48中,将49至x比特存入hash48对应的多比特树中。
7.根据权利要求6所述一种快速查找IPV6路由的方法,其特征在于,将路由前缀存入hash32、hash40和hash48表的具体步骤如下:
步骤4.2.1:初始化无冲突哈希表,每个无冲突表包含一级哈希表和若干个二级哈希表;一级哈希表包含若干个表项,每个表项包含三个单元,第一单元存储二级哈希表可存储元素个数m,第二单元存储调节参数a的值,第三单元存储指向二级哈希表的数组指针;
步骤4.2.2:将路由前缀的17至x(x可取32、40或48)比特分成两部分,分别为x1和x2,对x1进行hash运算,将运算得到的值作为一级索引值,指向二级哈希表;
步骤4.2.3:对x2+a的值进行hash运算,得到的值用于确定前缀在二级哈希表中的存储的位置;
步骤4.2.4:判断步骤4.2.3所得的值确定的二级哈希表的位置是否为空,如果该位置为空,则将前缀17至x比特的值存储在该位置中,进入步骤4.2.6;如果不为空则发生了哈希碰撞,进入步骤4.2.5;
步骤4.2.5:调整a的值(a取不同的素数值),返回步骤4.2.3;
步骤4.2.6:将一级哈希表第一存储单元中的m值加1,同时调整二级哈希表的长度,其中二级哈希表的长度为2*m。
8.根据权利要求5所述一种快速查找IPV6路由的方法,其特征在于,所述步骤6根据存储模块包含存储单元的情况查找下一跳路由的具体步骤:
步骤6.1:查看所述存储模块中是否存储有数据,如果有则进入步6.2,否则进入步骤6.8;
步骤6.2:根据所述存储模块中包含存储单元的情况,进行如下操作:
对于只包含一个单独的多比特树的,则直接进入该多比特树中进行查找,找到则返回下一跳路由,否则跳至6.8;
对于包含hash32表的,则以hash32表为入口地址,进入步骤6.3;
对于不包含hash32表、包含hash40表的,则以hash40表为入口地址,进入步骤6.5;
对于只包含hash48表的,则以hash48表为入口地址,进入步骤6.7;
步骤6.3:以hash32表为入口地址,查找路由前缀的前32比特的值在hash32表中是否存在,如果存在则进入步骤6.4;否则进入步骤6.8;
步骤6.4:查看路由前缀是否处于层次树的根节点处,且该根节点不包含叶子节点,如果是则在本哈希表中进行查找,否则进入步骤6.5或步骤6.7;
步骤6.5:以hash40表为入口地址,查找前40比特的值在hash40表中是否存在,如果存在则进入步骤6.6;否则进入步骤6.8;
步骤6.6:查看路由前缀是否处于层次树的根节点处,且该根节点不包含叶子节点,如果是则在本哈希表中进行查找,否则进入步骤6.7;
步骤6.7:以hash48表为入口地址,查找前48比特的值在hash48表中是否存在,如果存在则在本哈希表中进行查找;否则进入步骤6.8;
步骤6.8:跳转至默认路由。
9.根据权利要求8所述一种快速查找IPV6路由的方法,其特征在于,
所述步骤6.4、6.6和6.7中所述在本哈希表中查找的具体步骤为:
步骤a:根据无冲突哈希表的结构,在无冲突哈希表的二级索引表中查找,若找到进入步骤b;否则进入步骤c;
步骤b:查看本哈希表对应的多比特树是否为空,为空则将本哈希表中的值作为下一跳的路由返回,否则进入本哈希表对应的多比特树中继续查找,找到则返回下一跳路由,否则进入步骤c;
步骤c:跳至默认路由。
10.根据权利要求8或9所述一种快速查找IPV6路由的方法,其特征在于,所述在多比特树中查找的步宽为2或4。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310009618.XA CN103107945B (zh) | 2013-01-10 | 2013-01-10 | 一种快速查找ipv6路由的系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310009618.XA CN103107945B (zh) | 2013-01-10 | 2013-01-10 | 一种快速查找ipv6路由的系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103107945A true CN103107945A (zh) | 2013-05-15 |
CN103107945B CN103107945B (zh) | 2016-01-27 |
Family
ID=48315523
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310009618.XA Expired - Fee Related CN103107945B (zh) | 2013-01-10 | 2013-01-10 | 一种快速查找ipv6路由的系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103107945B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103581023A (zh) * | 2013-11-06 | 2014-02-12 | 盛科网络(苏州)有限公司 | 实现最长掩码匹配的方法及装置 |
CN104917852A (zh) * | 2015-05-29 | 2015-09-16 | 中国科学院信息工程研究所 | 一种针对IPv6地址的数据快速处理方法 |
US9300583B2 (en) | 2014-01-23 | 2016-03-29 | Gainspan Corporation | Maintaining routing information in memory constrained routers |
WO2016184069A1 (zh) * | 2015-05-20 | 2016-11-24 | 中兴通讯股份有限公司 | 一种路由查询方法及装置 |
CN106656816A (zh) * | 2016-09-18 | 2017-05-10 | 首都师范大学 | 分布式ipv6路由查找方法和系统 |
CN109951393A (zh) * | 2019-03-29 | 2019-06-28 | 新华三信息安全技术有限公司 | 网段查找方法及装置 |
CN111291058A (zh) * | 2020-03-17 | 2020-06-16 | 芯启源(南京)半导体科技有限公司 | 一种优化基于分层pc-trie结构存储LPM规则的方法 |
CN111352931A (zh) * | 2018-12-21 | 2020-06-30 | 中兴通讯股份有限公司 | 一种哈希冲突的处理方法、装置及计算机可读存储介质 |
CN115858542A (zh) * | 2023-03-03 | 2023-03-28 | 神州灵云(北京)科技有限公司 | 一种GeoIPv6树状索引方法、系统及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1787477A (zh) * | 2004-12-09 | 2006-06-14 | 北京三星通信技术研究有限公司 | IPv6路由表的查找方法 |
US7376657B1 (en) * | 2004-04-30 | 2008-05-20 | Sun Microsystems, Inc. | Fast IPv6 address lookup using skip level processing on multi-bit tries |
US20110128960A1 (en) * | 2009-12-01 | 2011-06-02 | Masanori Bando | Hash-based prefix-compressed trie for ip route lookup |
-
2013
- 2013-01-10 CN CN201310009618.XA patent/CN103107945B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7376657B1 (en) * | 2004-04-30 | 2008-05-20 | Sun Microsystems, Inc. | Fast IPv6 address lookup using skip level processing on multi-bit tries |
CN1787477A (zh) * | 2004-12-09 | 2006-06-14 | 北京三星通信技术研究有限公司 | IPv6路由表的查找方法 |
US20110128960A1 (en) * | 2009-12-01 | 2011-06-02 | Masanori Bando | Hash-based prefix-compressed trie for ip route lookup |
Non-Patent Citations (5)
Title |
---|
Y.K.LI AND D.PAO: "Address lookup algorithms for IPv6", 《IEE PROC.-COMMUN》 * |
孙庆南等: "一种改进的二分法IPV6路由查找算法", 《计算机工程》 * |
孙庆南等: "一种改进的二分法IPV6路由查找算法", 《计算机工程》, vol. 32, no. 18, 20 September 2006 (2006-09-20) * |
王亚刚等: "使用hash表和树位图的两级IPV6地址查找算法", 《计算机科学》 * |
高莹: "哈希表和多比特Trie树相结合的IPv6路由查找算法的研究", 《硕士学位论文》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103581023A (zh) * | 2013-11-06 | 2014-02-12 | 盛科网络(苏州)有限公司 | 实现最长掩码匹配的方法及装置 |
US9300583B2 (en) | 2014-01-23 | 2016-03-29 | Gainspan Corporation | Maintaining routing information in memory constrained routers |
WO2016184069A1 (zh) * | 2015-05-20 | 2016-11-24 | 中兴通讯股份有限公司 | 一种路由查询方法及装置 |
CN104917852A (zh) * | 2015-05-29 | 2015-09-16 | 中国科学院信息工程研究所 | 一种针对IPv6地址的数据快速处理方法 |
CN104917852B (zh) * | 2015-05-29 | 2019-01-18 | 中国科学院信息工程研究所 | 一种针对IPv6地址的数据快速处理方法 |
CN106656816B (zh) * | 2016-09-18 | 2019-09-24 | 首都师范大学 | 分布式ipv6路由查找方法和系统 |
CN106656816A (zh) * | 2016-09-18 | 2017-05-10 | 首都师范大学 | 分布式ipv6路由查找方法和系统 |
CN111352931A (zh) * | 2018-12-21 | 2020-06-30 | 中兴通讯股份有限公司 | 一种哈希冲突的处理方法、装置及计算机可读存储介质 |
CN109951393A (zh) * | 2019-03-29 | 2019-06-28 | 新华三信息安全技术有限公司 | 网段查找方法及装置 |
CN109951393B (zh) * | 2019-03-29 | 2021-07-30 | 新华三信息安全技术有限公司 | 网段查找方法及装置 |
CN111291058A (zh) * | 2020-03-17 | 2020-06-16 | 芯启源(南京)半导体科技有限公司 | 一种优化基于分层pc-trie结构存储LPM规则的方法 |
CN111291058B (zh) * | 2020-03-17 | 2023-06-16 | 芯启源(南京)半导体科技有限公司 | 一种基于分层pc-trie结构的LPM规则存储方法 |
CN115858542A (zh) * | 2023-03-03 | 2023-03-28 | 神州灵云(北京)科技有限公司 | 一种GeoIPv6树状索引方法、系统及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN103107945B (zh) | 2016-01-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103107945A (zh) | 一种快速查找ipv6路由的系统及方法 | |
CN101827137B (zh) | 一种基于哈希表和扩展存储器的高性能IPv6地址查找方法 | |
CN102484610B (zh) | 路由表建立方法和装置及路由表查找方法和装置 | |
CN101577662B (zh) | 一种基于树形数据结构的最长前缀匹配方法和装置 | |
CN102377664B (zh) | 一种基于tcam的区域匹配装置和方法 | |
CN101594319B (zh) | 表项查找方法和装置 | |
CN100445999C (zh) | 一种数据存储及搜索方法 | |
US20040100950A1 (en) | Method and apparatus for performing network routing with use of power efficient TCAM-based forwarding engine architectures | |
US20040255045A1 (en) | IP address lookup method and hardware architecture using hashing | |
Le et al. | Scalable tree-based architectures for IPv4/v6 lookup using prefix partitioning | |
CN102333036B (zh) | 一种实现高速路由查找的方法和系统 | |
US10462062B2 (en) | Memory efficient packet classification method | |
WO2009076054A1 (en) | Low power ternary content-addressable memory (tcams) for very large forwarding tables | |
CN102291296A (zh) | 一种路由表的更新方法及系统 | |
CN105515997B (zh) | 基于bf_tcam实现零范围扩张的高效范围匹配方法 | |
CN101848248B (zh) | 一种规则查找方法和装置 | |
CN101286935A (zh) | 一种基于ip地址范围的路由查找方法 | |
EP1063827A2 (en) | Method for address lookup | |
Zhong | An IPv6 address lookup algorithm based on recursive balanced multi-way range trees with efficient search and update | |
CN114884877B (zh) | 一种哈希表和HOT相结合的IPv6路由查找方法 | |
CN101277252A (zh) | 多分支Trie树的遍历方法 | |
CN100472427C (zh) | 一种数据包递归流分类方法 | |
US7398278B2 (en) | Prefix processing technique for faster IP routing | |
Hsieh et al. | A classified multisuffix trie for IP lookup and update | |
Veeramani et al. | Efficient IP lookup using hybrid trie-based partitioning of TCAM-based open flow switches |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160127 |
|
CF01 | Termination of patent right due to non-payment of annual fee |