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

文档序号:7550123阅读:165来源:国知局
专利名称:一种快速查找ipv6路由的系统及方法
技术领域
本发明涉及计算机领域,尤其涉及一种快速查找IPV6路由的方法。
背景技术
近年来,随着计算机网络规模的不断扩大,互联网络的迅猛发展,路由技术在网络技术中已逐渐成为关键部分,路由器也随之成为最重要的网络设备之一。它的处理速度是网络通信的主要瓶颈之一,其性能则直接影响着网络互联的质量。高效的路由表查找算法是影响路由器转发效率的重要因素。随着Internet网络规模的扩大,路由表的大小与日俱增,随着无分类域间路由(Classless Inter Domain Routing, CIDR)的引入,IP地址查找从一个精确匹配的问题转变成为一个最优匹配的问题,必须采用最长前缀匹配(LongestPrefix Match, LPM)算法解决,从而大大增加了 IP地址查找的复杂性。特别是IPv6协议带来了巨大的地址空间和更长的地址格式,这些都对提高路由表查找算法效率提出了挑战。因此,必须研究适合IPv6的路由查找算法。目前,针对IPv6的路由查找方法主要有基于trie树的方法、基于多分支trie树的方法、基于前缀长度的二分查找(binary SearchonPrefix Lengths)以及基于TCMA的算法等。(I)基于Trie树的方法,用二进制Trie结构来表示地址前缀是一个常用的方法。Trie采用一种基于树的数据结构,通过前缀中每一位的值来决定树的分支用二进制Trie结构表示的地址前缀表,树中每个节点最多有两个孩子节点。在Trie树中,处于第L层的节点代表了一个地址前L比特均相同的地址空间,并且这L个比特串就是由从根节点到这个节点路径上的L比特组成。该方法的缺点是存储空间浪费较多,Trie树中间结点可以进行压缩和优化,因此有路径压缩的Trie树方法。(2)多分支Trie树设计的关键是步宽的选择。较大的步宽产生深度较浅的Trie树,但需要消耗较多的表项存储空间,前缀更新涉及的节点也比较多,因此步宽的选择也就是在算法查找速度、存储空间和更新复杂度之间的折衷。(3)按前缀长度进行二分查找(binary Search on Prefix Lengths)的算法,该算法将最长前缀匹配按前缀长度分解成一系列的精确匹配,并将前缀按长度分别存储在不同Hash表中,地址查找时,按前缀长度对所有的Hash表进行二分查找。该算法查找的平均次数为0(log2W),存储空间复杂度为0(Nlog2W)。该算法具有良好的扩展性,但引入了大量的标记来进行二分查找以避免回溯,因此增加了存储的复杂度。(4) TCAM是一种基于硬件的方法,TCAM中每一个表项以〈地址,掩码 > 序偶的形式保存。假设地址的长度范围从I到W,则地址和掩码分别占用W比特。若某个地址前缀的长度为Y,则其掩码的前Y个比特为I,其它比特为O,而地址的后W-Y个比特可为I或O。查找时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比特之后的路由如缀添加到相应存储I吴块中;步骤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)比特分成两部分,分别为xl和x2,对xl进行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值加I,同时调整二级哈希表的长度,其中二级哈希表的长度为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路由的系统,包括一个路由存储表,所述路由存储表包括一个一级线性索引表I和一个以上的存储模块2 ;所述一级线性索引表I用于存储一个以上的索引值,每个索引值对应一个存储模块;其中,每个索引值为一个路由前缀的第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比特之后的路由如缀添加到相应存储I吴块中;步骤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)比特分成两部分,分别为xl和x2,对xl进行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值加I,同时调整二级哈希表的长度,其中二级哈希表的长度为2*m。其中,当发生冲突时,即当路由前缀X古Y,Hashl(X) =Hashl(Y)且Hash2 (X+ a ) =Hash2 (Υ+ α ),调整算法因子 α 使得 Hash2 (X+α )关 Hash2 (Υ+ α ),即使第二层的hash不发生碰撞。为了提高查找速度,Hashl和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:跳至默认路由。其中在哈希表中的查找过程与向哈希表中添加路由的过程一致:I)将路由前缀的17至X (X可取32、40或48)比特分成两部分,分别为xl和x2,对xl进行hash运算,将运算得到的值作为一级索引值,指向二级哈希表;2)对x2+a的值进行hash运算,得到的值用于确定前缀在二级哈希表中的存储的位置,进而进行相应查找;其中a值与添加时的值一致。其中,所述在多比特树中查找的步宽为2或4。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
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比特之后的路由如缀添加到相应存储I吴块中; 步骤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)比特分成两部分,分别为xl和x2,对xl进行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值加I,同时调整二级哈希表的长度,其中二级哈希表的长度为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。
全文摘要
本发明涉及一种快速查找IPV6路由的系统及方法,包括一个路由存储表,所述路由存储表包括一个一级线性索引表和一个以上的存储模块;所述一级线性索引表用于存储一个以上的索引值,每个索引值对应一个存储模块;其中,每个索引值为一个路由前缀的第4-16比特的值;所述存储模块用于存储17比特之后的路由前缀;所述方法根据IPV6路由前缀的层次关系和IPV6路由前缀长度的分布规律将17比特之后的路由前缀添加到相应存储模块中;本法明提供了一个一级的线性索引,提高了路由查找的效率;根据路由前缀长度的分布规律和前缀层次关系选择无冲突哈希表和多比特树,减少了比较次数,且该方法的稳定性较好。
文档编号H04L12/741GK103107945SQ201310009618
公开日2013年5月15日 申请日期2013年1月10日 优先权日2013年1月10日
发明者云晓春, 张永铮, 杜飞, 郝志宇, 庹宇鹏 申请人:中国科学院信息工程研究所, 国家计算机网络与信息安全管理中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1