CN106330716A - Ip路由查找方法及装置 - Google Patents

Ip路由查找方法及装置 Download PDF

Info

Publication number
CN106330716A
CN106330716A CN201510384763.5A CN201510384763A CN106330716A CN 106330716 A CN106330716 A CN 106330716A CN 201510384763 A CN201510384763 A CN 201510384763A CN 106330716 A CN106330716 A CN 106330716A
Authority
CN
China
Prior art keywords
level
trie
sub
hash
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.)
Granted
Application number
CN201510384763.5A
Other languages
English (en)
Other versions
CN106330716B (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.)
Hangzhou H3C Technologies Co Ltd
Original Assignee
Hangzhou H3C Technologies Co Ltd
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 Hangzhou H3C Technologies Co Ltd filed Critical Hangzhou H3C Technologies Co Ltd
Priority to CN201510384763.5A priority Critical patent/CN106330716B/zh
Priority to PCT/CN2016/087830 priority patent/WO2017000893A1/zh
Priority to US15/574,440 priority patent/US10771386B2/en
Priority to EP16817257.5A priority patent/EP3280104B1/en
Publication of CN106330716A publication Critical patent/CN106330716A/zh
Application granted granted Critical
Publication of CN106330716B publication Critical patent/CN106330716B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/7453Address table lookup; Address filtering using hashing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • H04L12/46Interconnection of networks
    • H04L12/4641Virtual LANs, VLANs, e.g. virtual private networks [VPN]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/741Routing in networks with a plurality of addressing schemes, e.g. with both IPv4 and IPv6
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/748Address table lookup; Address filtering using longest matching prefix

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请提出IP路由查找方法及装置。方法包括:分别针对每个VPN中的IP前缀的路由分布,构建一棵Multibit Trie,将每棵Multibit Trie划分为多个Level;当对一VPN内的一IP地址进行路由查找时,根据VPN标识和该IP地址在每个Level之前的所有位bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由。本申请提高了IP路由查找效率。

Description

IP路由查找方法及装置
技术领域
本申请涉及路由查找技术领域,尤其涉及IP路由查找方法及装置。
背景技术
网络之间进行通信就要实现数据的传递转发,所以网络设备的主要职能之一就是进行高效率的数据转发,而其在因特网协议的基本数据平面的功能是路由查找,即根据路由表中的前缀信息,对每一个到来的数据包决定它的下一跳及出端口。由于路由表中通配符以及CIDR(Classless Inter-DomainRouting,基于无类域间路由)的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划分为多个层Level;
当对一VPN内的一IP地址进行路由查找时,根据VPN标识和该IP地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由。
一种IP路由查找装置,该装置包括:
Multibit Trie建立及划分模块:分别针对每个VPN中的IP前缀的路由分布,构建一棵Multibit Trie,将每棵Multibit Trie划分为多个Level;
路由查找模块:当对一VPN内的一IP地址进行路由查找时,根据VPN标识和该IP地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由。
可见,本申请实施例中,在将Multibit Trie划分为多个Level后,将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上,再将m+1级IP前缀的每一个分支作为一个Branch_Tree,针对每个Level中的每个第一级Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IP前缀的IP地址在本Level之前的所有bit作为输入Key,采用预设的本Level的Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,这样,当对一VPN内的一IP地址进行路由查找时,根据VPN标识和该IP地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由,从而提高了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级IP前缀的路由扩展到/1级IP前缀上的示例图;
图9-2为本申请实施例提供的以图3所示的Unibit Trie为例,将/1级IP前缀的路由扩展到/2级IP前缀上的示例图;
图9-3为本申请实施例提供的以图3所示的Unibit Trie为例,将/2级IP前缀的路由扩展到/3级IP前缀上的示例图;
图10为本申请实施例提供的将Sub_Trie节点划分为8个SegmentedSub_Trie节点的示例图;
图11为本申请一实施例提供的基于Multibit Trie的IPv6路由查找方法流程图;
图12为本申请实施例针对一个VPN(VPN m)中的IPv6前缀的路由分布建立的Multibit Trie的结构示例图;
图13为本申请实施例提供的基于Multibit Trie的IP路由查找装置的组成示意图;
图14为本申请实施例提供的包含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”,则从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”,则从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”表示该TreeBitmap节点的对应分支有下一级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 ArrayPointer指向的RA顺序存储了P1、P2和P3的路由信息,Result Array Pointer指向P1的路由信息。
4)Child Node Pointer(子节点指针)
Child Node Pointer是指Tree Bitmap节点的下一级Tree Bitmap节点信息的头指针。
通过Extending Paths Bitmap可以知道Tree Bitmap节点的下一级TreeBitmap节点的分布,也就是说该Tree Bitmap节点的哪些分支上有下一级TreeBitmap节点。Tree Bitmap节点的所有下一级“有效”Tree Bitmap节点的信息在内存中是按照顺序存储的,这里的“有效”即对应的Extending PathsBitmap位为“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 ArrayPointer和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个分支,则应该在ExtendingPaths Bitmap中查找第5个bit),该bit为“1”,则确定最高3bit“100”对应的分支有下一级Tree Bitmap节点,且该Tree Bitmap节点为Child NodePointer指向的第一个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 TreeBitmap,则使用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,因此TreeBitmap节点的数据结构较大,每个Tree Bitmap节点的数据结构包括:InternalTree Bitmap、Extending Paths Bitmap、Result Array Pointer和Child NodePointer,查找速度较慢。
图6为本申请一实施例提供的基于Multibit Trie的IP路由查找方法流程图,其具体步骤如下:
步骤601:分别针对每个VPN(Virtual Private Network,虚拟专网)中的IP前缀的路由分布,构建一棵Multibit Trie,将每棵Multibit Trie划分为多个Level(层)。
步骤602:当对一VPN内的一IP地址进行路由查找时,根据VPN标识和该IP地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针,查找路由。
一种实施例中,预先设定:针对每个Level中的每个第一级Sub_Trie(子字典树)节点,以当前VPN标识和本Sub_Trie节点的IP前缀的IP地址在本Level之前的所有位bit作为输入密钥Key,并设定:采用预设的本Level的哈希Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上。
一种实施例中,预先为每个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。
一种实施例中,步骤602中,所述分别采用每个Level的Hash函数对针对每个Level的输入key进行计算包括:
分别采用每个Level的多个Hash函数对针对每个Level的输入key进行计算,得到多个Hash计算结果;
对于每个Hash计算结果,在对应Hash函数的Hash表中查找对应的位置;若查找到对应位置,将对应位置上存储的输入Key与构造的输入key进行匹配,若匹配上,则命中;若未匹配上,则继续在对应Level的取出key列表中查找构造的输入key。
一种实施例中,所述每个Hash函数对应一张Hash表为:
所有VPN的Multibit Trie在同一Level中针对同一Hash函数都使用同一张Hash表。
一种实施例中,步骤601中,所述构建一棵Multibit Trie之后进一步用于,
采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上,将m+1级IP前缀的每一个分支作为一个分支树Branch_Tree,保存每个Branch_Tree的数据结构信息,m为大于1的整数。
一种实施例中,当IP前缀为IPv4前缀时,步骤601中,所述将每棵MultibitTrie划分为多个Level包括:
将每棵Multibit Trie的0~31级IPv4前缀按照步长9、8、8、7划分为4个Level:Level 0~3;
当IP前缀为IPv6前缀时,步骤601中,所述将每棵Multibit Trie划分为多个Level包括:
将每棵Multibit Trie的0~127级IPv6前缀按照步长9、24、24、24、24、23划分为6个Level:Level 0~5;
所述采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上包括:
采用前缀扩展的方法将Multibit Trie的1~8级IP前缀上的路由扩展到9级IP前缀上。
一种实施例中,所述保存每个Branch_Tree的数据结构信息包括:
保存每个Branch_Tree中除Level 0外的每个Level中的Sub_Trie节点的数据结构信息,其中:除最后一个Level的最后一级Sub_Trie节点的步长为7外,其余Sub_Trie节点的步长都为8;
所述保存每个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前缀为索引;
所述采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针,查找路由包括:
根据该IP地址在对应Sub_Trie节点中的对应8bit,先根据该8bit的高3bit在本Sub_Trie节点中索引到对应的分段Sub_Trie节点,然后根据该分段Sub_Trie节点的数据结构信息进行路由查找。
一种实施例中,将0级IP前缀的默认路由存储在片外存储空间的预定区域,将1~m级IP前缀的路由存储在片外存储空间的空闲区域中;
所述保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中;
步骤602中,所述分别采用每个Level的Hash函数对针对每个Level的输入key进行计算之后进一步包括:
若所有Hash计算结果都未命中,则从所述片外存储空间的预定区域读取默认路由,将默认路由作为最终查找到的路由。
一种实施例中,所述保存每个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(结果数组指针);
步骤602中,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针,查找路由时,当查找到最后一个Level的最后一级Sub_Trie时,直接将该IP地址的最低7bit与最后一个Level的各最后一级Sub_Trie的数据结构信息中的Prefix Key匹配,若匹配上,则根据对应的Result Array ptr直接确定路由。
图7为本申请一实施例提供的基于Multibit Trie的IPv4路由查找方法流程图,其具体步骤如下:
步骤701:分别针对每个VPN中的所有IPv4前缀的路由分布,构建一棵Multibit Trie。所有VPN的Multibit Trie的结构相同。其中,每棵MultibitTrie共有四个Level:Level 0~3,Level 0由0/~8/级前缀构成,Level 1~2的步长都为8,Level 3的步长为7。
即,有多少个VPN就建立多少棵Multibit Trie。
图8给出了本申请实施例针对一个VPN(VPN m)中的IPv4前缀的路由分布建立的Multibit Trie的结构示例图,如图8所示,Multibit Trie共有32级前缀:/0~/31,其中,Level 0中的前缀为:/0~/8级(对应32bit IP地址的高9bit),Level 1中的前缀为:/9~/16(对应32bit IP地址的次高8bit),Level2中的前缀为:/17~/24(对应32bit IP地址的次低8bit),Level 3中的前缀为:/25~/31(对应32bit IP地址的低7bit)。
本申请实施例中,在对Multibit Trie的/9~/31级前缀进行分层时,采用的步长为8、8、7,这样可以保证包含有较多的有路由分布的前缀段:prefix16、prefix24分布在Level 1和Level 2的底部,这样从整体上来看会使得MultibitTrie中的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 1、Level 2和Level 3分别设置Hash函数。
步骤705:将Level 0的29=512个下一级分支中的每一个分支作为一个Branch_Tree。
则每个Branch_Tree都由步长为8、8、7的分别位于Level 1、Level 2和Level 3的三层Sub_Trie组成。
步骤706:针对每个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和ChildNode 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节点。
步骤707:针对Level 1、Level 2和Level 3中的每个Sub_Trie节点,分别以当前VPN标识+本Sub_Trie节点的IP地址在本Level之前的所有bit作为输入Key,采用本Level的Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,将Hash计算结果与本Sub_Trie节点的数据结构信息指针的映射关系保存到本Level的Hash映射表中。
Sub_Trie节点的数据结构信息指针即,该Sub_Trie节点的数据结构信息的存储首地址。
例如:设当前VPN为VPN m,Level 1的Hash函数为第一Hash函数,Level 2的Hash函数为第二Hash函数,Level 3的Hash函数为第三Hash函数,则:
设Level 1中共有p个Sub_Trie节点,则对于Level 1中的任意一个Sub_Trie节点,以m+该Sub_Trie节点的IP地址的高9bit作为输入Key,采用第一Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level 1的Hash映射表中;最终,Level 1的Hash映射表保存了p条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点对应的IP地址的高9bit,即该Sub_Trie节点的32bit IP地址中的最高9bit。
设Level 2中共有q个Sub_Trie节点,则对于Level 2中的任意一个Sub_Trie节点,以m+该Sub_Trie节点的IP地址的高17bit作为输入Key,采用第二Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level 2的Hash映射表中;最终,Level2的Hash映射表保存了q条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点的IP地址的高17bit,即该Sub_Trie节点的32bitIP地址中的最高17bit。
设Level 3中共有r个Sub_Trie节点,则对于Level 3中的任意一个Sub_Trie节点,以m+该Sub_Trie节点的IP地址的高25bit作为输入Key,采用第三Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level 3的Hash映射表中;最终,Level3的Hash映射表保存了r条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系。
其中,该Sub_Trie节点的IP地址的高25bit,即该Sub_Trie节点的32bitIP地址中的最高25bit。
步骤708:当对一VPN内的一IPv4地址进行LPM路由查找时,先根据VPN标识和该IPv4地址的高9bit、高17bit、高25bit构造三个输入Key,分别为:key1:VPN标识+该IPv4地址的高9bit,key2:VPN标识+该IPv4地址的高17bit,key3:VPN标识+该IPv4地址的高25bit;采用Level l的Hash函数对key1进行计算,得到Hash计算结果1,同时采用Level 2的Hash函数对key2进行计算,得到Hash计算结果2,同时采用Level 3的Hash函数对key3进行计算,得到Hash计算结果3。
步骤709:同时在Level 1的Hash映射表中查找Hash计算结果1,在Level 2的Hash映射表中查找Hash计算结果2,在Level 3的Hash映射表中查找Hash计算结果3,采用最长的Hash命中结果作为最终的命中结果,根据最终命中结果对应的Sub_Trie节点的数据结构信息指针,查找到该Sub_Trie节点的数据结构信息,根据该Sub_Trie节点的数据结构信息以及该IPv4地址在本Level中的bit,查找LPM路由。
例如:若在Level 3的Hash映射表中查找到了Hash计算结果3,则将Hash计算结果3作为最终的命中结果,根据Hash计算结果3对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv4地址的低8bit在Level 3中查找到LPM路由;
若在Level 3的Hash映射表中未查找到Hash计算结果3,但在Level 2的Hash映射表中查找到了Hash计算结果2,则将Hash计算结果2作为最终的命中结果,根据Hash计算结果2对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv4地址的次低8bit在Level 2中查找到LPM路由;
若在Level 3的Hash映射表中未查找到Hash计算结果3,同时在Level 2的Hash映射表中也未查找到Hash计算结果2,但在Level 1的Hash映射表中查找到了Hash计算结果1,则将Hash计算结果1作为最终的命中结果,根据Hash计算结果1对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv4地址的次高8bit在Level 2中查找到LPM路由;
若在Level 3的Hash映射表中未查找到Hash计算结果3,同时在Level 2的Hash映射表中也未查找到Hash计算结果2、在Level 1的Hash映射表中也未查找到Hash计算结果1,则将存储在DRAM的固定位置的0/级IP前缀的默认路由作为LPM路由
在实际应用中,对于每个VPN对应的Multibit Trie,除Level 0之外的其它Level中的Sub_Trie节点的数据结构信息都存储在外部DRAM中,Sub_Trie节点的数据结构的大小直接影响DRAM的访问性能。本申请实施例中,Level 1~3中的Sub_Trie节点的步长分别为8、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。
步骤709中,当根据该Sub_Trie节点的数据结构信息以及该IPv4地址在本Level中的bit,查找LPM路由时,根据该IPv4地址在本Level中对应的8bit或7bit的高3bit在该Sub_Trie节点中索引到对应的SegmentedSub_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。
步骤709中,当根据该Sub_Trie节点的数据结构信息以及该IPv4地址在本Level中的bit,查找LPM路由时,若本Level为Level 3,则直接将该IPv4地址在本Level(Level 3)中对应的7bit(即最低7bit)与Level 3的各Compressed Sub_Trie节点的数据结构中的Prefix Key匹配即可,若匹配上,则根据对应的Result Array ptr直接确定LPM路由。可见,LPM路由查找速度进一步提高了。
为了尽量避免Hash冲突,本申请实施例可以采用cuckoo Hash算法,且预先为每个Level设置三个Hash函数,例如:为Level 1设置Hash函数11、Hash函数12、Hash函数13,为Level 2设置Hash函数21、Hash函数22、Hash函数23,为Level 3设置Hash函数31、Hash函数32、Hash函数33,每个Hash函数对应一张Hash表,每张Hash表中包含预设数目个位置,每个位置唯一代表一个Hash计算结果,每个位置上存储了该位置代表的Hash计算结果对应的输入Key以及该输入Key对应的Sub_Trie节点的数据结构信息指针。
步骤707中,针对Level 1、Level 2和Level 3中的每个Sub_Trie节点,分别以当前VPN标识+本Sub_Trie节点的IP地址在本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。
且,步骤708中,当对一VPN内的一IPv4地址进行LPM路由查找时,先根据VPN标识和该IPv4地址的高9bit、高17bit、高25bit构造三个输入Key,分别为:key1:VPN标识+该IPv4地址的高9bit,key2:VPN标识+该IPv4地址的高17bit,key3:VPN标识+该IPv4地址的高25bit;同时采用Level l的三个Hash函数对key1进行计算,得到3个Hash计算结果,同时采用Level 2的三个Hash函数对key2进行计算,得到3个Hash计算结果,同时采用Level 3的三个Hash函数对key3进行计算,得到3个Hash计算结果。
步骤709中,分别在Level 1的3个Hash表中查找对应的Hash计算结果,若查找到对应位置,将对应位置上的输入Key与key1进行匹配,若匹配上,则命中,若未匹配上,则继续在Level 1的踢出key列表中查找key1,若查找到,则命中;
同时,分别在Level 2的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key2进行匹配,若匹配上,则命中,若未匹配上,则继续在Level 2的踢出key列表中查找key2,若查找到,则命中;
同时,分别在Level 3的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key3进行匹配,若匹配上,则命中,若未匹配上,则继续在Level 3的踢出key列表中查找key3,若查找到,则命中;
采用最长的Hash命中结果作为最终的命中结果,根据最终命中结果对应的Sub_Trie节点的数据结构信息指针,查找到该Sub_Trie节点的数据结构信息,根据该Sub_Trie节点的数据结构信息以及该IPv4地址在本Level中的bit,查找LPM路由。
例如:采用Level 1的三个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进行匹配,若有任一个位置匹配上,则命中,若没有任何位置匹配上,则继续在Level 1的取出key列表中查找key1,若查找到,则命中;否则,认为Level 1未命中。
另外,为了节省Hash表占用的存储空间,可设置所有VPN的Multibit Trie在同一Level中针对同一Hash函数都使用同一张Hash表。
图11为本申请一实施例提供的基于Multibit Trie的IPv6路由查找方法流程图,其具体步骤如下:
步骤1101:分别针对每个VPN中的所有Ipv6前缀的路由分布,构建一棵Multibit Trie。所有VPN的Multibit Trie的结构相同。其中,每棵MultibitTrie共有6个Level:Level 0~5,Level 0由0/~8/级前缀构成,Level 1~4的步长都为24,Level 5的步长为23。
即,有多少个VPN就建立多少棵Multibit Trie。
图12给出了本申请实施例针对一个VPN(VPN m)中的IPv6前缀的路由分布建立的Multibit Trie的结构示例图,如图12所示,Multibit Trie共有128级前缀:/0~/127,其中,Level 0中的前缀为:/0~/8级(对应128bit IP地址的高9bit),Level 1中的前缀为:/9~/32(对应128bit IP地址的次高24bit),Level 2中的前缀为:/33~/56(对应128bit IP地址的次次高24bit),Level 3中的前缀为:/57~/80(对应128bit IP地址的次次低24bit),Level 4中的前缀为:/81~/104(对应128bit IP地址的次低24bit),Level 5中的前缀为:/105~/127(对应128bit IP地址的低23bit)。
本申请实施例中,在对Multibit Trie的/9~/127级前缀进行分层时,采用的步长为24、24、24、24、23,这样可以保证包含有较多的有路由分布的前缀段:prefix32、prefix56、prefix80、prefix104分布在Level 1、Level 2、Level3、Level 4的底部,这样从整体上来看会使得Multibit Trie中的sub_Trie节点的数量最少。
步骤1102:针对每个VPN的Multibit Trie,采用前缀扩展的方法将该Multibit Trie的/1~/8级前缀上的路由扩展到/9级前缀上。
步骤1103:将0/级前缀的默认路由存储在DRAM的固定位置。
每个VPN通常有默认路由0.0.0.0/0,考虑到:如果将默认路由也采用前缀扩展的方式扩展到Multibit Trie的/9级前缀上,则每棵Multibit Trie固定会有512个有效的Branch_Tree,这样对于多VPN路由表会形成大量的冗余Branch_Tree。
步骤1104:预先为Level 1、Level 2、Level 3、Level 4、Level 5分别设置Hash函数。
步骤1105:将Level 0的29=512个下一级分支中的每一个分支作为一个Branch_Tree。
则每个Branch_Tree都由分别位于Level 1、Level 2、Level 3、Level 4、Level 5的五层Sub_Trie组成,其中,Level 1~4都由步长为8的三级Sub_Trie节点组成,Level 5由步长为8、8、7的三级Sub_Trie节点组成。
步骤1106:针对每个Branch_Tree,在DRAM中保存该Branch_Tree的数据结构信息,其中,该Branch_Tree的数据结构信息由该Branch_Tree在Level 1、Level 2、Level 3、Level 4、Level 5中的所有Sub_Trie节点的数据结构信息组成。
其中,Level 1、Level 2、Level 3、Level 4中的每个Sub_Trie节点以及Level 5中的前两级Sub_Trie节点的数据结构信息都分别由Internal TreeBitmap、Extending Paths Bitmap、Result Array Pointer和Child Node Pointer组成,Level 5中的最后一级Sub_Trie节点由于都没有下一级分支,则都分别由Internal Tree Bitmap和Result Array Pointer组成。
根据Multibit Trie固有结构特点可知:
Level 0中始终只包含1个Sub_Trie节点(设为Sub_Trie节点1);
设Sub_Trie节点1有p1个分支有下一级Sub_Trie节点,则Level 1就包含p1个第一级Sub_Trie节点;
设Level 1的p1个第一级Sub_Trie节点有p2个分支有下一级Sub_Trie节点,则Level 1就包含p2个第二级Sub_Trie节点;
设Level 1的p2个第二级Sub_Trie节点有p3个分支有下一级Sub_Trie节点,则Level 1就包含p3个第三级Sub_Trie节点;
设Level 1的p3个第三级Sub_Trie节点共有q1个分支有下一级Sub_Trie节点,则Level 2就包含q1个第一级Sub_Trie节点;
设Level 2的q1个第一级Sub_Trie节点有q2个分支有下一级Sub_Trie节点,则Level 2就包含q2个第二级Sub_Trie节点;
设Level 2的q2个第二级Sub_Trie节点有q3个分支有下一级Sub_Trie节点,则Level 2就包含q3个第三级Sub_Trie节点;
设Level 2的q3个第三级Sub_Trie节点共有r1个分支有下一级Sub_Trie节点,则Level 3就包含r1个第一级Sub_Trie节点;
设Level 3的r1个第一级Sub_Trie节点有r2个分支有下一级Sub_Trie节点,则Level 3就包含r2个第二级Sub_Trie节点;
设Level 3的r2个第二级Sub_Trie节点有r3个分支有下一级Sub_Trie节点,则Level 3就包含r3个第三级Sub_Trie节点;
设Level 3的r3个第三级Sub_Trie节点共有s1个分支有下一级Sub_Trie节点,则Level 4就包含s1个第一级Sub_Trie节点;
设Level 4的s1个第一级Sub_Trie节点有s2个分支有下一级Sub_Trie节点,则Level 4就包含s2个第二级Sub_Trie节点;
设Level 4的s2个第二级Sub_Trie节点有s3个分支有下一级Sub_Trie节点,则Level 4就包含s3个第三级Sub_Trie节点;
设Level 4的s3个第三级Sub_Trie节点共有t1个分支有下一级Sub_Trie节点,则Level 5就包含t1个第一级Sub_Trie节点;
设Level 5的t1个第一级Sub_Trie节点有t2个分支有下一级Sub_Trie节点,则Level 5就包含t2个第二级Sub_Trie节点;
设Level 5的t2个第二级Sub_Trie节点有t3个分支有下一级Sub_Trie节点,则Level 5就包含t3个第三级Sub_Trie节点。
步骤1107:针对Level 1、Level 2、Level 3、Level 4、Level 5中的每个第一级Sub_Trie节点,分别以当前VPN标识+本Sub_Trie节点的IP地址在本Level之前的所有bit作为输入Key,采用本Level的Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上,将Hash计算结果与本Sub_Trie节点的数据结构信息指针的映射关系保存到本Level的Hash映射表中。
Sub_Trie节点的数据结构信息指针即,该Sub_Trie节点的数据结构信息的存储首地址。
例如:设当前VPN为VPN m,Level 1的Hash函数为第一Hash函数,Level 2的Hash函数为第二Hash函数,Level 3的Hash函数为第三Hash函数,Level 4的Hash函数为第四Hash函数,Level 5的Hash函数为第五Hash函数则:
设Level 1中共有p1个第一级Sub_Trie节点,则对于Level 1中的任意一个第一级Sub_Trie节点,以m+该Sub_Trie节点的IP地址的高9bit作为输入Key,采用第一Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level 1的Hash映射表中;最终,Level 1的Hash映射表保存了p1条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点对应的IP地址的高9bit,即该Sub_Trie节点的128bit IP地址中的最高9bit。
设Level 2中共有q1个第一级Sub_Trie节点,则对于Level 2中的任意一个第一级Sub_Trie节点,以m+该Sub_Trie节点的IP地址的高33bit作为输入Key,采用第二Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level 2的Hash映射表中;最终,Level 2的Hash映射表保存了q1条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点的IP地址的高33bit,即该Sub_Trie节点的128bitIP地址中的最高33bit。
设Level 3中共有r1个第一级Sub_Trie节点,则对于Level 3中的任意一个第一级Sub_Trie节点,以m+该Sub_Trie节点的IP地址的高57bit作为输入Key,采用第三Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level 3的Hash映射表中;最终,Level 3的Hash映射表保存了r1条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点的IP地址的高57bit,即该Sub_Trie节点的128bitIP地址中的最高57bit。
设Level 4中共有s1个第一级Sub_Trie节点,则对于Level 4中的任意一个第一级Sub_Trie节点,以m+该Sub_Trie节点的IP地址的高81bit作为输入Key,采用第四Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level 4的Hash映射表中;最终,Level 4的Hash映射表保存了s1条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点的IP地址的高81bit,即该Sub_Trie节点的128bitIP地址中的最高81bit。
设Level 5中共有t1个第一级Sub_Trie节点,则对于Level 5中的任意一个第一级Sub_Trie节点,以m+该Sub_Trie节点的IP地址的高105bit作为输入Key,采用第五Hash函数对该输入Key进行计算,将Hash计算结果映射到该Sub_Trie节点的数据结构信息指针上,将Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系保存到Level 5的Hash映射表中;最终,Level 5的Hash映射表保存了t1条Hash计算结果与Sub_Trie节点的数据结构信息指针的映射关系;
其中,该Sub_Trie节点的IP地址的高105bit,即该Sub_Trie节点的128bitIP地址中的最高105bit。
步骤1108:当对一VPN内的一IPv6地址进行LPM路由查找时,先根据VPN标识和该IPv6地址的高9bit、高33bit、高57bit、高81bit、高105bit构造五个输入Key,分别为:key1:VPN标识+该IPv6地址的高9bit,key2:VPN标识+该IPv6地址的高33bit,key3:VPN标识+该IPv6地址的高57bit,key4:VPN标识+该IPv6地址的高81bit,key5:VPN标识+该IPv6地址的高105bit;采用Level l的Hash函数对key1进行计算,得到Hash计算结果1,同时采用Level 2的Hash函数对key2进行计算,得到Hash计算结果2,同时采用Level 3的Hash函数对key3进行计算,得到Hash计算结果3,同时采用Level 4的Hash函数对key4进行计算,得到Hash计算结果4,同时采用Level 5的Hash函数对key5进行计算,得到Hash计算结果5。
步骤1109:同时在Level 1的Hash映射表中查找Hash计算结果1,在Level 2的Hash映射表中查找Hash计算结果2,在Level 3的Hash映射表中查找Hash计算结果3,在Level 4的Hash映射表中查找Hash计算结果4,在Level 5的Hash映射表中查找Hash计算结果5,采用最长的Hash命中结果作为最终的命中结果,根据最终命中结果对应的Sub_Trie节点的数据结构信息指针,查找到该Sub_Trie节点的数据结构信息,根据该Sub_Trie节点的数据结构信息以及该IPv6地址在本Level中的bit,查找LPM路由。
例如:若在Level 5的Hash映射表中查找到了Hash计算结果5,则将Hash计算结果5作为最终的命中结果,根据Hash计算结果5对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv6地址的低23bit在Level 5中查找到LPM路由;
若在Level 5的Hash映射表中未查找到Hash计算结果5,但在Level 4的Hash映射表中查找到了Hash计算结果4,则将Hash计算结果4作为最终的命中结果,根据Hash计算结果4对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv6地址的次低24bit在Level 4中查找到LPM路由;
若在Level 5的Hash映射表中未查找到Hash计算结果5,同时在Level 4的Hash映射表中也未查找到Hash计算结果4,但在Level 3的Hash映射表中查找到了Hash计算结果3,则将Hash计算结果3作为最终的命中结果,根据Hash计算结果3对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv6地址的次次低24bit在Level3中查找到LPM路由;
若在Level 5的Hash映射表中未查找到Hash计算结果5,同时在Level 4的Hash映射表中也未查找到Hash计算结果4,在Level 3的Hash映射表中也未查找到Hash计算结果3,但在Level 2的Hash映射表中查找到了Hash计算结果2,则将Hash计算结果2作为最终的命中结果,根据Hash计算结果2对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv6地址的次次高24bit在Level 2中查找到LPM路由;
若在Level 5的Hash映射表中未查找到Hash计算结果5,同时在Level 4的Hash映射表中也未查找到Hash计算结果4,在Level 3的Hash映射表中也未查找到Hash计算结果3,在Level 2的Hash映射表中也未查找到Hash计算结果2,但在Level 1的Hash映射表中查找到了Hash计算结果1,则将Hash计算结果1作为最终的命中结果,根据Hash计算结果1对应的Sub_Trie节点的数据结构信息指针查找到该Sub_Trie节点的数据结构信息,然后根据该IPv6地址的次高24bit在Level 1中查找到LPM路由;
若在Level 5的Hash映射表中未查找到Hash计算结果5,同时在Level 4的Hash映射表中也未查找到Hash计算结果4,在Level 3的Hash映射表中也未查找到Hash计算结果3,在Level 2的Hash映射表中也未查找到Hash计算结果2,在Level 1的Hash映射表中也未查找到Hash计算结果1,则将存储在DRAM的固定位置的0/级IP前缀的默认路由作为LPM路由
在实际应用中,针对IPv6前缀,对于每个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级前缀上。
步骤02:将每个Sub_Trie节点均匀划分成8个Segmented Sub_Trie节点,将每个Segmented Sub_Trie节点的数据结构信息保存在DRAM中,其中,每个Segmented Sub_Trie节点的数据结构信息以该Segmented Sub_Trie节点的高3bit IP地址为索引,如图10所示。
步骤1109中,当根据该Sub_Trie节点的数据结构信息以及该IPv6地址在本Level中的bit,查找LPM路由时,根据该IPv6地址在本Level中对应的24bit,依次根据高8bit、中间bit、低8bit或7bit进行LPM路由查找,其中,针对每8bit或7bit,先根据该8bit或7bit的高3bit在对应Sub_Trie节点中索引到对应的Segmented Sub_Trie节点,然后根据该Segmented Sub_Trie节点的数据结构信息进行后续LPM路由查找过程。可见,大大提高了LPM路由查找速度。
本实施例中,对最后一个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。
步骤1109中,当根据该Sub_Trie节点的数据结构信息以及该IPv6地址在本Level中的bit,查找LPM路由时,若本Level为Level 5,且查找到该IPv6地址的低7bit时,则直接将该IPv6地址的低7bit与Level 5的各Compressed Sub_Trie节点的数据结构中的Prefix Key匹配即可,若匹配上,则根据对应的Result Array ptr直接确定LPM路由。可见,LPM路由查找速度进一步提高了。
同样地,为了尽量避免Hash冲突,本实施例中可以采用cuckoo Hash算法,且预先为每个Level设置三个Hash函数,例如:为Level 1设置Hash函数11、Hash函数12、Hash函数13,为Level 2设置Hash函数21、Hash函数22、Hash函数23,为Level 3设置Hash函数31、Hash函数32、Hash函数33,为Level 4设置Hash函数41、Hash函数42、Hash函数43,为Level5设置Hash函数51、Hash函数52、Hash函数53;每个Hash函数对应一张Hash表,每张Hash表中包含预设数目个位置,每个位置唯一代表一个Hash计算结果,每个位置上存储了该位置代表的Hash计算结果对应的输入Key及该输入Key对应的Sub_Trie节点的数据结构信息指针。
步骤1107中,针对Level 1、Level 2、Level 3、Level 4、Level 5中的每个Sub_Trie节点,分别以当前VPN标识+本Sub_Trie节点的IP地址在本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。
且,步骤1108中,当对一VPN内的一IPv6地址进行LPM路由查找时,先根据VPN标识和该IPv4地址的高9bit、高33bit、高57bit、高81bit、高105bit构造五个输入Key,分别为:key1:VPN标识+该IPv4地址的高9bit,key2:VPN标识+该IPv4地址的高33bit,key3:VPN标识+该IPv4地址的高57bit,key4:VPN标识+该IPv4地址的高81bit,key5:VPN标识+该IPv4地址的高105bit;同时采用Level l的三个Hash函数对key1进行计算,得到3个Hash计算结果,同时采用Level 2的三个Hash函数对key2进行计算,得到3个Hash计算结果,同时采用Level 3的三个Hash函数对key3进行计算,得到3个Hash计算结果,同时采用Level 4的三个Hash函数对key4进行计算,得到3个Hash计算结果,同时采用Level 5的三个Hash函数对key5进行计算,得到3个Hash计算结果。
步骤1109中,分别在Level 1的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key1进行匹配,若匹配上,则命中,若未匹配上,则继续在Level 1的取出key列表中查找key1,若查找到,则命中;
同时,分别在Level 2的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key2进行匹配,若匹配上,则命中,若未匹配上,则继续在Level 2的取出key列表中查找key2,若查找到,则命中;
同时,分别在Level 3的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key3进行匹配,若匹配上,则命中,若未匹配上,则继续在Level 3的取出key列表中查找key3,若查找到,则命中;
同时,分别在Level 4的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key4进行匹配,若匹配上,则命中,若未匹配上,则继续在Level 4的取出key列表中查找key4,若查找到,则命中;
同时,分别在Level 5的3个Hash表中查找对应的Hash计算结果,若查找到,将对应位置上的输入Key与key5进行匹配,若匹配上,则命中,若未匹配上,则继续在Level 5的取出key列表中查找key5,若查找到,则命中;
采用最长的Hash命中结果作为最终的命中结果,根据最终命中结果对应的Sub_Trie节点的数据结构信息指针,查找到该Sub_Trie节点的数据结构信息,根据该Sub_Trie节点的数据结构信息以及该IPv6地址在本Level中的bit,查找LPM路由。
例如:采用Level 1的三个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进行匹配,若有任一个位置匹配上,则命中,若没有任何位置匹配上,则继续在Level 1的取出key列表中查找key1,若查找到,则命中;否则,认为Level 1中未命中任何Hash计算结果。
另外,为了节省Hash表占用的存储空间,本实施例中,同样地,可设置所有VPN的Multibit Trie在同一Level中针对同一Hash函数都使用同一张Hash表。
本申请实施例的有益技术效果如下:
一)支持多VPN实例的IPv4和IPv6路由;
二)通过将Multibit-Trie划分为512个Branch_Tree,提高了路由查找速度;
三)将默认路由单独存储,而不扩展到Level 1,减少了Multibit-Trie的冗余节点,进一步提高了路由查找速度;
四)通过对每个Level中的第一级Sub_Trie节点的指针进行Hash映射,使得在进行IP地址的LPM路由查找时,可在各Level中进行并行查找,并根据最长的Hash命中结果查找到LPM路由,大大提高了路由查找速度;
五)通过采用cuckoo Hash算法,并为每个Level设置三个Hash函数,减少了Hash冲突,提高了路由查找精度;
六)对Sub_Trie节点内部进行前缀扩展后划分为8个Segmented Sub_Trie节点,进一步提高了路由查找速度;
七)简化最后一级Level的Sub_Trie节点的数据结构,进一步提高了路由查找速度。
图13为本申请实施例提供的基于Multibit Trie的IP路由查找装置的组成示意图,该装置主要包括:
Multibit Trie建立及划分模块:分别针对每个VPN中的IP前缀的路由分布,构建一棵Multibit Trie,将每棵Multibit Trie划分为多个Level;
路由查找模块:当对一VPN内的一IP地址进行路由查找时,根据VPN标识和该IP地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由。
一种实施例中,所述装置进一步包括:Hash映射模块,用于预先设定:针对每个Level中的每个第一级子字典树Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IP前缀的IP地址在本Level之前的所有位bit作为输入密钥Key,并设定:采用预设的本Level的哈希Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上。
一种实施例中,所述Hash映射模块进一步用于,预先为每个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映射模块进一步用于,
设置所有VPN的Multibit Trie在同一Level中针对同一Hash函数都使用同一张Hash表。
一种实施例中,所述Multibit Trie建立及划分模块构建一棵Multibit Trie之后进一步用于,
采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上,将m+1级IP前缀的每一个分支作为一个分支树Branch_Tree,保存每个Branch_Tree的数据结构信息,m为大于1的整数。
一种实施例中,当IP前缀为IPv4前缀时,所述Multibit Trie建立及划分模块将每棵Multibit Trie划分为多个Level包括:
将每棵Multibit Trie的0~31级IPv4前缀按照步长9、8、8、7划分为4个Level:Level 0~3;
当IP前缀为IPv6前缀时,所述Multibit Trie建立及划分模块将每棵Multibit Trie划分为多个Level包括:
将每棵Multibit Trie的0~127级IPv6前缀按照步长9、24、24、24、24、23划分为6个Level:Level 0~5;
所述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节点的数据结构信息,其中:除最后一个Level的最后一级Sub_Trie节点的步长为7外,其余Sub_Trie节点的步长都为8;
所述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前缀为索引;
所述路由查找模块采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针,查找路由包括:
根据该IP地址在对应Sub_Trie节点中的对应8bit,先根据该8bit的高3bit在本Sub_Trie节点中索引到对应的分段Sub_Trie节点,然后根据该分段Sub_Trie节点的数据结构信息进行路由查找。
一种实施例中,所述Multibit Trie建立及划分模块进一步用于,
将0级IP前缀的默认路由存储在片外存储空间的预定区域,将1~m级IP前缀的路由存储在片外存储空间的空闲区域中;
所述Multibit Trie建立及划分模块保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中;
所述路由查找模块分别采用每个Level的Hash函数对针对每个Level的输入key进行计算之后进一步包括:
若所有Hash计算结果都未命中,则从所述片外存储空间的预定区域读取默认路由,将默认路由作为最终查找到的路由。
本申请实施例还提供包含IP路由查找装置的设备,该设备可以是软硬件结合的可编程设备,从硬件层面而言,该设备的硬件架构示意图具体可以参见图14。该设备中包括:机器可读存储介质、CPU和其它硬件,其中:
机器可读存储介质:存储指令代码;所述指令代码被CPU执行时完成的操作主要为上述IP路由查找装置完成的功能。
CPU:与机器可读存储介质通信,读取和执行机器可读存储介质中存储的所述指令代码,完成上述IP路由查找装置完成的功能。
当上述IP路由查找装置作为一个逻辑意义上的装置时,其是通过CPU运行机器可读存储介质中对应的计算机程序指令形成的。当对应的计算机程序指令被执行时,形成的IP路由查找装置用于按照上述实施例中的IP路由查找方法执行相应操作。
机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
本申请所描述的任一机器可读存储介质都可以被认为是非暂时性的。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

Claims (18)

1.一种IP路由查找方法,其特征在于,该方法包括:
分别针对每个虚拟专网VPN中的IP前缀的路由分布,构建一棵多位字典树Multibit Trie,将每棵Multibit Trie划分为多个层Level;
当对一VPN内的一IP地址进行路由查找时,根据VPN标识和该IP地址在每个Level之前的所有位bit分别构造针对每个Level的输入密钥Key,分别采用每个Level的哈希Hash函数对针对每个Level的输入Key进行计算,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由。
2.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
预先设定:针对每个Level中的每个第一级子字典树Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IP前缀的IP地址在本Level之前的所有位bit作为输入密钥Key,并设定:采用预设的本Level的哈希Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上。
3.根据权利要求1或2所述的方法,其特征在于,预先为每个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。
4.根据权利要求3所述的方法,其特征在于,所述分别采用每个Level的Hash函数对针对每个Level的输入key进行计算包括:
分别采用每个Level的多个Hash函数对针对每个Level的输入key进行计算,得到多个Hash计算结果;
对于每个Hash计算结果,在对应Hash函数的Hash表中查找对应的位置;若查找到对应位置,将对应位置上存储的输入Key与构造的输入key进行匹配,若匹配上,则命中;若未匹配上,则继续在对应Level的取出key列表中查找构造的输入key。
5.根据权利要求3所述的方法,其特征在于,所述每个Hash函数对应一张Hash表为:
所有VPN的Multibit Trie在同一Level中针对同一Hash函数都使用同一张Hash表。
6.根据权利要求1或2所述的方法,其特征在于,所述构建一棵MultibitTrie之后进一步用于,
采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上,将m+1级IP前缀的每一个分支作为一个分支树Branch_Tree,保存每个Branch_Tree的数据结构信息,m为大于1的整数。
7.根据权利要求6所述的方法,其特征在于,当IP前缀为IPv4前缀时,所述将每棵Multibit Trie划分为多个Level包括:
将每棵Multibit Trie的0~31级IPv4前缀按照步长9、8、8、7划分为4个Level:Level 0~3;
当IP前缀为IPv6前缀时,所述将每棵Multibit Trie划分为多个Level包括:
将每棵Multibit Trie的0~127级IPv6前缀按照步长9、24、24、24、24、23划分为6个Level:Level 0~5;
所述采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上包括:
采用前缀扩展的方法将Multibit Trie的1~8级IP前缀上的路由扩展到9级IP前缀上。
8.根据权利要求7所述的方法,其特征在于,保存每个Branch_Tree的数据结构信息包括:
保存每个Branch_Tree中除Level 0外的每个Level中的Sub_Trie节点的数据结构信息,其中:除最后一个Level的最后一级Sub_Trie节点的步长为7外,其余Sub_Trie节点的步长都为8;
所述保存每个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前缀为索引;
所述采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针,查找路由包括:
根据该IP地址在对应Sub_Trie节点中的对应8bit,先根据该8bit的高3bit在本Sub_Trie节点中索引到对应的分段Sub_Trie节点,然后根据该分段Sub_Trie节点的数据结构信息进行路由查找。
9.根据权利要求6所述的方法,其特征在于,所述方法进一步包括:
将0级IP前缀的默认路由存储在片外存储空间的预定区域,将1~m级IP前缀的路由存储在片外存储空间的空闲区域中;
所述保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中;
所述分别采用每个Level的Hash函数对针对每个Level的输入key进行计算之后进一步包括:
若所有Hash计算结果都未命中,则从所述片外存储空间的预定区域读取默认路由,将默认路由作为最终查找到的路由。
10.一种IP路由查找装置,其特征在于,该装置包括:
多位字典树Multibit Trie建立及划分模块:分别针对每个虚拟专网VPN中的IP前缀的路由分布,构建一棵Multibit Trie,将每棵Multibit Trie划分为多个层Level;
路由查找模块:当对一VPN内的一IP地址进行路由查找时,根据VPN标识和该IP地址在每个Level之前的所有bit分别构造针对每个Level的输入Key,分别采用每个Level的Hash函数对针对每个Level的输入Key进行计算,采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针查找路由。
11.根据权利要求10所述的装置,其特征在于,所述装置进一步包括:Hash映射模块,用于预先设定:针对每个Level中的每个第一级子字典树Sub_Trie节点,以当前VPN标识和本Sub_Trie节点的IP前缀的IP地址在本Level之前的所有位bit作为输入密钥Key,并设定:采用预设的本Level的哈希Hash函数对输入Key进行计算,将Hash计算结果映射到本Sub_Trie节点的数据结构信息指针上。
12.根据权利要求11所述的装置,其特征在于,所述Hash映射模块进一步用于,预先为每个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。
13.根据权利要求12所述的装置,其特征在于,所述路由查找模块分别采用每个Level的Hash函数对针对每个Level的输入key进行计算包括:
分别采用每个Level的多个Hash函数对针对每个Level的输入key进行计算,得到多个Hash计算结果;
对于每个Hash计算结果,在对应Hash函数的Hash表中查找对应的位置;若查找到对应位置,将对应位置上存储的输入Key与构造的输入key进行匹配,若匹配上,则命中;若未匹配上,则继续在对应Level的取出key列表中查找构造的输入key。
14.根据权利要求12所述的装置,其特征在于,所述Hash映射模块进一步用于,
设置所有VPN的Multibit Trie在同一Level中针对同一Hash函数都使用同一张Hash表。
15.根据权利要求10或11所述的装置,其特征在于,所述Multibit Trie建立及划分模块构建一棵Multibit Trie之后进一步用于,
采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上,将m+1级IP前缀的每一个分支作为一个分支树Branch_Tree,保存每个Branch_Tree的数据结构信息,m为大于1的整数。
16.根据权利要求15所述的装置,其特征在于,当IP前缀为IPv4前缀时,所述Multibit Trie建立及划分模块将每棵Multibit Trie划分为多个Level包括:
将每棵Multibit Trie的0~31级IPv4前缀按照步长9、8、8、7划分为4个Level:Level 0~3;
当IP前缀为IPv6前缀时,所述Multibit Trie建立及划分模块将每棵Multibit Trie划分为多个Level包括:
将每棵Multibit Trie的0~127级IPv6前缀按照步长9、24、24、24、24、23划分为6个Level:Level 0~5;
所述Multibit Trie建立及划分模块采用前缀扩展的方法将Multibit Trie的高1~m级IP前缀上的路由扩展到m+1级IP前缀上包括:
采用前缀扩展的方法将Multibit Trie的1~8级IP前缀上的路由扩展到9级IP前缀上。
17.根据权利要求16所述的装置,其特征在于,所述Multibit Trie建立及划分模块保存每个Branch_Tree的数据结构信息包括:
保存每个Branch_Tree中除Level 0外的每个Level中的Sub_Trie节点的数据结构信息,其中:除最后一个Level的最后一级Sub_Trie节点的步长为7外,其余Sub_Trie节点的步长都为8;
所述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前缀为索引;
所述路由查找模块采用最长的Hash命中结果对应的Sub_Trie节点的数据结构信息指针,查找路由包括:
根据该IP地址在对应Sub_Trie节点中的对应8bit,先根据该8bit的高3bit在本Sub_Trie节点中索引到对应的分段Sub_Trie节点,然后根据该分段Sub_Trie节点的数据结构信息进行路由查找。
18.根据权利要求15所述的装置,其特征在于,所述Multibit Trie建立及划分模块进一步用于,
将0级IP前缀的默认路由存储在片外存储空间的预定区域,将1~m级IP前缀的路由存储在片外存储空间的空闲区域中;
所述Multibit Trie建立及划分模块保存每个Branch_Tree的数据结构信息为:将每个Branch_Tree的数据结构信息保存在片外存储空间的空闲区域中;
所述路由查找模块分别采用每个Level的Hash函数对针对每个Level的输入key进行计算之后进一步包括:
若所有Hash计算结果都未命中,则从所述片外存储空间的预定区域读取默认路由,将默认路由作为最终查找到的路由。
CN201510384763.5A 2015-06-30 2015-06-30 Ip路由查找方法及装置 Active CN106330716B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201510384763.5A CN106330716B (zh) 2015-06-30 2015-06-30 Ip路由查找方法及装置
PCT/CN2016/087830 WO2017000893A1 (zh) 2015-06-30 2016-06-30 Ip路由查找
US15/574,440 US10771386B2 (en) 2015-06-30 2016-06-30 IP routing search
EP16817257.5A EP3280104B1 (en) 2015-06-30 2016-06-30 Ip routing lookup

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510384763.5A CN106330716B (zh) 2015-06-30 2015-06-30 Ip路由查找方法及装置

Publications (2)

Publication Number Publication Date
CN106330716A true CN106330716A (zh) 2017-01-11
CN106330716B CN106330716B (zh) 2019-12-13

Family

ID=57607695

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510384763.5A Active CN106330716B (zh) 2015-06-30 2015-06-30 Ip路由查找方法及装置

Country Status (4)

Country Link
US (1) US10771386B2 (zh)
EP (1) EP3280104B1 (zh)
CN (1) CN106330716B (zh)
WO (1) WO2017000893A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112769704A (zh) * 2021-02-09 2021-05-07 芯河半导体科技(无锡)有限公司 一种基于hash表的高速可扩展IP路由查找硬件装置
CN112818185A (zh) * 2021-04-20 2021-05-18 芯启源(南京)半导体科技有限公司 一种基于sram的最长前缀匹配硬件系统查找的方法
CN115086221A (zh) * 2022-07-27 2022-09-20 新华三半导体技术有限公司 一种报文处理方法、装置、转发设备和存储介质

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021024392A1 (ja) * 2019-08-06 2021-02-11 日本電信電話株式会社 パケット検索装置、パケット検索方法およびパケット検索プログラム
US11863515B2 (en) 2021-12-10 2024-01-02 Cisco Technology, Inc. Systems and methods for translating IPV6 packets for DIA in an SD-WAN environment
CN114884877B (zh) * 2022-06-14 2023-02-03 电子科技大学 一种哈希表和HOT相结合的IPv6路由查找方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6880064B1 (en) * 2000-06-21 2005-04-12 Mosaid Technologies, Inc. Method and apparatus for physical width expansion of a longest prefix match lookup table
CN103414556A (zh) * 2013-08-16 2013-11-27 成都卫士通信息产业股份有限公司 一种ike密钥协商策略查找方法
CN103780491A (zh) * 2012-10-23 2014-05-07 上海博达数据通信有限公司 一种实现IPv6快速路由查找的方法
CN104394077A (zh) * 2014-12-12 2015-03-04 盛科网络(苏州)有限公司 基于Hash算法的标签查找方法及装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7089240B2 (en) * 2000-04-06 2006-08-08 International Business Machines Corporation Longest prefix match lookup using hash function
CN100566281C (zh) * 2007-11-02 2009-12-02 华为技术有限公司 虚拟私用网路由查找的方法和装置
CN101286935A (zh) * 2008-05-07 2008-10-15 中兴通讯股份有限公司 一种基于ip地址范围的路由查找方法
WO2011127642A1 (zh) * 2010-04-12 2011-10-20 华为技术有限公司 路由表建立方法和装置及路由表查找方法和装置
CN103404092B (zh) * 2011-11-30 2015-11-25 华为技术有限公司 路由前缀存储方法、装置及路由地址查找方法、装置
US9680747B2 (en) * 2012-06-27 2017-06-13 Futurewei Technologies, Inc. Internet protocol and Ethernet lookup via a unified hashed trie
CN105141525B (zh) * 2015-06-30 2018-08-10 新华三技术有限公司 IPv6路由查找方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6880064B1 (en) * 2000-06-21 2005-04-12 Mosaid Technologies, Inc. Method and apparatus for physical width expansion of a longest prefix match lookup table
CN103780491A (zh) * 2012-10-23 2014-05-07 上海博达数据通信有限公司 一种实现IPv6快速路由查找的方法
CN103414556A (zh) * 2013-08-16 2013-11-27 成都卫士通信息产业股份有限公司 一种ike密钥协商策略查找方法
CN104394077A (zh) * 2014-12-12 2015-03-04 盛科网络(苏州)有限公司 基于Hash算法的标签查找方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
高莹: "哈希表和多比特Trie树相结合的IPv6路由查找算法的研究", 《郑州大学硕士学位论文》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112769704A (zh) * 2021-02-09 2021-05-07 芯河半导体科技(无锡)有限公司 一种基于hash表的高速可扩展IP路由查找硬件装置
CN112818185A (zh) * 2021-04-20 2021-05-18 芯启源(南京)半导体科技有限公司 一种基于sram的最长前缀匹配硬件系统查找的方法
CN115086221A (zh) * 2022-07-27 2022-09-20 新华三半导体技术有限公司 一种报文处理方法、装置、转发设备和存储介质
CN115086221B (zh) * 2022-07-27 2022-11-22 新华三半导体技术有限公司 一种报文处理方法、装置、转发设备和存储介质

Also Published As

Publication number Publication date
EP3280104A4 (en) 2018-04-25
US20180145911A1 (en) 2018-05-24
EP3280104B1 (en) 2020-03-11
EP3280104A1 (en) 2018-02-07
WO2017000893A1 (zh) 2017-01-05
CN106330716B (zh) 2019-12-13
US10771386B2 (en) 2020-09-08

Similar Documents

Publication Publication Date Title
CN105141525B (zh) IPv6路由查找方法及装置
CN106330716A (zh) Ip路由查找方法及装置
US6594655B2 (en) Wildcards in radix- search tree structures
US20130034096A1 (en) Routing table establishment method and device and routing table lookup method and device
KR100586461B1 (ko) 파이프라인 이진 트리를 이용한 ip 어드레스 검색 방법,하드웨어 구조 및 기록매체
US9729447B2 (en) Apparatus and method for processing alternately configured longest prefix match tables
Le et al. Memory-efficient and scalable virtual routers using FPGA
CN106416152A (zh) 一种查找装置、查找配置方法和查找方法
Luo et al. A hybrid IP lookup architecture with fast updates
CN106453091B (zh) 路由器转发平面的等价路由管理方法和装置
CN105227468B (zh) 一种查找装置、查找方法和配置方法
Veeramani et al. Hybrid trie based partitioning of TCAM based openflow switches
Veeramani et al. Efficient IP lookup using hybrid trie-based partitioning of TCAM-based open flow switches
CN1529454A (zh) 消除最长前缀匹配查找的并行路由查找方法及其系统
CN106330721B (zh) Ip路由查找方法及装置
Erdem Pipelined hierarchical architecture for high performance packet classification
Mahini et al. MLET: a power efficient approach for TCAM based, IP lookup engines in Internet routers
KR100364433B1 (ko) 비트-벡터 테이블을 이용한 ip 주소 검색방법
Erdem et al. Value-coded trie structure for high-performance IPv6 lookup
Huang et al. Memory-efficient IP lookup using trie merging for scalable virtual routers
Tong et al. A memory efficient IPv6 lookup engine on FPGA
Park et al. An efficient IP address lookup algorithm based on a small balanced tree using entry reduction
Chicha et al. FPGA implementation of lookup algorithms
Le et al. High-throughput ip-lookup supporting dynamic routing tables using fpga
Maksic et al. Updating designed for fast IP lookup

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
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.

GR01 Patent grant
GR01 Patent grant