IPv6路由查找方法及装置的制造方法_2

文档序号:9420250阅读:来源:国知局
itmap节点的下一级最多有25个Tree Bitmap节点,因此Extending Paths Bitmap为2s位,每一位代表该Tree Bitmap节点的一个分支是否有下一级Tree Bitmap节点,若该分支有下一级Tree Bitmap节点,则该位取值为“ 1”,否则,该位取值为“O”。
[0073]例如:图5所示的Level I的Tree Bitmap节点,由于LPM路由查找步长S = 3,则该 Tree Bitmap 节点最多 23= 8 个分支,即该 Tree Bitmap 节点的 Extending Tree Bitmap为23= 8位,表示为00001101,其中,“I”表示该Tree Bitmap节点的对应分支有下一级Tree Bitmap节点,“O”表示该Tree Bitmap节点的对应分支没有下一级Tree Bitmap节点D从图4可以看出:Level I的Tree Bitmap节点有3个下一级Tree Bitmap节点。
[0074]3) Result Array Pointer (结果数组指针)
[0075]Result Array Pointer是指Tree Bitmap节点内部有路由分布的前缀对应的RA (Result Array,结果数组)头指针,RA中依次存储了 Tree Bitmap节点内部有路由分布的各前缀的路由信息,路由信息包括:Next Hop (下一跳)信息、FEC(ForwardingEquivalence Class,转发等价类)信息等。
[0076]通过Internal Tree Bitmap可以知道一个Tree Bitmap节点内部包含多少个有路由分布的前缀,RA按照先后顺序存储这些前缀的路由信息。以图5所示的Level I的TreeBitmap节点为例,该Tree Bitmap节点的Result Array Pointer指向的RA顺序存储了 PUP2和P3的路由信息,Result Array Pointer指向Pl的路由信息。
[0077]4)Child Node Pointer (子节点指针)
[0078]Child Node Pointer是指Tree Bitmap节点的下一级Tree Bitmap节点信息的头指针D
[0079]通过ExtendingPaths Bitmap 可以知道Tree Bitmap节点的下一级 Tree Bitmap节点的分布,也就是说该Tree Bitmap节点的哪些分支上有下一级Tree Bitmap节点TreeBitmap节点的所有下一级“有效”Tree Bitmap节点的信息在内存中是按照顺序存储的,这里的“有效”即对应的Extending Paths Bitmap位为“I”。
[0080]以图5所示的Level I的Tree Bitmap节点为例,该Tree Bitmap节点有3个下一级Tree Bitmap节点,Child Array Pointer指向的内存按照先后顺序存储该3个TreeBitmap节点的信息,其中,每个Tree Bitmap节点的信息都由上述提到的I) Internal TreeBitmap、2)Extending Paths Bitmap、3)Result Array Pointer 和 4)Child Node Pointer描述。
[0081]同样以IPv4前缀“100—001—10”为例,在图4所示的Multibit Trie中查找该前缀的LPM路由的具体过程如下:
[0082]步骤01:由于图4中的LPM路由查找步长为3,则首先读取IPv4前缀的最高3bit “100”,在 Level I 的 Tree Bitmap 节点的 Internal Tree Bitmap 中查找与“100”匹配的前缀,确定Pl和P2匹配上,由于P2是更长的前缀匹配,因此在Levell上P2是最长前缀匹配结果;
[0083]同时,根据最高3bit “ 100”在Extending Paths Bitmap中查找对应的bit (最高3bit “ 100”对应Tree Bitmap节点的第5个分支,则应该在Extending Paths Bitmap中查找第5个bit),该bit为“1”,则确定最高3bit “ 100”对应的分支有下一级Tree Bitmap节点,且该Tree Bitmap节点为Child Node Pointer指向的第一个Tree Bitmap节点(即Level 2中的第一个Tree Bitmap节点21),通过Child Node Pointer从内存中读取TreeBitmap 节点 21 的信息,包括:Internal Tree Bitmap、Extending Paths Bitmap 和 ChildNode Pointer0
[0084]步骤02:然后读取IPv4前缀的中间3bit “001”,在Tree Bitmap节点21的Internal Tree Bitmap节点中查找与“001”匹配的前缀,确定P6是最长前缀匹配结果;
[0085]根据中间3bit “001” 在 Tree Bitmap 节点 21 的 Extending Paths Bitmap 中查找对应bit (中间3bit “001”对应Tree Bitmap21节点的第2个分支,则应该在TreeBitmap节点21的Extending Paths Bitmap中查找第2个bit),该bit取值为“I”,则确定Tree Bitmap节点21有下一级Tree Bitmap节点,且确定该下一级Tree Bitmap节点为Tree Bitmap 节点 21 的 Child Node Pointer 指向的第一个 Tree Bitmap 节点(即 TreeBitmap节点31),则通过Tree Bitmap节点21的Child Node Pointer从内存中读取TreeBitmap 节点 31 的信息,包括:Internal Tree Bitmap、Extending Paths Bitmap、ChildNode Pointer0
[0086]步骤03:由于Tree Bitmap节点31节点位于树底,只有Internal Tree Bitmap,贝丨J使用 IPv4 前缀的最低 2bit“ 10”,查找 Tree Bitmap节点 31 节点的 Internal Tree Bitmap,得到最长前缀匹配是P9。
[0087]可见,采用Multibit Trie可以大大减少LPM路由查找时的节点查找次数。例如:在图4所示的Multibit Trie中查找IPv4前缀“ 10000110”的LPM路由,只需要通过TreeBitmap l->Tree Bitmap 21->Tree Bitmap 31 三次节点查找。
[0088]上述Tree Bitmap l_>Tree Bitmap 21_>Tree Bitmap 31 查找过程中,需要把每级节点得到的LPM信息传递给后级节点,后级节点根据前级节点的LPM信息得到本级节点的LPM信息并继续传递给下一级节点。例如:Tree Bitmapl得到的LPM是P2,将P2传递给Tree Bitmap 21 ;Tree Bitmap 21 得到的 LPM 是 P6,P6 比 Tree Bitmap I 传递的 P2 是更长的LPM,因此P6被传递给Tree Bitmap 31 ;Tree Bitmap 31得到的LPM是P9,P9是比P6更长的LPM,因此P9作为最终的LPM结果。
[0089]通过Tree Bitmap 31 的 Internal Tree Bitmap 和 Result Array Pointer,得到P9对应的RA指针,从内存中读取RA作为最终的LPM路由。
[0090]上述查找过程需要查找TreeBitmap UTree Bitmap 21、Tree Bitmap 31 的内存信息和RA共4次内存查找操作。
[0091]申请人对基于Multibit Trie的Tree Bitmap算法进行分析发现:
[0092]一 ) Tree Bitmap算法没有实现多VPN实例支持,而在现今的网络设备中多VPN实例支持是一个非常重要的功能,其对路由算法的整体架构有很大的影响。
[0093]二)基于 Multibit Trie 的 Tree Bitmap 算法每次查找多 bit,因此 Tree Bitmap节点的数据结构较大,每个Tree Bitmap节点的数据结构包括:Internal Tree Bitmap、Extending Paths Bitmap、Result Array Pointer 和 Child Node Pointer,查找速度较慢。
[0094]图6为本申请一实施例提供的IPv6路由查找方法流程图,其具体步骤如下:
[0095]步骤601:分别针对每个VPN(Virtual Private Network,虚拟专网)中的IPv6前缀的路由分布,构建一棵Multibit Trie0
[0096]步骤602:将每棵 Multibit Trie 划分为 n+1 个 Level (层):Level O ?η,η 为大于I的整数。
[0097]步骤603:采用前缀扩展的方法将Multibit Trie的I?m级IPv6前缀上的路由扩展到m+Ι级IPv6前缀上,m为大于I的整数。
[0098]步骤604:将第m+Ι级IPv6前缀的每一个分支作为一个分支树Branch_Tree,保存每个Branch_Tree的数据结构信息。
[0099]步骤605:针对Level p?η中的每个第一级子字典树Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IPv6前缀的IPv6地址在本Level之前的所有位bit作为输入Key,采用预设的本Level的哈希Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,p为整数且0〈ρ〈η。
[0100]步骤606:当对一 VPN内的一 IPv6地址进行路由查找时,先根据VPN标识和该IPv6地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,若有Hash计算结果命中,则采用最长的Hash命中结果对应的Subjrie节点的数据结构信息指针查找路由;否则,根据该IPv6地址的高m+lbit查找到对应的Branch_Tree,在该Branch_Tree的Level I?p_l中查找路由。
[0101]一种实施例中,将O级IPv6前缀的默认路由存储在片外存储空间的预定区域,将I?m级IPv6前缀的路由存储在片外存储空间的空闲区域中;
[0102]且,步骤604中,保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中。
[0103]—种实施例中,步骤604中,保存每个Branch_Tree的数据结构信息进一步包括:
[0104]针对Branch_Tree 维护 VRB (VPN Root Bitmap,虚拟专网入口位图)Table (表),该 VRB Table 包含 CEPB(Compressed Extending Path Bitmap,压缩扩展路径位图)和CNP (Child Node Pointer,子节点指针),其中,
[0105]CEPB 共 2m+1/2d bit,每 2df 连续的 Branch_Tree 对应 CEPB 的一个 bit,当 2连续的Branch_Tree中存在在Level I?p_l中有路由分布的Branch_Tree时,贝Ij对应的CEPB位有效,d为正整数;
[0106]CNP 表示第一个 CEPB 有效 bit 对应的 2df Branch_Tree 的第一个 Branch_Tree的指针;
[0107]且,步骤606中,根据该IPv6地址的高m+lbit查找到对应的Branch_Tree,在该Branch_Tree的Level I?p_l中查找路由包括:
[0108]读取该IPv6地址的高m+lbit,根据该IPv6地址的高m+l_d bit在该Multibit-Trie的VRB Table的CEPB中查找到对应的bit ;若查找到的bit有效,则根据该IPv6地址的高m+lbit中的低d bit确定对应的CNP,根据该CNP查找到对应的Branch_Tree的数据结构信息;根据该Branch_Tree的Levell?p_l的数据结构信息查找该IPv6地址的路由。
[0109]一种实施例中,步骤602中,将每棵Multibit Trie划分为n+1个Level包括:
[0110]按照路由分布较多的IPv6前缀段位于Level底部的原则,将每棵Multibit Trie划分为8个Level:Level O?7,Level O由O?8级前缀构成,Level I?3的步长都为8,Level 4?6的步长都为24,Level 7的步长为23 ;且,m = 8,p = 4。
[0111]一种实施例中,步骤604中,保存每个Branch_Tree的数据结构信息包括:
[0112]保存每个Branch_Tree中除Level O外的每个Level中的Sub_Trie节点的数据结构信息,其中:除最后一个Level的最后一级Sub_Trie节点的步长为7外,其余Sub_Trie节点的步长都为8 ;对于每个Branch_Tree中除Level O外的每个Level中的每个Sub_Trie节点,采用前缀扩展的方式将该Sub_Trie节点的0、1、2级上的前缀的路由扩展到3级前缀上;将每个Sub_Trie节点均勾划分成8个分段Sub_Trie节点,保存每个分段Sub_Trie节点的数据结构信息,其中,每个分段Sub_Trie节点以该分段Sub_Trie节点的高3级IPv6如缀为索引;
[0113]且,步骤606中,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由包括:
[0114]根据该IPv6地址在对应Sub_Trie节点中的对应8bit,根据该8bit的高3bit在本Sub_Trie节点中索引到对应的分段Sub_Trie节点,根据该分段Sub_Trie节点的数据结构信息进行后续路由查找过程;
[0115]步骤606中,在该Branch_Tree的Level I?p-1中查找路由包括:当查找到Level I?p-Ι中的一 Level时,根据该IPv6前缀在本Level中对应的8bit的高3bit在本Level的Sub_Trie中索引到对应的分段Sub_Trie,根据该分段Sub_Trie的数据结构信息进行后续路由查找过程。
[0116]一种实施例中,步骤604中,保存每个Branch_Tree的数据结构信息包括:
[0117]对于Level 3的Sub_Trie节点以及Level 7的最后一级Sub_Trie节点,该Sub_Trie节点的数据结构信息包括:
[0118]I) q个Prefix Key (前缀密钥):每个Prefix key代表该Sub_Trie节点中的其中一个有路由分布的IP前缀的IP地址的最低7bit,其中,q为预设的该Sub_Trie节点中的有路由分布的IP前缀的最大数量;
[0119]2) Result Array ptr (结果数组指针);
[0120]且,步骤606中,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由时,当查找到Level 7的最后一级Sub_Trie节点时,直接将该IPv6地址的最低7bit与Level 7的各最后一级Sub_Trie节点的数据结构信息中的Prefix Key匹配,若匹配上,则根据对应的Result Array ptr直接确定路由;
[0121]步骤606中,在该Branch_Tree的Level I?p_l中查找路由时,当查找到Level 3时,直接将该IPv6地址的最低8bit与Level 3的各Sub_Trie的数据结构信息中的PrefixKey匹配,若匹配上,则根据对应的Result Array ptr直接确定路由。
[0122]一种实施例中,预先为Level p?η中的每个Level设置多个Hash函数,每个Hash函数对应一张Hash表,Hash表中的每个位置唯一代表一个Hash计算结果,每个位置用于存储该位置代表的Hash计算结果对应的输入Key及该输入Key对应的Sub_Trie节点的数据结构信息指针;
[0123]且,步骤605中,采用预设的本Lev
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1