CN105227468A - 一种查找装置、查找方法和配置方法 - Google Patents
一种查找装置、查找方法和配置方法 Download PDFInfo
- Publication number
- CN105227468A CN105227468A CN201410280969.9A CN201410280969A CN105227468A CN 105227468 A CN105227468 A CN 105227468A CN 201410280969 A CN201410280969 A CN 201410280969A CN 105227468 A CN105227468 A CN 105227468A
- Authority
- CN
- China
- Prior art keywords
- prefix
- sets
- subtree
- mbt
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种查找装置,查找方法和配置方法。一个前缀节点中包含M个前缀集合,第i前缀节点对应第一步长的第一MBT子树,第i前缀节点中的第j前缀集合对应第二MBT子树,第二MBT子树是基于第二步长对第一MBT树划分得到的。这样,一个第一MBT子树对应的前缀节点的数据结构,可通过该子树内的第二MBT子树对应的前缀集合来描述。一个前缀集合对应的第二MBT子树小于第一MBT子树,因此用于描述前缀在第二MBT子树上的位置信息的比特数量可以减少,并且考虑到前缀分布较为稀松,因此本发明的前缀节点的数据结构与传统MBT算法相比可以提高编码,减少存储空间开销。
Description
技术领域
本发明涉及数据通信领域,尤其涉及一种查找装置、查找方法和配置方法。
背景技术
路由器的主要任务是进行网际协议(InternetProtocol,简称:IP)报文转发,也就是根据报文头中的目的IP地址将到达路由器输入端口的报文转发到正确的输出端口。路由查找就是根据报文的目的IP地址,查找路由器中的路由表,得到报文下一跳信息的过程。
路由表中的每条路由主要由一个前缀和对应的下一跳信息构成,前缀可以用‘0’,‘1’和‘*’组成的三值位串表示。路由查找采用最长前缀匹配(longestprefixmatch,简称LPM)原则。当有多个前缀与输入的IP地址匹配时,与该IP地址匹配的前缀中掩码最长的前缀对应的下一跳信息为最终的查找结果。
基于Trie树(也称前缀树)的算法根据前缀中的位串建立一棵二叉树或多叉树。如果每次考虑一位,则建立一棵二叉树,也称为单位Trie树。图1示出了一棵单位Trie树,其中包含11个前缀,图1中左侧p0~p10,在单位Trie树中对应的节点用黑色圆圈表示,连接点用白色圆圈表示。如果每次考虑多位,则建立一棵多位Trie树。在多位Trie树中,每次考虑的位数一般是固定的,称为Trie树的步长(英文:stride)。
MBT(multi-bittrie,多位Trie)树算法是一种被广泛应用的路由查找算法。MBT可以看作按stride把一个单位Trie树分成多个子树,并为每个子树创建一个Trie节点。每个Trie节点均有一个关联前缀,一个Trie节点的关联前缀是该Trie节点对应的子树的根节点上的前缀值。位于一个子树内的前缀数量最多为2stride-1个,如果某个子树内分布有前缀,还要为该子树创建一个前缀(英文:prefix)节点,位于一个子树内的前缀都保存在该子树对应的prefix节点中。每个前缀对应一条下一跳信息。一般在MBT中只保存下一跳指针,也就是指向下一跳信息的指针。
图2示出了基于图1中的前缀建立的stride等于3的MBT树。该MBT树包括7个Trie节点,如图2中所示的TrieNodeT1~TrieNodeT7,每个Trie节点配置有一个前缀节点,如图2中所示PrefixNode。每个PrefixNode中保存有该PrefixNode对应的Trie节点中的各个前缀的下一跳指针,例如,图2中TrieNodeT4对应的prefix节点(prefix节点表示前缀节点)中保存有前缀p3的下一跳指针“REIndexofP3”。除了TrieNodeT1对应的前缀节点以外的每个前缀节点中,还保存一个最长前缀匹配(presentlongestprefixmatch,简称PLPM)。一个prefix节点的PLPM为覆盖该prefix节点对应的子树的最长前缀。图2中prefix节点中的“REIndexofPLPM”表示该prefix节点的PLPM的下一跳指针。
位于一个子树内的前缀都保存在该子树对应的prefix节点中。一个prefix节点中,通常会保存该prefix节点对应的子树内的所有前缀,并用位图指示prefix节点中保存的前缀,位图包括2stride-1个比特(bit)。比如,图2中的子树T4内有3个前缀p3、p6和p7,用7比特的位图表示即为1000101,表示该子树中第1、5、7个节点为前缀。
现有MBT算法中,为了减小树的深度,一般会加大步长的取值,比如取值为8。当步长较大时,prefix节点对应的位图所占比特也比较多。如果前缀分布比较稀疏,prefix节点中存储的前缀数量较少,但对应的位图仍需要占用较多比特,导致存储空间的开销较大,利用率低。
发明内容
本发明实施例提供了一种查找装置、查找方法和配置方法,用于提高前缀节点的编码效率,从而减少存储空间的开销。
第一方面,提供一种查找装置,所述查找装置包括:存储单元;
所述存储单元中配置有N个前缀节点,N≥1,每个前缀节点包括第一数据域,所述第一数据域中包括M个前缀集合,M≥1,其中:
第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长;其中,1≤i≤N,1≤j≤M;
所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置。
结合第一方面,在第一方面的第一种可能的实现方式中,所述第i前缀节点中还包括第二数据域,所述第二数据域中包括所述第一MBT子树中所有前缀各自所对应的下一跳。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述第二数据域设置于所述第一数据域之后;
所述第二数据域中各个前缀所对应的下一跳的顺序,与所述第一数据域中各个前缀集合中的第一位置信息所指示的前缀位置的顺序,相同或相反。
结合第一方面、第一方面的第一种至第二种可能的实现方式中的一种,在第一方面的第三种可能的实现方式中,所述第i前缀节点中还包括第三数据域,所述第三数据域中包括所述第i前缀节点中的所有前缀集合的数量、所述第i前缀节点中的所有前缀集合中的每个前缀集合的头部信息,其中,第j前缀集合的头部信息中包含所述第二MBT子树的关联前缀的长度。
结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述第三数据域设置于所述第一数据域之前;
所述第三数据域中各个前缀集合的头部信息的顺序,与所述第一数据域中各个前缀集合的顺序,相同或相反。
结合第一方面、第一方面的第一种至第四种可能的实现方式中的一种,在第一方面的第五种可能的实现方式中,所述第一数据域中的所述M个前缀集合按照查找顺序包括第1至第M前缀集合,所述M个前缀集合中,第j前缀集合中存储的关联前缀的长度,不小于第j+1前缀集合中存储的关联前缀的长度,1≤j<M。
结合第一方面、第一方面的第一种至第五种可能的实现方式,在第一方面的第六种可能的实现方式中,所述第i前缀节点中包含第一指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含唯一一个前缀,所述第j前缀集合中的第一位置信息为所述唯一一个前缀在所述第二MBT子树中的节点位置编号,所述第一位置信息的长度等于所述第二步长;或者
所述第i前缀节点中包含第二指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含至少2个前缀,所述第j前缀集合中的所述第一位置信息为位图,用于指示所述第二MBT子树中的所述至少2个前缀在该第二MBT子树中的位置,所述第一指示信息的长度为2stride-1,stride为所述第二步长。
结合第一方面、第一方面的第一种至第六种可能的实现方式中的一种,在第一方面的第七种可能的实现方式中,所述存储单元用于执行查找流程;或者,所述查找装置还包括查找单元,所述查找单元用于基于所述存储单元执行所述查找流程;
所述查找流程包括:
获得查找关键字;
在所述N个前缀节点中查找关联前缀与所述查找关键字最长匹配的前缀节点,针对查找到的前缀节点执行以下步骤:
根据前缀节点中前缀集合的总数量和每个前缀集合中的关联前缀的长度,确定每个前缀集合的存储位置、每个前缀集合中的关联前缀和第一位置信息的存储位置;
根据每个前缀集合中的关联前缀和第一位置信息的存储位置,获取每个前缀集合中的关联前缀和第一位置信息;
在所有前缀集合中查找关联前缀与所述查找关键字最长匹配的前缀集合;
根据查找到的前缀集合中的第一位置信息,确定与所述查找关键字最长匹配的前缀;
根据与所述查找关键字最长匹配的前缀获得下一跳,得到所述查找关键字的查找结果。
结合第一方面、第一方面的第一种至第七种可能的实现方式,在第一方面的第八种可能的实现方式中,还包括配置单元,所述配置单元用于配置所述存储单元中的前缀节点,具体的,所述配置单元具体用于:
获得待配置的前缀信息,所述前缀中包括至少一个地址前缀以及所述地址前缀所对应的下一跳;
在所有前缀节点中查找关联前缀与所述待配置的地址前缀最长匹配的前缀节点;
针对查找到的前缀节点执行以下操作:
根据前缀节点中前缀集合的总数量和每个前缀集合中的关联前缀的长度,确定每个前缀集合的存储位置、每个前缀集合中的关联前缀和第一位置信息的存储位置;
根据每个前缀集合中的关联前缀和第一位置信息的存储位置,获取每个前缀集合中的关联前缀和第一位置信息;
在所有前缀集合中查找关联前缀与所述待配置的地址前缀最长匹配的前缀集合;
在前缀节点中配置所述待配置的地址前缀所对应的下一跳,并更新与所述待配置的地址前缀最长匹配的前缀集合中的第一位置信息。
第二方面,提供一种查找方法,包括:
获得查找关键字;
在所配置的N个前缀节点中查找关联前缀与所述查找关键字最长匹配的前缀节点;其中,N≥1,每个前缀节点包括第一数据域,所述第一数据域中包括M个前缀集合,M≥1,其中:第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长,1≤i≤N,1≤j≤M,所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置;
针对查找到的前缀节点执行以下步骤:
根据前缀节点中前缀集合的总数量和每个前缀集合中的关联前缀的长度,确定每个前缀集合的存储位置、每个前缀集合中的关联前缀和第一位置信息的存储位置;
根据每个前缀集合中的关联前缀和第一位置信息的存储位置,获取每个前缀集合中的关联前缀和第一位置信息;
在所有前缀集合中查找关联前缀与所述查找关键字最长匹配的前缀集合;
根据查找到的前缀集合中的第一位置信息,确定与所述查找关键字最长匹配的前缀;
根据与所述查找关键字最长匹配的前缀获得下一跳,得到所述查找关键字的查找结果。
结合第二方面,在第二方面的第一种可能的实现方式中,所述第i前缀节点中还包括第二数据域,所述第二数据域中包括所述第一MBT子树中所有前缀各自所对应的下一跳。
结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述第二数据域设置于所述第一数据域之后;
所述第二数据域中各个前缀所对应的下一跳的顺序,与所述第一数据域中各个前缀集合中的第一位置信息所指示的前缀位置的顺序,相同或相反。
结合第二方面、第二方面的第一种至第二种可能的实现方式中的一种,在第二方面的第三种可能的实现方式中,所述第i前缀节点中还包括第三数据域,所述第三数据域中包括所述第i前缀节点中的所有前缀集合的数量、所述第i前缀节点中的所有前缀集合中的每个前缀集合的头部信息,其中,第j前缀集合的头部信息中包含所述第二MBT子树的关联前缀的长度。
结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述第三数据域设置于所述第一数据域之前;
所述第三数据域中各个前缀集合的头部信息的顺序,与所述第一数据域中各个前缀集合的顺序,相同或相反。
结合第二方面、第二方面的第一种至第四种可能的实现方式中的一种,在第二方面的第五种可能的实现方式中,所述第一数据域中的所述M个前缀集合按照查找顺序包括第1至第M前缀集合,所述M个前缀集合中,第j前缀集合中存储的关联前缀的长度,不小于第j+1前缀集合中存储的关联前缀的长度,1≤j<M。
结合第二方面、第二方面的第一种至第五种可能的实现方式中的一种,在第二方面的第六种可能的实现方式中,
所述第i前缀节点中包含第一指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含唯一一个前缀,所述第j前缀集合中的第一位置信息为所述唯一一个前缀在所述第二MBT子树中的节点位置编号,所述第一位置信息的长度等于所述第二步长;或者
所述第i前缀节点中包含第二指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含至少2个前缀,所述第j前缀集合中的所述第一位置信息为位图,用于指示所述第二MBT子树中的所述至少2个前缀在该第二MBT子树中的位置,所述第一指示信息的长度为2stride-1,stride为所述第二步长。
第三方面,提供一种配置方法,包括:
获得待配置的前缀信息,所述前缀中包括至少一个地址前缀以及所述地址前缀所对应的下一跳;
在所配置的N个前缀节点中查找关联前缀与所述待配置的地址前缀最长匹配的前缀节点;其中,N≥1,每个前缀节点包括第一数据域,所述第一数据域中包括M个前缀集合,M≥1,其中:第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长,1≤i≤N,1≤j≤M,所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置;
针对查找到的前缀节点执行以下操作:
根据前缀节点中前缀集合的总数量和每个前缀集合中的关联前缀的长度,确定每个前缀集合的存储位置、每个前缀集合中的关联前缀和第一位置信息的存储位置;
根据每个前缀集合中的关联前缀和第一位置信息的存储位置,获取每个前缀集合中的关联前缀和第一位置信息;
在所有前缀集合中查找关联前缀与所述待配置的地址前缀最长匹配的前缀集合;
在前缀节点中配置所述待配置的地址前缀所对应的下一跳,并更新与所述待配置的地址前缀最长匹配的前缀集合中的第一位置信息。
结合第三方面,在第三方面的第一种可能的实现方式中,所述第i前缀节点中还包括第二数据域,所述第二数据域中包括所述第一MBT子树中所有前缀各自所对应的下一跳。
结合第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述第二数据域设置于所述第一数据域之后;
所述第二数据域中各个前缀所对应的下一跳的顺序,与所述第一数据域中各个前缀集合中的第一位置信息所指示的前缀位置的顺序,相同或相反。
结合第三方面、第三方面的第一种至第二种可能的实现方式中的一种,在第三方面的第三种可能的实现方式中,所述第i前缀节点中还包括第三数据域,所述第三数据域中包括所述第i前缀节点中的所有前缀集合的数量、所述第i前缀节点中的所有前缀集合中的每个前缀集合的头部信息,其中,第j前缀集合的头部信息中包含所述第二MBT子树的关联前缀的长度。
结合第三方面的第三种可能的实现方式,在第三方面的第四种可能的实现方式中,所述第三数据域设置于所述第一数据域之前;
所述第三数据域中各个前缀集合的头部信息的顺序,与所述第一数据域中各个前缀集合的顺序,相同或相反。
结合第三方面、第三方面的第一种至第四种可能的实现方式中的一种,在第三方面的第五种可能的实现方式中,所述第一数据域中的所述M个前缀集合按照查找顺序包括第1至第M前缀集合,所述M个前缀集合中,第j前缀集合中存储的关联前缀的长度,不小于第j+1前缀集合中存储的关联前缀的长度,1≤j<M;
所述在所有前缀集合中查找关联前缀与所述待配置的地址前缀最长匹配的前缀集合,包括:
按照查找顺序,用前缀集合中的关联前缀与所述待配置的前缀进行匹配,并当查找到第一个关联前缀与所述待配置的前缀匹配的前缀集合时,将查找到的前缀集合确定为所述待配置的前缀最长匹配的前缀集合。
结合第三方面、第三方面的第一种至第五种可能的实现方式中的一种,在第三方面的第六种可能的实现方式中,
所述第i前缀节点中包含第一指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含唯一一个前缀,所述第j前缀集合中的第一位置信息为所述唯一一个前缀在所述第二MBT子树中的节点位置编号,所述第一位置信息的长度等于所述第二步长;或者
所述第i前缀节点中包含第二指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含至少2个前缀,所述第j前缀集合中的所述第一位置信息为位图,用于指示所述第二MBT子树中的所述至少2个前缀在该第二MBT子树中的位置,所述第一指示信息的长度为2stride-1,stride为所述第二步长。
本发明的上述实施例中引入了前缀集合,一个前缀节点中可包含M个前缀集合,M≥1。其中,第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长;所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置。这样,一个第一步长的MBT子树对应的前缀节点的数据结构,就可以通过该子树内的第二步长MBT子树对应的一个或多个前缀集合来描述。由于一个前缀集合对应的第二MBT子树小于所述第一MBT子树,因此用于描述前缀在第二MBT子树上的位置信息的比特数量,少于用于描述前缀在第一MBT子树上的位置信息的比特数量,并且考虑到前缀分布较为稀松,因此采用本发明实施例提供的前缀节点的数据结构与传统MBT算法相比可以提高编码,减少存储空间的开销。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为背景技术中的单位Trie树的示意图;
图2为背景技术中的MBT树的示意图;
图3a、图3b、图3c、图3d分别为本发明实施例提供的查找装置的结构示意图;
图4为本发明实施例中的PCL的数据结构示意图;
图5、图6分别为本发明实施例中的prefix节点的数据结构;
图7为本发明实施例中的MBT子树划分示意图;
图8为基于图7所示的MBT子树的prefix节点的数据结构示意图;
图9为本发明实施例提供的查找流程示意图;
图10为本发明实施例提供的配置流程示意图。
具体实施方式
针对现有查找算法存在的缺陷,本发明实施例提供了一种查找装置、查找方法和配置方法,通过高效的编码方式对prefix节点的数据结构进行编码,提高了prefix节点的编码效率,从而减少存储空间的开销。
为了更清楚地理解本发明,下面从以下几个方面对本发明进行详细说明:(一)查找装置的结构以及prefix节点的数据结构、(二)查找流程、(三)配置流程。
(一)查找装置的结构以及prefix节点的数据结构
本发明实施例提供的查找装置可以是位于路由器或交换机等用于实现报文转发的网络设备中的装置,例如查找模块,处理器,或硬件实现的查找引擎;或者也可以是路由器或交换机等用于实现报文转发的网络设备。
本发明实施例提供的查找装置中存储有前缀prefix节点。一个prefix节点可以看作是一个容器,即一个prefix节点对应一个数据结构。prefix节点用于存储前缀的相关信息。prefix节点有一定的容量限制,prefix节点的容量是指前缀节点的数据结构的大小,其单位为比特。
下面对本发明实施例中的查找装置以及prefix节点的数据结构进行详细描述。
参见图3a,为本发明实施例提供的查找装置的结构示意图。
该查找装置中可包括存储单元31。存储单元31可以是指逻辑器件实现的芯片,比如三态内容寻址寄存器(ternarycontentaddressablememory,简称TCAM),也可以是指存储器中的存储空间。
存储单元31中配置有N个前缀节点,N≥1,每个前缀节点包括第一数据域,所述第一数据域中包括M个前缀集合,M≥1,其中:
第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长;其中,1≤i≤N,1≤j≤M;
所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置。
其中,所述“第一MBT子树”是根据路由表得到的,即,第一MBT子树是基于第一步长对与路由表对应的MBT树进行划分得到的子树;“第二MBT子树”是基于第二步长对“第一MBT子树”进行划分得到的子树。第一MBT子树与对应的第二MBT子树相比,后者的子树覆盖范围小于前者。
在上述prefix节点的数据结构中,第二MBT子树的关联前缀是指第二MBT子树的根节点对应的前缀。一个前缀集合内的前缀对应于相同的关联前缀,因此可将一个前缀集合称为prefixcluster,简称PCL,下面的描述中将使用PCL表示前缀集合。
举例来说,在传统的MBT算法中,通常选用较大的步长进行子树划分,比如步长取值为8。采用本发明实施例的上述prefix节点的数据结构,则在基于取值为8的步长进行子树划分后,在划分得到的每个步长为8的子树内,再次基于比8小的步长进行子树划分,比如基于取值为3的步长对每个步长为8的子树进行划分。一个步长为8的子树可划分得到多个步长为3的子树,如果一个步长为3的子树内包含有前缀,则该步长为3的子树对应有一个PCL,用于存储该步长为3的子树内的前缀的相关信息。该相关信息可包括该步长为3的子树对应的关联前缀、用于指示该子树内的前缀位置的位图,还可以包括前缀的下一跳信息等。图4示例性地示出一个PCL的数据结构。其中,seg0~segn保存PCL的前置分段,prefix位图用PBM表示。
可选地,所述第i前缀节点中还包括第二数据域,所述第二数据域中包括所述第一MBT子树中的所有前缀各自所对应的下一跳。
这样,可以将前缀对应的下一跳设置在prefix节点的数据结构中,作为PCL的一部分。比如,可以在每个PCL中设置第二数据域,从而将前缀对应的下一跳放置在相应的PCL中,也可以在prefix节点中集中设置一个第二数据域,从而将所有PCL所包含的前缀对应的下一跳集中放置在该数据域中。
如果在prefix节点中集中设置一个第二数据域,则优选地,可将所述第二数据域设置于所述第一数据域之后;所述第二数据域中各个前缀所对应的下一跳的顺序,与所述第一数据域中各个前缀集合中的第一位置信息所指示的前缀位置的顺序,相同或相反。
可选地,在上述PCL中,所述第i前缀节点中还包括第三数据域,所述第三数据域中包括所述第i前缀节点中的所有前缀集合的数量、所述第i前缀节点中的所有前缀集合中的每个前缀集合的头部信息,其中,第j前缀集合的头部信息中包含所述第二MBT子树的关联前缀的长度。关联前缀的长度可用该关联前缀所包含的前置分段的数量来表示,即,关联前缀的长度等于该关联前缀所包含的前置分段的数量乘以所述第二步长。一个prefix节点对应的关联前缀可以包括一个或多个前置分段,每个前置分段的长度(即比特数量)与所述第二步长的取值相同。比如,在第二步长等于3的情况下,一个第二MBT子树的关联前缀为‘001010*’,该关联前缀包含2个前置分段,第一个前置分段为‘001’,第二个前置分段为‘010’。
一个prefix节点中的PCL的数量,与所述第一步长、所述第二步长以及前缀分布的稀松程度相关。比如,如果第一步长取值为8、第二步长取值为3,则一个步长为8的子树基于取值为3的步长进一步划分后可得到21个子树,需要5个比特来表示这21个子树,但考虑到前缀分布较为稀松,一个prefix节点内的PCL的数量不会超过16个,因此可用4个比特表示PCL的总数量。
每个PCL的头部信息的长度相同。为了减少存储开销,PCL的头部信息的长度可设置为M个比特,其中,IP_length表示IP地址长度,stride表示所述第二步长,表示向上取整。比如,IPv6地址的长度是128比特,第二步长的取值为3,则可将PCL的头部长度设置为6比特。
可选地,所述第三数据域设置于所述第一数据域之前;所述第三数据域中各个前缀集合的头部信息的顺序,与所述第一数据域中各个前缀集合的顺序,相同或相反。
举例来说,prefix节点的数据结构中,PCL的总数量、PCL的头部信息、PCL的排列次序可以是:将所有PCL的头部信息设置于PCL的总数量之后,将所有PCL设置于所有PCL的头部信息之后。PCL的头部信息的排列顺序与PCL的排列顺序一致。
图5示例性地示出了一个包含6个PCL的prefix节点的数据结构。其中,PCLNum域用于存储PCL的数量,长度为4比特;PCLHeader域用于存储PCL的头部信息,长度为6比特;PCL域用于存储关联前缀和第一位置信息(比如前缀的位图),一个PCL的长度由其关联前缀的长度以及第一位置信息的长度来决定。
可选地,所述第一数据域中的所述M个前缀集合按照查找顺序包括第1至第M前缀集合,所述M个前缀集合中,第j前缀集合中存储的关联前缀的长度,不小于第j+1前缀集合中存储的关联前缀的长度,1≤j<M。这样可以减少逻辑解析占用的逻辑资源。也就是说,在一个prefix节点的数据结构中,所有PCL按照关联前缀的长度从大到小的顺序从前到后进行排列,即,较长的PCL总是位于较短的PCL之前。相应地,所有PCL的头部信息也按照PCL中的关联前缀的长度从大到小的顺序排列。
上述prefix节点中,所述第一位置信息可以是位图,即,通过位图方式指示出前缀在第二MBT子树中的位置。
为了进一步节省存储资源,在一个PCL中仅包含一个前缀的情况下,可用前缀在所述第二MBT子树中的编号作为第一位置信息以标识该前缀在该第二MBT子树中的位置;在一个PCL中包含至少两个前缀的情况下,可用位图作为第一位置信息以标识这些前缀在所述第二MBT子树中的位置。
具体来说,所述第i前缀节点中包含第一指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含唯一一个前缀,所述第j前缀集合中的第一位置信息为所述唯一一个前缀在所述第二MBT子树中的节点位置编号,所述第一位置信息的长度等于所述第二步长;或者,所述第i前缀节点中包含第二指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含至少2个前缀,所述第j前缀集合中的所述第一位置信息为位图,用于指示所述第二MBT子树中的所述至少2个前缀在该第二MBT子树中的位置,所述第一指示信息的长度为2stride-1,stride为所述第二步长。
其中,所述第一指示信息和/或第二指示信息的长度为1比特。
举例来说,可以在一个PCL的头部信息中额外设置1比特,当该比特的取值等于1时,表示对应的PCL中的第一位置信息表示节点位置编号;当该比特的取值等于0时,表示对应的PCL中的第一位置信息是位图形式。
再举例来说,针对前缀分布比较稀松的情况,比如一个步长为3的子树中仅有一个前缀的情况,可以在prefix节点的数据结构中,比如在PCL的总数量之后额外设置1比特。当该比特的取值等于1时,表示该prefix节点中的所有PCL中的第一位置信息表示节点位置编号;当该比特的取值等于0时,表示该prefix节点中的所有PCL中的第一位置信息是位图形式。
比如,当某个PCL中只有一个前缀时,可以用该前缀在7比特位图中的节点位置编号来表示,若使用节点位置编号则只需要3比特就可以了。所以在这种情况下,用节点位置编号来表示会更节省存储资源。尤其对于IPv4虚拟专用网络(VirtualPrivateNetwork,简称VPN)或IPv6路由,由于前缀比较稀疏,用节点位置编号来指示前缀位置会明显降低存储资源的开销。
举例来说,在第一步长为8、第二步长为3的情况下,一个步长为8的子树基于取值为3的步长被划分为7个子树,如果一个步长为3的子树中仅有1个前缀且位于该子树中的第5个节点,则可用节点位置编号“110”作为第一位置信息,以指示出前缀在该子树中的节点位置;如果一个步长为3的子树中有2个前缀且分别位于该子树中的第1个和第5个节点,则可以用位图“1000100”指示出这两个前缀在该子树中的节点位置。
根据以上描述,图6示例性地示出了一个包含前缀下一跳的prefix节点的数据结构。其中,较长的PCL总是排列在较短的PCL之前。REIndex域用于存储前缀的下一跳,长度为20比特。REIndex的排列顺序与对应的前缀的排列顺序相反。
为了清楚理解本发明实施例,下面以图7所示的一个MBT树为例,描述prefix节点的数据结构。
图7(1)示出了一个步长为8的MBT子树内分布的前缀;图7(2)示出了基于较小的步长(此例中为3)将该步长为8的MBT子树进行划分所得到的较小的子树(如图中所示的T1、T2、T3、T4),每个较小的子树对应一个PCL;图7(3)示出了每个PCL内包含的前缀;图7(4)示出了每个PCL的数据结构。其中,PCL1中仅包含7比特的位图,PCL2中包含的关联前缀为“001和*”7比特位图,PCL3中包含的关联前缀为“101*”和7比特位图,PCL4中包含的关联前缀为“001001*”和7比特位图。对应的prefix节点结构如图8所示。其中,PCL2中的关联前缀“001*”中包含1个前置分段‘001’,PCL3中的关联前缀“101*”中包含1个前置分段‘101’,PCL4中包含的关联前缀“001001*”中包含2个前置分段,第一个前置分段为‘001’,第二个前置分段为‘001’。
图8中,将较长的PCL放在前面,所以PCL的排列次序是PCL4、PCL2、PCL3和PCL1。PCL2和PCL3的长度相同,没有次序要求。在本例中,因为每个PCL都是用7位的位图表示前缀的节点位置,位图的长度是固定的,所以也可以将位图放在PCLheader中。
将较长的PCL放在前面的好处是节省逻辑资源。对于256比特的prefix节点结构,假设前缀的长度最大是128比特,MBT的步长为3,则只需要将第一个PCL解析器的运算长度设置为126比特(步长的倍数,即,),后面的PCL解析器,运算长度可以依次递减。一个PCL解析器的运算长度是指一个PCL的解析器中进行查表逻辑运算的逻辑单元在一个时钟周期能够处理的比特数量。比如,如果prefix节点中有两个PCL,由于每个PCL至少占33位(即,6bits的前置分段+7bits的位图+20bits的REIndex),所以第二个PCL前置分段的长度不会超过(256–33*2–4)/2=93比特。依次类推,如果一个prefix节点中有3个PCL,则第三个PCL的前置分段的长度不会超过(256–33*3–4)/3=51比特。也就是的说对于prefix节点中的第i个PCL,其前置分段所占的比特数量不会超过(256–33*i–4)/i。这样,在逻辑解析时,PCL解析器的运算长度可以依次递减,以节省逻辑单元。
可选地,存储单元31还可执行查找流程。或者,如图3b所示,所述查找装置还可包括查找单元32,查找单元32用于基于存储单元31执行所述查找流程。所述查找流程将在后续内容中进行详细描述。
具体来说,存储单元31可以是指逻辑器件实现的芯片,比如TCAM,这种情况下,存储单元31可执行查找流程。存储单元31也可以是指存储器中的存储空间,查找单元32可以由软件实现,比如可以是处理器中的一个功能单元,这种情况下,查找单元32用于基于存储单元31执行所述查找流程。
可选地,如图3c或图3d所示,所述查找装置还可包括配置单元33,配置单元33用于配置存储单元31中的前缀节点。所述配置流程将在后续内容中进行详细描述。
具体来说,配置单元33可由软件实现,比如可以是处理器中的一个功能单元。
比如,在图3c所示的查找装置中,配置单元33可以是处理器中的一个功能单元,存储单元31可以是逻辑器件实现的芯片。配置单元33用于配置存储单元31中的前缀节点,存储单元31中配置有前缀节点,并可执行查找流程。
通过以上描述可以看出,本发明的上述实施例中引入了前缀集合,一个前缀节点中可包含M个前缀集合,M≥1。其中,第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长;所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置。这样,一个第一步长的MBT子树对应的前缀节点的数据结构,就可以通过该子树内的第二步长MBT子树对应的一个或多个前缀集合来描述。由于一个前缀集合对应的第二MBT子树小于所述第一MBT子树,因此用于描述前缀在第二MBT子树上的位置信息的比特数量,少于用于描述前缀在第一MBT子树上的位置信息的比特数量,并且考虑到前缀分布较为稀松,因此采用本发明实施例提供的前缀节点的数据结构与传统MBT算法相比可以提高编码,减少存储空间的开销。
举例来说,对于IPv6地址,由于其长度为128比特,使用传统MBT算法时,当stride=8时,一个前缀节点中需要使用128比特的位图来描述前缀的位置。若采用本发明实施例,对于stride=8的MBT子树,使用取值为3的步长进一步划分得到多个步长为3的子树(以下称为小子树),每个包含前缀的小子树对于一个前缀集合,这样一个前缀集合中只需8比特的位图来描述前缀的位置。对于如图7所示的前缀节点,使用传统MBT算法,该前缀节点的数据结构至少包括128比特的位图(不包含ReIndex),使用本发明实施例,该前缀节点的数据结构最多需要68比特(不包含ReIndex)。
(二)查找流程
基于前述查找装置,图9示出了查找流程。如图所示,查找流程可包括:
步骤91:获得查找关键字;
步骤92:在所配置的N个前缀节点中查找关联前缀与所述查找关键字最长匹配的前缀节点。该过程可以并行执行。其中,前缀节点的数据结构如前所述,在此不再详述。
步骤93:针对查找到的前缀节点执行以下步骤:
根据前缀节点中前缀集合的总数量和每个前缀集合中的关联前缀的长度,确定每个前缀集合的存储位置、每个前缀集合中的关联前缀和第一位置信息的存储位置;
根据每个前缀集合中的关联前缀和第一位置信息的存储位置,获取每个前缀集合中的关联前缀和第一位置信息;
在所有前缀集合中查找关联前缀与所述查找关键字最长匹配的前缀集合;
根据查找到的前缀集合中的第一位置信息,确定与所述查找关键字最长匹配的前缀;
步骤94:根据与所述查找关键字最长匹配的前缀获得下一跳,得到所述查找关键字的查找结果。
如前所述,前缀节点的数据结构中还可包含本前缀节点内的前缀集合的总数量、每个前缀集合的头部信息,并且一个前缀集合的关联前缀可由一个或多个前置分段来表示,也就是说,一个前缀集合的关联前缀的长度可由该关联前缀包含的前缀分段的数量来表示,因此在步骤93中,根据PCL的总数量可以算出第一个PCL的前置分段的起始位置。以第二步长等于3为例,由于PCL头部信息中包含前置分段的数量,因此根据PCL头部信息中的前缀分段的数量乘以3即可得到PCL的关联前缀字段的总长度。根据第一个PCL的关联前缀字段的起始位置和关联前缀字段的总长度可以算出该PCL的关联前缀字段的结束位置以及前缀位图位置。以图6所示的256比特长度的前缀节点为例,第一个PCL关联前缀字段的起始位置为255-4-6*PCLNum,结束位置为255-4-6*PCLNum-3*PCLheader+1,前缀位图的域的位置范围为[255-4-6*PCLNum-3*PCLheader:255-4-6*PCLNum-3*PCLheader-7+1],第二个PCL的关联前缀字段的起始位置为第一个PCL的前缀位图的结束位置,依次类推可得到所有PCL的关联前缀字段及前缀位图字段的位置。
得到所有PCL的关联前缀字段及前缀位图字段的位置后,从PCL关联前缀字段的起始位置左移1个比特(即向高位方向移动1比特),然后再右移(即向低位方向移动)(256-该PCL关联前缀字段的长度)比特,即可得到该PCL的关联前缀。再右移7比特即得到该PCL的前缀位图字段。
步骤93中,所述在所有前缀集合中查找关联前缀与所述查找关键字最长匹配的前缀集合的过程是一个迭代过程。如前所述,在前缀节点的数据结构中,所有前缀集合可按照关联前缀的长度进行排列。这种情况下,在步骤93中,可按照查找顺序从前到后,用前缀集合中的关联前缀与所述查找关键字进行匹配,并当查找到第一个关联前缀与所述查找关键字匹配的前缀集合时,将查找到的前缀集合确定为所述查找关键字最长匹配的前缀集合。
举例来说,查找引擎通常被配为流水线级架构,查找过程按照流水线级的顺序执行。流水线级上的每级中配置对应的PCL,根据本级配置的PCL的长度和查找关键字已经匹配的长度得到本级查找关键字对应的分段关键字。比如,首先根据已经在前级流水线匹配过的长度对查找关键字左移相应数量的比特,然后再右移(256-该PCL前置分段长度+2)比特后,低位的2比特表示该分段关键字的前缀位图,[前置分段长度+1:2]范围界定的比特表示分段关键字的前置分段。
然后,用PCL的关联前缀与分段关键字进行匹配。在前缀节点的数据结构中,从前往后匹配过程中第一个匹配到的前缀即为与查找关键字最长匹配前缀。比如,比较PCL和分段关键字的前置分段,并取分段关键字的低2比特与PCL的前缀位图进行比较(比较bitmap[3:0]与segmentkey,如果不匹配则比较bitmap[5:4]与segmentkey[1],仍然不匹配则查看bitmap[6]是否为1),从前往后,前置分段与前缀位图都匹配的第一个前缀即为与查找关键字最长匹配的前缀。
如前所述,一个前缀节点中可包含第一指示信息,用于指示该前缀节点中的前缀集合所对应的第二MBT子树中包含唯一一个前缀,这种情况下,前缀集合中的第一位置信息为节点位置编号;或者,一个前缀节点中可包含第二指示信息,用于指示该前缀节点中的前缀集合所对应的第二MBT子树中包含至少2个前缀,这种情况下,前缀集合中的所述第一位置信息为位图。相应地,在步骤93中需要基于所述第一指示信息或所述第二指示信息来确定所述第一位置信息的含义(即,是节点位置编号还是位图),进而确定前缀集合的存储位置以及前缀集合内的前置分段和第一位置信息的存储位置。
如前所示,一个前缀节点的数据结构的第二数据域还可包括本前缀节点内所有前缀所对应的下一跳,所述第二数据域中各个前缀所对应的下一跳的顺序,与所述第一数据域中各个前缀集合中的第一位置信息所指示的前缀位置的顺序,相同或相反。相应地,在步骤94中,根据下一跳排列顺序需要采用不同的方式获得下一跳。举例来说,如图6所示,如果在一个前缀节点中,所有前缀集合按照从大到小的顺序排序且下一跳的排列顺序与该前缀节点内包含的前缀的排列顺序相反,则可通过以下方式得到与查找关键字最长匹配的前缀的下一跳:在前缀节点的数据结构中,计算所有PCL位图中最长匹配前缀之前所有1的总数量(位图中为“1”的位置上有前缀),计算结果为n,则与该最长前缀匹配的REIndex为REindexofP<n>。
通过以上描述可以看出,本发明的上述实施例中引入了前缀集合,一个前缀节点中可包含M个前缀集合,M≥1。其中,第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长;所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置。这样,一个第一步长的MBT子树对应的前缀节点的数据结构,就可以通过该子树内的第二步长MBT子树对应的一个或多个前缀集合来描述。由于一个前缀集合对应的第二MBT子树小于所述第一MBT子树,因此用于描述前缀在第二MBT子树上的位置信息的比特数量,少于用于描述前缀在第一MBT子树上的位置信息的比特数量,并且考虑到前缀分布较为稀松,因此采用本发明实施例提供的前缀节点的数据结构与传统MBT算法相比可以提高编码,减少存储空间的开销。
(三)配置流程
基于前述查找装置,图10示出了配置流程。如图所示,配置流程可包括:
步骤101:获得待配置的前缀信息,所述前缀中包括至少一个地址前缀以及所述地址前缀所对应的下一跳;
步骤102:在所配置的N个前缀节点中查找关联前缀与所述待配置的地址前缀最长匹配的前缀节点。该过程可以并行执行。其中,一个prefix节点的数据结构同前所述,在此不再赘述。
步骤103:针对查找到的前缀节点执行以下操作:
根据前缀节点中前缀集合的总数量和每个前缀集合中的关联前缀的长度,确定每个前缀集合的存储位置、每个前缀集合中的关联前缀和第一位置信息的存储位置;
根据每个前缀集合中的关联前缀和第一位置信息的存储位置,获取每个前缀集合中的关联前缀和第一位置信息;
在所有前缀集合中查找关联前缀与所述待配置的地址前缀最长匹配的前缀集合;
步骤104:在前缀节点中配置所述待配置的地址前缀所对应的下一跳,并更新与所述待配置的地址前缀最长匹配的前缀集合中的第一位置信息。
上述流程中,步骤102~103的实现过程与图9的步骤92~93的实现过程类似。
通常路由表允许人工配置或更新,或者可根据相关协议进行更新。比如,可通过人工方式配置静态路由或者根据边界网关协议(BorderGatewayProtocol,简称BGP)等路由选择协议动态更新,包括增加新的路由表项或者删除已有的路由表项。在步骤101中,可根据接收到的路由更新命令确定出需要增加或删除的前缀,以便进行配置更新。
如前所述,在前缀节点的数据结构中,所有前缀集合可按照关联前缀的长度进行排列。这种情况下,在步骤103中,可按照查找顺序,用前缀集合中的关联前缀与所述待配置的前缀进行匹配,并当查找到第一个关联前缀与所述待配置的前缀匹配的前缀集合时,将查找到的前缀集合确定为所述待配置的前缀最长匹配的前缀集合。
如前所述,一个前缀节点的数据结构中的第二数据域还可包括本前缀节点内所有前缀的下一跳,所述第二数据域中各个前缀所对应的下一跳的顺序,与所述第一数据域中各个前缀集合中的第一位置信息所指示的前缀位置的顺序,相同或相反。这种情况下,在步骤103中可在查找到待匹配的前缀归属的前缀集合后,按照规定的顺序添加该前缀的下一跳。
如前所述,一个前缀节点中可包含第一指示信息,用于指示该前缀节点中的前缀集合所对应的第二MBT子树中包含唯一一个前缀,这种情况下,前缀集合中的第一位置信息为节点位置编号;或者,一个前缀节点中可包含第二指示信息,用于指示该前缀节点中的前缀集合所对应的第二MBT子树中包含至少2个前缀,这种情况下,前缀集合中的所述第一位置信息为位图。
相应地,若所述待配置的前缀是前缀集合中唯一的前缀,则还在该前级集合的头部信息中设置所述第一指示信息,使所述第一指示信息的取值用于指示对应的前缀集合中的第一位置信息是节点位置编号。
在本发明实施例的上述配置流程中,若在步骤102中未查找到与待配置的前缀最长匹配的前缀节点,则为该待配置的前缀创建对应的前缀节点,并按照前述数据结构在新创建的前缀节点中添加相应信息。若在步骤103中未查找到与待配置的前缀匹配的前缀集合,则为该待配置的前缀创建对应的前缀集合,并按照前述数据结构在新创建的前缀集合以及对应的前缀节点中添加相应信息。
通过以上描述可以看出,本发明的上述实施例中引入了前缀集合,一个前缀节点中可包含M个前缀集合,M≥1。其中,第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长;所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置。这样,一个第一步长的MBT子树对应的前缀节点的数据结构,就可以通过该子树内的第二步长MBT子树对应的一个或多个前缀集合来描述。由于一个前缀集合对应的第二MBT子树小于所述第一MBT子树,因此用于描述前缀在第二MBT子树上的位置信息的比特数量,少于用于描述前缀在第一MBT子树上的位置信息的比特数量,并且考虑到前缀分布较为稀松,因此采用本发明实施例提供的前缀节点的数据结构与传统MBT算法相比可以提高编码,减少存储空间的开销。
综上所述,本发明实施例通过将一个prefix节点中的前缀用MBT进行组织和分类,把前缀划分成多个PCL。每个PCL中的前缀有相同的关联前缀,一个PCL中包含的前缀在相应第二MBT子树上的位置可以用位图或者在节点位置编号来表示。这样,在一个前缀节点中,通过先列出每个PCL的头部信息,然后再列出所有PCL的关联前缀,最后再列出表示前缀的位图或者节点位置编号,从而对PCL进行编码。在对一个前缀节点进行逻辑解析时,通过该前缀节点中包含的PCL个数字段以及各个PCLheader字段可以确定各PCL的存储位置和长度。
通过这样编码,prefix节点中可以保存任意长度的前缀。对于比较稀疏的IPv4VPN和IPv6路由,本发明实施例提供的方案可以大大提高编码效率,节省内存占用。通过把PCLheader集中放在前缀节点的开始部分,可以降低逻辑解析的难度,实现对多个PCL的并行解析,减少节点处理的延迟。通过把较长的PCL放在较短PCL的前面,可以使逻辑解析使用的资源更省。
本发明实施例提供的prefix节点的数据结构和编码方式,通过把任意长度的前缀放在同一个prefix节点中,可以使MBT的深度更小,从而大大提高MBT算法的效率,进而减少查找的延迟。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器,使得通过该计算机或其他可编程数据处理设备的处理器执行的指令可实现流程图中的一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图的一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
Claims (23)
1.一种查找装置,其特征在于,包括:存储单元;
所述存储单元中配置有N个前缀节点,N≥1,每个前缀节点包括第一数据域,所述第一数据域中包括M个前缀集合,M≥1,其中:
第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长;其中,1≤i≤N,1≤j≤M;
所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置。
2.如权利要求1所述的查找装置,其特征在于,所述第i前缀节点中还包括第二数据域,所述第二数据域中包括所述第一MBT子树中所有前缀各自所对应的下一跳。
3.如权利要求2所述的查找装置,其特征在于,所述第二数据域设置于所述第一数据域之后;
所述第二数据域中各个前缀所对应的下一跳的顺序,与所述第一数据域中各个前缀集合中的第一位置信息所指示的前缀位置的顺序,相同或相反。
4.如权利要求1至3中任一项所述的查找装置,其特征在于,所述第i前缀节点中还包括第三数据域,所述第三数据域中包括所述第i前缀节点中的所有前缀集合的数量、所述第i前缀节点中的所有前缀集合中的每个前缀集合的头部信息,其中,第j前缀集合的头部信息中包含所述第二MBT子树的关联前缀的长度。
5.如权利要求4所述的查找装置,其特征在于,所述第三数据域设置于所述第一数据域之前;
所述第三数据域中各个前缀集合的头部信息的顺序,与所述第一数据域中各个前缀集合的顺序,相同或相反。
6.如权利要求1至5中任一项所述的查找装置,其特征在于,所述第一数据域中的所述M个前缀集合按照查找顺序包括第1至第M前缀集合,所述M个前缀集合中,第j前缀集合中存储的关联前缀的长度,不小于第j+1前缀集合中存储的关联前缀的长度,1≤j<M。
7.如权利要求1至6中任一项所述的查找装置,其特征在于,
所述第i前缀节点中包含第一指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含唯一一个前缀,所述第j前缀集合中的第一位置信息为所述唯一一个前缀在所述第二MBT子树中的节点位置编号,所述第一位置信息的长度等于所述第二步长;或者
所述第i前缀节点中包含第二指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含至少2个前缀,所述第j前缀集合中的所述第一位置信息为位图,用于指示所述第二MBT子树中的所述至少2个前缀在该第二MBT子树中的位置,所述第一指示信息的长度为2stride-1,stride为所述第二步长。
8.如权利要求1至7中任一项所述的查找装置,其特征在于,所述存储单元用于执行查找流程;或者,所述查找装置还包括查找单元,所述查找单元用于基于所述存储单元执行所述查找流程;
所述查找流程包括:
获得查找关键字;
在所述N个前缀节点中查找关联前缀与所述查找关键字最长匹配的前缀节点,针对查找到的前缀节点执行以下步骤:
根据前缀节点中前缀集合的总数量和每个前缀集合中的关联前缀的长度,确定每个前缀集合的存储位置、每个前缀集合中的关联前缀和第一位置信息的存储位置;
根据每个前缀集合中的关联前缀和第一位置信息的存储位置,获取每个前缀集合中的关联前缀和第一位置信息;
在所有前缀集合中查找关联前缀与所述查找关键字最长匹配的前缀集合;
根据查找到的前缀集合中的第一位置信息,确定与所述查找关键字最长匹配的前缀;
根据与所述查找关键字最长匹配的前缀获得下一跳,得到所述查找关键字的查找结果。
9.如权利要求1至8中任一项所述的查找装置,其特征在于,还包括配置单元,所述配置单元用于配置所述存储单元中的前缀节点,具体的,所述配置单元具体用于:
获得待配置的前缀信息,所述前缀中包括至少一个地址前缀以及所述地址前缀所对应的下一跳;
在所有前缀节点中查找关联前缀与所述待配置的地址前缀最长匹配的前缀节点;
针对查找到的前缀节点执行以下操作:
根据前缀节点中前缀集合的总数量和每个前缀集合中的关联前缀的长度,确定每个前缀集合的存储位置、每个前缀集合中的关联前缀和第一位置信息的存储位置;
根据每个前缀集合中的关联前缀和第一位置信息的存储位置,获取每个前缀集合中的关联前缀和第一位置信息;
在所有前缀集合中查找关联前缀与所述待配置的地址前缀最长匹配的前缀集合;
在前缀节点中配置所述待配置的地址前缀所对应的下一跳,并更新与所述待配置的地址前缀最长匹配的前缀集合中的第一位置信息。
10.一种查找方法,其特征在于,包括:
获得查找关键字;
在所配置的N个前缀节点中查找关联前缀与所述查找关键字最长匹配的前缀节点;其中,N≥1,每个前缀节点包括第一数据域,所述第一数据域中包括M个前缀集合,M≥1,其中:第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长,1≤i≤N,1≤j≤M,所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置;
针对查找到的前缀节点执行以下步骤:
根据前缀节点中前缀集合的总数量和每个前缀集合中的关联前缀的长度,确定每个前缀集合的存储位置、每个前缀集合中的关联前缀和第一位置信息的存储位置;
根据每个前缀集合中的关联前缀和第一位置信息的存储位置,获取每个前缀集合中的关联前缀和第一位置信息;
在所有前缀集合中查找关联前缀与所述查找关键字最长匹配的前缀集合;
根据查找到的前缀集合中的第一位置信息,确定与所述查找关键字最长匹配的前缀;
根据与所述查找关键字最长匹配的前缀获得下一跳,得到所述查找关键字的查找结果。
11.如权利要求10所述的方法,其特征在于,所述第i前缀节点中还包括第二数据域,所述第二数据域中包括所述第一MBT子树中所有前缀各自所对应的下一跳。
12.如权利要求11所述的方法,其特征在于,所述第二数据域设置于所述第一数据域之后;
所述第二数据域中各个前缀所对应的下一跳的顺序,与所述第一数据域中各个前缀集合中的第一位置信息所指示的前缀位置的顺序,相同或相反。
13.如权利要求10至12中任一项所述的方法,其特征在于,所述第i前缀节点中还包括第三数据域,所述第三数据域中包括所述第i前缀节点中的所有前缀集合的数量、所述第i前缀节点中的所有前缀集合中的每个前缀集合的头部信息,其中,第j前缀集合的头部信息中包含所述第二MBT子树的关联前缀的长度。
14.如权利要求13所述的方法,其特征在于,所述第三数据域设置于所述第一数据域之前;
所述第三数据域中各个前缀集合的头部信息的顺序,与所述第一数据域中各个前缀集合的顺序,相同或相反。
15.如权利要求10至14中任一项所述的方法,其特征在于,所述第一数据域中的所述M个前缀集合按照查找顺序包括第1至第M前缀集合,所述M个前缀集合中,第j前缀集合中存储的关联前缀的长度,不小于第j+1前缀集合中存储的关联前缀的长度,1≤j<M。
16.如权利要求10至15中任一项所述的方法,其特征在于,
所述第i前缀节点中包含第一指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含唯一一个前缀,所述第j前缀集合中的第一位置信息为所述唯一一个前缀在所述第二MBT子树中的节点位置编号,所述第一位置信息的长度等于所述第二步长;或者
所述第i前缀节点中包含第二指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含至少2个前缀,所述第j前缀集合中的所述第一位置信息为位图,用于指示所述第二MBT子树中的所述至少2个前缀在该第二MBT子树中的位置,所述第一指示信息的长度为2stride-1,stride为所述第二步长。
17.一种配置方法,其特征在于,包括:
获得待配置的前缀信息,所述前缀中包括至少一个地址前缀以及所述地址前缀所对应的下一跳;
在所配置的N个前缀节点中查找关联前缀与所述待配置的地址前缀最长匹配的前缀节点;其中,N≥1,每个前缀节点包括第一数据域,所述第一数据域中包括M个前缀集合,M≥1,其中:第i前缀节点对应第一步长的第一MBT子树,所述第i前缀节点中的第j前缀集合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一MBT子树划分得到的,所述第二步长小于所述第一步长,1≤i≤N,1≤j≤M,所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置;
针对查找到的前缀节点执行以下操作:
根据前缀节点中前缀集合的总数量和每个前缀集合中的关联前缀的长度,确定每个前缀集合的存储位置、每个前缀集合中的关联前缀和第一位置信息的存储位置;
根据每个前缀集合中的关联前缀和第一位置信息的存储位置,获取每个前缀集合中的关联前缀和第一位置信息;
在所有前缀集合中查找关联前缀与所述待配置的地址前缀最长匹配的前缀集合;
在前缀节点中配置所述待配置的地址前缀所对应的下一跳,并更新与所述待配置的地址前缀最长匹配的前缀集合中的第一位置信息。
18.如权利要求17所述的方法,其特征在于,所述第i前缀节点中还包括第二数据域,所述第二数据域中包括所述第一MBT子树中所有前缀各自所对应的下一跳。
19.如权利要求18所述的方法,其特征在于,所述第二数据域设置于所述第一数据域之后;
所述第二数据域中各个前缀所对应的下一跳的顺序,与所述第一数据域中各个前缀集合中的第一位置信息所指示的前缀位置的顺序,相同或相反。
20.如权利要求18至19中任一项所述的方法,其特征在于,所述第i前缀节点中还包括第三数据域,所述第三数据域中包括所述第i前缀节点中的所有前缀集合的数量、所述第i前缀节点中的所有前缀集合中的每个前缀集合的头部信息,其中,第j前缀集合的头部信息中包含所述第二MBT子树的关联前缀的长度。
21.如权利要求20所述的方法,其特征在于,所述第三数据域设置于所述第一数据域之前;
所述第三数据域中各个前缀集合的头部信息的顺序,与所述第一数据域中各个前缀集合的顺序,相同或相反。
22.如权利要求17至21中任一项所述的方法,其特征在于,所述第一数据域中的所述M个前缀集合按照查找顺序包括第1至第M前缀集合,所述M个前缀集合中,第j前缀集合中存储的关联前缀的长度,不小于第j+1前缀集合中存储的关联前缀的长度,1≤j<M;
所述在所有前缀集合中查找关联前缀与所述待配置的地址前缀最长匹配的前缀集合,包括:
按照查找顺序,用前缀集合中的关联前缀与所述待配置的前缀进行匹配,并当查找到第一个关联前缀与所述待配置的前缀匹配的前缀集合时,将查找到的前缀集合确定为所述待配置的前缀最长匹配的前缀集合。
23.如权利要求17至22中任一项所述的方法,其特征在于,
所述第i前缀节点中包含第一指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含唯一一个前缀,所述第j前缀集合中的第一位置信息为所述唯一一个前缀在所述第二MBT子树中的节点位置编号,所述第一位置信息的长度等于所述第二步长;或者
所述第i前缀节点中包含第二指示信息,用于指示所述第j前缀集合所对应的第二MBT子树中包含至少2个前缀,所述第j前缀集合中的所述第一位置信息为位图,用于指示所述第二MBT子树中的所述至少2个前缀在该第二MBT子树中的位置,所述第一指示信息的长度为2stride-1,stride为所述第二步长。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410280969.9A CN105227468B (zh) | 2014-06-20 | 2014-06-20 | 一种查找装置、查找方法和配置方法 |
PCT/CN2015/081357 WO2015192742A1 (zh) | 2014-06-20 | 2015-06-12 | 一种查找装置、查找方法和配置方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410280969.9A CN105227468B (zh) | 2014-06-20 | 2014-06-20 | 一种查找装置、查找方法和配置方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105227468A true CN105227468A (zh) | 2016-01-06 |
CN105227468B CN105227468B (zh) | 2019-01-08 |
Family
ID=54934863
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410280969.9A Active CN105227468B (zh) | 2014-06-20 | 2014-06-20 | 一种查找装置、查找方法和配置方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105227468B (zh) |
WO (1) | WO2015192742A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017190559A1 (zh) * | 2016-05-06 | 2017-11-09 | 华为技术有限公司 | 路由查找方法、装置、分配节点、查找节点及入口节点 |
CN108347384A (zh) * | 2018-01-26 | 2018-07-31 | 乐鑫信息科技(上海)有限公司 | 一种适用于mesh网络内一对多的传输数据包的方法 |
US10931579B2 (en) | 2016-06-24 | 2021-02-23 | Huawei Technologies Co., Ltd. | Route search method and apparatus, and routing device |
CN112565089A (zh) * | 2020-11-30 | 2021-03-26 | 锐捷网络股份有限公司 | 一种路由信息的处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030189937A1 (en) * | 2002-04-03 | 2003-10-09 | Takeshi Kawasaki | Address search method and search system using the same |
US20040109451A1 (en) * | 2002-12-06 | 2004-06-10 | Stmicroelectronics, Inc. | Apparatus and method of using fully configurable memory, multi-stage pipeline logic and an embedded processor to implement multi-bit trie algorithmic network search engine |
CN101141389A (zh) * | 2007-09-29 | 2008-03-12 | 华为技术有限公司 | 增强多位Trie树查找方法和装置 |
CN101286935A (zh) * | 2008-05-07 | 2008-10-15 | 中兴通讯股份有限公司 | 一种基于ip地址范围的路由查找方法 |
CN103270727A (zh) * | 2010-12-31 | 2013-08-28 | 瑞典爱立信有限公司 | 存储体感知多位特里结构 |
-
2014
- 2014-06-20 CN CN201410280969.9A patent/CN105227468B/zh active Active
-
2015
- 2015-06-12 WO PCT/CN2015/081357 patent/WO2015192742A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030189937A1 (en) * | 2002-04-03 | 2003-10-09 | Takeshi Kawasaki | Address search method and search system using the same |
US20040109451A1 (en) * | 2002-12-06 | 2004-06-10 | Stmicroelectronics, Inc. | Apparatus and method of using fully configurable memory, multi-stage pipeline logic and an embedded processor to implement multi-bit trie algorithmic network search engine |
CN101141389A (zh) * | 2007-09-29 | 2008-03-12 | 华为技术有限公司 | 增强多位Trie树查找方法和装置 |
CN101286935A (zh) * | 2008-05-07 | 2008-10-15 | 中兴通讯股份有限公司 | 一种基于ip地址范围的路由查找方法 |
CN103270727A (zh) * | 2010-12-31 | 2013-08-28 | 瑞典爱立信有限公司 | 存储体感知多位特里结构 |
Non-Patent Citations (3)
Title |
---|
SARTAJ SAHNI等: "Efficient construction of multibit tries for IP lookup", 《IEEE ACM TRANSACTIONS ON NETWORKING》 * |
V. SRINIVASAN等: "Faster IP lookups using controlled prefix expansion", 《PROCEEDINGS OF THE 1998 ACM SIGMETRICS JOINT INTERNATIONAL CONFERENCE》 * |
YI JIANG等: "Research on Multibit-Trie Tree IP Classification Algorithm", 《COMMUNICATIONS CIRCUITS AND SYSTEMS》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017190559A1 (zh) * | 2016-05-06 | 2017-11-09 | 华为技术有限公司 | 路由查找方法、装置、分配节点、查找节点及入口节点 |
US10680950B2 (en) | 2016-05-06 | 2020-06-09 | Huawei Technologies Co., Ltd. | Route searching method and apparatus, allocation node, searching node, and ingress node |
US10931579B2 (en) | 2016-06-24 | 2021-02-23 | Huawei Technologies Co., Ltd. | Route search method and apparatus, and routing device |
CN108347384A (zh) * | 2018-01-26 | 2018-07-31 | 乐鑫信息科技(上海)有限公司 | 一种适用于mesh网络内一对多的传输数据包的方法 |
CN112565089A (zh) * | 2020-11-30 | 2021-03-26 | 锐捷网络股份有限公司 | 一种路由信息的处理方法及装置 |
CN112565089B (zh) * | 2020-11-30 | 2022-06-21 | 锐捷网络股份有限公司 | 一种路由信息的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2015192742A1 (zh) | 2015-12-23 |
CN105227468B (zh) | 2019-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102484610B (zh) | 路由表建立方法和装置及路由表查找方法和装置 | |
US10164884B2 (en) | Search apparatus, search configuration method, and search method | |
US11762826B2 (en) | Search apparatus, search method, program and recording medium | |
US9729447B2 (en) | Apparatus and method for processing alternately configured longest prefix match tables | |
CN105227468A (zh) | 一种查找装置、查找方法和配置方法 | |
CN104468357A (zh) | 流表的多级化方法、多级流表处理方法及装置 | |
WO2011124030A1 (zh) | 路由表项的存储方法和装置 | |
WO2014047863A1 (en) | Generating a shape graph for a routing table | |
CN102045412B (zh) | IPv6地址前缀压缩存储方法及设备 | |
US10771386B2 (en) | IP routing search | |
CN105141525A (zh) | IPv6路由查找方法及装置 | |
JP2017537566A (ja) | ルーティングテーブルのメンテナンス方法、装置及び記憶媒体 | |
CN102904812B (zh) | 路由表项的存储方法、查找方法、装置及系统 | |
US20220179837A1 (en) | Unbalanced binary tree construction method based on calculation of binary boundary value | |
US10511531B1 (en) | Enhanced lens distribution | |
CN105812258B (zh) | 一种数据处理方法和装置 | |
US10476785B2 (en) | IP routing search | |
CN112565089B (zh) | 一种路由信息的处理方法及装置 | |
CN116471344B (zh) | 一种数据报文的关键字提取方法、装置及介质 | |
CN113726661B (zh) | 一种高性能低功耗的路由哈希器及其控制方法 | |
JP6205463B2 (ja) | 検索装置、検索方法、プログラム、及び記録媒体 | |
CN114443707A (zh) | 一种地址查询方法、装置、电子设备及存储介质 | |
Chimani et al. | Algorithms for the hypergraph and the minor crossing number problems | |
CN104539540A (zh) | 一种基于图形处理单元gpu的路由方法和设备 | |
CN114448890A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |