IP路由查找方法及装置与流程

文档序号:12623458阅读:1370来源:国知局
IP路由查找方法及装置与流程

本申请涉及路由查找技术领域,尤其涉及IP路由查找方法及装置。



背景技术:

网络之间进行通信就要实现数据的传递转发,所以网络设备的主要职能之一就是进行高效率的数据转发,而其在因特网协议的基本数据平面的功能是路由查找,即根据路由表中的前缀信息,对每一个到来的数据包决定它的下一跳及出端口。由于路由表中通配符以及CIDR(Classless Inter-Domain Routing,基于无类域间路由)的LPM(Longest Prefix Matching,最长前缀匹配)问题使得路由查找变得非常复杂。基于LPM的路由查找算法除了需要高性能外,还要满足如下几个需求:

一、IPv4和IPv6双栈

现有解决LPM的算法大都针对IPv4的32位地址设计,不能直接移植或者扩展到IPv6,这就需要根据IPv6的特点,设计出适合128位IP地址的高效的路由查找算法。

二、多VPN(Virtual Private Network,虚拟专网)实例支持

当前网络设备需要支持VRF(VPN Routing Forwarding Instance,VPN路由转发实例),VRF是指在一台路由器上需要同时支持多个路由转发表实例,各路由转发表间独立。使用VRF可以用路由隔离不同的VPN用户。

当前中、高端路由器已经普遍支持4K或8K VPN,也就是说设备内部需要同时支持4K或8K个VRF转发表,支持多VPN实例对路由算法的整体架构具有很大的影响。

三、大规格路由数量

对于IP路由来说,网络设备需要支持远大于当前现网路由的规格。图1所示为2002~2009年Internet IPv4路由分布示意图,从图1中可以看到8年间IPv4路由数量增加了一倍以上;图2所示为Internet IPv6路由分布示意图。

另外由于网络设备需要支持多VPN实例,每个VPN实例都需要维护一套独立的路由表,当网络设备支持较多VPN实例时,网络设备整体路由表条目会很大。例如8K个VPN实例,每个VPN实例有512条路由,则整个网络设备需要支持4M条路由。

当前中、高端路由器设备,IPv4普遍要求大于4M条路由,IPv6普遍要求大于1M条路由,大规格的路由表数量对路由算法的整体架构具有很大的影响,尤其对算法所选择的内存类型具有决定作用。

四、快速更新

路由更新性能是网络设备一个非常关键的指标,路由更新速度慢会严重影响整网路由收敛的速度,导致整网不停地路由震荡;随着现网路由数量的增加、以及整网VPN和VPN路由数量的增加,对路由更新性能提出了更高的要求。



技术实现要素:

本申请提供IP路由查找方法及装置,以提高IP路由查找效率。

本申请的技术方案是这样实现的:

一种IP路由查找方法,该方法包括:

分别针对每个VPN中的IP前缀的路由分布,构建一棵Multibit Trie;

采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上,m为大于1的整数;

将所述Multibit Trie的m+1级IP前缀的每一个分支作为一个Branch_Tree,保存每个Branch_Tree的数据结构信息;

当对一VPN内的一IP地址进行路由查找时,根据该IP地址的高m+1bit 在该VPN对应的Multibit Trie中查找到对应的Branch_Tree,在该Branch_Tree中查找对应的路由。

一种IP路由查找装置,该装置包括:

Multibit Trie建立模块:分别针对每个VPN中的IP前缀的路由分布,构建一棵Multibit Trie;采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上,m为大于1的整数;将所述Multibit Trie的m+1级IP前缀的每一个分支作为一个Branch_Tree,保存每个Branch_Tree的数据结构信息;

路由查找模块:当对一VPN内的一IP地址进行路由查找时,根据该IP地址的高m+1位bit在该VPN对应的Multibit Trie中查找到对应的Branch_Tree,在该Branch_Tree中查找对应的路由。

可见,本申请中,针对每个VPN中的所有IP前缀的路由分布,构建一棵Multibit Trie,且将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上,将m+1级IP前缀的每一个分支作为一个Branch_Tree,这样,当对一VPN内的一IP地址进行路由查找时,先查找到该VPN对应的Multibit-Trie,然后根据该IP地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree中查找对应的路由,从而简化了IP路由的查找过程,提高了IP路由查找效率。

附图说明

图1为2002~2009年Internet IPv4路由分布示意图;

图2为现有的Internet IPv6路由分布示意图;

图3为Unibit Trie示例图;

图4为Unibit Trie到Multibit Trie的转换过程示例图;

图5为图4中的Level 1的结构;

图6为本申请一实施例提供的基于Multibit Trie的IP路由查找方法流程 图;

图7为本申请一实施例提供的基于Multibit Trie的IPv4路由查找方法流程图;

图8为本申请实施例针对一个VPN(VPN m)中的IPv4前缀的路由分布建立的Multibit Trie的结构示例图;

图9-1为本申请实施例提供的以图3所示的Unibit Trie为例,将/0级前缀的路由扩展到/1级前缀上的示例图;

图9-2为本申请实施例提供的以图3所示的Unibit Trie为例,将/1级前缀的路由扩展到/2级前缀上的示例图;

图9-3为本申请实施例提供的以图3所示的Unibit Trie为例,将/2级前缀的路由扩展到/3级前缀上的示例图;

图10为本申请实施例提供的将Sub_Trie节点划分为8个Segmented Sub_Trie节点的示例图;

图11为本申请实施例提供的基于Multibit Trie的IP路由查找装置的组成示意图;

图12为本申请实施例提供的包含IP路由查找装置的设备的硬件架构示意图。

具体实施方式

Tree Bitmap(树位图)是基于Multibit Trie(多位字典树)的经典路由查找算法,该算法应用于CRS系列高端路由器上。为了深入了解Tree Bitmap,首先介绍Unibit Trie(单位字典树)和Multibit Trie。

图3为Unibit Trie示例图,如图3所示,共有9条IPv4前缀P1~P9分布。其中,Unibit Trie的最高前缀节点P1代表前缀*,之后,P1的下一级的左分支表示的前缀Q1为0*,P1的下一级的右分支表示的前缀P2为1*,Q1的下一级的左分支表示的前缀P3为00*,P2的下一级的左分支表示的前缀 Q2为01*,P2的下一级的右分支表示的前缀Q3为11*,依此类推;也就是说,对于Unibit Trie中的任一节点P,该节点P的下一级的左分支表示的前缀PL为0P,该节点P的下一级的右分支表示的前缀PR为1P。

在Unibit Trie结构中,●节点代表有路由分布,○表示没有路由分布。如图3中,P1~P9代表有路由分布,Q1~Q8代表没有路由分布。

Unibit Trie中基于LPM的路由查找过程如下:

对于一个待查找LPM路由的IPv4前缀,以该IPv4前缀的从高到低bit的顺序,每次在Unibit Trie中查找该IPv4前缀的1bit,如果该bit为“0”,则进入Unibit Trie的下一级的左分支,如果该bit为“1”,则进入Unibit Trie的下一级的右分支;依此类推,一直查找到Unibit Trie的树底,最后经过的●节点的路由为该IPv4前缀的LPM路由。

例如:要在图3所示的Unibit Trie中查找IPv4前缀:10000110的LPM路由,则具体过程如下:

步骤01:先找出该IPv4前缀:10000110的最高的bit,即“1”,则从Unibit Trie的P1进入下一级的右分支P2,表示为P1->P2;

步骤02:再找出IPv4前缀:10000110的次高bit,即“0”,则从Unibit Trie的P2进入下一级的左分支Q2,表示为:P2->Q2;

步骤03:再找出IPv4前缀:10000110的第三高bit,即“0”,则从Unibit Trie的Q2进入下一级的左分支Q4,表示为:Q2->Q4;

步骤04:再找出IPv4前缀:10000110的第四高bit,即“0”,则从Unibit Trie的Q4进入下一级的左分支P6,表示为:Q4->P6;

步骤05:再找出IPv4前缀:10000110的第五高bit,即“0”,则从Unibit Trie的P6进入下一级的左分支Q6,表示为:P6->Q6;

步骤06:再找出IPv4前缀:10000110的第六高bit,即“1”,则从Unibit Trie的Q6进入下一级的右分支Q8,表示为:Q6->Q8;

步骤07:再找出IPv4前缀:10000110的第七高,即次低bit,即“1”, 则从Unibit Trie的Q8进入下一级的右分支P9,表示为:Q8->P9,此时,已经到达Unitbit Trie的树底,则查找结束,P9的路由为IPv4前缀:10000110的LPM路由。

也就是说,采用Unibit Trie查找IPv4前缀“10000110”的LPM路由,需要通过P1->P2->Q2->Q4->P6->Q6->Q8->P9,共七次节点查找。

Multibit Trie是在Unibit Trie的基础上,每次LPM路由查找时,查找多个bit。图4所示为Unibit Trie到Multibit Trie的转换过程,图4中每次LPM路由查找要查找3个bit,即LPM路由查找步长为3。

Tree Bitmap是在Multibit Trie基础上,对节点数据结构进行优化,使之更适合基于SRAM(Static Random Access Memory,静态随机存取存储器)和DRAM(Dynamic Random Access Memory,动态随机存取存储器)的大访问粒度架构的硬件流水线实现。Multibit Trie可根据预设LPM路由查找步长划分为多个Level,如图4所示的Multibit Trie以LPM路由查找步长3划分为3个Level:Level 1、Level 2和Level3。

图5给出了图3中的Level 1的结构。

在Multibit Trie中,对于每个Level,将该Level划分为多个Tree Bitmap节点,每个Tree Bitmap节点为该Level的最高一级的一个前缀及其该前缀的子孙前缀构成的sub_Trie。

其中,设Multibit Trie以LPM路由查找步长S划分为N个Level,分别为Level 1~N,则Level 1中包含一个Tree Bitmap节点,Level 2的最高一级前缀最多有2s个,则该2s个前缀中的每个前缀与其子孙前缀分别构成一棵sub_Trie,则Level 2中最后包含2s个Tree Bitmap节点,通用地,Level m(1≤m≤N)中最多包含2(m-1)s个Tree Bitmap节点。

以图4为例,Level 1中包含一个Tree Bitmap节点,Level 2中包含3个Tree Bitmap节点,Level 3中包含2个Tree Bitmap节点。

在描述Tree Bitmap节点时,每个Tree Bitmap节点可采用如下四个参数 来描述:

1)Internal Tree Bitmap(内部树位图)

Internal Tree Bitmap表示Tree Bitmap节点内部的前缀的路由分布,假设LPM路由查找步长为S,则该Tree Bitmap节点内部最多有(2S-1)个前缀,从而Internal Tree Bitmap为(2S-1)位,每一位代表该Tree Bitmap节点内部的一个前缀上是否有路由分布,若该前缀上有路由分布,则该位取值为“1”,否则,该位取值为“0”。

例如:图5所示的Leve 1中的Tree Bitmap节点,由于LPM路由查找步长S=3,则Level 1中的Tree Bitmap节点的Internal Tree Bitmap为23-1=7位,表示为1_01_1000,其中,“1”表示对应前缀上有路由分布,“0”表示对应前缀上没有路由分布。

2)Extending Paths Bitmap(扩展路径位图)

Extending Paths Bitmap表示Tree Bitmap节点的下一级Tree Bitmap节点的分布,假设LPM路由查找步长为S,则一个Tree Bitmap节点最多有2S个分支,即该Tree Bitmap节点的下一级最多有2S个Tree Bitmap节点,因此Extending Paths Bitmap为2S位,每一位代表该Tree Bitmap节点的一个分支是否有下一级Tree Bitmap节点,若该分支有下一级Tree Bitmap节点,则该位取值为“1”,否则,该位取值为“0”。

例如:图5所示的Level 1的Tree Bitmap节点,由于LPM路由查找步长S=3,则该Tree Bitmap节点最多23=8个分支,即该Tree Bitmap节点的Extending Tree Bitmap为23=8位,表示为00001101,其中,“1”表示该Tree Bitmap节点的对应分支有下一级Tree Bitmap节点,“0”表示该Tree Bitmap节点的对应分支没有下一级Tree Bitmap节点。从图4可以看出:Level 1的Tree Bitmap节点有3个下一级Tree Bitmap节点。

3)Result Array Pointer(结果数组指针)

Result Array Pointer是指Tree Bitmap节点内部有路由分布的前缀对应的 RA(Result Array,结果数组)头指针,RA中依次存储了Tree Bitmap节点内部有路由分布的各前缀的路由信息,路由信息包括:Next Hop(下一跳)信息、FEC(Forwarding Equivalence Class,转发等价类)信息等。

通过Internal Tree Bitmap可以知道一个Tree Bitmap节点内部包含多少个有路由分布的前缀,RA按照先后顺序存储这些前缀的路由信息。以图5所示的Level 1的Tree Bitmap节点为例,该Tree Bitmap节点的Result Array Pointer指向的RA顺序存储了P1、P2和P3的路由信息,Result Array Pointer指向P1的路由信息。

4)Child Node Pointer(子节点指针)

Child Node Pointer是指Tree Bitmap节点的下一级Tree Bitmap节点信息的头指针。

通过Extending Paths Bitmap可以知道Tree Bitmap节点的下一级Tree Bitmap节点的分布,也就是说该Tree Bitmap节点的哪些分支上有下一级Tree Bitmap节点。Tree Bitmap节点的所有下一级“有效”Tree Bitmap节点的信息在内存中是按照顺序存储的,这里的“有效”即对应的Extending Paths Bitmap位为“1”。

以图5所示的Level 1的Tree Bitmap节点为例,该Tree Bitmap节点有3个下一级Tree Bitmap节点,Child Array Pointer指向的内存按照先后顺序存储该3个Tree Bitmap节点的信息,其中,每个Tree Bitmap节点的信息都由上述提到的1)Internal Tree Bitmap、2)Extending Paths Bitmap、3)Result Array Pointer和4)Child Node Pointer描述。

同样以IPv4前缀“100_001_10”为例,在图4所示的Multibit Trie中查找该前缀的LPM路由的具体过程如下:

步骤01:由于图4中的LPM路由查找步长为3,则首先读取IPv4前缀的最高3bit“100”,在Level 1的Tree Bitmap节点的Internal Tree Bitmap中查找与“100”匹配的前缀,确定P1和P2匹配上,由于P2是更长的前缀匹 配,因此在Level1上P2是最长前缀匹配结果;

同时,根据最高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从内存中读取Tree Bitmap节点21的信息,包括:Internal Tree Bitmap、Extending Paths Bitmap和Child Node Pointer。

步骤02:然后读取IPv4前缀的中间3bit“001”,在Tree Bitmap节点21的Internal Tree Bitmap节点中查找与“001”匹配的前缀,确定P6是最长前缀匹配结果;

根据中间3bit“001”在Tree Bitmap节点21的Extending Paths Bitmap中查找对应bit(中间3bit“001”对应Tree Bitmap21节点的第2个分支,则应该在Tree Bitmap节点21的Extending Paths Bitmap中查找第2个bit),该bit取值为“1”,则确定Tree Bitmap节点21有下一级Tree Bitmap节点,且确定该下一级Tree Bitmap节点为Tree Bitmap节点21的Child Node Pointer指向的第一个Tree Bitmap节点(即Tree Bitmap节点31),则通过Tree Bitmap节点21的Child Node Pointer从内存中读取Tree Bitmap节点31的信息,包括:Internal Tree Bitmap、Extending Paths Bitmap、Child Node Pointer。

步骤03:由于Tree Bitmap节点31节点位于树底,只有Internal Tree Bitmap,则使用IPv4前缀的最低2bit“10”,查找Tree Bitmap节点31节点的Internal Tree Bitmap,得到最长前缀匹配是P9。

可见,采用Multibit Trie可以大大减少LPM路由查找时的节点查找次数。例如:在图4所示的Multibit Trie中查找IPv4前缀“10000110”的LPM路由,只需要通过Tree Bitmap 1->Tree Bitmap 21->Tree Bitmap 31三次节点查找。

上述Tree Bitmap 1->Tree Bitmap 21->Tree Bitmap 31查找过程中,需要把每级节点得到的LPM信息传递给后级节点,后级节点根据前级节点的LPM信息得到本级节点的LPM信息并继续传递给下一级节点。例如:Tree Bitmap1得到的LPM是P2,将P2传递给Tree Bitmap 21;Tree Bitmap 21得到的LPM是P6,P6比Tree Bitmap 1传递的P2是更长的LPM,因此P6被传递给Tree Bitmap 31;Tree Bitmap 31得到的LPM是P9,P9是比P6更长的LPM,因此P9作为最终的LPM结果。

通过Tree Bitmap 31的Internal Tree Bitmap和Result Array Pointer,得到P9对应的RA指针,从内存中读取RA作为最终的LPM路由。

上述查找过程需要查找Tree Bitmap 1、Tree Bitmap 21、Tree Bitmap 31的内存信息和RA共4次内存查找操作。

申请人对基于Multibit Trie的Tree Bitmap算法进行分析发现:

一)Tree Bitmap算法没有实现多VPN实例支持,而在现今的网络设备中多VPN实例支持是一个非常重要的功能,其对路由算法的整体架构有很大的影响。

二)基于Multibit Trie的Tree Bitmap算法每次查找多bit,因此Tree Bitmap节点的数据结构较大,每个Tree Bitmap节点的数据结构包括:Internal Tree Bitmap、Extending Paths Bitmap、Result Array Pointer和Child Node Pointer,查找速度较慢。

图6为本申请一实施例提供的基于Multibit Trie的IP路由查找方法流程图,其具体步骤如下:

步骤601:分别针对每个VPN中的IP前缀的路由分布,构建一棵Multibit Trie。

步骤602:采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上,m为大于1的整数。

步骤603:将Multibit Trie的m+1级IP前缀的每一个分支作为一个Branch_Tree(分支树),保存每个Branch_Tree的数据结构信息。

步骤604:当对一VPN内的一IP地址进行路由查找时,根据该IP地址的高m+1bit在该VPN对应的Multibit Trie中查找到对应的Branch_Tree,在该Branch_Tree中查找对应的路由。

一种实施例中,在所述Multibit Trie中,0级前缀的默认路由存储在片外存储空间的预定区域;

且,步骤603中,所述保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中。

一种实施例中,步骤603中,所述保存每个Branch_Tree的数据结构信息进一步包括:

针对Branch_Tree维护VRB(VPN Root Bitmap,虚拟专网入口位图)Table(表),该VRB Table包含CEPB(Compressed Extending Path Bitmap,压缩扩展路径位图)和CNP(Child Node Pointer,子节点指针),其中,所述CEPB共2m+1/2d bit,每2d个连续的Branch_Tree对应CEPB的一个bit,当2d个连续的Branch_Tree中存在分布路由的Branch_Tree时,则对应的CEPB位有效,d为正整数;所述CNP表示第一个CEPB有效bit对应的2d个Branch_Tree的第一个Branch_Tree的指针;

且,步骤604中,所述根据该IP地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree中查找对应的路由包括:

读取该IP地址的高m+1bit,根据该IP地址的高m+1-d bit在该Multibit-Trie的VRB Table的CEPB中查找到对应的bit;若查找到的bit有效,则根据该IP地址的高m+1bit中的低d bit确定对应的CNP,根据该CNP查找到对应的Branch_Tree的数据结构信息;根据该Branch_Tree的数据结构信息查找该IP地址的路由。

一种实施例中,步骤602中,所述采用前缀扩展的方法将Multibit Trie 的高1~m级IP前缀上的路由扩展到m+1级IP前缀上之前进一步包括:

按照路由分布较多的IP前缀段位于Level底部的原则,将每棵Multibit Trie的/0~/8级IP前缀划分到Level 0,将最低7级IP前缀划分到最后一个Level,将中间的IP前缀以步长8划分为多个Level(层);

且,步骤602中,所述采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上包括:

采用前缀扩展的方法将Multibit Trie的1~8级IP前缀上的路由扩展到9级IP前缀上。

一种实施例中,步骤603中,所述保存每个Branch_Tree的数据结构信息包括:

对于每个Branch_Tree中除Level 0外的每个Level中的每个Sub_Trie(子字典树),采用前缀扩展的方式将该Sub_Trie的0、1、2级上的IP前缀的路由扩展到3级IP前缀上;将每个Sub_Trie均匀划分成8个分段Sub_Trie,保存每个分段Sub_Trie的数据结构信息,其中,每个分段Sub_Trie以该子Sub_Trie的高3级IP前缀为索引;

且,步骤604中,所述在该Branch_Tree中查找对应的路由包括:

当查找到一Level时,根据该IP地址在本Level中对应的8bit或7bit的高3bit,在本Level的Sub_Trie中索引到对应的分段Sub_Trie,然后根据该分段Sub_Trie的数据结构信息进行路由查找。

一种实施例中,步骤603中,所述保存每个Branch_Tree的数据结构信息包括:

对于最后一个Level内的每个Sub_Trie,该Sub_Trie的数据结构信息包括:

1)q个Prefix Key(前缀密钥):每个Prefix key代表该Sub_Trie中的其中一个有路由分布的IP前缀的IP地址的最低7bit,其中,q为预设的该Sub_Trie中的有路由分布的IP前缀的最大数量;

2)Result Array ptr(结果数组指针);

且,步骤604中,所述在该Branch_Tree中查找对应的路由时,当查找到最后一个Level时,将该IP地址的最低7bit与最后一个Level的各Sub_Trie的数据结构信息中的Prefix Key匹配,若匹配上,则根据对应的Result Array ptr直接确定路由。

一种实施例中,步骤604中,所述在该Branch_Tree中查找对应的路由进一步包括:

若未查找到,则从所述片外存储空间的预定区域中读取默认路由,将默认路由作为最终查找到的路由。

图7为本申请一实施例提供的基于Multibit Trie的IPv4路由查找方法流程图,其具体步骤如下:

步骤701:分别针对每个VPN中的所有IPv4前缀的路由分布,构建一棵Multibit Trie。所有VPN的Multibit Trie的结构相同。其中,每棵Multibit Trie共有四个Level:Level 0~3,Level 0由0/~8/级前缀构成,Level 1、Level2的步长都为8,Level 3的步长为7。

即,有多少个VPN就建立多少棵Multibit Trie。

图8给出了本申请实施例针对一个VPN(VPN m)中的IPv4前缀的路由分布建立的Multibit Trie的结构示例图,如图8所示,Multibit Trie共有32级前缀:/0~/31,其中,Level 0中的前缀为:/0~/8级(对应IPv4地址的高9bit),Level 1中的前缀为:/9~/16(对应IPv4地址的次高8bit),Level 2中的前缀为:/17~/24(对应IPv4地址的次低8bit),Level 3中的前缀为:/25~/31(对应IPv4地址的低7bit)。

本申请实施例中,在对Multibit Trie的/9~/31级前缀进行分层时,采用的步长为8、8、7,这样可以保证包含有较多的有路由分布的前缀段:prefix16、prefix24分布在Level 1和Level 2的底部,这样从整体上来看会使得Multibit Trie中的sub_Trie节点的数量最少。

步骤702:针对每个VPN的Multibit Trie,采用前缀扩展的方法将该Multibit Trie的/1~/8级前缀上的路由扩展到/9级前缀上。

前缀扩展(Prefix Expansion)是指将掩码长度短的前缀的路由等价扩展到多个掩码长度长的前缀上。

以图4所示的Multibit Trie为例,可以将该Multibit Trie的/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,考虑到:如果将默认路由也采用前缀扩展的方式扩展到Multibit Trie的/9级前缀上,则每棵Multibit Trie固定会有512个有效的Branch_Tree,这样对于多VPN路由表会形成大量的冗余Branch_Tree。

步骤704:将Level 0的29=512个下一级分支中的每一个分支作为一个Branch_Tree。

则每个Branch_Tree都由步长为8的Level 1、Level 2和步长为7的Level3的三层Sub_Trie组成。

步骤705:针对每个Branch_Tree,在DRAM中保存该Branch_Tree的数据结构信息,其中,该Branch_Tree的数据结构信息由该Branch_Tree在Level1、Level 2和Level 3中的所有Sub_Trie节点的数据结构信息组成。

其中,Level 1、Level 2中的每个Sub_Trie节点的数据结构信息都分别由Internal Tree Bitmap、Extending Paths Bitmap、Result Array Pointer和Child Node Pointer组成,Level 3中的每个Sub_Trie节点由于都没有下一级分支,则都分别由Internal Tree Bitmap和Result Array Pointer组成。

根据Multibit Trie固有结构特点可知:

Level 0中始终只包含1个Sub_Trie节点(设为Sub_Trie节点1);

设Sub_Trie节点1有p个分支有下一级Sub_Trie节点,则Level 1中就包含p个Sub_Trie节点;

设Level 1中的p个Sub_Trie节点共有q个分支有下一级Sub_Trie节点,则Level 2中就包含q个Sub_Trie节点;

设Level 2中的q个Sub_Trie节点共有r个分支有下一级Sub_Trie节点,则Level 3中就包含r个Sub_Trie节点。

在一个Branch_Tree中,Level 1中最多有512个Sub_Trie,Level 2中最多有64K个Sub_Trie,Level 3中最多有16M个Sub_Trie。

步骤706:针对该29=512个Branch_Tree维护VRB Table,该VRB Table包含CEPB和CNP两部分,其中,

CEPB:用于表示512个Branch_Tree的路由分布情况,共64bit;每8个连续的Branch_Tree对应CEPB的一个bit,该8个连续的Branch_Tree中只要有一个Branch_Trees上有路由分布,则对应的CEPB位有效(即为“1”)。

CNP:表示第一个CEPB有效bit对应的8个Branch_Tree的第一个Branch_Tree的指针(即第一个Branch_Tree的数据结构信息在内存中的起始地址)。

可见,通过CEPB和CNP可以计算得到任意一个有效的Branch_Tree(即有路由分布的Branch_Tree)的指针。

步骤707:当对一VPN内的一IPv4地址进行LPM路由查找时,先查找到该VPN对应的Multibit-Trie的VRB Table。

步骤708:读取该IPv4地址的高9bit,先计算该IPv4地址的高6bit对应的十进制值,设该值为v,在步骤707查找到的VRB Table中查找第v bit。

IPv4地址的高6bit对应的十进制值v的取值范围为:0~(26-1),即,0~63。

步骤709:判断该第v bit的取值为0还是1,若为0,则将DRAM的固定位置处存储的默认路由作为本次LPM路由查找结果,本流程结束;若为1,执行步骤710。

步骤710:计算该IPv4地址的高9bit中的低3bit对应的十进制值,设该值为w,则确定应该在该VPN的VRB Table的第v bit对应的8个Branch_Tree中的第w个Branch_Tree中进行LPM路由查找,则根据CNP查找到该Branch_Tree的数据结构信息,根据该Branch_Tree的数据结构信息查找该IPv4地址的LPM路由。

IPv4地址的高9bit的低3bit对应的十进制值w的取值范围为:0~(23-1),即,0~7。

本步骤710执行完后,若未在确定的Branch_Tree中查找到该IPv4地址的LPM路由,则在步骤703存储的DRAM的固定位置中查找到/0级前缀的默认路由,将该默认路由作为该IPv4地址的LPM路由。

在实际应用中,对于每个VPN对应的Multibit Trie,除Level 0之外的其它Level中的Sub_Trie节点的数据结构信息都存储在外部DRAM中,Sub_Trie节点的数据结构的大小直接影响DRAM的访问性能。本申请实施例中,一个Sub_Trie节点的步长为8或7,Sub_Trie节点的数据结构包括:

Internal Tree Bitmap(设长度为255bit)

Extending Paths Bitmap(设长度为256bit)

Result Array Pointer(设长度为24bit)

Child Node Pointer(设长度为24bit)

则一个Sub_Trie节点的数据结构共559bit。

为了进一步减少Sub_Trie节点的数据结构所占用的存储空间,本申请实施例对除Level 0之外的其它Level中的每个Sub_Trie节点进行如下优化:

步骤01:对于每个Sub_Trie,采用前缀扩展的方式将该Sub_Trie的/0、/1、/2级前缀的路由扩展到/3级前缀上。

图10中的Sub_Trie节点即将一个Sub_Trie的/0、/1、/2级前缀的路由扩展到/3级前缀上后的示例图。

步骤02:将每个Sub_Trie节点均匀划分成8个Segmented(分段)Sub_Trie节点,将每个Segmented Sub_Trie节点的数据结构信息保存在DRAM中,其中,每个Segmented Sub_Trie节点的数据结构信息以该Segmented Sub_Trie节点的高3bit IP地址为索引。

如图10中的Segmented Sub_Trie节点0~7,其中:Segmented Sub_Trie 0的索引为000,Segmented Sub_Trie 1的索引为001,Segmented Sub_Trie 2的索引为010,Segmented Sub_Trie 3的索引为011,Segmented Sub_Trie 4的索引为100,Segmented Sub_Trie 5的索引为101,Segmented Sub_Trie 6的索引为110,Segmented Sub_Trie 7的索引为111。

从图10可以看出,每个Segmented Sub_Trie节点的数据结构的大小为原Sub_Trie节点的数据结构的1/8。

步骤710中,当在确定的该Branch_Tree中查找该IPv4地址的LPM路由时,当查找到一Level时,根据该IPv4地址在本Level中对应的8bit或7bit,先根据该8bit或7bit的高3bit在本Level中索引到对应的Segmented Sub_Trie节点,然后根据该Segmented Sub_Trie节点的数据结构信息进行后续LPM路由查找过程。可见,大大提高了LPM路由查找速度。

另外,由于在一个Branch_Tree中,Level 1最多有512个Sub_Trie节点,Level 2最多有64K个Sub_Trie节点,Level 3最多有16M个Sub_Trie节点,…,即,Level中的Sub_Trie节点的数量依次增加,因此,通常情况下,最后一个Level中的Sub_Trie节点数量最多;但是,通过观察Internet路由和数据中心路由分布发现:通常情况下最后一个Level中的每个Sub_Trie节点内的路由一般都小于4个。基于此,对最后一个Level内的Sub_Trie节点的数据结构进行如下优化:

首先,为了将最后一个Level内的Sub_Trie节点的数据结构与其它Sub_Trie节点进行区分,将最后一个Level内的Sub_Trie节点的数据结构称为:Compressed(压缩)Sub_Trie节点数据结构,其主要包括如下两部分:

1)4个Prefix Key:每个Prefix key代表最后一个Level的该Sub_Trie节点中一个有路由分布的IP前缀的IP地址的最后7bit。

一个Prefix Key的长度为7bit,4个Prefix Key共28bit。

可见,Prefix Key取代了通常的Internal Tree Bitmap。

2)Result Array ptr(24bit)

可见,一个Compressed Sub_Trie节点的数据结构共52bit。

步骤710中,当在确定的该Branch_Tree中查找该IPv4地址的LPM路由时,当查找到最后一个Level(即Level 3)时,直接将该IPv4地址在本Level中对应的7bit(即最低7bit)与Level 3的各Compressed Sub_Trie节点的数据结构中的Prefix Key匹配即可,若匹配上,则根据对应的Result Array ptr直接确定LPM路由。可见,LPM路由查找速度进一步提高了。

本申请实施例的有益技术效果如下:

一)支持多VPN实例的IPv4和IPv6路由;

二)通过将Multibit-Trie划分为512个Branch_Tree,提高了路由查找速度;

三)将默认路由单独存储,而不扩展到Level 1,减少了Multibit-Trie的冗余节点,进一步提高了路由查找速度;

四)对Sub_Trie节点内部进行前缀扩展后划分为8个Segmented Sub_Trie节点,进一步提高了路由查找速度;

五)简化最后一级Level的Sub_Trie节点的数据结构,进一步提高了路由查找速度。

图11为本申请实施例提供的基于Multibit Trie的IP路由查找装置的组成示意图,该装置主要包括:

Multibit Trie建立模块:分别针对每个VPN中的IP前缀的路由分布,构建一棵Multibit Trie;采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上,m为大于1的整数;将所述Multibit Trie的m+1级IP前缀的每一个分支作为一个Branch_Tree,保存每个Branch_Tree 的数据结构信息;

路由查找模块:当对一VPN内的一IP地址进行路由查找时,根据该IP地址的高m+1位bit在该VPN对应的Multibit Trie中查找到对应的Branch_Tree,在该Branch_Tree中查找对应的路由。

一种实施例中,Multibit Trie建立模块进一步用于,在所述Multibit Trie中,0级前缀的默认路由存储在片外存储空间的预定区域;

且,Multibit Trie建立模块保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中。

一种实施例中,Multibit Trie建立模块保存每个Branch_Tree的数据结构信息进一步用于,

针对Branch_Tree维护VRB Table,该VRB Table包含CEPB和CNP,其中,所述CEPB共2m+1/2d bit,每2d个连续的Branch_Tree对应CEPB的一个bit,当2d个连续的Branch_Tree中存在分布路由的Branch_Tree时,则对应的CEPB位有效,d为正整数;所述CNP表示第一个CEPB有效bit对应的2d个Branch_Tree的第一个Branch_Tree的指针;

且,路由查找模块根据该IP地址的高m+1bit查找到对应的Branch_Tree,在该Branch_Tree中查找对应的路由包括:

读取该IP地址的高m+1bit,根据该IP地址的高m+1-d bit在该Multibit-Trie的VRB Table的CEPB中查找到对应的bit;若查找到的bit有效,则根据该IP地址的高m+1bit中的低d bit确定对应的CNP,根据该CNP查找到对应的Branch_Tree的数据结构信息;根据该Branch_Tree的数据结构信息查找该IP地址的路由。

一种实施例中,Multibit Trie建立模块采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上之前进一步用于,

按照路由分布较多的IP前缀段位于Level底部的原则,将每棵Multibit Trie的/0~/8级IP前缀划分到Level 0,将最低7级IP前缀划分到最后一个 Level,将中间的IP前缀以步长8划分为多个Level;

且,Multibit Trie建立模块采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上包括:

采用前缀扩展的方法将Multibit Trie的1~8级IP前缀上的路由扩展到9级IP前缀上。

一种实施例中,Multibit Trie建立模块保存每个Branch_Tree的数据结构信息包括:

对于每个Branch_Tree中除Level 0外的每个Level中的每个Sub_Trie,采用前缀扩展的方式将该Sub_Trie的0、1、2级上的IP前缀的路由扩展到3级IP前缀上;将每个Sub_Trie均匀划分成8个分段Sub_Trie,保存每个分段Sub_Trie的数据结构信息,其中,每个分段Sub_Trie以该子Sub_Trie的高3级IP前缀为索引;

且,路由查找模块在该Branch_Tree中查找对应的路由包括:

当查找到一Level时,根据该IP地址在本Level中对应的8bit或7bit的高3bit,在本Level的Sub_Trie中索引到对应的分段Sub_Trie,然后根据该分段Sub_Trie的数据结构信息进行路由查找。

一种实施例中,Multibit Trie建立模块保存每个Branch_Tree的数据结构信息包括:

对于最后一个Level内的每个Sub_Trie,该Sub_Trie的数据结构信息包括:

1)q个Prefix Key:每个Prefix key代表该Sub_Trie中的其中一个有路由分布的IP前缀的IP地址的最低7bit,其中,q为预设的该Sub_Trie中的有路由分布的IP前缀的最大数量;

2)结果数组指针Result Array ptr;

且,路由查找模块在该Branch_Tree中查找对应的路由时,当查找到最后一个Level时,直接将该IP地址的最低7bit与最后一个Level的各Sub_Trie 的数据结构信息中的Prefix Key匹配,若匹配上,则根据对应的Result Array ptr直接确定路由。

一种实施例中,路由查找模块在该Branch_Tree中查找对应的路由进一步用于,若未查找到,则从所述片外存储空间的预定区域中读取默认路由,将默认路由作为最终查找到的路由。

本申请实施例还提供包含IP路由查找装置的设备,该设备可以是软硬件结合的可编程设备,从硬件层面而言,该设备的硬件架构示意图具体可以参见图12。该设备中包括:机器可读存储介质、CPU和其它硬件,其中:

机器可读存储介质:存储指令代码;所述指令代码被CPU执行时完成的操作主要为上述IP路由查找装置完成的功能。

CPU:与机器可读存储介质通信,读取和执行机器可读存储介质中存储的所述指令代码,完成上述IP路由查找装置完成的功能。

当上述IP路由查找装置作为一个逻辑意义上的装置时,其是通过CPU运行机器可读存储介质中对应的计算机程序指令形成的。当对应的计算机程序指令被执行时,形成的IP路由查找装置用于按照上述实施例中的IP路由查找方法执行相应操作。

机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。

本申请所描述的任一机器可读存储介质都可以被认为是非暂时性的。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本 申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1