CN101577662B - 一种基于树形数据结构的最长前缀匹配方法和装置 - Google Patents
一种基于树形数据结构的最长前缀匹配方法和装置 Download PDFInfo
- Publication number
- CN101577662B CN101577662B CN2008100969062A CN200810096906A CN101577662B CN 101577662 B CN101577662 B CN 101577662B CN 2008100969062 A CN2008100969062 A CN 2008100969062A CN 200810096906 A CN200810096906 A CN 200810096906A CN 101577662 B CN101577662 B CN 101577662B
- Authority
- CN
- China
- Prior art keywords
- node
- prefix
- search
- pointer
- read
- 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.)
- Active
Links
Images
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
-
- 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
- H04L45/74591—Address table lookup; Address filtering using content-addressable memories [CAM]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明公开了最长前缀匹配方法和装置,该方法包括:A.读取一个搜索节点;B.确定读出的搜索节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,如果存在,将上一级别的节点内指向叶子节点数组的指针加上该搜索节点的偏移量域,更新当前最佳匹配指针,并执行步骤C;如果不存在,执行步骤C;C.确定该搜索节点的分支指示域和搜索关键字的对应比特匹配时,确定该搜索节点是否存在子节点;D.确定该搜索节点不存在子节点时,读取该搜索节点的内部位图,根据内部位图和搜索节点内指向叶子节点数组的指针,计算该搜索节点内存在的最长匹配前缀,更新当前最佳匹配指针,计算当前最佳匹配指针对应的叶子节点的地址。该方法可以提高查询速度。
Description
技术领域
本发明涉及通信和计算机技术领域,尤其涉及一种基于树形数据结构的最长前缀匹配方法和装置。
背景技术
路由器在转发IP(International Protocol,网际协议)报文时,需要根据IP报文的目的地址查询路由表。路由表包含多条路由前缀,每个路由前缀通常用一个由0/1构成的字符串表示,例如:01*,字符串尾部的符号“*”表示后面的比特可以取任意值。路由表中的每个路由前缀对应一个下一跳信息,路由器在转发IP报文时,需要根据IP报文的目的地址查找路由表中匹配的前缀,匹配的方式采用最长前缀匹配的方式,找出最长匹配的前缀后,根据该前缀所对应的下一跳信息转发IP报文。所谓最长前缀匹配,举例说明:假如路由器内有两个路由前缀:(10*->interface 1),(1010*->interface 2),如果路由器收到一个报文,该报文的目的IP地址为101001,则这个地址和两个前缀都匹配,但是,第二个前缀匹配的比特数更多,所以选择第二个前缀作为最终的匹配结果,根据该前缀所对应的下一跳信息转发报文。
随着网络规模的扩大,IPv6和VPN(Virtual Private Network,虚拟专用网络)的广泛应用,路由表所包含的前缀数目越来越多,目前的路由器需要支持数百万条路由前缀。而且,随着路由器接口速率的不断提升,路由器完成最长前缀匹配的速度也需要不断提高,需要满足40Gbit/s,100Gbit/s甚至更高的接口速率要求。
而在现有技术中,通常采用SRAM(Static Random Access Memory,静态随机存储器)以实现高速的查找性能,但通常不能支持大容量的路由表;或者采用DRAM以支持大容量的路由表,但由于DRAM(Dynamic RandomAccess Memory,动态随机存储器)的速度不高,无法支持高的查找性能。
为了能够同时支持大容量的数据表和高的查找性能,现有技术中提出了一种基于Trie(搜索)树的最长前缀匹配方法。Trie,是一种树形结构,用于保存大量的字符串,可以利用字符串的公共前缀来节约存储空间,具有更新速度快,查询性能只与地址的长度有关,与前缀的数目不相关的特点,所以采用Trie实现最长前缀匹配是一种比较通用的做法,例如,现有技术中采用了一种通过搜索压缩多比特Trie来查找最长匹配的前缀的方法,但是,在对现有技术的研究和实践过程中,发明人发现采用压缩多比特Trie的匹配方式,如果步长为r,一次只能读取r比特,其查询速度无法满足不断提高的线路速率要求。
发明内容
本发明实施例提供一种基于树形数据结构的最长前缀匹配方法和装置,能够提高查询速度。
为解决上述技术问题,本发明所提供的基于树形数据结构的最长前缀匹配方法和装置实施例是通过以下技术方案实现的:
本发明实施例提供了一种基于树形数据结构的最长前缀匹配方法,所述树形数据结构代表多个前缀,前缀被区分为至少一个步,每个节点表示一步,所述方法包括:
A.读取所述树形数据结构中当前级别的一个搜索节点;
B.确定读出的所述搜索节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,如果存在匹配的前缀,则将上一级别的节点内指向叶子节点数组的指针和所述搜索节点的偏移量域相加,更新当前最佳匹配指针,并执行步骤C;如果不存在匹配的前缀,直接执行步骤C;
C.当确定所述搜索节点的分支指示域和搜索关键字的对应比特匹配时,根据子节点位图确定所述搜索节点是否存在子节点;
D.当确定所述搜索节点不存在子节点时,读取所述搜索节点的内部位图,并根据所述内部位图和所述搜索节点内指向叶子节点数组的指针,计算所述搜索节点内存在的匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址。
本发明实施例还提供了一种搜索装置,所述装置用于基于一个树形数据结构搜索匹配的长度最长的前缀,所述树形数据结构代表多个前缀,前缀被区分为至少一个步,每个节点表示一步,所述搜索装置从至少一个存储器中读取节点,包括:
读取单元,用于读取树形数据结构中的节点;
最佳匹配指针确定单元,用于确定读取的节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,并在存在匹配的前缀时,将上一级别的节点内指向叶子节点数组的指针和所述节点的偏移量域相加,更新当前最佳匹配指针;
分支指示域确定单元,用于确定所述节点的分支指示域和搜索关键字的对应比特是否匹配,并在匹配时,触发子节点位图确定单元;
子节点位图确定单元,用于根据子节点位图确定所述节点是否存在子节点,在不存在时,触发内部节点匹配单元;
内部位图匹配单元,用于读取所述节点的内部位图,并根据所述内部位图和所述节点内指向叶子节点数组的指针,计算所述节点内存在的最长匹配的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址。
本发明实施例还提供了一种路由器,该路由器包括:
包处理器,用于发送查询请求,并接收搜索引擎发送的查询结果;
至少一个存储器,用于存储树形数据结构中的节点,所述树形数据结构代表多个前缀,前缀被区分为至少一步,每个节点表示一步;
搜索引擎,用于在接收到包处理器的查询请求时,从存储器中读取节点,确定读取到的节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,并在存在匹配的前缀时,将上一级别的节点内指向叶子节点数组的指针和所述节点的偏移量域相加,更新当前最佳匹配指针;在确定所述节点的分支指示域和搜索关键字的对应是否匹配,并在匹配时,根据子节点位图确定所述节点是否存在子节点,并在不存在子节点时,读取所述节点的内部位图,并根据所述内部位图和所述节点内指向叶子节点数组的指针,计算所述节点内存在的最长匹配的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址,并将计算结果返回给包处理器。
从以上技术方案可以看出,能够根据读出的搜索节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,并在存在匹配的前缀时,将上一级别的节点内指向叶子节点数组的指针和当前搜索节点的偏移量域相加,更新当前最佳匹配指针;在所述搜索节点的分支指示域和搜索关键字的对应比特匹配,且根据子节点位图确定所述搜索节点不存在子节点时,可以根据所述搜索节点的内部位图、指向子节点数组的指针以及搜索关键字对应比特,计算出所述搜索节点内存在的匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址。设所述搜索节点的步长为r,根据上一级别节点的分支指示域可以确定本搜索节点所在延伸出上一级别节点的路径与搜索关键字的1个比特是否匹配,而读取所述搜索节点的内部位图可以对应搜索关键字的后续r比特,因此,每读取一个节点,可以处理r+1比特的搜索关键字,与多比特Trie或压缩多比特Trie每读取一个步长为r的节点,只能处理r比特的搜索关键字的最长前缀匹配方法相比,可以提高查询速度。
附图说明
图1A为一组前缀及对应的单比特Trie示意图;
图1B为图1A中前缀数据表1A1中所示前缀的多比特Trie示意图;
图1C为图1B中所示多比特Trie所对应的压缩多比特Trie示意图;
图2A为本发明实施例中采用的树形数据结构示意图;
图2B为本发明实施例中搜索节点的类型位图示意图;
图2C为本发明实施例中前缀位图示意图;
图3A-B为本发明实施例中最长前缀匹配方法实施例一流程图;
图4为本发明实施例中节点数据结构示意图;
图5为本发明实施例中一种搜索系统结构示意图;
图6A-E为本发明实施例中最长前缀匹配方法实施例二流程图;
图7为本发明实施例中搜索装置实施例一结构示意图;
图8为本发明实施例中搜索装置实施例二结构示意图;
图9为本发明实施例中搜索装置实施例三结构示意图;
图10为本发明实施例中搜索装置实施例四结构示意图;
图11为本发明实施例中搜索装置实施例五结构示意图;
图12为本发明实施例中路由器实施例结构示意图。
具体实施方式
本发明实施例提供了一种基于树形数据结构的最长前缀匹配方法和装置,用于提高查询速度。
以下首先参照附图,介绍几种采用Trie树形数据结构进行最长前缀匹配的方法:
参照图1A,为一组前缀及对应的单比特Trie示意图,其中,前缀数据表1A1给出了9个前缀,Trie 1A2为这9个前缀的单比特Trie表示。Trie的每个节点最多有左右两个子节点;实点表示该节点对应一个前缀。例如,P7是一个实点,从根节点到P7的路径上所遇到的所有比特,即00110就是P7所对应的前缀。
假设收到一个报文,搜索时从根节点开始,依次使用目的地址的每个比特,如果对应的比特为0,则继续搜索当前节点的左子节点,如果对应的比特为1,则继续搜索当前节点的右子节点,记录搜索过程中遇到的所有前缀,选出最后遇到的那个前缀作为匹配的结果。假设目的地址为01110,则可以看出,在搜索过程中,一共遇到了3个前缀:P1、P2、P8,由于P8的长度最长,所以按照最长匹配的原则,选择P8作为最终的匹配结果。
采用单比特Trie方式,假设搜索关键字的长度为W,最差情况下需要读W次存储器,这样的查询性能无法满足实际需求,后来又有了多比特Trie,多比特Trie的特点是每读一次存储器,使用搜索关键字中的多个比特,参照图1B,为图1A中前缀数据表1A1中所示前缀的多比特Trie示意图,其中,步长为2,即每次读取两个比特,长度不是步长整数倍的前缀需要扩展成多个前缀,但如果扩展后的前缀与其他长度更长的前缀冲突,根据最长前缀匹配原则,选取未扩展时对应的长度最长的前缀。例如,对于根节点,前缀P1需要扩展成00*,01*,10*,11U,前缀P2需要扩展成00*,01*,这样对于00*有三个候选的前缀:P1、P2、P3,由于P3的前缀最长,所以在00对应的表项中填入P3;依据同样原则可以看出,P2填入根节点内01所对应的表项,P1只能填入根节点内10所对应的表项。
在多比特Trie的数据结构中,假设步长为r,则每个Trie节点有2r个表项,每个表项包含2个域,分别表示下一跳信息和指向子节点的指针。以下为描述方便,将Trie节点简称为节点。可以看出,使用多比特Trie,假设一个节点所对应的步长为r,则搜索该节点时会使用搜索关键字中的r比特,假设这r比特在搜索关键字中的位置为从比特i到比特i+r-1(假设在搜索时,搜索关键字的最高位记为比特1),则通过搜索该节点可以找出从长度i到长度i+r-1的前缀中与搜索关键字匹配的长度最长的前缀;对于根节点而言,i为1,通过搜索根节点可以找出从长度0到长度r的前缀中与搜索关键字匹配的长度最长的前缀。
可以看出,假设搜索关键字的长度为W,步长越长则读存储器的次数越少,搜索的速度越高,但步长越长,存储器空间浪费越严重。针对这一问题,技术人员又提出了压缩多比特Trie,参照图1C,为图1B中所示多比特Trie所对应的压缩多比特Trie示意图,假设步长为r,则多比特Trie内的每个节点内最多有2r个下一跳信息,2r个指向子节点的指针。为了节省存储空间,如图1C所示,在压缩多比特Trie中,每个节点改成存放两个位宽为2r比特的位图(bitmap)加上两个指针。每个节点存放一个子节点位图(Child Bitmap),和一个指向子节点的指针:子节点指针(Child Pointer)。假设步长为r,子节点位图一共有2r比特,每个节点为1则表示对应的路径还需要继续向下搜索,为0则表示不需要继续搜索,每个节点的所有子节点在存储器内连续存放,每个节点内有一个子节点指针用于指示该节点的第一个子节点在存储器内存放的地址。例如,图1C中的节点1的子节点位图为1101,表示在该节点中,假设搜索关键字搜索到节点1时所使用的索引为00/01/11,则还需要继续搜索下去,如果所使用的索引为10,则不需要继续搜索下去。节点1一共有三个子节点,在存储器内连续存放,分别对应索引00、01、11。
在进行搜索时,首先根据搜索关键字从子节点位图中找出对应的比特,如果对应的比特为1,则需要继续搜索,然后计算子节点位图中从最高位开始到所找出的比特为止(不包括所找出的比特),一共有多少个1,将计算结果作为偏移量域,将节点中存放的指向子节点的指针作为基地址,将二者相加作为下一次搜索时需要从存储器中读出的节点的地址。例如,在搜索图1C中的节点1时,假如此时搜索关键字中对应的索引为11,则根据节点1的子节点位图1101,可以算出下一个要搜索的节点相对于节点2的起始地址的偏移量为2,下一次访问的地址是节点1中的子节点指针加2。
每个节点存放一个前缀扩展位图(Prefix Expansion Bitmap),和一个指向叶子节点的指针:叶子节点指针。前缀扩展位图一共有2r个比特,一个比特为1则表示对应的路径对应一个前缀;一个比特为0,将该比特的位置记为s,则从比特s开始在前缀扩展位图中向左搜索,假设找到的第一个为1的比特所对应的前缀为Px,则比特s所对应的路径所匹配的前缀也是Px。前缀扩展位图内可能有多个比特为1,将所有为1的比特所对应前缀的下一跳信息在存储器内连续存放,存放下一跳信息的节点称为叶子节点,每个节点内存放一个指向叶子节点的指针用于指示该叶子节点内的第一个下一跳信息在存储器内存放的地址。例如,图1C中的节点2包含3个节点,其中,第一个节点的前缀扩展位图为1110,假设搜索到这个节点时,所使用的索引为11,由于11在前缀扩展位图内对应的比特为0,需要向左搜索,找到的第一个为1的比特所对应的索引为10,对应的前缀为P3,则使用索引11在搜索本节点的过程中,所找到的匹配的前缀也是P3。
在进行搜索时,首先根据搜索关键字从前缀扩展位图中找出对应的比特,如果对应的比特为1,则计算从前缀扩展位图的最高位开始,一直到所找出的比特为止(不包括所找出的比特),一共有多少个1,将计算的结果作为偏移量域,将节点内指向叶子节点的指针作为基地址,二者相加后的地址作为搜索本节点时在本节点内所找到的匹配的前缀所对应的下一跳信息在存储器内的存放地址;如果对应的比特为0,将该比特的位置记为s,则从比特s开始在前缀扩展位图中向左搜索,直到找到第一个为1的比特,将该比特的位置记为t,则计算从前缀扩展位图的最高位开始,一直到比特t为止(不包括比特t),一共有多少个1,将计算的结果作为偏移量,将节点内指向叶子节点的指针作为基地址,二者相加后的地址作为搜索本节点时在本节点内所找到的匹配的前缀所对应的下一跳信息在存储器内的存放地址。例如,在搜索图1C中的节点3时,假设此时搜索关键字中对应的索引为11,则根据节点3的前缀扩展位图1010,可以计算出对应的下一跳信息的地址相对于对应的叶子节点的起始地址的偏移量为1,则在本节点内找到的匹配的前缀所对应的下一跳信息在存储器内的存放地址为本节点的叶子节点指针加1。
与采用多比特Trie的数据结构相同,假设一个节点所对应的步长为r,则搜索该节点时会使用搜索关键字中的r比特,假设这r比特在搜索关键字中的位置为从比特i到比特i+r-1(假设在搜索时,搜索关键字的最高位记为比特1),则通过搜索该节点可以找出从长度i到长度i+r-1的前缀中与搜索关键字匹配的长度最长的前缀;对于根节点而言,i为1,通过搜索根节点可以找出从长度0到长度r的前缀中与搜索关键字匹配的长度最长的前缀。
可见,假设步长为r,一个节点最多有2r个子节点,在多比特Trie中,需要为每个子节点存储一个指针,无论该子节点是否存在,而在压缩多比特Trie中,如果一个子节点不存在,则只需要将子节点位图内对应的比特设为0,不需要额外的信息,同多比特Trie相比,对存储器容量的需求要减少很多。
同样道理,假设步长为r,一个节点最多对应2r个下一跳信息,在多比特Trie中,需要在每个节点内存放2r个下一跳信息;而在压缩多比特Trie中,如果一个节点内两个或者多个连续的索引在节点内所匹配的长度最长的前缀相同,则只需要将前缀扩展位图内第一个索引所对应的比特设为1,其余索引所对应的比特设为0,对应的下一跳信息只需要在存储器内存放一次即可,同多比特Trie相比,对存储器容量的要求也变少了。
可见,采用压缩多比特Trie的匹配方式,如果步长为r,一次仍然只能读取r比特,与多比特Trie的匹配方式相比,无法提高查询速度,其查询速度无法满足不断提高的线路速率要求。
另外,压缩多比特Trie中,采用前缀扩展位图的方式还存在一个问题,举例说明:在图1C中的节点3中,前缀扩展位图为1010,在叶子节点3内存放了两个前缀所对应的下一跳信息:P7和P3。与图1B相比,在图1B中P3所对应的下一跳信息只存在于根节点中,而在图1C中,显然不是这样。这是因为,在图1C的节点3中,索引00、01所对应的前缀相同,都是P7,所以前缀扩展位图的高二位取为10,但是索引10、11在前缀扩展位图内的对应比特不能也设为00,如果设为00,则根据前面所描述的匹配方法,索引10、11所对应的前缀在搜索过程中就会被计算成P7,但这显然是错误的,所以必须将索引10、11在前缀扩展位图内对应的比特设为10,对应的在叶子节点3中需要增加前缀P3所对应的下一跳信息。而同一个前缀所对应的下一跳信息在根节点所对应的叶子节点中和子节点所对应的叶子节点中重复存储,会造成存储空间的浪费,以及下一跳信息更新速率的降低。
为便于理解,以下首先介绍本发明实施例中所采用的树形数据结构,参照图2A,为本发明实施例中采用的树形数据结构示意图,其具有TNODE(TrieNode,搜索节点):TNODE1、TNODE2、TNODE3,INODE(Internal Node,内部节点):INODE1、INODE2,子节点数组1、子节点数组2,叶子节点数组1、叶子节点数组2和对应的LNODE(Leaf Node,叶子节点),其中,每个TNODE内有一个指向子节点数组的指针,用于指示子节点数组存放的基地址,有一个指向叶子节点数组的指针,用于指示叶子节点数组的基地址,每个TNODE中存放一个偏移量域(Offset),用于在搜索过程中计算指向叶子节点的指针,每个节点内的偏移量域指示两个信息:当前节点的父节点内是否存在一个匹配的前缀;如果当前节点的父节点内存在匹配的前缀,则指出该前缀所对应的下一跳信息的地址相对于父节点内所存储的指向叶子节点数组的指针的偏移量。
INODE内存放内部位图,用于指示该INODE所对应的TNODE所包含的前缀,INODE和该INODE所对应的TNODE的所有子节点即子节点数组连续存放,每个TNODE内存放一个指针指向这一段连续空间的起始地址,即指向子节点数组的指针。当然,如果一个TNODE所对应的子Trie中没有前缀,则不需要为这个TNODE生成一个INODE。
其中,如果步长为r,TNODE内需要存放一个位宽为2r比特的子节点位图和一个位宽为2r比特的类型位图(Type Bitmap),当子节点位图内的一个比特为1时,类型位图内如果对应的比特为1,则表示对应的路径延伸出本节点后,有两个分支,类型位图内如果对应的比特为0,则表示对应的路径延伸出本节点后,有一个分支,或者是左分支,或者是右分支,不区分到底是哪个分支存在;当子节点位图内的一个比特为0时,说明没有路径延伸出本节点,因此没有分支,不需要判断类型位图中对应比特的值,类型位图中对应的比特无意义,可以设为0,也可以设为1。参照图2B,为本发明实施例中节点的类型位图示意图,该图所示的节点,可以看出子节点位图表示为:1101,其中索引10所对应的路径没有子节点,所以子节点位图内对应的比特设为0。类型位图表示为10x0,由于索引00对应的路径延伸出本节点后存在两个分支,所以类型位图对应的比特被设为1;由于索引01和11对应的路径延伸出本节点后存在一个分支,索引01所对应的路径延伸出本节点有右分支,索引11所对应的路径延伸出本节点有左分支,所以类型位图内对应的比特被设为0;由于索引10对应的路径没有延伸出本节点,即子节点位图内对应的比特为0,所以类型位图内对应的比特被标识为x,表示可以,可以取为0,也可以取为1。
可以看出,采用子节点位图和类型位图相结合的表示方法后,一共需要2个位宽为2r比特的位图,同只采用子节点位图的方式相比,需要的比特数目从2r比特变为2r+1比特,但是可以获得每条延伸出本节点的路径在本节点外有一个分支还是两个分支的信息。
如前所述,如果对应的路径延伸出本节点后只有一个分支,根据类型位图内的对应比特并不能判断出该分支是左分支还是右分支,为解决这一问题,在每个节点内增加1比特的分支指示域,该域为0标识当对应的路径延伸出本节点的父节点时,本节点位于路径的左分支,该域为1标识当对应的路径延伸出本节点的父节点时,本节点位于路径的右分支。
假设节点内存放了一个2r比特的子节点位图,一个2r比特的类型位图。在搜索过程中,将一个节点从存储器读出后,从搜索关键字中对应的位置取出r比特,然后根据这r比特从子节点位图中选出对应的比特,判断该比特是否为1,如果为1,则表明对应的路径延伸出本节点。将子节点位图与类型位图相与,得到的结果记为位图V,可以看出,如果子节点位图的一个比特为0,则位图V对应比特为0,如果子节点位图的一个比特为1,则位图V的对应比特和类型位图的对应比特相同。计算子节点位图中从最高位开始到所找出的比特为止(不包括所找出的比特),一共有多少个1,将计算的结果记为sum1;计算位图V中从最高位开始到与搜索关键字所对应的比特为止(不包括与搜索关键字所对应的比特),一共有多少个1,将计算的结果记为sum2。根据从搜索关键字中取出的r比特从类型位图中选出对应的比特,判断该比特是否为1,如果为1,则表明对应的路径延伸出本节点,且有两个分支,此时再从搜索关键字中取出下一比特,根据该比特为0还是为1判断应该沿着左分支继续搜索还是应该沿着右分支继续搜索,如果从搜索关键字中取出的比特为0,则应该沿着左分支继续搜索,以节点中存放的指向子节点数组的指针作为基地址,以sum1+sum2为偏移量,将二者相加作为下一次搜索时需要从存储器中读出的节点的地址;如果从搜索关键字中取出的比特为1,则沿着右分支继续搜索,以节点中存放的指向子节点数组的指针作为基地址,以sum1+sum2+1为偏移量,将二者相加作为下一次搜索时需要从存储器中读出的节点的地址;如果从类型位图中选取的比特为0,则表明对应的路径延伸出本节点,并且只有一个分支,但是不知道是左分支还是右分支,此时无论从搜索关键字中取出的下一比特是否与该分支匹配,都将下一个子节点读出继续搜索,以节点中存放的指向子节点数组的指针作为基地址,以sum1+sum2为偏移量,将二者相加作为下一次搜索时需要从存储器中读出的节点的地址。
如前所述,在压缩多比特Trie中,同一个前缀所对应的下一跳信息在根节点所对应的叶子节点中和子节点所对应的叶子节点中重复存储,会造成存储空间的浪费,以及下一跳信息更新速率的降低,为解决这一问题,在INODE中存放内部位图,内部位图用于指示该内部节点所对应的搜索节点内存在的前缀,通过搜索内部位图可以找出所述搜索节点内与搜索关键字匹配的长度最长的前缀,以下介绍内部位图的两种实施方式:
第一种内部位图是在前缀扩展位图基础上,增加一个位宽为2r比特的前缀指示位图(Prefix Indication Bitmap),前缀指示位图内的一个比特为1表示在该节点内存在一个前缀与对应的路径匹配,如果一个比特为0表示在该节点内不存在与对应的路径相匹配的前缀。举例而言,图1C中的节点3的前缀扩展位图变为1000,前缀指示位图为1100。
同样,每个节点内所包含的所有前缀所对应的下一跳信息在存储器内连续存放,组成一个叶子节点数组。在搜索时,首先根据搜索关键字找出前缀指示位图的对应比特,如果为0则表示本节点内没有匹配的前缀;如果为1,则继续判断前缀扩展位图内对应的比特是否为1,如果前缀扩展位图内对应的比特为1,则计算从前缀扩展位图的最高位开始,一直到所找出的比特为止(不包括所找出的比特),一共有多少个1,将计算的结果作为偏移量域,将上一节点,即本内部节点对应的TNODE内指向叶子节点数组的指针作为基地址,二者相加后的地址作为搜索本节点时在本节点内所找到的匹配的前缀所对应的下一跳信息在存储器内的存放地址;如果前缀扩展位图内对应的比特为0,将该比特的位置记为s,则从比特s开始在前缀扩展位图内向左搜索,直到找到第一个为1的比特,将该比特的位置记为t,计算从前缀扩展位图的最高位开始,一直到比特t为止(不包括比特t),一共有多少个1,将计算的结果作为偏移量域,将上一节点,即本节点对应的TNODE内指向叶子节点数组的指针作为基地址,二者相加后的地址作为搜索本节点时在本节点内所找到的匹配的前缀所对应的下一跳信息在存储器内的存放地址。
可以看出,采用上述表示方式后,图1C中的叶子节点3中不需要存放前缀P3所对应的下一跳信息。
第二种内部位图所采用的方式参照图2C,为本发明实施例中前缀位图示意图,用一个位宽为2r+1-1比特的前缀位图(Prefix Bitmap)来代替压缩多比特Trie中的前缀扩展位图。对一个步长为r的节点而言,该节点实际上最多对应了单比特Trie上的r+1级节点,这些节点在单比特Trie上组成一个子Trie 2C1。首先将单比特Trie上对应的子Trie 2C1扩展成完全二叉树2C2,二叉树上的每个点对应一个比特,如果该点对应一个前缀,则对应的比特为1,否则对应的比特为0。按照从上到下,从左到右的顺序遍历二叉树,形成一个位图2C3,将这个位图称为前缀位图。图2C中,按照上面描述的方法,最终生成的前缀位图为1001001(2C3)。
同样,每个节点内所包含的所有前缀所对应的下一跳信息在存储器内连续存放,组成一个叶子节点数组。在搜索时,假设节点的步长为r,则读出节点的前缀位图后,首先分别计算对应的r+1级是否有匹配的前缀,如果有,则从中选出一个长度最长的前缀作为匹配的前缀。选出匹配的前缀后,计算从前缀位图的最高位开始,一直到该前缀所对应的比特为止(不包括该比特),一共有多少个1,将计算的结果作为偏移量域,将上一节点,即本INODE所对应的TNODE内指向叶子节点数组的指针作为基地址,二者相加后的地址作为搜索本节点时在本节点内所找到的匹配的前缀所对应的下一跳信息在存储器内的存放地址。
可见,采用前缀位图的方式不会带来在压缩多比特Trie中所出现的同一个前缀所对应的下一跳信息在根节点所对应的叶子节点中和子节点所对应的叶子节点中重复存储的问题,代价是前缀位图需要2r+1-1比特。
总之,采用前缀扩展位图加上前缀指示位图的方式可以避免在压缩多比特Trie中只采用前缀扩展位图所带来的问题,代价是需要的比特数目从2r比特变为2r+1比特;采用前缀位图的方式也可以避免只采用前缀扩展位图所带来的问题,代价是需要的比特数目从2r比特变为2r+1-1比特。后文统一将这两种位图表示称为内部位图。
可以理解的是,所述内部位图也可以不作为独立节点存放,而与对应的TNODE的其他域的信息存放在一起。
在本发明实施例中,采用树形数据结构查找与搜索关键字匹配的长度最长的前缀,为描述方便,将与搜索关键字匹配的长度最长的前缀称为最长匹配前缀,树形数据结构代表多个前缀,前缀可以被区分为至少一个级别,即被区分为至少一个步,每个节点表示一步,搜索并维护一个在搜索过程中遇到的匹配的长度最长的前缀所对应的下一跳信息的地址,将这个地址记作当前最佳匹配指针,读取一个搜索节点并确定所述搜索节点中与搜索关键字最长匹配的前缀的过程如下:
读取到树形数据结构中当前级别的一个搜索节点,确定所述搜索节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,并在上一级别的节点内存在匹配的前缀时,将上一级别的节点内指向叶子节点数组的指针和当前搜索节点的偏移量域相加,更新当前最佳匹配指针;在确定所述搜索节点的分支指示域和搜索关键字的对应比特匹配,且根据子节点位图确定所述搜索节点不存在子节点时,读取所述搜索节点的内部位图,并根据所述内部位图和所述搜索节点内指向叶子节点数组的指针,计算所述搜索节点内存在的匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址。
设所述搜索节点的步长为r,可以看出,根据上一级别节点的分支指示域可以确定本节点所在延伸出上一级节点的路径与搜索关键字的1个比特是否匹配,而读取所述搜索节点的内部位图可以确定与搜索关键字后续对应的r比特是否匹配,因此,每读取一个节点,可以处理r+1比特的搜索关键字,与多比特Trie或压缩多比特Trie每读取一个步长为r的节点,只能处理r比特的搜索关键字的最长前缀匹配方法相比,可以提高查询速度。
参照图3A-B,为本发明实施例中最长前缀匹配方法实施例一流程图,以下详细描述从存储器内读出一个TNODE后的搜索过程,以及树形数据结构中定义的各个域在搜索过程中如何使用,其中,内部位图作为独立的节点INODE与该INODE对应的TNODE的子节点连续存放。搜索并维护一个在搜索过程中遇到的匹配的长度最长的前缀所对应的下一跳信息的地址,将这个地址记作当前最佳匹配指针。
301、判断读出的TNODE的偏移量域是否指示上一节点内存在匹配的前缀,如果上一节点内不存在匹配的前缀,则执行步骤303;如果上一节点内存在匹配的前缀,则执行步骤302;
302、将上一节点内指向叶子节点数组的指针和本节点的偏移量域相加,用得到的结果更新当前最佳匹配指针,然后执行步骤303;
其中,每个节点内的偏移量域指示两个信息:当前节点的父节点内是否存在一个匹配的前缀;如果当前节点的父节点内存在匹配的前缀,则指出该前缀所对应的下一跳信息的地址相对于父节点内所存储的指向叶子节点数组的指针的偏移量。
303、判断TNODE的分支指示域和搜索关键字的对应比特是否匹配,如果是,则执行步骤305;如果否,则执行步骤304;
在本实施例中,如果TNODE的分支指示域和搜索关键字的对应比特不匹配,说明出现了查错路径的情况。
304、将当前最佳匹配指针作为最终的查询结果返回;
305、在本实施例中,假设TNODE内包含一个位宽为2r比特的子节点位图,一个位宽为2r比特的类型位图;从搜索关键字中对应的位置取出r比特,然后根据这r比特从子节点位图中选出一个比特并执行步骤306;
306、判断该比特是否为0,如果是,则执行步骤307;否则执行步骤310;
307、子节点位图内所选出的比特为0表明对应的路径没有延伸出本节点,根据TNODE内指向子节点数组的指针将对应的INODE从存储器中读出,并执行步骤308;
308、由于在TNODE中存有指向叶子节点数组的指针,根据INODE内存放的内部位图和TNODE内存放的指向叶子节点数组的指针,计算出INODE内是否有匹配的前缀,如果是,则执行步骤309;如果否,则执行步骤304;
在本实施例中,内部位图可以采用前缀扩展位图和前缀指示位图相结合的方式表示,可以理解的是,内部位图也可以采用前面介绍的前缀位图来表示。
309、找出一个长度最长的匹配的前缀,将该前缀所对应的当前最佳匹配指针,即下一跳信息的地址作为最终的查询结果;
310、如果子节点位图中对应的比特为1,则表明对应的路径延伸出本节点,此时根据从搜索关键字中取出的r比特从类型位图中选出一个比特,并执行步骤311;
311、判断该比特是否为1,如果为1,则执行步骤312;否则经由连接块3B执行图3B中的步骤317;
312、类型位图的对应比特为1表明对应的路径延伸出本节点,而且有2个分支,此时从搜索关键字中取出下一个比特,并执行步骤313;
313、根据该比特为0还是为1判断应该沿着左分支继续搜索还是应该沿着右分支继续搜索,如果为0,则执行步骤314,否则执行步骤315;
314、应该沿着左分支继续搜索,并执行步骤316;
315、应该沿着右分支继续搜索,并执行步骤316;
316、根据搜索关键字的对应比特,类型位图和子节点位图,以及TNODE内指向子节点数组的指针计算出下一个需要读出的节点的地址,然后记录当前节点内指向叶子节点数组的指针,将下一个节点读出后执行步骤301;
317、类型位图的对应比特为0表明对应的路径延伸出本节点,而且有1个分支,但是不知道是左分支还是右分支,记录搜索关键字的下一比特,将该比特记为s,并执行步骤318;
318、目前无法判断比特s和存在的分支是否匹配,根据搜索关键字的对应比特、类型位图和子节点位图,以及TNODE内指向子节点的指针计算出下一个需要读出的节点的地址,然后记录当前节点内指向叶子节点数组的指针,将下一个节点读出后执行步骤319;
319、读出下一个比特后,判断读出的节点的偏移量域是否指示上一节点内存在匹配的前缀,如果上一节点内不存在匹配的前缀,则执行步骤321;如果上一节点内存在匹配的前缀,则执行步骤320;
320、将上一节点内指向叶子节点数组的指针和本节点的偏移量域相加,用得到的结果更新当前最佳匹配指针,并执行步骤321;
321、如果当前节点的分支指示域指示是左分支且比特s=0,或者当前节点的分支指示域指示是右分支且比特s=1,则经由连接块3A返回图3A中的步骤305继续对当前节点进行判断;如果当前节点的分支指示域指示是左分支且比特s=1,或者,当前节点的分支指示比特指示是右分支且比特s=0,则执行步骤322;
322、将当前最佳匹配指针作为最终的查询结果,查询过程到此结束。
在本实施例中,当子节点位图内的对应比特为1且类型位图的对应比特为0时,虽然不知道搜索关键字与存在的分支是否匹配,但是仍然将该分支所对应的子节点读出,即使读错,子节点内所存储的偏移量域仍然是正确的,仍然可以根据子节点内存储的偏移量域和父节点内存储的指向叶子节点数组的指针去更新当前最佳匹配指针。然后只需要根据分支指示域判断是否查错,如果查错则搜索过程结束,否则继续进行搜索。
从以上步骤可以看出,在搜索过程中,如果读出的TNODE的子节点位图对应的比特为1,则不需要读出对应的INODE。因为,如果子节点位图的对应比特为1,则会继续读出下一个节点,而根据上一个节点内所存放的指向叶子节点数组的指针和下一个节点内存放的偏移量域就可以计算出上一个节点内存在的长度最长的匹配的前缀所对应的下一跳信息,不需要读出对应的INODE;而如果搜索时读出的TNODE的子节点位图对应的比特为0,则需要将INODE读出来计算当前节点内最长匹配的前缀。而由于INODE和当前节点的所有子节点是连续存放的,在硬件实现时,假设当前节点放在存储器p,INODE和当前节点的所有子节点放在存储器q,无论哪一种情况都会读一次存储器p,一次存储器q,而不会出现某个存储器被读2次的情况,因此可以进一步提高查询效率,所以采用这种将内部位图从节点中分离出来单独存放在INODE中并将INODE和对应的TNODE的子节点连续存放的方式,利于硬件上采用流水线方式实现。
假设步长为r,在压缩多比特Trie中,每个节点存放了两个位宽为2r比特的位图(bitmap)(前缀扩展位图和子节点位图)以及两个指针,每处理一个节点会使用搜索关键字中的r比特,而在上述实施例中,每个TNODE中也存放了两个位宽为2r比特的位图(子节点位图和类型位图,内部位图作为独立的INODE单独存放)加上两个指针,但是在处理一个TNODE时会使用搜索关键字的r+1比特,在没有增大节点大小的情况下,每次处理的比特数目同压缩多比特Trie相比,可以增加1比特,因此相应地可以提高查询速度。
参照图4,为本发明实施例中节点数据结构示意图,其中,节点数据结构41为TNODE示意图,以下对TNODE中各个域进行详细介绍:
设步长为r,则子节点位图位宽为2r比特,子节点位图用于表示对应的路径是否延伸出本节点,例如,可以定义:如果子节点位图中对应的比特为1,表示对应的路径延伸出本节点,需要继续向下搜索;如果子节点位图中对应的比特为0,表示对应的路径没有延伸出本节点,不需要继续向下搜索。
类型位图位宽也为2r比特,类型位图用于表示对应的路径延伸出本节点后的分支数,例如,可以定义:类型位图的对应比特为1,表示对应的路径延伸出本节点后,有两个分支;类型位图的对应比特为0,表示对应的路径延伸出本节点后,有一个分支,或者是左分支,或者是右分支。
偏移量域用于在搜索过程中计算指向叶子节点的指针,每个节点内的偏移量域指示两个信息:当前节点的父节点内是否存在一个匹配的前缀;如果当前节点的父节点内存在匹配的前缀,则指出该前缀所对应的下一跳信息的地址相对于父节点内所存储的指向叶子节点数组的指针的偏移量。
而分支指示域用于指示当前路径延伸出本节点的父节点时,本节点位于路径的左分支还是右分支,例如,可以定义,所述分支指示域为0,表示本节点位于路径的左分支;所述分支指示域为1,表示本节点位于路径的右分支。
指向叶子节点的指针用于表示指向本节点叶子节点数组的指针。
指向子节点的指针用于表示指向本节点子节点数组的指针。
而内部节点是否存在指示域用于指示内部节点是否存在,例如,可以定义:如果内部节点是否存在指示域为1,表示内部节点存在;如果内部节点是否存在指示域为0,表示内部节点不存在。该域可以避免在内部节点不存在时不必要的搜索过程。
节点数据结构42、43为两种不同形式的INODE示意图,节点数据结构42通过前缀扩展位图加前缀指示位图的方法指示每个节点内所包含的匹配的前缀,节点数据结构43采用前缀位图的方法表示每个节点内所包含的前缀。节点数据结构44为LNODE示意图,其中,关联数据域用于存放前缀所对应的下一跳信息。
除了TNODE和INODE,在搜索树形数据结构查找最长匹配前缀时,还可以根据具体情况定义不同类型的节点,以进一步加快查询速度。例如,当一个节点没有子节点时,不需要再存放该节点的子节点位图和类型位图,可以将内部位图放在节点内,这样会少读一次存储器,从而提高查询性能,这种节点可称为ENODE(End Node,结束节点),根据内部位图的两种表示方法,ENODE可以采用节点数据结构45、46两种格式中的任意一种,节点数据结构45为内部位图采用前缀扩展位图加前缀指示位图的格式,节点数据结构46为内部位图采用前缀位图的格式。当Trie上出现连续的单分支路径时,可以采用SNODE(Skip Node,跳读节点)一次比较多个比特,从而加快查询速度,节点数据结构47为SNODE示意图,比较长度表示一次比较的比特数。
SNODE和ENODE中偏移量域、分支指示比特域以及叶子节点指示域中的定义采用与TNODE中相同的方式,不再赘述。
参照图5,为本发明实施例中一种搜索系统实施例结构示意图,用于查找最长匹配的前缀,该搜索系统中,搜索装置51从包处理器52接收查询请求,将查询结果返回给包处理器52,从维护处理器53接收各种指令,根据指令的内容对各个DRAM 54和SRAM 55执行读、写操作,并将最终指令的执行结果返回给维护处理器53。
搜索装置可以外挂至少一个DRAM,至少一个SRAM,SRAM可以是片外SRAM,也可以是片内SRAM,各种节点都存放在存储器内,根据搜索速率的需要,一个节点可以存放在单独的RAM内,也可以存放在多个RAM内。而一个DRAM可以包含多个单元(Bank),一个节点可以存放在一个DRAM的一个单元内,也可以存放在一个DRAM的多个单元内。
下述以在一个Trie树中查找最长匹配前缀为例,详细描述本发明实施例中所采用的最长前缀匹配方法:
参照图6A-E,为本发明实施例中最长前缀匹配方法实施例二流程图,在图4中,描述了实施例一所采用的TNODE、INODE和LNODE,以及考虑到节点所在路径上位置的不同,对TNODE进行优化后所得到的SNODE、ENODE的结构,以下介绍读取到图4中所定义的不同类型的节点时,针对每种不同的节点所执行的最长前缀匹配过程,与实施例一的不同之处在于,在搜索过程中,可以首先判断节点类型,由于节点的类型不同,执行流程有所不同,例如,当读取到一个跳读节点时,如果确定读取到的所述跳读节点的分支指示域和搜索关键字的对应比特匹配,且所述跳读节点的比较数据与搜索关键字的对应比特相等时,可以根据所述跳读节点内指向子节点数组的指针计算下一个要读取的节点的地址,并读取下一个节点以继续执行搜索过程。当读取到一个结束节点时,需要确定读取到的所述结束节点的分支指示域和搜索关键字的对应比特是否匹配,如果匹配,可以根据所述结束节点的内部位图和结束节点内指向叶子节点数组的指针计算出所述结束节点内与搜索关键字匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点地址。以下通过具体步骤进行详细说明:
601、接收一个查询请求;
602、判断是否需要查询SRAM;如果是,则执行步骤603;否则执行步骤604;
603、向SRAM发送读请求,得到SRAM返回的结果后,执行步骤605;
604、根据节点在DRAM内的分布情况,从多个DRAM中选出一个DRAM,向该DRAM发送读请求,得到DRAM的返回结果后,执行步骤605;
605、判断节点类型是否是SNODE,如果是,则经由连接块6B继续执行图6B中的步骤610,否则执行步骤606;
606、判断节点类型是否是INODE,如果是,则经由连接块6C继续执行图6C中的步骤617,否则执行步骤607;
607、判断节点类型是否是LNODE,如果是,则执行步骤608,否则继续执行步骤609;
608、将LNODE的内容作为查询结果返回,搜索过程结束;
609、判断当前节点类型是否是ENODE,如果是,则经由连接块6D继续执行图6D中的步骤621,否则经由连接块6E继续执行图6E中的步骤627;
610、判断读出的节点的偏移量域是否指示上一节点内存在匹配的前缀,如果上一节点内不存在匹配的前缀,则执行步骤612;如果上一节点内存在匹配的前缀,则执行步骤611;
611、将上一节点内指向叶子节点数组的指针和本节点的偏移量域相加,用得到的结果更新当前最佳匹配指针,然后执行步骤612;
612、判断当前节点的分支指示域和搜索关键字的对应比特是否匹配,即是否出现查错路径的情况,如果查错路径,则执行步骤613,否则执行步骤615;
613、判断当前最佳匹配指针是否有效,如果无效,则查询失败,搜索过程至此结束;如果有效,则执行步骤614;
614、根据当前最佳匹配指针计算对应的LNODE的地址,根据计算出来的地址以及节点在DRAM内的分布,计算出需要访问哪个DRAM或者SRAM,向对应的RAM发出读请求,得到读回的结果后,经由连接块6A返回图6A中并继续执行步骤605;
615、判断搜索关键字内相应的比特是否和SNODE内的比较数据相等,如果相等,则执行步骤616,否则执行步骤613;
其中SNODE内进行比较的比特数目可以由SNODE内的比较长度域指定。
616、根据本节点内的指向子节点数组的指针计算下一个要读取的节点的地址,根据计算出的地址以及节点在DRAM内的分布,计算出需要访问哪个DRAM或者SRAM,向对应的RAM发送读请求,得到读回的结果后,经由连接块6A返回图6A中并继续执行步骤605;
617、根据搜索关键字和内部位图判断当前节点内是否存在匹配的前缀,如果不存在,则执行步骤618,否则执行步骤620;
618、判断当前最佳匹配指针是否有效,如果无效,则查询失败,搜索过程至此结束;如果有效,则执行步骤619;
619、根据当前最佳匹配指针计算对应的LNODE的地址,根据计算出来的地址以及节点在DRAM内的分布,计算出需要访问哪个DRAM或者SRAM,向对应的RAM发出读请求,得到读回的结果后,经由连接块6A返回图6A中并继续执行步骤605;
620、根据内部位图和上一节点的指向叶子节点数组的指针计算当前节点内与搜索关键字匹配的长度最长的前缀,用计算的结果更新当前最佳匹配指针,根据当前最佳匹配指针计算对应的LNODE的地址,根据计算出来的地址以及节点在DRAM内的分布,计算需要访问哪个DRAM或者SRAM。向对应的RAM发送读请求,得到读回的结果后,经由连接块6A返回图6A中继续执行步骤605;
621、判断读出的节点的偏移量域是否指示上一节点内存在匹配的前缀,如果上一节点内不存在匹配的前缀,则执行步骤623;如果上一节点内存在匹配的前缀,则执行步骤622;
622、将上一节点内指向叶子节点数组的指针和本节点的偏移量域相加,用得到的结果更新当前最佳匹配指针,并执行步骤623;
623、判断当前节点的分支指示域和搜索关键字的对应比特是否匹配,如果是,则执行步骤626;如果否,则执行步骤624;
624、判断当前最佳匹配指针是否有效,如果无效,则查询失败,搜索过程至此结束;如果有效,则执行步骤625;
625、根据当前最佳匹配指针计算对应的LNODE的地址,根据计算出来的地址以及节点在DRAM内的分布,计算出需要访问哪个DRAM或者SRAM,向对应的RAM发出读请求,得到读回的结果后,经由连接块6A返回图6A中继续执行步骤605;
626、根据内部位图和当前节点的指向叶子节点数组的指针计算出当前节点内与搜索关键字匹配的长度最长的前缀,用计算的结果更新当前最佳匹配指针,根据当前最佳匹配指针计算对应的LNODE的地址,根据计算出来的地址以及节点在DRAM内的分布,计算出需要访问哪个DRAM或者SRAM,向对应的RAM发送读请求,得到读回的结果后,经由连接块6A返回图6A中继续执行步骤605;
627、判断读出的节点的偏移量域是否指示上一节点内存在匹配的前缀,如果上一节点内不存在匹配的前缀,则执行步骤629;如果上一节点内存在匹配的前缀,则执行步骤628;
628、将上一节点内指向叶子节点数组的指针和本节点的偏移量域相加,用得到的结果更新当前最佳匹配指针,并执行步骤629;
629、判断当前节点的分支指示域和搜索关键字的对应比特是否匹配,即是否出现查错路径的情况,如果查错路径,则执行步骤630;如果没有查错路径,则执行步骤632;
630、判断当前最佳匹配指针是否有效,如果无效,则查询失败,搜索过程至此结束;如果有效,则执行步骤631;
631、根据当前最佳匹配指针计算对应的LNODE的地址,根据计算出来的地址以及节点在DRAM内的分布,计算出需要访问哪个DRAM或者SRAM,向对应的RAM发出读请求,得到读回的结果后,经由连接块6A返回图6A中继续执行步骤605;
632、根据搜索关键字判断当前节点的子节点位图内对应的比特是否为0,如果是0,则执行步骤633;如果为1,则执行步骤635;
633、判断当前节点内的内部节点是否存在指示域(INODE Exist Flag)是否为1,如果为1,则执行步骤634;如果为0,则执行步骤630;
634、根据本节点内指向子节点数组的指针计算下一个要读取的节点的地址,根据计算出来的地址以及节点在DRAM内的分布,计算出需要访问哪个DRAM或者SRAM,向对应的RAM发送读请求,得到读回的结果后,经由连接块6A返回图6A中继续执行步骤605;
635、根据搜索关键字判断当前节点的类型位图内对应的比特是否为0,如果为0,则执行步骤636,否则,执行步骤637;
636、确定对应的路径延伸出本节点后有1个分支,并执行步骤638;
637、确定对应的路径延伸出本节点后有2个分支,并执行步骤638;
638、根据当前节点的子节点位图、类型位图、指向子节点数组的指针以及搜索关键字的对应比特,计算出下一个需要读取的节点的地址,根据计算出来的地点以及节点在DRAM中的分布,计算出需要访问哪个DRAM或者SRAM,向对应的RAM发送读请求,得到读回的结果后,经由连接块6A返回图6A中继续执行步骤605;
以上对搜索Trie树进行最长前缀匹配的过程进行了详细的描述,可以理解的是,实施例中所述的执行顺序并不是唯一的,例如,可以先判断所读取的节点的分支指示比特是否与搜索关键字的对应比特匹配,并在匹配时,再判断节点类型。并且,判断节点类型的顺序没有一定的限制,例如,可以先判断是否为TNODE,也可以最先判断是否为LNODE等等。
以下对本发明实施例中所采用的搜索装置进行对应描述:
参照图7,为本发明实施例中搜索装置实施例一结构示意图,该装置用于基于一个树形数据结构搜索匹配的长度最长的前缀,所述树形数据结构代表多个前缀,前缀被区分为至少一个步,每个节点表示一步,所述搜索装置从至少一个存储器中读取节点,该装置包括:
读取单元71,用于读取树形数据结构中的节点;
最佳匹配指针确定单元72,用于确定读取的节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,并在存在匹配的前缀时,将上一级别的节点内指向叶子节点数组的指针和所述节点的偏移量域相加,更新当前最佳匹配指针;
分支指示域确定单元73,用于确定所述节点的分支指示域和搜索关键字的对应比特是否匹配,并在匹配时,触发子节点位图确定单元74;
子节点位图确定单元74,用于根据子节点位图确定所述节点是否存在子节点,在不存在子节点时,触发内部节点匹配单元75;
内部位图匹配单元75,用于读取所述节点的内部位图,并根据所述内部位图和所述节点内指向叶子节点数组的指针,计算所述节点内存在的最长匹配的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址。
本实施例中通过最佳匹配指针确定单元72确定当前最佳匹配指针,通过分支指示域确定单元确定节点的分支指示域和搜索关键字的对应比特是否匹配,并在匹配时触发子节点位图确定单元、并由子节点位图确定单元74确定所述节点是否存在子节点,在所述节点不存在子节点时,触发内部位图匹配单元75根据所述内部位图和所述搜索节点内指向叶子节点数组的指针,计算所述搜索节点内存在的最长匹配的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址。设读取的节点的步长为r,采用本实施例中的搜索装置搜索,一次可以确定搜索关键字的r+1比特是否匹配,因此,可以提高查询速度。
可以对上述实施例作进一步的优化,以下通过几个具体实施例进行详细说明:
参照图8,为本发明实施例中搜索装置实施例二结构示意图,所述搜索装置中,所述子节点位图确定单元还用于在存在子节点时,触发下一节点地址计算单元81;
下一节点地址计算单元81,用于在子节点位图确定单元74确定所述节点存在子节点时,根据所述节点的类型位图判断所述节点的分支数,并根据所述节点的子节点位图、类型位图、指向子节点数组的指针以及搜索关键字的对应比特,计算出下一个需要读取的节点的地址,并触发读取单元71,以读取要搜索的节点。
该搜索装置可以对一个存在子节点的节点进行搜索,以查找最长匹配的前缀。
在上述实施例中,为提高查询速度,可以设置多个存储器,每个存储器用于存储一级节点。
并且,所述节点的内部位图作为独立的内部节点与所述节点的子节点数组连续存放,这样,如果存在匹配的下一级节点,则不需要读取所述内部节点,如果不存在匹配的下一级节点,则读取内部位图,这样可以保证一次只读取一个存储器,可以进一步提高查询速度。
还可以对实施例二作进一步优化,以下通过具体的实施例进行说明:
参照图9,为本发明实施例中搜索装置实施例三结构示意图,该搜索装置在实施例一基础上,还可包括:跳读节点匹配单元91,用于当分支指示域确定单元73确定读取到的跳读节点的分支指示域和搜索关键字的对应比特匹配时,确定所读取的跳读节点的比较数据与搜索关键字的对应比特是否相等,并在相等时,根据所述跳读节点内指向子节点数组的指针计算下一个要读取的节点的地址,并触发读取单元71读取下一个节点以继续搜索。
可见,该搜索装置中,当树形数据结构上出现连续的单分支路径时,通过跳读节点匹配单元判断所述连续的单分支路径与搜索关键字对应比特是否匹配,一次可以读取多个节点,因此可以进一步加快查询速度。
在实施例二和实施例三所描述的搜索装置中,还可包括:结束节点匹配单元,为描述方便,以在实施例一的基础上进行扩展说明,参照图10,为本发明实施例中搜索装置实施例四结构示意图,该装置在实施例一基础上,还包括:结束节点匹配单元101,用于当分支指示域确定单元73确定读取到的结束节点的分支指示域和搜索关键字的对应比特匹配时,根据所述结束节点的内部位图和结束节点内指向叶子节点数组的指针计算出所述结束节点内与搜索关键字匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点地址。
所述搜索装置通过结束节点匹配单元查找结束节点内是否有匹配的长度最长的前缀,结束节点没有子节点,因此节点内不需要存放节点的子节点位图和类型位图,而将内部位图放在节点内,因此可以少读一次存储器,从而提高查询性能。
在上述实施例中所描述的搜索装置中,还可以作进一步优化,参照图11,为本发明实施例中搜索装置实施例五结构示意图,为在搜索装置实施例一基础上进行扩展,所扩展的有效指针对应叶子节点地址计算单元111,用于当所述分支指示域确定单元73确定当前读取到的节点的分支指示域和搜索关键字的对应比特不匹配时,判断当前最佳匹配指针是否有效,并在有效时,根据当前最佳匹配指针计算对应的叶子节点的地址。
可见,该实施例中通过有效指针对应叶子节点地址计算单元在当前最佳匹配指针有效时,根据当前最佳匹配指针计算对应的叶子节点的地址,即使读取到的节点的分支指示域和搜索关键字的对应比特不匹配时,即搜索到错误的路径上,也可以保证所读取的叶子节点的地址正确。
本发明实施例中所述的搜索装置可以应用于多个领域中,例如,可以应用于计算机或者通信技术领域,以下以在通信领域中所应用的一种装置进行详细说明:
参照图12,为本发明实施例中路由器实施例结构示意图,该路由器包括:
包处理器121,用于发送查询请求,并接收搜索引擎发送的查询结果;
至少一个存储器122,用于存储树形数据结构中的节点,所述树形数据结构代表多个前缀,前缀被区分为至少一步,每个节点表示一步;
搜索引擎123,用于在接收到包处理器121的查询请求时,从存储器122中读取节点,确定读取到的节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,并在存在匹配的前缀时,将上一级别的节点内指向叶子节点数组的指针和所述节点的偏移量域相加,更新当前最佳匹配指针;在确定所述节点的分支指示域和搜索关键字的对应是否匹配,并在匹配时,根据子节点位图确定所述节点是否存在子节点,并在不存在子节点时,读取所述节点的内部位图,并根据所述内部位图和所述节点内指向叶子节点数组的指针,计算所述节点内存在的最长匹配的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址,并将计算结果返回给包处理器121。
本实施例所介绍的路由器中,由搜索引擎123确定当前最佳匹配指针,确定节点的分支指示域和搜索关键字的对应比特是否匹配,并在匹配时确定所述节点是否存在子节点,在所述节点不存在子节点时,根据所述内部位图和所述搜索节点内指向叶子节点数组的指针,计算所述搜索节点内存在的最长匹配的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址。设读取的节点的步长为r,采用本实施例中的路由器搜索,一次可以确定搜索关键字的r+1比特是否匹配,因此,可以提高查询速度。
可以对上述路由器实施例作进一步的优化,例如:
所述搜索引擎123还可用于在确定所述节点存在子节点时,根据所述节点的类型位图判断所述节点的分支数,并根据所述节点的子节点位图、类型位图、指向子节点数组的指针以及搜索关键字的对应比特,计算出下一个需要读取的节点的地址,并继续从存储器中读取下一个要搜索的节点。
这样可以对一个存在子节点的节点进行搜索,以查找最长匹配的前缀。
所述搜索引擎123还可用于在确定读取到的跳读节点的分支指示域和搜索关键字的对应比特匹配时,确定所读取的跳读节点的比较数据与搜索关键字的对应比特是否相等,并在相等时,根据所述跳读节点内指向子节点数组的指针计算下一个要读取的节点的地址,并读取下一个节点以继续搜索。
这样一来,当树形数据结构上出现连续的单分支路径时,通过搜索引擎判断所述连续的单分支路径与搜索关键字对应比特是否匹配,一次可以读取多个节点,因此可以进一步加快查询速度。
所述搜索引擎123还可用于在确定读取到的结束节点的分支指示域和搜索关键字的对应比特匹配时,根据所述结束节点的内部位图和结束节点内指向叶子节点数组的指针计算出所述结束节点内与搜索关键字匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点地址。
由搜索引擎查找结束节点内是否有匹配的长度最长的前缀,结束节点没有子节点,因此节点内不需要存放节点的子节点位图和类型位图,而将内部位图放在节点内,因此可以少读一次存储器,从而提高查询性能。
所述搜索引擎123还可用于在确定读取到的节点的分支指示域和搜索关键字的对应比特不匹配时,判断当前最佳匹配指针是否有效,并在有效时,根据当前最佳匹配指针计算对应的叶子节点的地址。
这样,根据当前最佳匹配指针计算对应的叶子节点的地址,即使读取到的节点的分支指示域和搜索关键字的对应比特不匹配时,即搜索到错误的路径上,也可以保证所读取的叶子节点的地址正确。
可以理解的是,在以上实施例中所介绍的路由器中,还可包括:维护处理器,用于向所述搜索引擎发送指令;
所述搜索引擎还用于根据维护处理器发送的指令对存储器执行读或写操作,并将指令执行结果返回给维护处理器。
在以上所介绍的路由器实施例中,存储器可以为SRAM,也可以为DRAM,用户可以根据需要灵活选择,并且,为了进一步提高查询速度,存储器可以为多个,每个存储器可以分别用于存储一级节点。
而且,所述节点的内部位图作为独立的内部节点与所述节点的子节点数组连续存放。这样,如果存在匹配的下一级节点,则不需要读取所述内部节点,如果不存在匹配的下一级节点,则读取内部位图,这样可以保证一次只读取一个存储器,可以进一步提高查询速度。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括如下步骤:
A.读取所述树形数据结构中当前级别的一个搜索节点;
B.确定读出的所述搜索节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,如果存在,则将上一级别的节点内指向叶子节点数组的指针和当前搜索节点的偏移量域相加,更新当前最佳匹配指针,并执行步骤C,否则直接执行步骤C;
C.当确定所述搜索节点的分支指示域和搜索关键字的对应比特匹配时,根据子节点位图确定所述搜索节点是否存在子节点;
D.当确定所述搜索节点不存在子节点时,读取所述搜索节点的内部位图,并根据所述内部位图和所述搜索节点内指向叶子节点数组的指针,计算所述搜索节点内存在的匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上对本发明所提供的一种基于树形数据结构的最长前缀匹配的方法和装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (18)
1.一种基于树形数据结构的最长前缀匹配方法,其特征在于,所述树形数据结构代表多个前缀,前缀被区分为至少一个步,每个节点表示一步,所述方法包括:
A.读取所述树形数据结构中当前级别的一个搜索节点;
B.确定读出的所述搜索节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,如果存在匹配的前缀,则将上一级别的节点内指向叶子节点数组的指针和所述搜索节点的偏移量域相加,更新当前最佳匹配指针,并执行步骤C;如果不存在匹配的前缀,直接执行步骤C,其中,如果当前节点的父节点内存在匹配的前缀,所述偏移量域用于指出该前缀对应的下一跳信息的地址相对于父节点内所存储的指向叶子节点数组的指针的偏移量,所述最佳匹配指针为:匹配的长度最长的前缀所对应的下一跳信息的地址;
C.当确定所述搜索节点的分支指示域和搜索关键字的对应比特匹配时,根据子节点位图确定所述搜索节点是否存在子节点,其中,所述分支指示域用于指示当前路径延伸出本节点的父节点时,本节点位于路径的左分支还是右分支;
D.当确定所述搜索节点不存在子节点时,读取所述搜索节点的内部位图,并根据所述内部位图和所述搜索节点内指向叶子节点数组的指针,计算所述搜索节点内存在的匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址,其中,所述内部位图用于指示该内部节点所对应的搜索节点内存在的前缀。
2.如权利要求1所述的基于树形数据结构的最长前缀匹配方法,其特征在于,进一步包括:
当确定所述搜索节点存在子节点时,根据所述搜索节点的类型位图判断当前节点的分支数,并根据所述搜索节点的子节点位图、类型位图、指向子节点数组的指针以及搜索关键字的对应比特,计算出下一个需要读取的节点的地址,并重复执行步骤A、B、C以继续执行搜索过程。
3.如权利要求2所述的基于树形数据结构的最长前缀匹配方法,其特征在于,进一步包括:
确定读取到一个跳读节点,所述跳读节点用于表示连续的单分支路径;
当确定读取到的所述跳读节点的分支指示域和搜索关键字的对应比特匹配,且所述跳读节点的比较数据与搜索关键字的对应比特相等时,根据所述跳读节点内指向子节点数组的指针计算下一个要读取的节点的地址,并读取下一个节点以继续执行搜索过程。
4.如权利要求2所述的基于树形数据结构的最长前缀匹配方法,其特征在于,进一步包括:
读取到一个结束节点;
当确定读取到的所述结束节点的分支指示域和搜索关键字的对应比特匹配时,根据所述结束节点的内部位图和结束节点内指向叶子节点数组的指针计算出所述结束节点内与搜索关键字匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点地址。
5.如权利要求1或2所述的基于树形数据结构的最长前缀匹配方法,其特征在于,所述搜索节点的内部位图作为独立的节点与所述当前节点的子节点数组连续存储。
6.如权利要求1至4任一项所述的基于树形数据结构的最长前缀匹配方法,其特征在于,进一步包括:
当确定当前读取到的节点的分支指示域和搜索关键字的对应比特不匹配时,判断当前最佳匹配指针是否有效,如果有,则根据当前最佳匹配指针计算对应的叶子节点的地址。
7.一种搜索装置,其特征在于,所述装置用于基于一个树形数据结构搜索匹配的长度最长的前缀,所述树形数据结构代表多个前缀,前缀被区分为至少一个步,每个节点表示一步,所述搜索装置从至少一个存储器中读取节点,包括:
读取单元,用于读取树形数据结构中的节点;
最佳匹配指针确定单元,用于确定读取的节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,并在存在匹配的前缀时,将上一级别的节点内指向叶子节点数组的指针和所述节点的偏移量域相加,更新当前最佳匹配指针,其中,如果当前节点的父节点内存在匹配的前缀,所述偏移量域用于指出该前缀对应的下一跳信息的地址相对于父节点内所存储的指向叶子节点数组的指针的偏移量,所述最佳匹配指针为:匹配的长度最长的前缀所对应的下一跳信息的地址;
分支指示域确定单元,用于确定所述节点的分支指示域和搜索关键字的对应比特是否匹配,并在匹配时,触发子节点位图确定单元,其中,所述分支指示域用于指示当前路径延伸出本节点的父节点时,本节点位于路径的左分支还是右分支;
子节点位图确定单元,用于根据子节点位图确定所述节点是否存在子节点,在不存在时,触发内部节点匹配单元;
内部位图匹配单元,用于读取所述节点的内部位图,并根据所述内部位图和所述节点内指向叶子节点数组的指针,计算所述节点内存在的最长匹配的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址,其中,所述内部位图用于指示该内部节点所对应的搜索节点内存在的前缀。
8.如权利要求7所述的搜索装置,其特征在于,还包括:下一节点地址计算单元,用于当子节点位图确定单元确定所述节点存在子节点时,根据所述节点的类型位图判断所述节点的分支数,并根据所述节点的子节点位图、类型位图、指向子节点数组的指针以及搜索关键字的对应比特,计算出下一个需要读取的节点的地址,并触发读取单元,以读取要搜索的节点。
9.如权利要求8所述的搜索装置,其特征在于,所述存储器为多个,每个存储器用于存储一级节点。
10.如权利要求9所述的搜索装置,其特征在于,所述节点的内部位图作为独立的内部节点与所述节点的子节点数组连续存放。
11.如权利要求8所述的搜索装置,其特征在于,还包括:跳读节点匹配单元,用于当分支指示域确定单元确定读取到的跳读节点的分支指示域和搜索关键字的对应比特匹配时,确定所读取的跳读节点的比较数据与搜索关键字的对应比特是否相等,并在相等时,根据所述跳读节点内指向子节点数组的指针计算下一个要读取的节点的地址,并触发读取单元读取下一个节点以继续搜索;
所述跳读节点用于表示连续的单分支路径。
12.如权利要求8所述的搜索装置,其特征在于,还包括:结束节点匹配单元,用于当分支指示域确定单元确定读取到的结束节点的分支指示域和搜索关键字的对应比特匹配时,根据所述结束节点的内部位图和结束节点内指向叶子节点数组的指针计算出所述结束节点内与搜索关键字匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点地址。
13.如权利要求7至12任一项所述的搜索装置,其特征在于,还包括:有效指针对应叶子节点地址计算单元,用于当所述分支指示域确定单元确定当前读取到的节点的分支指示域和搜索关键字的对应比特不匹配时,判断当前最佳匹配指针是否有效,并在有效时,根据当前最佳匹配指针计算对应的叶子节点的地址。
14.一种路由器,其特征在于,包括:
包处理器,用于发送查询请求,并接收搜索引擎发送的查询结果;
至少一个存储器,用于存储树形数据结构中的节点,所述树形数据结构代表多个前缀,前缀被区分为至少一步,每个节点表示一步;
搜索引擎,用于在接收到包处理器的查询请求时,从存储器中读取节点,确定读取到的节点的偏移量域是否指示上一级别的节点内存在匹配的前缀,并在存在匹配的前缀时,将上一级别的节点内指向叶子节点数组的指针和所述节点的偏移量域相加,更新当前最佳匹配指针;在确定所述节点的分支指示域和搜索关键字的对应是否匹配,并在匹配时,根据子节点位图确定所述节点是否存在子节点,并在不存在子节点时,读取所述节点的内部位图,并根据所述内部位图和所述节点内指向叶子节点数组的指针,计算所述节点内存在的最长匹配的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点的地址,并将计算结果返回给包处理器;
如果当前节点的父节点内存在匹配的前缀,所述偏移量域用于指出该前缀对应的下一跳信息的地址相对于父节点内所存储的指向叶子节点数组的指针的偏移量;
所述最佳匹配指针为:匹配的长度最长的前缀所对应的下一跳信息的地址;
所述分支指示域用于指示当前路径延伸出本节点的父节点时,本节点位于路径的左分支还是右分支;
所述内部位图用于指示该内部节点所对应的搜索节点内存在的前缀。
15.如权利要求14所述的路由器,其特征在于,所述搜索引擎还用于在确定所述节点存在子节点时,根据所述节点的类型位图判断所述节点的分支数,并根据所述节点的子节点位图、类型位图、指向子节点数组的指针以及搜索关键字的对应比特,计算出下一个需要读取的节点的地址,并继续从存储器中读取下一个要搜索的节点。
16.如权利要求15所述的路由器,其特征在于,所述搜索引擎还用于在确定读取到的跳读节点的分支指示域和搜索关键字的对应比特匹配时,确定所读取的跳读节点的比较数据与搜索关键字的对应比特是否相等,并在相等时,根据所述跳读节点内指向子节点数组的指针计算下一个要读取的节点的地址,并读取下一个节点以继续搜索;
所述跳读节点用于表示连续的单分支路径。
17.如权利要求15所述的路由器,其特征在于,所述搜索引擎还用于在确定读取到的结束节点的分支指示域和搜索关键字的对应比特匹配时,根据所述结束节点的内部位图和结束节点内指向叶子节点数组的指针计算出所述结束节点内与搜索关键字匹配的长度最长的前缀,用计算结果更新当前最佳匹配指针,并计算所述当前最佳匹配指针所对应的叶子节点地址。
18.如权利要求14至17任一项所述的路由器,其特征在于,所述搜索引擎还用于在确定当前读取到的节点的分支指示域和搜索关键字的对应比特不匹配时,判断当前最佳匹配指针是否有效,并在有效时,根据当前最佳匹配指针计算对应的叶子节点的地址。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100969062A CN101577662B (zh) | 2008-05-05 | 2008-05-05 | 一种基于树形数据结构的最长前缀匹配方法和装置 |
US12/241,513 US7539153B1 (en) | 2008-05-05 | 2008-09-30 | Method and apparatus for longest prefix matching based on a trie |
PCT/CN2009/071523 WO2009135417A1 (zh) | 2008-05-05 | 2009-04-28 | 一种基于树形数据结构的最长前缀匹配方法和装置 |
EP09159417A EP2117184B1 (en) | 2008-05-05 | 2009-05-05 | Method and apparatus for longest prefix matching based on a tree |
AT09159417T ATE549829T1 (de) | 2008-05-05 | 2009-05-05 | Verfahren und vorrichtung zum finden des längsten präfixes auf grundlage einer baumstruktur |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100969062A CN101577662B (zh) | 2008-05-05 | 2008-05-05 | 一种基于树形数据结构的最长前缀匹配方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101577662A CN101577662A (zh) | 2009-11-11 |
CN101577662B true CN101577662B (zh) | 2012-04-04 |
Family
ID=40652132
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008100969062A Active CN101577662B (zh) | 2008-05-05 | 2008-05-05 | 一种基于树形数据结构的最长前缀匹配方法和装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7539153B1 (zh) |
EP (1) | EP2117184B1 (zh) |
CN (1) | CN101577662B (zh) |
AT (1) | ATE549829T1 (zh) |
WO (1) | WO2009135417A1 (zh) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7861291B2 (en) * | 2006-06-02 | 2010-12-28 | Freescale Semiconductor, Inc. | System and method for implementing ACLs using standard LPM engine |
EP2241983B1 (en) * | 2009-04-17 | 2012-12-19 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Method for searching objects in a database |
US8780926B2 (en) * | 2009-12-01 | 2014-07-15 | Polytechnic Institute Of New York University | Updating prefix-compressed tries for IP route lookup |
WO2011110003A1 (zh) | 2010-08-24 | 2011-09-15 | 华为技术有限公司 | 二叉树建立、压缩和查找的方法和装置 |
US8527546B2 (en) | 2010-11-25 | 2013-09-03 | International Business Machines Corporation | Generating a checkpoint image for use with an in-memory database |
CN102045412B (zh) * | 2010-12-28 | 2013-01-16 | 赛尔网络有限公司 | IPv6地址前缀压缩存储方法及设备 |
US9155320B2 (en) * | 2011-07-06 | 2015-10-13 | International Business Machines Corporation | Prefix-based leaf node storage for database system |
US9158758B2 (en) * | 2012-01-09 | 2015-10-13 | Microsoft Technology Licensing, Llc | Retrieval of prefix completions by way of walking nodes of a trie data structure |
US9680747B2 (en) | 2012-06-27 | 2017-06-13 | Futurewei Technologies, Inc. | Internet protocol and Ethernet lookup via a unified hashed trie |
US8732207B2 (en) | 2012-07-02 | 2014-05-20 | International Business Machines Corporation | Attribute-based linked tries for rule evaluation |
US8902902B2 (en) * | 2012-07-18 | 2014-12-02 | Netronome Systems, Incorporated | Recursive lookup with a hardware trie structure that has no sequential logic elements |
CN102831224B (zh) * | 2012-08-24 | 2018-09-04 | 北京百度网讯科技有限公司 | 一种数据索引库的建立方法、搜索建议生成方法和装置 |
CN102868779B (zh) * | 2012-09-20 | 2016-01-20 | 北京锐安科技有限公司 | 一种IPv6数据分区及快速查找方法 |
CN103778124A (zh) * | 2012-10-17 | 2014-05-07 | 北大方正集团有限公司 | 一种树形结构查询方法及装置 |
CN103780491B (zh) * | 2012-10-23 | 2018-01-23 | 上海博达数据通信有限公司 | 一种实现IPv6快速路由查找的方法 |
CN103051543B (zh) * | 2012-11-01 | 2015-09-09 | 广州键智桥网络技术有限公司 | 一种路由前缀的处理、查找、增加及删除方法 |
US9172743B2 (en) * | 2012-12-31 | 2015-10-27 | Futurewei Technologies, Inc. | Scalable storage systems with longest prefix matching switches |
US9602407B2 (en) * | 2013-12-17 | 2017-03-21 | Huawei Technologies Co., Ltd. | Trie stage balancing for network address lookup |
CN104780100B (zh) * | 2014-01-09 | 2019-06-04 | 中兴通讯股份有限公司 | 一种路由查找方法和路由器 |
CN104932982B (zh) * | 2014-03-21 | 2019-02-12 | 华为技术有限公司 | 一种消息访存的编译方法及相关装置 |
CN104679854B (zh) * | 2015-02-15 | 2018-01-26 | 中国科学院计算技术研究所 | 路由表存储与查找方法 |
JP5960863B1 (ja) * | 2015-03-11 | 2016-08-02 | エヌ・ティ・ティ・コミュニケーションズ株式会社 | 検索装置、検索方法、プログラム、及び記録媒体 |
CN106126722B (zh) * | 2016-06-30 | 2019-10-18 | 中国科学院计算技术研究所 | 一种基于验证的前缀混合树及设计方法 |
CN107590258B (zh) * | 2017-09-20 | 2020-04-28 | 杭州安恒信息技术股份有限公司 | 关键字匹配方法及装置 |
CN111316255B (zh) * | 2017-11-20 | 2023-11-03 | 华为技术有限公司 | 数据存储系统以及用于提供数据存储系统的方法 |
CN110245330B (zh) * | 2018-03-09 | 2023-07-07 | 腾讯科技(深圳)有限公司 | 字符序列匹配方法、实现匹配的预处理方法和装置 |
CN110309368B (zh) * | 2018-03-26 | 2023-09-22 | 腾讯科技(深圳)有限公司 | 数据地址的确定方法、装置、存储介质和电子装置 |
CN108647338B (zh) * | 2018-05-14 | 2022-07-29 | 五八有限公司 | bitmap计算方法、装置、设备及存储介质 |
CN111819552B (zh) * | 2018-06-20 | 2024-08-02 | 华为技术有限公司 | 访问控制列表的管理方法及装置 |
US11178054B1 (en) * | 2018-08-22 | 2021-11-16 | Marvell Israel (M.I.S.L) Ltd. | Method and apparatus for longest prefix match search |
EP3844762A1 (en) * | 2018-08-28 | 2021-07-07 | Koninklijke Philips N.V. | Method and system for normalization of gene names in medical text |
CN111382323B (zh) * | 2018-12-29 | 2023-08-11 | 贵州白山云科技股份有限公司 | 一种数据检索优化方法、装置和计算机设备 |
CN109902088A (zh) * | 2019-02-13 | 2019-06-18 | 北京航空航天大学 | 一种面向流式时序数据的数据索引方法 |
CN110442570B (zh) * | 2019-06-06 | 2021-08-17 | 北京左江科技股份有限公司 | 一种BitMap高速模糊查找方法 |
CN111131015B (zh) * | 2019-12-27 | 2021-09-03 | 芯启源(南京)半导体科技有限公司 | 一种基于PC-Trie动态更新路由的方法 |
CN112637053B (zh) * | 2020-12-30 | 2022-05-20 | 锐捷网络股份有限公司 | 路由的备份转发路径的确定方法及装置 |
CN112887212B (zh) * | 2021-02-25 | 2022-03-29 | 清华大学 | 基于可变步宽trie树的高速路由查找方法和装置 |
CN115190071A (zh) * | 2021-04-02 | 2022-10-14 | 华为技术有限公司 | 一种缓存方法及集成电路 |
CN115086221B (zh) * | 2022-07-27 | 2022-11-22 | 新华三半导体技术有限公司 | 一种报文处理方法、装置、转发设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7212531B1 (en) * | 2001-11-27 | 2007-05-01 | Marvell Semiconductor Israel Ltd. | Apparatus and method for efficient longest prefix match lookup |
CN1996953A (zh) * | 2006-12-20 | 2007-07-11 | 中国科学院计算技术研究所 | 一种实现无回溯的最长前缀匹配搜索的方法和装置 |
CN101141389A (zh) * | 2007-09-29 | 2008-03-12 | 华为技术有限公司 | 增强多位Trie树查找方法和装置 |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5787430A (en) | 1994-06-30 | 1998-07-28 | International Business Machines Corporation | Variable length data sequence backtracking a trie structure |
US6011795A (en) | 1997-03-20 | 2000-01-04 | Washington University | Method and apparatus for fast hierarchical address lookup using controlled expansion of prefixes |
US6041053A (en) * | 1997-09-18 | 2000-03-21 | Microsfot Corporation | Technique for efficiently classifying packets using a trie-indexed hierarchy forest that accommodates wildcards |
US6396842B1 (en) * | 1998-04-30 | 2002-05-28 | 3Com Corporation | Method of searching using longest match based Randix Search Trie with variable length keys and having prefix capability |
JP3570323B2 (ja) | 1999-05-11 | 2004-09-29 | 日本電気株式会社 | アドレスに関するプレフィクスの格納方法 |
US7249149B1 (en) * | 1999-08-10 | 2007-07-24 | Washington University | Tree bitmap data structures and their use in performing lookup operations |
US6697363B1 (en) | 2000-06-28 | 2004-02-24 | Alcatel Canada Inc. | Method and apparatus for longest matching prefix determination in a communication network |
US20070192863A1 (en) | 2005-07-01 | 2007-08-16 | Harsh Kapoor | Systems and methods for processing data flows |
US6888838B1 (en) | 2000-11-16 | 2005-05-03 | Tensilica, Inc. | Fast IP route lookup with configurable processor and compressed routing table |
US7274697B2 (en) | 2000-11-16 | 2007-09-25 | Tensilica, Inc. | Fast IP route lookup with 16/K and 16/Kc compressed data structures |
US6816856B2 (en) | 2001-06-04 | 2004-11-09 | Hewlett-Packard Development Company, L.P. | System for and method of data compression in a valueless digital tree representing a bitset |
US6785687B2 (en) | 2001-06-04 | 2004-08-31 | Hewlett-Packard Development Company, L.P. | System for and method of efficient, expandable storage and retrieval of small datasets |
US20030196076A1 (en) | 2001-07-02 | 2003-10-16 | Globespan Virata Incorporated | Communications system using rings architecture |
US6691171B1 (en) | 2002-02-01 | 2004-02-10 | Micrel, Inc. | Method and system for address lookup in data communication |
US20030174717A1 (en) | 2002-03-15 | 2003-09-18 | Boris Zabarski | System and method for longest prefix match for internet protocol lookup |
US7899067B2 (en) | 2002-05-31 | 2011-03-01 | Cisco Technology, Inc. | Method and apparatus for generating and using enhanced tree bitmap data structures in determining a longest prefix match |
US7415472B2 (en) | 2003-05-13 | 2008-08-19 | Cisco Technology, Inc. | Comparison tree data structures of particular use in performing lookup operations |
US7415463B2 (en) | 2003-05-13 | 2008-08-19 | Cisco Technology, Inc. | Programming tree data structures and handling collisions while performing lookup operations |
US7760719B2 (en) | 2004-06-30 | 2010-07-20 | Conexant Systems, Inc. | Combined pipelined classification and address search method and apparatus for switching environments |
US20060221967A1 (en) | 2005-03-31 | 2006-10-05 | Narayan Harsha L | Methods for performing packet classification |
US20060221956A1 (en) | 2005-03-31 | 2006-10-05 | Narayan Harsha L | Methods for performing packet classification via prefix pair bit vectors |
US7551609B2 (en) | 2005-10-21 | 2009-06-23 | Cisco Technology, Inc. | Data structure for storing and accessing multiple independent sets of forwarding information |
US20070121632A1 (en) | 2005-11-28 | 2007-05-31 | Arabella Software, Ltd. | Method and system for routing an IP packet |
WO2008014188A1 (en) | 2006-07-27 | 2008-01-31 | University Of Florida Research Foundation, Inc. | Dynamic tree bitmap for ip lookup and update |
US7630367B2 (en) | 2006-09-01 | 2009-12-08 | Wipro Limited | Approach for fast IP address lookups |
-
2008
- 2008-05-05 CN CN2008100969062A patent/CN101577662B/zh active Active
- 2008-09-30 US US12/241,513 patent/US7539153B1/en active Active
-
2009
- 2009-04-28 WO PCT/CN2009/071523 patent/WO2009135417A1/zh active Application Filing
- 2009-05-05 AT AT09159417T patent/ATE549829T1/de active
- 2009-05-05 EP EP09159417A patent/EP2117184B1/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7212531B1 (en) * | 2001-11-27 | 2007-05-01 | Marvell Semiconductor Israel Ltd. | Apparatus and method for efficient longest prefix match lookup |
CN1996953A (zh) * | 2006-12-20 | 2007-07-11 | 中国科学院计算技术研究所 | 一种实现无回溯的最长前缀匹配搜索的方法和装置 |
CN101141389A (zh) * | 2007-09-29 | 2008-03-12 | 华为技术有限公司 | 增强多位Trie树查找方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
ATE549829T1 (de) | 2012-03-15 |
US7539153B1 (en) | 2009-05-26 |
EP2117184B1 (en) | 2012-03-14 |
WO2009135417A1 (zh) | 2009-11-12 |
EP2117184A1 (en) | 2009-11-11 |
CN101577662A (zh) | 2009-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101577662B (zh) | 一种基于树形数据结构的最长前缀匹配方法和装置 | |
CN101667958B (zh) | 选择哈希函数的方法、存储及查找路由表的方法及装置 | |
US8295286B2 (en) | Apparatus and method using hashing for efficiently implementing an IP lookup solution in hardware | |
US6434144B1 (en) | Multi-level table lookup | |
CN101141389B (zh) | 增强多位Trie树查找方法和装置 | |
CN1316390C (zh) | 用树状分段改善树搜索性能和存储器带宽的方法和系统 | |
US20140188885A1 (en) | Utilization and Power Efficient Hashing | |
CN102609446B (zh) | 一种分布式Bloom过滤系统及其使用方法 | |
CN101621502A (zh) | 存储、查找路由表的方法及装置 | |
CN103051543A (zh) | 一种路由前缀的处理、查找、增加及删除方法 | |
JP4995125B2 (ja) | 固定長データの検索方法 | |
CN101626392B (zh) | 数据存储、查找的方法及系统 | |
CN110321325A (zh) | 文件索引节点查找方法、终端、服务器、系统及存储介质 | |
CN108134739B (zh) | 一种基于索引特里树的路由查找方法及装置 | |
CN102333036A (zh) | 一种实现高速路由查找的方法和系统 | |
CN103107945A (zh) | 一种快速查找ipv6路由的系统及方法 | |
CN102880628A (zh) | 哈希数据存储方法和装置 | |
CN110460529B (zh) | 一种内容路由器转发信息库存储结构的数据处理方法和芯片 | |
CN109460404A (zh) | 一种基于redis的高效Hbase分页查询方法 | |
CN101572647B (zh) | 一种数据查找的方法及装置 | |
US6925503B2 (en) | Method and system for performing a longest prefix match search | |
CN102984071B (zh) | 分段地址路由的路由表组织方法及查找路由的方法 | |
US7154892B2 (en) | Method and apparatus for managing LPM-based CAM look-up table, and recording medium therefor | |
CN109325023B (zh) | 一种数据处理方法及装置 | |
CN105812258B (zh) | 一种数据处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |