CN103107945B - 一种快速查找ipv6路由的系统及方法 - Google Patents

一种快速查找ipv6路由的系统及方法 Download PDF

Info

Publication number
CN103107945B
CN103107945B CN201310009618.XA CN201310009618A CN103107945B CN 103107945 B CN103107945 B CN 103107945B CN 201310009618 A CN201310009618 A CN 201310009618A CN 103107945 B CN103107945 B CN 103107945B
Authority
CN
China
Prior art keywords
route
hash table
value
prefix
route 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.)
Expired - Fee Related
Application number
CN201310009618.XA
Other languages
English (en)
Other versions
CN103107945A (zh
Inventor
云晓春
张永铮
杜飞
郝志宇
庹宇鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Information Engineering of CAS
National Computer Network and Information Security Management Center
Original Assignee
Institute of Information Engineering of CAS
National Computer Network and Information Security Management Center
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Information Engineering of CAS, National Computer Network and Information Security Management Center filed Critical Institute of Information Engineering of CAS
Priority to CN201310009618.XA priority Critical patent/CN103107945B/zh
Publication of CN103107945A publication Critical patent/CN103107945A/zh
Application granted granted Critical
Publication of CN103107945B publication Critical patent/CN103107945B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明涉及一种快速查找IPV6路由的系统及方法,包括一个路由存储表,所述路由存储表包括一个一级线性索引表和一个以上的存储模块;所述一级线性索引表用于存储一个以上的索引值,每个索引值对应一个存储模块;其中,每个索引值为一个路由前缀的第4-16比特的值;所述存储模块用于存储17比特之后的路由前缀;所述方法根据IPV6路由前缀的层次关系和IPV6路由前缀长度的分布规律将17比特之后的路由前缀添加到相应存储模块中;本发明提供了一个一级的线性索引,提高了路由查找的效率;根据路由前缀长度的分布规律和前缀层次关系选择无冲突哈希表和多比特树,减少了比较次数,且该方法的稳定性较好。

Description

一种快速查找IPV6路由的系统及方法
技术领域
本发明涉及计算机领域,尤其涉及一种快速查找IPV6路由的方法。
背景技术
近年来,随着计算机网络规模的不断扩大,互联网络的迅猛发展,路由技术在网络技术中已逐渐成为关键部分,路由器也随之成为最重要的网络设备之一。它的处理速度是网络通信的主要瓶颈之一,其性能则直接影响着网络互联的质量。高效的路由表查找算法是影响路由器转发效率的重要因素。随着Internet网络规模的扩大,路由表的大小与日俱增,随着无分类域间路由(ClasslessInterDomainRouting,CIDR)的引入,IP地址查找从一个精确匹配的问题转变成为一个最优匹配的问题,必须采用最长前缀匹配(LongestPrefixMatch,LPM)算法解决,从而大大增加了IP地址查找的复杂性。特别是IPv6协议带来了巨大的地址空间和更长的地址格式,这些都对提高路由表查找算法效率提出了挑战。因此,必须研究适合IPv6的路由查找算法。目前,针对IPv6的路由查找方法主要有基于trie树的方法、基于多分支trie树的方法、基于前缀长度的二分查找(binarySearchonPrefixLengths)以及基于TCMA的算法等。
(1)基于Trie树的方法,用二进制Trie结构来表示地址前缀是一个常用的方法。Trie采用一种基于树的数据结构,通过前缀中每一位的值来决定树的分支用二进制Trie结构表示的地址前缀表,树中每个节点最多有两个孩子节点。在Trie树中,处于第L层的节点代表了一个地址前L比特均相同的地址空间,并且这L个比特串就是由从根节点到这个节点路径上的L比特组成。该方法的缺点是存储空间浪费较多,Trie树中间结点可以进行压缩和优化,因此有路径压缩的Trie树方法。
(2)多分支Trie树设计的关键是步宽的选择。较大的步宽产生深度较浅的Trie树,但需要消耗较多的表项存储空间,前缀更新涉及的节点也比较多,因此步宽的选择也就是在算法查找速度、存储空间和更新复杂度之间的折衷。
(3)按前缀长度进行二分查找(binarySearchonPrefixLengths)的算法,该算法将最长前缀匹配按前缀长度分解成一系列的精确匹配,并将前缀按长度分别存储在不同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比特之后的路由前缀;
所述一级线性索引表为一个数组,数组里存储指针,所述指针指向存储模块;
所述存储模块包括一个或一个以上的存储单元,存储单元包括一个单独的多比特树或一个以上的无冲突哈希表,每个无冲突哈希表附带若干个多比特树;
所述每个无冲突哈希表包括一个一级哈希表和若干个二级哈希表;
一级哈希表包含若干个表项,每个表项包含三个单元,第一单元存储二级哈希表可存储元素个数m,第二单元存储调节参数a的值,第三单元存储指向二级哈希表的数组指针p;
二级哈希表包含若干个存储单元,用于存储路由前缀;一级哈希表的每个表项的数组指针p指向的二级哈希表的长度为2m。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述无冲突哈希表的种类包括hash32、hash40和hash48表。
本发明解决上述技术问题的另一技术方案如下:一种快速查找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 (6)

1.一种快速查找IPV6路由的系统,其特征在于,包括一个路由存储表,所述路由存储表包括一个一级线性索引表和一个以上的存储模块;
所述一级线性索引表用于存储一个以上的索引值,每个索引值对应一个存储模块;其中,每个索引值为一个路由前缀的第4-16比特的值;
所述存储模块用于存储17比特之后的路由前缀;
所述一级线性索引表为一个数组,数组里存储指针,所述指针指向存储模块;
所述存储模块包括一个或一个以上的存储单元,存储单元包括一个单独的多比特树或一个以上的无冲突哈希表,每个无冲突哈希表附带若干个多比特树;
所述每个无冲突哈希表包括一个一级哈希表和若干个二级哈希表;
一级哈希表包含若干个表项,每个表项包含三个单元,第一单元存储二级哈希表可存储元素个数m,第二单元存储调节参数a的值,第三单元存储指向二级哈希表的数组指针p;
二级哈希表包含若干个存储单元,用于存储路由前缀;一级哈希表的每个表项的数组指针p指向的二级哈希表的长度为2m。
2.根据权利要求1所述一种快速查找IPV6路由的系统,其特征在于,所述无冲突哈希表的种类包括hash32、hash40和hash48表。
3.一种利用权利要求1或2任一项所述的快速查找IPV6路由的系统进行快速查找IPV6路由的方法,其特征在于,包括如下步骤:
步骤1:初始化路由前缀层次关系为一棵层次树;
步骤2:读取一条IPV6路由,计算其第4至16比特的值;
步骤3:判断该值在一级线性索引表中是否已存在,如果存在则进入步骤4;否则创建该索引值对应的存储模块,进入步骤4;
步骤4:根据IPV6路由前缀的层次关系和IPV6路由前缀长度的分布规律将17比特之后的路由前缀添加到相应存储模块中;
所述步骤4的具体步骤如下:
步骤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:查找路由时,根据目的地址的前缀的第4至16比特的值在一级线性索引表中找到对应的存储模块;
步骤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:跳转至默认路由。
4.根据权利要求3所述一种快速查找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。
5.根据权利要求3所述一种快速查找IPV6路由的方法,其特征在于,
所述步骤6.4、6.6和6.7中所述在本哈希表中查找的具体步骤为:
步骤a:根据无冲突哈希表的结构,在无冲突哈希表的二级索引表中查找,若找到进入步骤b;否则进入步骤c;
步骤b:查看本哈希表对应的多比特树是否为空,为空则将本哈希表中的值作为下一跳的路由返回,否则进入本哈希表对应的多比特树中继续查找,找到则返回下一跳路由,否则进入步骤c;
步骤c:跳至默认路由。
6.根据权利要求5所述一种快速查找IPV6路由的方法,其特征在于,所述在多比特树中查找的步宽为2或4。
CN201310009618.XA 2013-01-10 2013-01-10 一种快速查找ipv6路由的系统及方法 Expired - Fee Related CN103107945B (zh)

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 CN103107945A (zh) 2013-05-15
CN103107945B true 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)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
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
CN106302178B (zh) * 2015-05-20 2020-02-21 中兴通讯股份有限公司 一种路由查询方法及装置
CN104917852B (zh) * 2015-05-29 2019-01-18 中国科学院信息工程研究所 一种针对IPv6地址的数据快速处理方法
CN106656816B (zh) * 2016-09-18 2019-09-24 首都师范大学 分布式ipv6路由查找方法和系统
CN111352931A (zh) * 2018-12-21 2020-06-30 中兴通讯股份有限公司 一种哈希冲突的处理方法、装置及计算机可读存储介质
CN109951393B (zh) * 2019-03-29 2021-07-30 新华三信息安全技术有限公司 网段查找方法及装置
CN111291058B (zh) * 2020-03-17 2023-06-16 芯启源(南京)半导体科技有限公司 一种基于分层pc-trie结构的LPM规则存储方法
CN115858542B (zh) * 2023-03-03 2023-06-13 神州灵云(北京)科技有限公司 一种GeoIPv6树状索引方法、系统及电子设备

Citations (2)

* Cited by examiner, † Cited by third party
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

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8625604B2 (en) * 2009-12-01 2014-01-07 Polytechnic Institute Of New York University Hash-based prefix-compressed trie for IP route lookup

Patent Citations (2)

* Cited by examiner, † Cited by third party
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路由表的查找方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Address lookup algorithms for IPv6;Y.K.LI AND D.Pao;《IEE PROC.-COMMUN》;20061231;第153卷(第6期);第1-10页 *
一种改进的二分法IPV6路由查找算法;孙庆南等;《计算机工程》;20060920;第32卷(第18期);第1-4页 *
使用hash表和树位图的两级IPV6地址查找算法;王亚刚等;《计算机科学》;20100915;第37卷(第9期);第1-5页 *
哈希表和多比特Trie树相结合的IPv6路由查找算法的研究;高莹;《硕士学位论文》;20100501;第35-47页 *

Also Published As

Publication number Publication date
CN103107945A (zh) 2013-05-15

Similar Documents

Publication Publication Date Title
CN103107945B (zh) 一种快速查找ipv6路由的系统及方法
CN101594319B (zh) 表项查找方法和装置
US7418505B2 (en) IP address lookup using either a hashing table or multiple hash functions
CN100413285C (zh) 基于网络处理器的高速多维报文分类算法的设计和实现
CN102484610B (zh) 路由表建立方法和装置及路由表查找方法和装置
CN100496019C (zh) IPv6路由表快速查找和更新的方法
CN103051543B (zh) 一种路由前缀的处理、查找、增加及删除方法
US10462062B2 (en) Memory efficient packet classification method
CN101286935A (zh) 一种基于ip地址范围的路由查找方法
CN102045412B (zh) IPv6地址前缀压缩存储方法及设备
CN105515997B (zh) 基于bf_tcam实现零范围扩张的高效范围匹配方法
CN106330716B (zh) Ip路由查找方法及装置
CN101620623A (zh) 内容可寻址存储器表项管理方法和装置
CN114884877B (zh) 一种哈希表和HOT相结合的IPv6路由查找方法
CN101277252A (zh) 多分支Trie树的遍历方法
CN101848248A (zh) 一种规则查找方法和装置
CN105357247A (zh) 基于分层云对等网络的多维属性云资源区间查找方法
CN100472427C (zh) 一种数据包递归流分类方法
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
CN109754021B (zh) 基于范围元组搜索的在线包分类方法
CN107294855B (zh) 一种高性能计算网络下的tcp查找优化方法
Hemalatha et al. Searching time operation reduced IPV6 matching through dynamic DNA routing table for less memory and fast IP processing
CN109194574B (zh) 一种IPv6路由查找方法
CN104301227A (zh) 基于tcam的高速低功耗ip路由表查找方法

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