CN105141525A - IPv6路由查找方法及装置 - Google Patents
IPv6路由查找方法及装置 Download PDFInfo
- Publication number
- CN105141525A CN105141525A CN201510388574.5A CN201510388574A CN105141525A CN 105141525 A CN105141525 A CN 105141525A CN 201510388574 A CN201510388574 A CN 201510388574A CN 105141525 A CN105141525 A CN 105141525A
- Authority
- CN
- China
- Prior art keywords
- sub
- level
- route
- branch
- tree
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提出IPv6路由查找方法及装置。方法包括:分别针对每个VPN中的IPv6前缀的路由分布,构建一棵Multibit?Trie;将每棵Multibit?Trie划分为n+1个Level:Level?0~n;将Multibit?Trie的1~m级IPv6前缀上的路由扩展到m+1级前缀上;将第m+1级IPv6前缀的每一个分支作为一个Branch_Tree;针对Level?p~n中的每个第一级Sub_Trie节点,以当前VPN标识+本Sub_Trie节点的IPv6地址在本Level之前的所有bit作为输入Key,对输入Key进行Hash计算;当对一VPN内的一IPv6地址进行路由查找时,分别构造针对每个Level的输入Key,对针对每个Level的输入Key进行计算,采用最长的Hash命中结果查找路由。本申请提高了IPv6路由查找效率。
Description
技术领域
本申请涉及路由查找技术领域,尤其涉及IPv6路由查找方法及装置。
背景技术
网络之间进行通信就要实现数据的传递转发,所以网络设备的主要职能之一就是进行高效率的数据转发,而其在因特网协议的基本数据平面的功能是路由查找,即根据路由表中的前缀信息,对每一个到来的数据包决定它的下一跳及出端口。由于路由表中通配符以及CIDR(ClasslessInter-DomainRouting,基于无类域间路由)的LPM(LongestPrefixMatching,最长前缀匹配)问题使得路由查找变得非常复杂。基于LPM的路由查找算法除了需要高性能外,还要满足如下几个需求:
一、IPv4和IPv6双栈
现有解决LPM的算法大都针对IPv4的32位地址设计,不能直接移植或者扩展到IPv6,这就需要根据IPv6的特点,设计出适合128位IP地址的高效的路由查找算法。
二、多VPN(VirtualPrivateNetwork,虚拟专网)实例支持
当前网络设备需要支持VRF(VPNRoutingForwardingInstance,VPN路由转发实例),VRF是指在一台路由器上需要同时支持多个路由转发表实例,各路由转发表间独立。使用VRF可以用路由隔离不同的VPN用户。
当前中、高端路由器已经普遍支持4K或8KVPN,也就是说设备内部需要同时支持4K或8K个VRF转发表,支持多VPN实例对路由算法的整体架构具有很大的影响。
三、大规格路由数量
对于IP路由来说,网络设备需要支持远大于当前现网路由的规格。图1所示为2002~2009年InternetIPv4路由分布示意图,从图1中可以看到8年间IPv4路由数量增加了一倍以上;图2所示为InternetIPv6路由分布示意图。
另外由于网络设备需要支持多VPN实例,每个VPN实例都需要维护一套独立的路由表,当网络设备支持较多VPN实例时,网络设备整体路由表条目会很大。例如8K个VPN实例,每个VPN实例有512条路由,则整个网络设备需要支持4M条路由。
当前中、高端路由器设备,IPv4普遍要求大于4M条路由,IPv6普遍要求大于1M条路由,大规格的路由表数量对路由算法的整体架构具有很大的影响,尤其对算法所选择的内存类型具有决定作用。
四、快速更新
路由更新性能是网络设备一个非常关键的指标,路由更新速度慢会严重影响整网路由收敛的速度,导致整网不停地路由震荡;随着现网路由数量的增加、以及整网VPN和VPN路由数量的增加,对路由更新性能提出了更高的要求。
发明内容
本申请提供IPv6路由查找方法及装置,以提高IPv6路由查找效率。
本申请的技术方案是这样实现的:
一种IPv6路由查找方法,该方法包括:
分别针对每个VPN中的IPv6前缀的路由分布,构建一棵MultibitTrie;
将每棵MultibitTrie划分为n+1个Level:Level0~n,n为大于1的整数;
采用前缀扩展的方法将MultibitTrie的1~m级IPv6前缀上的路由扩展到m+1级IPv6前缀上,m为大于1的整数;
将第m+1级IPv6前缀的每一个分支作为一个Branch_Tree,保存每个Branch_Tree的数据结构信息;
针对Levelp~n中的每个第一级Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IPv6前缀的IPv6地址在本Level之前的所有bit作为输入Key,采用预设的本Level的Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,p为整数且0<p<n;
当对一VPN内的一IPv6地址进行路由查找时,先根据VPN标识和该IPv6地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,若有Hash计算结果命中,则采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由;否则,根据该IPv6地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree的Level1~p-1中查找路由。
一种IPv6路由查找装置,该装置包括:
MultibitTrie建立及划分模块:分别针对每个VPN中的IPv6前缀的路由分布,构建一棵MultibitTrie;将每棵MultibitTrie划分为n+1个Level:Level0~n,n为大于1的整数;采用前缀扩展的方法将MultibitTrie的1~m级IPv6前缀上的路由扩展到m+1级IPv6前缀上,m为大于1的整数;将第m+1级IPv6前缀的每一个分支作为一个Branch_Tree,保存每个Branch_Tree的数据结构信息;
Hash映射模块:针对Levelp~n中的每个第一级Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IPv6前缀的IPv6地址在本Level之前的所有bit作为输入Key,采用预设的本Level的Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,p为整数且0<p<n;
路由查找模块:当对一VPN内的一IPv6地址进行路由查找时,先根据VPN标识和该IPv6地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,若有Hash计算结果命中,则采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由;否则,根据该IPv6地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree的Level1~p-1中查找路由。
可见,本申请支持多VPN实例的IPv6路由;且,通过将Multibit-Trie划分为多个Branch_Tree,提高了IPv6路由查找效率;且,通过对Levelp~n中的第一级Sub_Trie节点的指针进行Hash映射,使得在进行IPv6地址的路由查找时,可在Levelp~n中进行并行查找,并根据最长的Hash命中结果查找到路由,进一步提高了IPv6路由查找效率;
且,本申请实施例中,将默认路由单独存储,而不扩展到Level1,减少了Multibit-Trie的冗余节点,进一步提高了路由查找速度;
且,本申请实施例中,通过为Levelp~n中的每个Level设置多个Hash函数,减少了Hash冲突,提高了路由查找精度;
且,本申请实施例中,对Sub_Trie节点内部进行前缀扩展后划分为8个SegmentedSub_Trie节点,进一步提高了路由查找速度;
且,本申请实施例中,简化最后一级Level的Sub_Trie节点的数据结构,进一步提高了路由查找速度。
附图说明
图1为2002~2009年InternetIPv4路由分布示意图;
图2为现有的InternetIPv6路由分布示意图;
图3为UnibitTrie示例图;
图4为UnibitTrie到MultibitTrie的转换过程示例图;
图5为图4中的Level1的结构;
图6为本申请一实施例提供的基于MultibitTrie的IPv6路由查找方法流程图;
图7为本申请另一实施例提供的MultibitTrie的建立及划分方法流程图;
图8为本申请实施例针对一个VPN(VPNm)中的IPv6前缀的路由分布建立的MultibitTrie的结构示例图;
图9-1为本申请实施例提供的以图3所示的UnibitTrie为例,将/0级IPv6前缀的路由扩展到/1级IPv6前缀上的示例图;
图9-2为本申请实施例提供的以图3所示的UnibitTrie为例,将/1级IPv6前缀的路由扩展到/2级IPv6前缀上的示例图;
图9-3为本申请实施例提供的以图3所示的UnibitTrie为例,将/2级IPv6前缀的路由扩展到/3级IPv6前缀上的示例图;
图10为本申请另一实施例提供的基于MultibitTrie的IPv6路由查找方法流程图;
图11为本申请实施例提供的将Sub_Trie节点划分为8个SegmentedSub_Trie节点的示例图;
图12为本申请实施例提供的基于MultibitTrie的IPv6路由查找装置的组成示意图;
图13为本申请实施例提供的包含IPv6路由查找装置的设备的硬件架构示意图。
具体实施方式
TreeBitmap(树位图)是基于MultibitTrie(多位字典树)的经典路由查找算法,该算法应用于CRS系列高端路由器上。为了深入了解TreeBitmap,首先介绍UnibitTrie(单位字典树)和MultibitTrie。
图3为UnibitTrie示例图,如图3所示,共有9条IPv4前缀P1~P9分布。其中,UnibitTrie的最高前缀节点P1代表前缀*,之后,P1的下一级的左分支表示的前缀Q1为0*,P1的下一级的右分支表示的前缀P2为1*,Q1的下一级的左分支表示的前缀P3为00*,P2的下一级的左分支表示的前缀Q2为01*,P2的下一级的右分支表示的前缀Q3为11*,依此类推;也就是说,对于UnibitTrie中的任一节点P,该节点P的下一级的左分支表示的前缀PL为0P,该节点P的下一级的右分支表示的前缀PR为1P。
在UnibitTrie结构中,●节点代表有路由分布,○表示没有路由分布。如图3中,P1~P9代表有路由分布,Q1~Q8代表没有路由分布。
UnibitTrie中基于LPM的路由查找过程如下:
对于一个待查找LPM路由的IPv4前缀,以该IPv4前缀的从高到低bit的顺序,每次在UnibitTrie中查找该IPv4前缀的1bit,如果该bit为“0”,则进入UnibitTrie的下一级的左分支,如果该bit为“1”,则进入UnibitTrie的下一级的右分支;依此类推,一直查找到UnibitTrie的树底,最后经过的●节点的路由为该IPv4前缀的LPM路由。
例如:要在图3所示的UnibitTrie中查找IPv4前缀:10000110的LPM路由,则具体过程如下:
步骤01:先找出该IPv4前缀:10000110的最高的bit,即“1”,则从UnibitTrie的P1进入下一级的右分支P2,表示为P1->P2;
步骤02:再找出IPv4前缀:10000110的次高bit,即“0”,则从UnibitTrie的P2进入下一级的左分支Q2,表示为:P2->Q2;
步骤03:再找出IPv4前缀:10000110的第三高bit,即“0”,则从UnibitTrie的Q2进入下一级的左分支Q4,表示为:Q2->Q4;
步骤04:再找出IPv4前缀:10000110的第四高bit,即“0”,则从UnibitTrie的Q4进入下一级的左分支P6,表示为:Q4->P6;
步骤05:再找出IPv4前缀:10000110的第五高bit,即“0”,则从UnibitTrie的P6进入下一级的左分支Q6,表示为:P6->Q6;
步骤06:再找出IPv4前缀:10000110的第六高bit,即“1”,则从UnibitTrie的Q6进入下一级的右分支Q8,表示为:Q6->Q8;
步骤07:再找出IPv4前缀:10000110的第七高,即次低bit,即“1”,则从UnibitTrie的Q8进入下一级的右分支P9,表示为:Q8->P9,此时,已经到达UnitbitTrie的树底,则查找结束,P9的路由为IPv4前缀:10000110的LPM路由。
也就是说,采用UnibitTrie查找IPv4前缀“10000110”的LPM路由,需要通过P1->P2->Q2->Q4->P6->Q6->Q8->P9,共七次节点查找。
MultibitTrie是在UnibitTrie的基础上,每次LPM路由查找时,查找多个bit。图4所示为UnibitTrie到MultibitTrie的转换过程,图4中每次LPM路由查找要查找3个bit,即LPM路由查找步长为3。
TreeBitmap是在MultibitTrie基础上,对节点数据结构进行优化,使之更适合基于SRAM(StaticRandomAccessMemory,静态随机存取存储器)和DRAM(DynamicRandomAccessMemory,动态随机存取存储器)的大访问粒度架构的硬件流水线实现。MultibitTrie可根据预设LPM路由查找步长划分为多个Level,如图4所示的MultibitTrie以LPM路由查找步长3划分为3个Level:Level1、Level2和Level3。
图5给出了图3中的Level1的结构。
在MultibitTrie中,对于每个Level,将该Level划分为多个TreeBitmap节点,每个TreeBitmap节点为该Level的最高一级的一个前缀及其该前缀的子孙前缀构成的sub_Trie。
其中,设MultibitTrie以LPM路由查找步长S划分为N个Level,分别为Level1~N,则Level1中包含一个TreeBitmap节点,Level2的最高一级前缀最多有2s个,则该2s个前缀中的每个前缀与其子孙前缀分别构成一棵sub_Trie,则Level2中最后包含2s个TreeBitmap节点,通用地,Levelm(1≤m≤N)中最多包含2(m-1)s个TreeBitmap节点。
以图4为例,Level1中包含一个TreeBitmap节点,Level2中包含3个TreeBitmap节点,Level3中包含2个TreeBitmap节点。
在描述TreeBitmap节点时,每个TreeBitmap节点可采用如下四个参数来描述:
1)InternalTreeBitmap(内部树位图)
InternalTreeBitmap表示TreeBitmap节点内部的前缀的路由分布,假设LPM路由查找步长为S,则该TreeBitmap节点内部最多有(2S-1)个前缀,从而InternalTreeBitmap为(2S-1)位,每一位代表该TreeBitmap节点内部的一个前缀上是否有路由分布,若该前缀上有路由分布,则该位取值为“1”,否则,该位取值为“0”。
例如:图5所示的Leve1中的TreeBitmap节点,由于LPM路由查找步长S=3,则Level1中的TreeBitmap节点的InternalTreeBitmap为23-1=7位,表示为1_01_1000,其中,“1”表示对应前缀上有路由分布,“0”表示对应前缀上没有路由分布。
2)ExtendingPathsBitmap(扩展路径位图)
ExtendingPathsBitmap表示TreeBitmap节点的下一级TreeBitmap节点的分布,假设LPM路由查找步长为S,则一个TreeBitmap节点最多有2S个分支,即该TreeBitmap节点的下一级最多有2S个TreeBitmap节点,因此ExtendingPathsBitmap为2S位,每一位代表该TreeBitmap节点的一个分支是否有下一级TreeBitmap节点,若该分支有下一级TreeBitmap节点,则该位取值为“1”,否则,该位取值为“0”。
例如:图5所示的Level1的TreeBitmap节点,由于LPM路由查找步长S=3,则该TreeBitmap节点最多23=8个分支,即该TreeBitmap节点的ExtendingTreeBitmap为23=8位,表示为00001101,其中,“1”表示该TreeBitmap节点的对应分支有下一级TreeBitmap节点,“0”表示该TreeBitmap节点的对应分支没有下一级TreeBitmap节点。从图4可以看出:Level1的TreeBitmap节点有3个下一级TreeBitmap节点。
3)ResultArrayPointer(结果数组指针)
ResultArrayPointer是指TreeBitmap节点内部有路由分布的前缀对应的RA(ResultArray,结果数组)头指针,RA中依次存储了TreeBitmap节点内部有路由分布的各前缀的路由信息,路由信息包括:NextHop(下一跳)信息、FEC(ForwardingEquivalenceClass,转发等价类)信息等。
通过InternalTreeBitmap可以知道一个TreeBitmap节点内部包含多少个有路由分布的前缀,RA按照先后顺序存储这些前缀的路由信息。以图5所示的Level1的TreeBitmap节点为例,该TreeBitmap节点的ResultArrayPointer指向的RA顺序存储了P1、P2和P3的路由信息,ResultArrayPointer指向P1的路由信息。
4)ChildNodePointer(子节点指针)
ChildNodePointer是指TreeBitmap节点的下一级TreeBitmap节点信息的头指针。
通过ExtendingPathsBitmap可以知道TreeBitmap节点的下一级TreeBitmap节点的分布,也就是说该TreeBitmap节点的哪些分支上有下一级TreeBitmap节点。TreeBitmap节点的所有下一级“有效”TreeBitmap节点的信息在内存中是按照顺序存储的,这里的“有效”即对应的ExtendingPathsBitmap位为“1”。
以图5所示的Level1的TreeBitmap节点为例,该TreeBitmap节点有3个下一级TreeBitmap节点,ChildArrayPointer指向的内存按照先后顺序存储该3个TreeBitmap节点的信息,其中,每个TreeBitmap节点的信息都由上述提到的1)InternalTreeBitmap、2)ExtendingPathsBitmap、3)ResultArrayPointer和4)ChildNodePointer描述。
同样以IPv4前缀“100_001_10”为例,在图4所示的MultibitTrie中查找该前缀的LPM路由的具体过程如下:
步骤01:由于图4中的LPM路由查找步长为3,则首先读取IPv4前缀的最高3bit“100”,在Level1的TreeBitmap节点的InternalTreeBitmap中查找与“100”匹配的前缀,确定P1和P2匹配上,由于P2是更长的前缀匹配,因此在Level1上P2是最长前缀匹配结果;
同时,根据最高3bit“100”在ExtendingPathsBitmap中查找对应的bit(最高3bit“100”对应TreeBitmap节点的第5个分支,则应该在ExtendingPathsBitmap中查找第5个bit),该bit为“1”,则确定最高3bit“100”对应的分支有下一级TreeBitmap节点,且该TreeBitmap节点为ChildNodePointer指向的第一个TreeBitmap节点(即Level2中的第一个TreeBitmap节点21),通过ChildNodePointer从内存中读取TreeBitmap节点21的信息,包括:InternalTreeBitmap、ExtendingPathsBitmap和ChildNodePointer。
步骤02:然后读取IPv4前缀的中间3bit“001”,在TreeBitmap节点21的InternalTreeBitmap节点中查找与“001”匹配的前缀,确定P6是最长前缀匹配结果;
根据中间3bit“001”在TreeBitmap节点21的ExtendingPathsBitmap中查找对应bit(中间3bit“001”对应TreeBitmap21节点的第2个分支,则应该在TreeBitmap节点21的ExtendingPathsBitmap中查找第2个bit),该bit取值为“1”,则确定TreeBitmap节点21有下一级TreeBitmap节点,且确定该下一级TreeBitmap节点为TreeBitmap节点21的ChildNodePointer指向的第一个TreeBitmap节点(即TreeBitmap节点31),则通过TreeBitmap节点21的ChildNodePointer从内存中读取TreeBitmap节点31的信息,包括:InternalTreeBitmap、ExtendingPathsBitmap、ChildNodePointer。
步骤03:由于TreeBitmap节点31节点位于树底,只有InternalTreeBitmap,则使用IPv4前缀的最低2bit“10”,查找TreeBitmap节点31节点的InternalTreeBitmap,得到最长前缀匹配是P9。
可见,采用MultibitTrie可以大大减少LPM路由查找时的节点查找次数。例如:在图4所示的MultibitTrie中查找IPv4前缀“10000110”的LPM路由,只需要通过TreeBitmap1->TreeBitmap21->TreeBitmap31三次节点查找。
上述TreeBitmap1->TreeBitmap21->TreeBitmap31查找过程中,需要把每级节点得到的LPM信息传递给后级节点,后级节点根据前级节点的LPM信息得到本级节点的LPM信息并继续传递给下一级节点。例如:TreeBitmap1得到的LPM是P2,将P2传递给TreeBitmap21;TreeBitmap21得到的LPM是P6,P6比TreeBitmap1传递的P2是更长的LPM,因此P6被传递给TreeBitmap31;TreeBitmap31得到的LPM是P9,P9是比P6更长的LPM,因此P9作为最终的LPM结果。
通过TreeBitmap31的InternalTreeBitmap和ResultArrayPointer,得到P9对应的RA指针,从内存中读取RA作为最终的LPM路由。
上述查找过程需要查找TreeBitmap1、TreeBitmap21、TreeBitmap31的内存信息和RA共4次内存查找操作。
申请人对基于MultibitTrie的TreeBitmap算法进行分析发现:
一)TreeBitmap算法没有实现多VPN实例支持,而在现今的网络设备中多VPN实例支持是一个非常重要的功能,其对路由算法的整体架构有很大的影响。
二)基于MultibitTrie的TreeBitmap算法每次查找多bit,因此TreeBitmap节点的数据结构较大,每个TreeBitmap节点的数据结构包括:InternalTreeBitmap、ExtendingPathsBitmap、ResultArrayPointer和ChildNodePointer,查找速度较慢。
图6为本申请一实施例提供的IPv6路由查找方法流程图,其具体步骤如下:
步骤601:分别针对每个VPN(VirtualPrivateNetwork,虚拟专网)中的IPv6前缀的路由分布,构建一棵MultibitTrie。
步骤602:将每棵MultibitTrie划分为n+1个Level(层):Level0~n,n为大于1的整数。
步骤603:采用前缀扩展的方法将MultibitTrie的1~m级IPv6前缀上的路由扩展到m+1级IPv6前缀上,m为大于1的整数。
步骤604:将第m+1级IPv6前缀的每一个分支作为一个分支树Branch_Tree,保存每个Branch_Tree的数据结构信息。
步骤605:针对Levelp~n中的每个第一级子字典树Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IPv6前缀的IPv6地址在本Level之前的所有位bit作为输入Key,采用预设的本Level的哈希Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,p为整数且0<p<n。
步骤606:当对一VPN内的一IPv6地址进行路由查找时,先根据VPN标识和该IPv6地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,若有Hash计算结果命中,则采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由;否则,根据该IPv6地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree的Level1~p-1中查找路由。
一种实施例中,将0级IPv6前缀的默认路由存储在片外存储空间的预定区域,将1~m级IPv6前缀的路由存储在片外存储空间的空闲区域中;
且,步骤604中,保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中。
一种实施例中,步骤604中,保存每个Branch_Tree的数据结构信息进一步包括:
针对Branch_Tree维护VRB(VPNRootBitmap,虚拟专网入口位图)Table(表),该VRBTable包含CEPB(CompressedExtendingPathBitmap,压缩扩展路径位图)和CNP(ChildNodePointer,子节点指针),其中,
CEPB共2m+1/2dbit,每2d个连续的Branch_Tree对应CEPB的一个bit,当2d个连续的Branch_Tree中存在在Level1~p-1中有路由分布的Branch_Tree时,则对应的CEPB位有效,d为正整数;
CNP表示第一个CEPB有效bit对应的2d个Branch_Tree的第一个Branch_Tree的指针;
且,步骤606中,根据该IPv6地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree的Level1~p-1中查找路由包括:
读取该IPv6地址的高m+1bit,根据该IPv6地址的高m+1-dbit在该Multibit-Trie的VRBTable的CEPB中查找到对应的bit;若查找到的bit有效,则根据该IPv6地址的高m+1bit中的低dbit确定对应的CNP,根据该CNP查找到对应的Branch_Tree的数据结构信息;根据该Branch_Tree的Level1~p-1的数据结构信息查找该IPv6地址的路由。
一种实施例中,步骤602中,将每棵MultibitTrie划分为n+1个Level包括:
按照路由分布较多的IPv6前缀段位于Level底部的原则,将每棵MultibitTrie划分为8个Level:Level0~7,Level0由0~8级前缀构成,Level1~3的步长都为8,Level4~6的步长都为24,Level7的步长为23;且,m=8,p=4。
一种实施例中,步骤604中,保存每个Branch_Tree的数据结构信息包括:
保存每个Branch_Tree中除Level0外的每个Level中的Sub_Trie节点的数据结构信息,其中:除最后一个Level的最后一级Sub_Trie节点的步长为7外,其余Sub_Trie节点的步长都为8;对于每个Branch_Tree中除Level0外的每个Level中的每个Sub_Trie节点,采用前缀扩展的方式将该Sub_Trie节点的0、1、2级上的前缀的路由扩展到3级前缀上;将每个Sub_Trie节点均匀划分成8个分段Sub_Trie节点,保存每个分段Sub_Trie节点的数据结构信息,其中,每个分段Sub_Trie节点以该分段Sub_Trie节点的高3级IPv6前缀为索引;
且,步骤606中,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由包括:
根据该IPv6地址在对应Sub_Trie节点中的对应8bit,根据该8bit的高3bit在本Sub_Trie节点中索引到对应的分段Sub_Trie节点,根据该分段Sub_Trie节点的数据结构信息进行后续路由查找过程;
步骤606中,在该Branch_Tree的Level1~p-1中查找路由包括:当查找到Level1~p-1中的一Level时,根据该IPv6前缀在本Level中对应的8bit的高3bit在本Level的Sub_Trie中索引到对应的分段Sub_Trie,根据该分段Sub_Trie的数据结构信息进行后续路由查找过程。
一种实施例中,步骤604中,保存每个Branch_Tree的数据结构信息包括:
对于Level3的Sub_Trie节点以及Level7的最后一级Sub_Trie节点,该Sub_Trie节点的数据结构信息包括:
1)q个PrefixKey(前缀密钥):每个Prefixkey代表该Sub_Trie节点中的其中一个有路由分布的IP前缀的IP地址的最低7bit,其中,q为预设的该Sub_Trie节点中的有路由分布的IP前缀的最大数量;
2)ResultArrayptr(结果数组指针);
且,步骤606中,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由时,当查找到Level7的最后一级Sub_Trie节点时,直接将该IPv6地址的最低7bit与Level7的各最后一级Sub_Trie节点的数据结构信息中的PrefixKey匹配,若匹配上,则根据对应的ResultArrayptr直接确定路由;
步骤606中,在该Branch_Tree的Level1~p-1中查找路由时,当查找到Level3时,直接将该IPv6地址的最低8bit与Level3的各Sub_Trie的数据结构信息中的PrefixKey匹配,若匹配上,则根据对应的ResultArrayptr直接确定路由。
一种实施例中,预先为Levelp~n中的每个Level设置多个Hash函数,每个Hash函数对应一张Hash表,Hash表中的每个位置唯一代表一个Hash计算结果,每个位置用于存储该位置代表的Hash计算结果对应的输入Key及该输入Key对应的Sub_Trie节点的数据结构信息指针;
且,步骤605中,采用预设的本Level的Hash函数对输入Key进行计算包括:
a、采用预设的本Level的多个Hash函数分别对输入Key进行计算,针对得到的每个Hash计算结果,在对应的Hash表中查找到对应的位置;
若在多个Hash表中查找到的多个位置中有任一个位置为空,则将当前输入key以及本Sub_Trie节点的数据结构信息指针放入该位置;
若在多个Hash表中查找到的多个位置都不为空,则在该多个位置中任选一个位置,将该位置上的原有输入Key和Sub_Trie节点的数据结构信息指针取出,将当前输入key以及本Sub_Trie节点的数据结构信息指针放入该位置;
b、对于取出的输入Key,判断是否已连续取出预设数目个输入key,若是,将该取出的输入key及其对应的Sub_Trie节点的数据结构信息指针放入取出key列表中,否则,将该取出的输入key作为当前输入key,返回执行步骤a。
一种实施例中,步骤606中,分别采用每个Level的Hash函数对针对每个Level的输入key进行计算包括:
分别采用每个Level的多个Hash函数对针对每个Level的输入key进行计算,得到多个Hash计算结果;
对于每个Hash计算结果,在对应Hash函数的Hash表中查找对应的位置,若查找到对应位置,将对应位置上存储的输入Key与构造的输入key进行匹配,若匹配上,则命中,若未匹配上,则继续在对应Level的取出key列表中查找构造的输入key。
一种实施例中,每个Hash函数对应一张Hash表为:
所有VPN的MultibitTrie在Levelp~n中的同一Level中针对同一Hash函数都使用同一张Hash表。
一种实施例中,步骤606中,在该Branch_Tree的Level1~p-1中查找路由之后进一步包括:
若未查找到,则从片外存储空间的预定区域中读取默认路由,将默认路由作为最终查找到的路由。
图7为本申请另一实施例提供的MultibitTrie的建立及划分方法流程图,其具体步骤如下:
步骤701:分别针对每个VPN中的所有IPv6前缀的路由分布,构建一棵MultibitTrie。所有VPN的MultibitTrie的结构相同。其中,每棵MultibitTrie共有8个Level:Level0~7,Level0由0/~8/级前缀构成,Level1~3的步长都为8,Level4~6的步长都为24,Level7的步长为23。
即,有多少个VPN就建立多少棵MultibitTrie。
图8给出了本申请实施例针对一个VPN(VPNm)中的IPv6前缀的路由分布建立的MultibitTrie的结构示例图,如图8所示,MultibitTrie共有128级IPv6前缀:/0~/127,其中,Level0中的前缀为:/0~/8级(对应128bitIPv6地址的高9bit),Level1中的前缀为:/9~/16(对应128bitIPv6地址的次高8bit),Level2中的前缀为:/17~/24(对应128bitIPv6地址的次次高8bit),Level3中的前缀为:/25~/32,Level4中的前缀为:/33~/56,Level5中的前缀为:/57~/80(对应128bitIPv6地址的次次低24bit),Level6中的前缀为:/81~/104(对应128bitIPv6地址的次低24bit),Level7中的前缀为:/105~/127(对应128bitIPv6地址的低23bit)。
本申请实施例中,在对MultibitTrie的/9~/127级前缀进行分层时,采用的步长为8、8、8、24、24、24、23,这样可以保证包含有较多的有路由分布的前缀段:prefix16、prefix24、prefix32、prefix56、prefix80、prefix104分布在Level1~6的底部,这样从整体上来看会使得MultibitTrie中的sub_Trie节点的数量最少。
步骤702:针对每个VPN的MultibitTrie,采用前缀扩展的方法将该MultibitTrie的/1~/8级前缀上的路由扩展到/9级前缀上。
前缀扩展(PrefixExpansion)是指将掩码长度短的前缀的路由等价扩展到多个掩码长度长的前缀上。
以图4所示的MultibitTrie为例,可以将该MultibitTrie的/0、/1、/2级前缀的路由扩展到/3级前缀上,扩展时所遵循的原则是“对于/3级前缀,取其最临近的/2、/1、/0级前缀的路由”,具体如下:
1)将/0级前缀的路由扩展到/1级前缀上
/0级前缀P1的路由可以扩展到/1级前缀Q1和P2上,但是,由于P2已有路由分布,且P2已有路由的优先级高于P1的路由,则只需将P1的路由扩展到Q1上,如图9-1所示。
2)将/1级前缀的路由扩展到/2级前缀上
/1级有两个前缀Q1和P2,则:
Q1的路由可以扩展到/2级前缀P3和Q9上,但是,由于P3已有路由分布,且P3已有路由的优先级高于Q1的路由,则只需将Q1的路由扩展到Q9上,如图9-2所示;
P2的路由可以扩展到/2级前缀Q2和Q3上,如图9-2所示。
3)将/2级前缀的路由扩展到/3级前缀上
/2级有四个前缀P3、Q9、Q2和Q3,则:
P3的路由可以扩展到/3级前缀Q10和Q11上,如图9-3所示;
Q9的路由可以扩展到/3级前缀Q12和Q13上,如图9-3所示;
Q2的路由可以扩展到/3级前缀Q4和P4上,但是,由于P4已有路由分布,且P4已有路由的优先级高于Q2的路由,则只需将Q2的路由扩展到Q4上,如图9-3所示;
Q3上的路由可以扩展到/3级的前缀Q14和P5上,但是,由于P5上已有路由分布,且P5上已有路由的优先级高于Q3上的路由,则只需将Q3上的路由扩展到Q14上,如图9-3所示。
步骤703:将0/级前缀的默认路由存储在DRAM的固定位置。
每个VPN通常有默认路由0.0.0.0/0,考虑到:如果将默认路由也采用前缀扩展的方式扩展到MultibitTrie的/9级前缀上,则每棵MultibitTrie固定会有512个有效的Branch_Tree,这样对于多VPN路由表会形成大量的冗余Branch_Tree。
步骤704:预先为Level4、Level5、Level6、Level7分别设置Hash函数。
步骤705:将Level0的29=512个下一级分支中的每一个分支作为一个Branch_Tree。
则每个Branch_Tree都由分别位于Level1、Level2、Level3、Level4、Level5、Level6、Level7的七层Sub_Trie组成,其中,Level1~3都由步长为8的一级Sub_Trie节点组成,Level4~6都由步长为8的三级Sub_Trie节点组成,Level7由步长为8、8、7的三级Sub_Trie节点组成。
步骤706:针对每个Branch_Tree,在DRAM中保存该Branch_Tree的数据结构信息,其中,该Branch_Tree的数据结构信息由该Branch_Tree在Level1、Level2、Level3、Level4、Level5、Level6、Level7中的所有Sub_Trie节点的数据结构信息组成。
其中,Level1~6中的每个Sub_Trie节点以及Level7中的前两级Sub_Trie节点的数据结构信息都分别由InternalTreeBitmap、ExtendingPathsBitmap、ResultArrayPointer和ChildNodePointer组成,Level7中的最后一级Sub_Trie节点由于都没有下一级分支,则都分别由InternalTreeBitmap和ResultArrayPointer组成。
根据MultibitTrie固有结构特点可知:
Level0中始终只包含1个Sub_Trie节点(设为Sub_Trie节点1);
设Sub_Trie节点1有p个分支有下一级Sub_Trie节点,则Level1中就包含p个Sub_Trie节点;
设Level1中的p个Sub_Trie节点共有q个分支有下一级Sub_Trie节点,则Level2中就包含q个Sub_Trie节点;
设Level2中的q个Sub_Trie节点共有n个分支有下一级Sub_Trie节点,则Level3中就包含n个Sub_Trie节点;
设Level3中的n个Sub_Trie节点有r1个分支有下一级Sub_Trie节点,则Level4就包含r1个第一级Sub_Trie节点;
设Level4的r1个第一级Sub_Trie节点有r2个分支有下一级Sub_Trie节点,则Level4就包含r2个第二级Sub_Trie节点;
设Level4的r2个第二级Sub_Trie节点有r3个分支有下一级Sub_Trie节点,则Level4就包含r3个第三级Sub_Trie节点;
设Level4的r3个第三级Sub_Trie节点共有s1个分支有下一级Sub_Trie节点,则Level5就包含s1个第一级Sub_Trie节点;
设Level5的s1个第一级Sub_Trie节点有s2个分支有下一级Sub_Trie节点,则Level5就包含s2个第二级Sub_Trie节点;
设Level5的s2个第二级Sub_Trie节点有s3个分支有下一级Sub_Trie节点,则Level5就包含s3个第三级Sub_Trie节点;
设Level5的s3个第三级Sub_Trie节点共有t1个分支有下一级Sub_Trie节点,则Level6就包含t1个第一级Sub_Trie节点;
设Level6的t1个第一级Sub_Trie节点有t2个分支有下一级Sub_Trie节点,则Level6就包含t2个第二级Sub_Trie节点;
设Level6的t2个第二级Sub_Trie节点有t3个分支有下一级Sub_Trie节点,则Level6就包含t3个第三级Sub_Trie节点;
设Level6的t3个第三级Sub_Trie节点共有u1个分支有下一级Sub_Trie节点,则Level7就包含u1个第一级Sub_Trie节点;
设Level7的u1个第一级Sub_Trie节点有u2个分支有下一级Sub_Trie节点,则Level7就包含u2个第二级Sub_Trie节点;
设Level7的u2个第二级Sub_Trie节点有u3个分支有下一级Sub_Trie节点,则Level7就包含u3个第三级Sub_Trie节点。
在一个Branch_Tree中,Level1中最多有512个Sub_Trie,Level2中最多有64K个Sub_Trie,Level3中最多有16M个Sub_Trie,依此类推。
步骤707:针对该29=512个Branch_Tree在Level1~3中的分布情况,维护VRBTable,该VRBTable包含CEPB和CNP两部分,其中,
CEPB:用于表示512个Branch_Tree在Level1~3中的路由分布情况,共64bit;每8个连续的Branch_Tree对应CEPB的一个bit,该8个连续的Branch_Tree中只要有一个Branch_Trees在Level1~3上有路由分布,则对应的CEPB位有效(即为“1”)。
CNP:表示第一个CEPB有效bit对应的8个Branch_Tree的第一个Branch_Tree的指针(即第一个Branch_Tree的数据结构信息在内存中的起始地址)。
可见,通过CEPB和CNP可以计算得到任意一个有效的Branch_Tree(即在Level1~3上有路由分布的Branch_Tree)的指针。
步骤708:针对Level4~7中的每个第一级Sub_Trie节点,分别以当前VPN标识+本Sub_Trie节点的IPv6地址在本Level之前的所有bit作为输入Key,采用本Level的Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,将Hash计算结果与本Sub_Trie节点的数据结构信息指针的映射关系保存到本Level的Hash映射表中。
Sub_Trie节点的数据结构信息指针即,该Sub_Trie节点的数据结构信息的存储首地址。
例如:设当前VPN为VPNm,Level4的Hash函数为第一Hash函数,Level5的Hash函数为第二Hash函数,Level6的Hash函数为第三Hash函数,Level7的Hash函数为第四Hash函数,则:
设Level4中共有r1个第一级Sub_Trie节点,则对于Level4中的任意一个第一级Sub_Trie节点,以m+该Sub_Trie节点的IPv6地址的高33bit作为输入Key,采用第一Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level4的Hash映射表中;最终,Level4的Hash映射表保存了r1条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点的IPv6地址的高33bit,即该Sub_Trie节点的128bitIPv6地址中的最高33bit。
设Level5中共有s1个第一级Sub_Trie节点,则对于Level5中的任意一个第一级Sub_Trie节点,以m+该Sub_Trie节点的IPv6地址的高57bit作为输入Key,采用第二Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level5的Hash映射表中;最终,Level5的Hash映射表保存了s1条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点的IPv6地址的高57bit,即该Sub_Trie节点的128bitIPv6地址中的最高57bit。
设Level6中共有t1个第一级Sub_Trie节点,则对于Level6中的任意一个第一级Sub_Trie节点,以m+该Sub_Trie节点的IPv6地址的高81bit作为输入Key,采用第三Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level6的Hash映射表中;最终,Level6的Hash映射表保存了t1条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点的IPv6地址的高81bit,即该Sub_Trie节点的128bitIPv6地址中的最高81bit。
设Level7中共有u1个第一级Sub_Trie节点,则对于Level7中的任意一个第一级Sub_Trie节点,以m+该Sub_Trie节点的IPv6地址的高105bit作为输入Key,采用第四Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level7的Hash映射表中;最终,Level7的Hash映射表保存了u1条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点的IPv6地址的高105bit,即该Sub_Trie节点的128bitIPv6地址中的最高105bit。
图10为本申请另一实施例提供的基于MultibitTrie的IPv6路由查找方法流程图,本实施例以图7所示实施例建立的MultibitTrie为基础,其具体步骤如下:
步骤1001:当对一VPN内的一IPv6地址进行LPM路由查找时,先根据VPN标识和该IPv6地址的高33bit、高57bit、高81bit、高105bit构造四个输入Key,分别为:key1:VPN标识+该IPv6地址的高33bit,key2:VPN标识+该IPv6地址的高57bit,key3:VPN标识+该IPv6地址的高81bit,key4:VPN标识+该IPv6地址的高105bit;采用Level4的Hash函数对key1进行计算,得到Hash计算结果1,同时采用Level5的Hash函数对key2进行计算,得到Hash计算结果2,同时采用Level6的Hash函数对key3进行计算,得到Hash计算结果3,同时采用Level7的Hash函数对key4进行计算,得到Hash计算结果4。
步骤1002:同时在Level4的Hash映射表中查找Hash计算结果1,在Level5的Hash映射表中查找Hash计算结果2,在Level6的Hash映射表中查找Hash计算结果3,在Level7的Hash映射表中查找Hash计算结果4,判断是否命中任一或任多个Hash计算结果,若是,执行步骤1003;否则,执行步骤1004。
步骤1003:采用最长的Hash命中结果作为最终的命中结果,根据最终命中结果对应的Sub_Trie节点的数据结构信息指针,查找到该Sub_Trie节点的数据结构信息,根据该Sub_Trie节点的数据结构信息以及该IPv6地址在本Level中的bit,查找LPM路由,本流程结束。
例如:若在Level7的Hash映射表中查找到了Hash计算结果4,则将Hash计算结果4作为最终的命中结果,根据Hash计算结果4对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv6地址的低23bit在Level7中查找到LPM路由;
若在Level7的Hash映射表中未查找到Hash计算结果4,但在Level6的Hash映射表中查找到了Hash计算结果3,则将Hash计算结果3作为最终的命中结果,根据Hash计算结果3对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv6地址的次低24bit在Level6中查找到LPM路由;
若在Level7的Hash映射表中未查找到Hash计算结果4,同时在Level6的Hash映射表中也未查找到Hash计算结果3,但在Level5的Hash映射表中查找到了Hash计算结果2,则将Hash计算结果2作为最终的命中结果,根据Hash计算结果2对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv6地址的次次低24bit在Level5中查找到LPM路由;
若在Level7的Hash映射表中未查找到Hash计算结果4,同时在Level6的Hash映射表中也未查找到Hash计算结果3,在Level5的Hash映射表中也未查找到Hash计算结果2,但在Level4的Hash映射表中查找到了Hash计算结果1,则将Hash计算结果1作为最终的命中结果,根据Hash计算结果1对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv6地址的次次高24bit在Level4中查找到LPM路由;
若在Level7的Hash映射表中未查找到Hash计算结果4,同时在Level6的Hash映射表中也未查找到Hash计算结果3,在Level5的Hash映射表中也未查找到Hash计算结果2,在Level4的Hash映射表中也未查找到Hash计算结果1,则执行步骤1004。
步骤1004:读取该IPv6地址的高9bit,先计算该IPv6地址的高6bit对应的十进制值,设该值为v,在步骤707维护的该VPN的Multibit-Trie的VRBTable中查找第vbit。
IPv6地址的高6bit对应的十进制值v的取值范围为:0~(26-1),即,0~63。
步骤1005:判断该第vbit的取值为0还是1,若为0,执行步骤1006;若为1,执行步骤1007。
步骤1006:将DRAM的固定位置处存储的默认路由作为本次LPM路由查找结果,本流程结束。
步骤1007:计算该IPv6地址的高9bit中的低3bit对应的十进制值,设该值为w,则确定应该在该VPN的VRBTable的第vbit对应的8个Branch_Tree中的第w个Branch_Tree的Level1~3中进行LPM路由查找,则根据CNP查找到该Branch_Tree的数据结构信息,根据该Branch_Tree的Level1~3的数据结构信息查找该IPv6地址的LPM路由。
IPv6地址的高9bit的低3bit对应的十进制值w的取值范围为:0~(23-1),即,0~7。
本步骤1007执行完后,若仍未在确定的Branch_Tree的Level1~3中查找到该IPv6地址的LPM路由,则在步骤703存储的DRAM的固定位置中查找到/0级地址的默认路由,将该默认路由作为该IPv6地址的LPM路由。
在实际应用中,针对IPv6前缀,对于每个VPN对应的MultibitTrie,除Level0之外的其它Level中的Sub_Trie节点的数据结构信息都存储在外部DRAM中,Sub_Trie节点的数据结构的大小直接影响DRAM的访问性能。本实施例中,一个Sub_Trie节点的步长为8或7,Sub_Trie节点的数据结构包括:
InternalTreeBitmap(设长度为255bit)
ExtendingPathsBitmap(设长度为256bit)
ResultArrayPointer(设长度为24bit)
ChildNodePointer(设长度为24bit)
则一个Sub_Trie节点的数据结构共559bit。
为了进一步减少Sub_Trie节点的数据结构所占用的存储空间,本实施例对除Level0之外的其它Level中的每个Sub_Trie节点进行如下优化:
步骤01:对于每个Sub_Trie,采用前缀扩展的方式将该Sub_Trie的/0、/1、/2级前缀的路由扩展到/3级前缀上。
图11中的Sub_Trie节点即将一个Sub_Trie的/0、/1、/2级前缀的路由扩展到/3级前缀上后的示例图。
步骤02:将每个Sub_Trie节点均匀划分成8个SegmentedSub_Trie节点,将每个SegmentedSub_Trie节点的数据结构信息保存在DRAM中,其中,每个SegmentedSub_Trie节点的数据结构信息以该SegmentedSub_Trie节点的高3bitIPv6地址为索引,如图11所示。
如图11中的SegmentedSub_Trie节点0~7,其中:SegmentedSub_Trie0的索引为000,SegmentedSub_Trie1的索引为001,SegmentedSub_Trie2的索引为010,SegmentedSub_Trie3的索引为011,SegmentedSub_Trie4的索引为100,SegmentedSub_Trie5的索引为101,SegmentedSub_Trie6的索引为110,SegmentedSub_Trie7的索引为111。
从图11可以看出,每个SegmentedSub_Trie节点的数据结构的大小为原Sub_Trie节点的数据结构的1/8。
步骤1003中,当根据该Sub_Trie节点的数据结构信息以及该IPv6地址在本Level中的bit,查找LPM路由时,根据该IPv6地址在本Level中对应的24bit,依次根据高8bit、中间8bit、低8bit或7bit进行LPM路由查找,其中,针对每8bit或7bit,先根据该8bit或7bit的高3bit在对应Sub_Trie节点中索引到对应的SegmentedSub_Trie节点,然后根据该SegmentedSub_Trie节点的数据结构信息进行后续LPM路由查找过程。可见,大大提高了LPM路由查找速度。
步骤1007中,当在确定的该Branch_Tree的Level1~3中查找该IPv6地址的LPM路由时,当查找到一Level时,根据该IPv6地址在本Level中对应的8bit,先根据该8bit的高3bit在本Level中索引到对应的SegmentedSub_Trie节点,然后根据该SegmentedSub_Trie节点的数据结构信息进行后续LPM路由查找过程。可见,大大提高了LPM路由查找速度。
本实施例中,对最后一个Level(Level7)内的最后一级Sub_Trie节点的数据结构同样进行如下优化:
首先,为了将最后一个Level内的最后一级Sub_Trie节点的数据结构与其它Sub_Trie节点进行区分,将最后一个Level内的最后一级Sub_Trie节点的数据结构称为:Compressed(压缩)Sub_Trie节点数据结构,其主要包括如下两部分:
1)4个PrefixKey:每个Prefixkey代表最后一个Level的该Sub_Trie节点中一个有路由分布的前缀。
一个PrefixKey的长度为8bit,4个PrefixKey共32bit。
可见,PrefixKey取代了通常的InternalTreeBitmap。
2)ResultArrayptr(24bit)
可见,一个CompressedSub_Trie节点的数据结构共56bit。
步骤1003中,当根据该Sub_Trie节点的数据结构信息以及该IPv6地址在本Level中的bit,查找LPM路由时,若本Level为Level7,且查找到该IPv6地址的低7bit时,则直接将该IPv6地址的低7bit与Level7的各CompressedSub_Trie节点的数据结构中的PrefixKey匹配即可,若匹配上,则根据对应的ResultArrayptr直接确定LPM路由。可见,LPM路由查找速度进一步提高了。
步骤1007中,当在确定的该Branch_Tree的Level1~3中查找该IPv6地址的LPM路由时,当查找到Level3时,根据该IPv6地址在本Level中对应的8bit,先根据该8bit的高3bit在本Level中索引到对应的SegmentedSub_Trie节点,然后根据该SegmentedSub_Trie节点的数据结构信息进行后续LPM路由查找过程。
为了尽量避免Hash冲突,本实施例中可以采用cuckooHash算法,且预先为每个Level设置三个Hash函数,例如:为Level4设置Hash函数11、Hash函数12、Hash函数13,为Level5设置Hash函数21、Hash函数22、Hash函数23,为Level6设置Hash函数31、Hash函数32、Hash函数33,为Level7设置Hash函数41、Hash函数42、Hash函数43;每个Hash函数对应一张Hash表,每张Hash表中包含预设数目个位置,每个位置唯一代表一个Hash计算结果,每个位置上存储了该位置代表的Hash计算结果对应的输入Key及该输入Key对应的Sub_Trie节点的数据结构信息指针。
步骤708中,针对Level4、Level5、Level6、Level7中的每个Sub_Trie节点,分别以当前VPN标识+本Sub_Trie节点的IPv6地址在本Level之前的所有bit作为输入Key,执行如下过程:
a、采用本Level的三个Hash函数对该输入Key进行计算,针对得到的每个Hash计算结果,在对应的Hash表中查找到对应的位置,若在三个Hash表中查找到的三个位置中有任一个位置为空,则将当前输入key以及本Sub_Trie节点的数据结构信息指针放入该位置;若在三个Hash表中查找到的三个位置都不为空,则在该三个位置中任选一个位置,将该位置上的原有输入Key和Sub_Trie节点的数据结构信息指针取出,将当前输入key以及本Sub_Trie节点的数据结构信息指针放入该位置,且,对于取出的输入Key,重新执行步骤a;
需要注意的是,在步骤a中,在执行对于取出的输入Key,重新执行步骤a之前,要先判断是否已连续取出预设数目个输入key,若是,则直接将当前取出的输入key和对应的Sub_Trie节点的数据结构信息指针放入取出key列表中,否则,对于该当前取出的输入Key,重新执行步骤a。
且,步骤1001中,当对一VPN内的一IPv6地址进行LPM路由查找时,先根据VPN标识和该IPv4地址的高33bit、高57bit、高81bit、高105bit构造四个输入Key,分别为:key1:VPN标识+该IPv4地址的高33bit,key2:VPN标识+该IPv4地址的高57bit,key3:VPN标识+该IPv4地址的高81bit,key4:VPN标识+该IPv4地址的高105bit;同时采用Level4的三个Hash函数对key1进行计算,得到3个Hash计算结果,同时采用Level5的三个Hash函数对key2进行计算,得到3个Hash计算结果,同时采用Level6的三个Hash函数对key3进行计算,得到3个Hash计算结果,同时采用Level7的三个Hash函数对key4进行计算,得到3个Hash计算结果。
步骤1003中,分别在Level4的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key1进行匹配,若匹配上,则命中,若未匹配上,则继续在Level4的取出key列表中查找key1,若查找到,则命中;
同时,分别在Level5的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key2进行匹配,若匹配上,则命中,若未匹配上,则继续在Level5的取出key列表中查找key2,若查找到,则命中;
同时,分别在Level6的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key3进行匹配,若匹配上,则命中,若未匹配上,则继续在Level6的取出key列表中查找key3,若查找到,则命中;
同时,分别在Level7的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key4进行匹配,若匹配上,则命中,若未匹配上,则继续在Level7的取出key列表中查找key4,若查找到,则命中;
采用最长的Hash命中结果作为最终的命中结果,根据最终命中结果对应的Sub_Trie节点的数据结构信息指针,查找到该Sub_Trie节点的数据结构信息,根据该Sub_Trie节点的数据结构信息以及该IPv6地址在本Level中的bit,查找LPM路由。
例如:采用Level4的三个Hash函数:Hash函数11、Hash函数12、Hash函数13分别对key1进行计算,得到三个Hash计算结果:Hash计算结果11、Hash计算结果12、Hash计算结果13,则在Hash函数11对应的Hash表11中查找Hash计算结果11对应的位置,在Hash函数12对应的Hash表12中查找Hash计算结果12对应的位置,在Hash函数13对应的Hash表13中查找Hash计算结果13对应的位置,对于查找到的每个位置,将该位置上的输入key与key1进行匹配,若有任一个位置匹配上,则命中,若没有任何位置匹配上,则继续在Level4的取出key列表中查找key1,若查找到,则命中;否则,认为Level4中未命中任何Hash计算结果。
另外,为了节省Hash表占用的存储空间,本实施例中,可设置所有VPN的MultibitTrie在同一Level中针对同一Hash函数都使用同一张Hash表。
本申请实施例的有益技术效果如下:
一)支持多VPN实例的IPv6路由;
二)通过将Multibit-Trie划分为多个Branch_Tree,提高了路由查找速度;
三)将默认路由单独存储,而不扩展到Level1,减少了Multibit-Trie的冗余节点,进一步提高了路由查找速度;
四)通过对Levelp~n中的第一级Sub_Trie节点的指针进行Hash映射,使得在进行IPv6地址的LPM路由查找时,可在Levelp~n中进行并行查找,并根据最长的Hash命中结果查找到路由,大大提高了路由查找速度;
五)通过采用Hash算法,并为Levelp~n中的每个Level设置多个Hash函数,减少了Hash冲突,提高了路由查找精度;
六)对Sub_Trie节点内部进行前缀扩展后划分为8个SegmentedSub_Trie节点,进一步提高了路由查找速度;
七)简化最后一级Level的Sub_Trie节点的数据结构,进一步提高了路由查找速度。
图12为本申请实施例提供的基于MultibitTrie的IPv6路由查找装置的组成示意图,其主要包括:MultibitTrie建立及划分模块、Hash映射模块和路由查找模块,其中:
MultibitTrie建立及划分模块:分别针对每个VPN中的IPv6前缀的路由分布,构建一棵MultibitTrie;将每棵MultibitTrie划分为n+1个Level:Level0~n,n为大于1的整数;采用前缀扩展的方法将MultibitTrie的1~m级IPv6前缀上的路由扩展到m+1级IPv6前缀上,m为大于1的整数;将第m+1级IPv6前缀的每一个分支作为一个分支树Branch_Tree,保存每个Branch_Tree的数据结构信息。
Hash映射模块:针对Levelp~n中的每个第一级Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IPv6前缀的IPv6地址在本Level之前的所有bit作为输入Key,采用预设的本Level的哈希Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,p为整数且0<p<n。
路由查找模块:当对一VPN内的一IPv6地址进行路由查找时,先根据VPN标识和该IPv6地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,若有Hash计算结果命中,则采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由;否则,根据该IPv6地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree的Level1~p-1中查找路由。
一种实施例中,MultibitTrie建立及划分模块将0级IPv6前缀的默认路由存储在片外存储空间的预定区域,将1~m级IPv6前缀的路由存储在片外存储空间的空闲区域中;
且,MultibitTrie建立及划分模块保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中。
一种实施例中,MultibitTrie建立及划分模块保存每个Branch_Tree的数据结构信息进一步包括:
针对Branch_Tree维护虚拟专网入口位图VRBTable,该VRBTable包含压缩扩展路径位图CEPB和子节点指针CNP,其中,所述CEPB共2m+1/2dbit,每2d个连续的Branch_Tree对应CEPB的一个bit,当2d个连续的Branch_Tree中存在在Level1~p-1中有路由分布的Branch_Tree时,则对应的CEPB位有效,d为正整数;所述CNP表示第一个CEPB有效bit对应的2d个Branch_Tree的第一个Branch_Tree的指针;
且,路由查找模块根据该IPv6地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree的Level1~p-1中查找路由包括:
读取该IPv6地址的高m+1bit,根据该IPv6地址的高m+1-dbit在该Multibit-Trie的VRBTable的CEPB中查找到对应的bit;若查找到的bit有效,则根据该IPv6地址的高m+1bit中的低dbit确定对应的CNP,根据该CNP查找到对应的Branch_Tree的数据结构信息;根据该Branch_Tree的Level1~p-1的数据结构信息查找该IPv6地址的路由。
一种实施例中,MultibitTrie建立及划分模块将每棵MultibitTrie划分为n+1个层Level包括:
按照路由分布较多的IPv6前缀段位于Level底部的原则,将每棵MultibitTrie划分为8个Level:Level0~7,Level0由0~8级前缀构成,Level1~3的步长都为8,Level4~6的步长都为24,Level7的步长为23;且,m=8,所述p=4。
一种实施例中,MultibitTrie建立及划分模块保存每个Branch_Tree的数据结构信息包括:
保存每个Branch_Tree中除Level0外的每个Level中的Sub_Trie节点的数据结构信息,其中:除最后一个Level的最后一级Sub_Trie节点的步长为7外,其余Sub_Trie节点的步长都为8;对于每个Branch_Tree中除Level0外的每个Level中的每个Sub_Trie节点,采用前缀扩展的方式将该Sub_Trie节点的0、1、2级上的前缀的路由扩展到3级前缀上;将每个Sub_Trie节点均匀划分成8个分段Sub_Trie节点,保存每个分段Sub_Trie节点的数据结构信息,其中,每个分段Sub_Trie节点以该分段Sub_Trie节点的高3级IPv6前缀为索引;
且,路由查找模块采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由包括:
根据该IPv6地址在对应Sub_Trie节点中的对应8bit,根据该8bit的高3bit在本Sub_Trie节点中索引到对应的分段Sub_Trie节点,根据该分段Sub_Trie节点的数据结构信息进行后续路由查找过程;
路由查找模块在该Branch_Tree的Level1~p-1中查找路由包括:当查找到Level1~p-1中的一Level时,根据该IPv6前缀在本Level中对应的8bit的高3bit在本Level的Sub_Trie中索引到对应的分段Sub_Trie,根据该分段Sub_Trie的数据结构信息进行后续路由查找过程。
一种实施例中,MultibitTrie建立及划分模块保存每个Branch_Tree的数据结构信息包括:
对于Level3的Sub_Trie节点以及Level7的最后一级Sub_Trie节点,该Sub_Trie节点的数据结构信息包括:
1)q个前缀密钥PrefixKey:每个Prefixkey代表该Sub_Trie节点中的其中一个有路由分布的IP前缀的IP地址的最低7bit,其中,q为预设的该Sub_Trie节点中的有路由分布的IP前缀的最大数量;
2)结果数组指针ResultArrayptr;
所述路由查找模块采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由时,当查找到Level7的最后一级Sub_Trie节点时,直接将该IPv6地址的最低7bit与Level7的各最后一级Sub_Trie节点的数据结构信息中的PrefixKey匹配,若匹配上,则根据对应的ResultArrayptr直接确定路由;
且,路由查找模块在该Branch_Tree的Level1~p-1中查找路由时,当查找到Level3时,直接将该IPv6地址的最低8bit与Level3的各Sub_Trie的数据结构信息中的PrefixKey匹配,若匹配上,则根据对应的ResultArrayptr直接确定路由。
一种实施例中,装置进一步包括Hash函数及Hash表构造模块,用于预先为Levelp~n中的每个Level设置多个Hash函数,每个Hash函数对应一张Hash表,Hash表中的每个位置唯一代表一个Hash计算结果,每个位置用于存储该位置代表的Hash计算结果对应的输入Key及该输入Key对应的Sub_Trie节点的数据结构信息指针;
且,Hash映射模块采用预设的本Level的Hash函数对输入Key进行计算包括:
a、采用预设的本Level的多个Hash函数分别对输入Key进行计算,针对得到的每个Hash计算结果,在对应的Hash表中查找到对应的位置;
若在多个Hash表中查找到的多个位置中有任一个位置为空,则将当前输入key以及本Sub_Trie节点的数据结构信息指针放入该位置;
若在多个Hash表中查找到的多个位置都不为空,则在该多个位置中任选一个位置,将该位置上的原有输入Key和Sub_Trie节点的数据结构信息指针取出,将当前输入key以及本Sub_Trie节点的数据结构信息指针放入该位置;
b、对于取出的输入Key,判断是否已连续取出预设数目个输入key,若是,将该取出的输入key及其对应的Sub_Trie节点的数据结构信息指针放入取出key列表中,否则,将该取出的输入key作为当前输入key,返回执行步骤a。
一种实施例中,路由查找模块分别采用每个Level的Hash函数对针对每个Level的输入key进行计算包括:
分别采用每个Level的多个Hash函数对针对每个Level的输入key进行计算,得到多个Hash计算结果;
对于每个Hash计算结果,在对应Hash函数的Hash表中查找对应的位置,若查找到对应位置,将对应位置上存储的输入Key与构造的输入key进行匹配,若匹配上,则命中,若未匹配上,则继续在对应Level的取出key列表中查找构造的输入key。
一种实施例中,Hash函数及Hash表构造模块进一步用于,设置所有VPN的MultibitTrie在Levelp~n中的同一Level中针对同一Hash函数都使用同一张Hash表。
一种实施例中,路由查找模块在该Branch_Tree的Level1~p-1中查找路由之后进一步用于,
若未查找到,则从片外存储空间的预定区域中读取默认路由,将默认路由作为最终查找到的路由。
本申请实施例还提供包含IPv6路由查找装置的设备,该设备可以是软硬件结合的可编程设备,从硬件层面而言,该设备的硬件架构示意图具体可以参见图13。该设备中包括:机器可读存储介质、CPU和其它硬件,其中:
机器可读存储介质:存储指令代码;所述指令代码被CPU执行时完成的操作主要为上述IPv6路由查找装置完成的功能。
CPU:与机器可读存储介质通信,读取和执行机器可读存储介质中存储的所述指令代码,完成上述IPv6路由查找装置完成的功能。
当上述IPv6路由查找装置作为一个逻辑意义上的装置时,其是通过CPU运行机器可读存储介质中对应的计算机程序指令形成的。当对应的计算机程序指令被执行时,形成的IPv6路由查找装置用于按照上述实施例中的IPv6路由查找方法执行相应操作。
机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(RadomAccessMemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
本申请所描述的任一机器可读存储介质都可以被认为是非暂时性的。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (20)
1.一种IPv6路由查找方法,其特征在于,该方法包括:
分别针对每个虚拟专网VPN中的IPv6前缀的路由分布,构建一棵多位字典树MultibitTrie;
将每棵MultibitTrie划分为n+1个层Level:Level0~n,n为大于1的整数;
采用前缀扩展的方法将MultibitTrie的1~m级IPv6前缀上的路由扩展到m+1级IPv6前缀上,m为大于1的整数;
将第m+1级IPv6前缀的每一个分支作为一个分支树Branch_Tree,保存每个Branch_Tree的数据结构信息;
针对Levelp~n中的每个第一级子字典树Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IPv6前缀的IPv6地址在本Level之前的所有位bit作为输入Key,采用预设的本Level的哈希Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,p为整数且0<p<n;
当对一VPN内的一IPv6地址进行路由查找时,先根据VPN标识和该IPv6地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,若有Hash计算结果命中,则采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由;否则,根据该IPv6地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree的Level1~p-1中查找路由。
2.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
将0级IPv6前缀的默认路由存储在片外存储空间的预定区域,将1~m级IPv6前缀的路由存储在片外存储空间的空闲区域中;
所述保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中。
3.根据权利要求1或2所述的方法,其特征在于,所述保存每个Branch_Tree的数据结构信息进一步包括:
针对Branch_Tree维护虚拟专网入口位图VRBTable,该VRBTable包含压缩扩展路径位图CEPB和子节点指针CNP,其中,
所述CEPB共2m+1/2dbit,每2d个连续的Branch_Tree对应CEPB的一个bit,当2d个连续的Branch_Tree中存在在Level1~p-1中有路由分布的Branch_Tree时,则对应的CEPB位有效,d为正整数;
所述CNP表示第一个CEPB有效bit对应的2d个Branch_Tree的第一个Branch_Tree的指针;
所述根据该IPv6地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree的Level1~p-1中查找路由包括:
读取该IPv6地址的高m+1bit,根据该IPv6地址的高m+1-dbit在该Multibit-Trie的VRBTable的CEPB中查找到对应的bit;
若查找到的bit有效,则根据该IPv6地址的高m+1bit中的低dbit确定对应的CNP,根据该CNP查找到对应的Branch_Tree的数据结构信息;
根据该Branch_Tree的Level1~p-1的数据结构信息查找该IPv6地址的路由。
4.根据权利要求1或2所述的方法,其特征在于,将每棵MultibitTrie划分为n+1个层Level包括:
按照路由分布较多的IPv6前缀段位于Level底部的原则,将每棵MultibitTrie划分为8个Level:Level0~7,Level0由0~8级前缀构成,Level1~3的步长都为8,Level4~6的步长都为24,Level7的步长为23;
所述m=8,所述p=4。
5.根据权利要求4所述的方法,其特征在于,所述保存每个Branch_Tree的数据结构信息包括:
保存每个Branch_Tree中除Level0外的每个Level中的Sub_Trie节点的数据结构信息,其中:除最后一个Level的最后一级Sub_Trie节点的步长为7外,其余Sub_Trie节点的步长都为8;对于每个Branch_Tree中除Level0外的每个Level中的每个Sub_Trie节点,采用前缀扩展的方式将该Sub_Trie节点的0、1、2级上的前缀的路由扩展到3级前缀上;将每个Sub_Trie节点均匀划分成8个分段Sub_Trie节点,保存每个分段Sub_Trie节点的数据结构信息,其中,每个分段Sub_Trie节点以该分段Sub_Trie节点的高3级IPv6前缀为索引;
所述采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由包括:
根据该IPv6地址在对应Sub_Trie节点中的对应8bit,根据该8bit的高3bit在本Sub_Trie节点中索引到对应的分段Sub_Trie节点,根据该分段Sub_Trie节点的数据结构信息进行后续路由查找过程;
所述在该Branch_Tree的Level1~p-1中查找路由包括:当查找到Level1~p-1中的一Level时,根据该IPv6前缀在本Level中对应的8bit的高3bit在本Level的Sub_Trie中索引到对应的分段Sub_Trie,根据该分段Sub_Trie的数据结构信息进行后续路由查找过程。
6.根据权利要求4所述的方法,其特征在于,所述保存每个Branch_Tree的数据结构信息包括:
对于Level3的Sub_Trie节点以及Level7的最后一级Sub_Trie节点,该Sub_Trie节点的数据结构信息包括:
1)q个前缀密钥PrefixKey:每个Prefixkey代表该Sub_Trie节点中的其中一个有路由分布的IP前缀的IP地址的最低7bit,其中,q为预设的该Sub_Trie节点中的有路由分布的IP前缀的最大数量;
2)结果数组指针ResultArrayptr;
所述采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由时,当查找到Level7的最后一级Sub_Trie节点时,直接将该IPv6地址的最低7bit与Level7的各最后一级Sub_Trie节点的数据结构信息中的PrefixKey匹配,若匹配上,则根据对应的ResultArrayptr直接确定路由;
所述在该Branch_Tree的Level1~p-1中查找路由时,当查找到Level3时,直接将该IPv6地址的最低8bit与Level3的各Sub_Trie的数据结构信息中的PrefixKey匹配,若匹配上,则根据对应的ResultArrayptr直接确定路由。
7.根据权利要求1所述的方法,其特征在于,预先为Levelp~n中的每个Level设置多个Hash函数,每个Hash函数对应一张Hash表,Hash表中的每个位置唯一代表一个Hash计算结果,每个位置用于存储该位置代表的Hash计算结果对应的输入Key及该输入Key对应的Sub_Trie节点的数据结构信息指针;
所述采用预设的本Level的Hash函数对输入Key进行计算包括:
a、采用预设的本Level的多个Hash函数分别对输入Key进行计算,针对得到的每个Hash计算结果,在对应的Hash表中查找到对应的位置;
若在多个Hash表中查找到的多个位置中有任一个位置为空,则将当前输入key以及本Sub_Trie节点的数据结构信息指针放入该位置;
若在多个Hash表中查找到的多个位置都不为空,则在该多个位置中任选一个位置,将该位置上的原有输入Key和Sub_Trie节点的数据结构信息指针取出,将当前输入key以及本Sub_Trie节点的数据结构信息指针放入该位置;
b、对于取出的输入Key,判断是否已连续取出预设数目个输入key,若是,将该取出的输入key及其对应的Sub_Trie节点的数据结构信息指针放入取出key列表中,否则,将该取出的输入key作为当前输入key,返回执行步骤a。
8.根据权利要求7所述的方法,其特征在于,所述分别采用每个Level的Hash函数对针对每个Level的输入key进行计算包括:
分别采用每个Level的多个Hash函数对针对每个Level的输入key进行计算,得到多个Hash计算结果;
对于每个Hash计算结果,在对应Hash函数的Hash表中查找对应的位置,若查找到对应位置,将对应位置上存储的输入Key与构造的输入key进行匹配,若匹配上,则命中,若未匹配上,则继续在对应Level的取出key列表中查找构造的输入key。
9.根据权利要求7或8所述的方法,其特征在于,所述每个Hash函数对应一张Hash表为:
所有VPN的MultibitTrie在Levelp~n中的同一Level中针对同一Hash函数都使用同一张Hash表。
10.根据权利要求2所述的方法,其特征在于,所述在该Branch_Tree的Level1~p-1中查找路由之后进一步包括:
若未查找到,则从片外存储空间的预定区域中读取默认路由,将默认路由作为最终查找到的路由。
11.一种IPv6路由查找装置,其特征在于,该装置包括:
多位字典树MultibitTrie建立及划分模块:分别针对每个虚拟专网VPN中的IPv6前缀的路由分布,构建一棵MultibitTrie;将每棵MultibitTrie划分为n+1个层Level:Level0~n,n为大于1的整数;采用前缀扩展的方法将MultibitTrie的1~m级IPv6前缀上的路由扩展到m+1级IPv6前缀上,m为大于1的整数;将第m+1级IPv6前缀的每一个分支作为一个分支树Branch_Tree,保存每个Branch_Tree的数据结构信息;
Hash映射模块:针对Levelp~n中的每个第一级子字典树Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IPv6前缀的IPv6地址在本Level之前的所有位bit作为输入Key,采用预设的本Level的哈希Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,p为整数且0<p<n;
路由查找模块:当对一VPN内的一IPv6地址进行路由查找时,先根据VPN标识和该IPv6地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,若有Hash计算结果命中,则采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由;否则,根据该IPv6地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree的Level1~p-1中查找路由。
12.根据权利要求11所述的装置,其特征在于,所述MultibitTrie建立及划分模块将0级IPv6前缀的默认路由存储在片外存储空间的预定区域,将1~m级IPv6前缀的路由存储在片外存储空间的空闲区域中;
所述MultibitTrie建立及划分模块保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中。
13.根据权利要求11或12所述的装置,其特征在于,所述MultibitTrie建立及划分模块保存每个Branch_Tree的数据结构信息进一步包括:
针对Branch_Tree维护虚拟专网入口位图VRBTable,该VRBTable包含压缩扩展路径位图CEPB和子节点指针CNP,其中,所述CEPB共2m+1/2dbit,每2d个连续的Branch_Tree对应CEPB的一个bit,当2d个连续的Branch_Tree中存在在Level1~p-1中有路由分布的Branch_Tree时,则对应的CEPB位有效,d为正整数;所述CNP表示第一个CEPB有效bit对应的2d个Branch_Tree的第一个Branch_Tree的指针;
所述路由查找模块根据该IPv6地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree的Level1~p-1中查找路由包括:
读取该IPv6地址的高m+1bit,根据该IPv6地址的高m+1-dbit在该Multibit-Trie的VRBTable的CEPB中查找到对应的bit;若查找到的bit有效,则根据该IPv6地址的高m+1bit中的低dbit确定对应的CNP,根据该CNP查找到对应的Branch_Tree的数据结构信息;根据该Branch_Tree的Level1~p-1的数据结构信息查找该IPv6地址的路由。
14.根据权利要求11或12所述的装置,其特征在于,所述MultibitTrie建立及划分模块将每棵MultibitTrie划分为n+1个层Level包括:
按照路由分布较多的IPv6前缀段位于Level底部的原则,将每棵MultibitTrie划分为8个Level:Level0~7,Level0由0~8级前缀构成,Level1~3的步长都为8,Level4~6的步长都为24,Level7的步长为23;所述m=8,所述p=4。
15.根据权利要求14所述的装置,其特征在于,所述MultibitTrie建立及划分模块保存每个Branch_Tree的数据结构信息包括:
保存每个Branch_Tree中除Level0外的每个Level中的Sub_Trie节点的数据结构信息,其中:除最后一个Level的最后一级Sub_Trie节点的步长为7外,其余Sub_Trie节点的步长都为8;对于每个Branch_Tree中除Level0外的每个Level中的每个Sub_Trie节点,采用前缀扩展的方式将该Sub_Trie节点的0、1、2级上的前缀的路由扩展到3级前缀上;将每个Sub_Trie节点均匀划分成8个分段Sub_Trie节点,保存每个分段Sub_Trie节点的数据结构信息,其中,每个分段Sub_Trie节点以该分段Sub_Trie节点的高3级IPv6前缀为索引;
所述路由查找模块采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由包括:
根据该IPv6地址在对应Sub_Trie节点中的对应8bit,根据该8bit的高3bit在本Sub_Trie节点中索引到对应的分段Sub_Trie节点,根据该分段Sub_Trie节点的数据结构信息进行后续路由查找过程;
所述路由查找模块在该Branch_Tree的Level1~p-1中查找路由包括:当查找到Level1~p-1中的一Level时,根据该IPv6前缀在本Level中对应的8bit的高3bit在本Level的Sub_Trie中索引到对应的分段Sub_Trie,根据该分段Sub_Trie的数据结构信息进行后续路由查找过程。
16.根据权利要求14所述的方法,其特征在于,所述MultibitTrie建立及划分模块保存每个Branch_Tree的数据结构信息包括:
对于Level3的Sub_Trie节点以及Level7的最后一级Sub_Trie节点,该Sub_Trie节点的数据结构信息包括:
1)q个前缀密钥PrefixKey:每个Prefixkey代表该Sub_Trie节点中的其中一个有路由分布的IP前缀的IP地址的最低7bit,其中,q为预设的该Sub_Trie节点中的有路由分布的IP前缀的最大数量;
2)结果数组指针ResultArrayptr;
所述路由查找模块采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由时,当查找到Level7的最后一级Sub_Trie节点时,直接将该IPv6地址的最低7bit与Level7的各最后一级Sub_Trie节点的数据结构信息中的PrefixKey匹配,若匹配上,则根据对应的ResultArrayptr直接确定路由;
所述路由查找模块在该Branch_Tree的Level1~p-1中查找路由时,当查找到Level3时,直接将该IPv6地址的最低8bit与Level3的各Sub_Trie的数据结构信息中的PrefixKey匹配,若匹配上,则根据对应的ResultArrayptr直接确定路由。
17.根据权利要求11所述的装置,其特征在于,所述装置进一步包括Hash函数及Hash表构造模块,用于预先为Levelp~n中的每个Level设置多个Hash函数,每个Hash函数对应一张Hash表,Hash表中的每个位置唯一代表一个Hash计算结果,每个位置用于存储该位置代表的Hash计算结果对应的输入Key及该输入Key对应的Sub_Trie节点的数据结构信息指针;
所述Hash映射模块采用预设的本Level的Hash函数对输入Key进行计算包括:
a、采用预设的本Level的多个Hash函数分别对输入Key进行计算,针对得到的每个Hash计算结果,在对应的Hash表中查找到对应的位置;
若在多个Hash表中查找到的多个位置中有任一个位置为空,则将当前输入key以及本Sub_Trie节点的数据结构信息指针放入该位置;
若在多个Hash表中查找到的多个位置都不为空,则在该多个位置中任选一个位置,将该位置上的原有输入Key和Sub_Trie节点的数据结构信息指针取出,将当前输入key以及本Sub_Trie节点的数据结构信息指针放入该位置;
b、对于取出的输入Key,判断是否已连续取出预设数目个输入key,若是,将该取出的输入key及其对应的Sub_Trie节点的数据结构信息指针放入取出key列表中,否则,将该取出的输入key作为当前输入key,返回执行步骤a。
18.根据权利要求17所述的装置,其特征在于,所述路由查找模块分别采用每个Level的Hash函数对针对每个Level的输入key进行计算包括:
分别采用每个Level的多个Hash函数对针对每个Level的输入key进行计算,得到多个Hash计算结果;
对于每个Hash计算结果,在对应Hash函数的Hash表中查找对应的位置,若查找到对应位置,将对应位置上存储的输入Key与构造的输入key进行匹配,若匹配上,则命中,若未匹配上,则继续在对应Level的取出key列表中查找构造的输入key。
19.根据权利要求17或18所述的方法,其特征在于,所述Hash函数及Hash表构造模块进一步用于,设置所有VPN的MultibitTrie在Levelp~n中的同一Level中针对同一Hash函数都使用同一张Hash表。
20.根据权利要求12所述的方法,其特征在于,所述路由查找模块在该Branch_Tree的Level1~p-1中查找路由之后进一步用于,
若未查找到,则从片外存储空间的预定区域中读取默认路由,将默认路由作为最终查找到的路由。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510388574.5A CN105141525B (zh) | 2015-06-30 | 2015-06-30 | IPv6路由查找方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510388574.5A CN105141525B (zh) | 2015-06-30 | 2015-06-30 | IPv6路由查找方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105141525A true CN105141525A (zh) | 2015-12-09 |
CN105141525B CN105141525B (zh) | 2018-08-10 |
Family
ID=54726738
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510388574.5A Active CN105141525B (zh) | 2015-06-30 | 2015-06-30 | IPv6路由查找方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105141525B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017000893A1 (zh) * | 2015-06-30 | 2017-01-05 | 杭州华三通信技术有限公司 | Ip路由查找 |
WO2017000892A1 (zh) * | 2015-06-30 | 2017-01-05 | 杭州华三通信技术有限公司 | Ip路由查找 |
CN109951393A (zh) * | 2019-03-29 | 2019-06-28 | 新华三信息安全技术有限公司 | 网段查找方法及装置 |
WO2020088696A1 (zh) * | 2018-11-02 | 2020-05-07 | 华为技术有限公司 | 报文转发的方法、发送报文的装置和接收报文的装置 |
CN111131049A (zh) * | 2019-12-31 | 2020-05-08 | 盛科网络(苏州)有限公司 | 路由表项的处理方法及装置 |
CN112235197A (zh) * | 2020-10-23 | 2021-01-15 | 烽火通信科技股份有限公司 | 一种并行路由查找方法及系统 |
CN112818185A (zh) * | 2021-04-20 | 2021-05-18 | 芯启源(南京)半导体科技有限公司 | 一种基于sram的最长前缀匹配硬件系统查找的方法 |
CN114884877A (zh) * | 2022-06-14 | 2022-08-09 | 电子科技大学 | 一种哈希表和HOT相结合的IPv6路由查找方法 |
CN115086221A (zh) * | 2022-07-27 | 2022-09-20 | 新华三半导体技术有限公司 | 一种报文处理方法、装置、转发设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1787477A (zh) * | 2004-12-09 | 2006-06-14 | 北京三星通信技术研究有限公司 | IPv6路由表的查找方法 |
CN101159658A (zh) * | 2007-11-02 | 2008-04-09 | 华为技术有限公司 | 虚拟私用网路由查找的方法和装置 |
CN101277252A (zh) * | 2007-03-30 | 2008-10-01 | 迈普(四川)通信技术有限公司 | 多分支Trie树的遍历方法 |
CN101695054A (zh) * | 2009-09-30 | 2010-04-14 | 杭州华三通信技术有限公司 | 路由维护方法和装置以及路由查询方法和装置 |
WO2014000670A1 (en) * | 2012-06-27 | 2014-01-03 | Huawei Technologies Co., Ltd. | Internet protocol and ethernet lookup via a unified hashed trie |
-
2015
- 2015-06-30 CN CN201510388574.5A patent/CN105141525B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1787477A (zh) * | 2004-12-09 | 2006-06-14 | 北京三星通信技术研究有限公司 | IPv6路由表的查找方法 |
CN101277252A (zh) * | 2007-03-30 | 2008-10-01 | 迈普(四川)通信技术有限公司 | 多分支Trie树的遍历方法 |
CN101159658A (zh) * | 2007-11-02 | 2008-04-09 | 华为技术有限公司 | 虚拟私用网路由查找的方法和装置 |
CN101695054A (zh) * | 2009-09-30 | 2010-04-14 | 杭州华三通信技术有限公司 | 路由维护方法和装置以及路由查询方法和装置 |
WO2014000670A1 (en) * | 2012-06-27 | 2014-01-03 | Huawei Technologies Co., Ltd. | Internet protocol and ethernet lookup via a unified hashed trie |
Non-Patent Citations (3)
Title |
---|
QIONG SUN ET AL.: "《A Scalable Exact matching in Balance Tree Scheme for IPv6 Lookup》", 《HTTP://WWW.6IP.CU/PDF/1569043111.PDF》 * |
XIANGYANG GONG ET AL.: "《A fast IPv6 packet classification algorithm based on efficient multi-bit selection》", 《COMPUTER COMMUNICATIONS》 * |
YI JIANG ET AL.: "《Research on Multibit-Trie Tree IP Classification Algorithm》", 《COMMUNICATIONS,CIRCUITS AND SYSTEMS PROCEEDINGS,2006》 * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017000892A1 (zh) * | 2015-06-30 | 2017-01-05 | 杭州华三通信技术有限公司 | Ip路由查找 |
US10476785B2 (en) | 2015-06-30 | 2019-11-12 | New H3C Technologies Co., Ltd | IP routing search |
WO2017000893A1 (zh) * | 2015-06-30 | 2017-01-05 | 杭州华三通信技术有限公司 | Ip路由查找 |
US10771386B2 (en) | 2015-06-30 | 2020-09-08 | New H3C Technologies Co., Ltd | IP routing search |
WO2020088696A1 (zh) * | 2018-11-02 | 2020-05-07 | 华为技术有限公司 | 报文转发的方法、发送报文的装置和接收报文的装置 |
CN111147383A (zh) * | 2018-11-02 | 2020-05-12 | 华为技术有限公司 | 报文转发的方法、发送报文的装置和接收报文的装置 |
CN113595913B (zh) * | 2018-11-02 | 2023-02-14 | 华为技术有限公司 | 报文转发的方法、发送报文的装置和接收报文的装置 |
CN113595913A (zh) * | 2018-11-02 | 2021-11-02 | 华为技术有限公司 | 报文转发的方法、发送报文的装置和接收报文的装置 |
CN111147383B (zh) * | 2018-11-02 | 2021-06-29 | 华为技术有限公司 | 报文转发的方法、发送报文的装置和接收报文的装置 |
CN109951393B (zh) * | 2019-03-29 | 2021-07-30 | 新华三信息安全技术有限公司 | 网段查找方法及装置 |
CN109951393A (zh) * | 2019-03-29 | 2019-06-28 | 新华三信息安全技术有限公司 | 网段查找方法及装置 |
CN111131049A (zh) * | 2019-12-31 | 2020-05-08 | 盛科网络(苏州)有限公司 | 路由表项的处理方法及装置 |
CN111131049B (zh) * | 2019-12-31 | 2021-08-27 | 苏州盛科通信股份有限公司 | 路由表项的处理方法及装置 |
CN112235197B (zh) * | 2020-10-23 | 2022-07-15 | 烽火通信科技股份有限公司 | 一种并行路由查找方法及系统 |
CN112235197A (zh) * | 2020-10-23 | 2021-01-15 | 烽火通信科技股份有限公司 | 一种并行路由查找方法及系统 |
CN112818185A (zh) * | 2021-04-20 | 2021-05-18 | 芯启源(南京)半导体科技有限公司 | 一种基于sram的最长前缀匹配硬件系统查找的方法 |
CN114884877A (zh) * | 2022-06-14 | 2022-08-09 | 电子科技大学 | 一种哈希表和HOT相结合的IPv6路由查找方法 |
CN114884877B (zh) * | 2022-06-14 | 2023-02-03 | 电子科技大学 | 一种哈希表和HOT相结合的IPv6路由查找方法 |
CN115086221A (zh) * | 2022-07-27 | 2022-09-20 | 新华三半导体技术有限公司 | 一种报文处理方法、装置、转发设备和存储介质 |
CN115086221B (zh) * | 2022-07-27 | 2022-11-22 | 新华三半导体技术有限公司 | 一种报文处理方法、装置、转发设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105141525B (zh) | 2018-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105141525A (zh) | IPv6路由查找方法及装置 | |
CN102484610B (zh) | 路由表建立方法和装置及路由表查找方法和装置 | |
US7418505B2 (en) | IP address lookup using either a hashing table or multiple hash functions | |
KR100586461B1 (ko) | 파이프라인 이진 트리를 이용한 ip 어드레스 검색 방법,하드웨어 구조 및 기록매체 | |
US20060083247A1 (en) | Prefix lookup using address-directed hash tables | |
CN106330716B (zh) | Ip路由查找方法及装置 | |
CN104854828A (zh) | 通过统一哈希化Trie树进行的互联网协议及以太网查找 | |
CN105814846B (zh) | 网络地址查询的前缀树阶段平衡 | |
CN102945249B (zh) | 一种策略规则匹配查询树生成方法、匹配方法及装置 | |
Le et al. | Scalable tree-based architectures for IPv4/v6 lookup using prefix partitioning | |
CN106416152A (zh) | 一种查找装置、查找配置方法和查找方法 | |
CN102045412B (zh) | IPv6地址前缀压缩存储方法及设备 | |
EP1063827A2 (en) | Method for address lookup | |
JP2016170526A (ja) | 検索装置、検索方法、プログラム、及び記録媒体 | |
US7478109B1 (en) | Identification of a longest matching prefix based on a search of intervals corresponding to the prefixes | |
Wuu et al. | A longest prefix first search tree for IP lookup | |
KR20170067804A (ko) | 라우팅 테이블의 유지 방법, 장치 및 저장매체 | |
TW201618505A (zh) | 用於網路交換機中的可擴展且靈活的表格搜索的裝置和方法 | |
Veeramani et al. | Efficient IP lookup using hybrid trie-based partitioning of TCAM-based open flow switches | |
CN104090942A (zh) | 应用于网络处理器中的Trie搜索方法及装置 | |
CN106330721B (zh) | Ip路由查找方法及装置 | |
Erdem et al. | Value-coded trie structure for high-performance IPv6 lookup | |
Erdem | Pipelined hierarchical architecture for high performance packet classification | |
KR100364433B1 (ko) | 비트-벡터 테이블을 이용한 ip 주소 검색방법 | |
JP3754043B2 (ja) | データ検索装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No. Applicant after: Xinhua three Technology Co., Ltd. Address before: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No. Applicant before: Huasan Communication Technology Co., Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |