一种查找装置、查找方法和配置方法_3

文档序号:9474190阅读:来源:国知局
refix节点。一个prefix节点可以看 作是一个容器,即一个prefix节点对应一个数据结构。prefix节点用于存储前缀的相关信 息。prefix节点有一定的容量限制,prefix节点的容量是指前缀节点的数据结构的大小,其 单位为比特。
[0095] 下面对本发明实施例中的查找装置以及prefix节点的数据结构进行详细描述。
[0096] 参见图3a,为本发明实施例提供的查找装置的结构示意图。
[0097] 该查找装置中可包括存储单元31。存储单元31可以是指逻辑器件实现的芯片,t匕 如三态内容寻址寄存器(ternary content addressable memory,简称TCAM),也可以是指存 储器中的存储空间。
[0098] 存储单元31中配置有N个前缀节点,N3 1,每个前缀节点包括第一数据域,所述 第一数据域中包括Μ个前缀集合,M3 1,其中:
[0099] 第i前缀节点对应第一步长的第一 ΜΒΤ子树,所述第i前缀节点中的第j前缀集 合对应第二MBT子树,所述第二MBT子树是基于第二步长对所述第一 MBT子树划分得到的, 所述第二步长小于所述第一步长;其中,1 < i < N,1 < j < Μ ;
[0100] 所述第j前缀集合中包括所述第二MBT子树的关联前缀、第一位置信息,所述第一 位置信息用于按序指示所述第二MBT子树中的各个前缀在所述第二MBT子树中的位置。 [0101] 其中,所述"第一 MBT子树"是根据路由表得到的,即,第一 MBT子树是基于第一步 长对与路由表对应的MBT树进行划分得到的子树;"第二MBT子树"是基于第二步长对"第 一 MBT子树"进行划分得到的子树。第一 MBT子树与对应的第二MBT子树相比,后者的子树 覆盖范围小于前者。
[0102] 在上述prefix节点的数据结构中,第二MBT子树的关联前缀是指第二MBT子树的 根节点对应的前缀。一个前缀集合内的前缀对应于相同的关联前缀,因此可将一个前缀集 合称为prefix cluster,简称PCL,下面的描述中将使用PCL表示前缀集合。
[0103] 举例来说,在传统的MBT算法中,通常选用较大的步长进行子树划分,比如步长取 值为8。采用本发明实施例的上述prefix节点的数据结构,则在基于取值为8的步长进行子 树划分后,在划分得到的每个步长为8的子树内,再次基于比8小的步长进行子树划分,t匕 如基于取值为3的步长对每个步长为8的子树进行划分。一个步长为8的子树可划分得到 多个步长为3的子树,如果一个步长为3的子树内包含有前缀,则该步长为3的子树对应有 一个PCL,用于存储该步长为3的子树内的前缀的相关信息。该相关信息可包括该步长为 3的子树对应的关联前缀、用于指示该子树内的前缀位置的位图,还可以包括前缀的下一跳 信息等。图4示例性地示出一个PCL的数据结构。其中,segO~segn保存PCL的前置分 段,prefix位图用PBM表示。
[0104] 可选地,所述第i前缀节点中还包括第二数据域,所述第二数据域中包括所述第 一 MBT子树中的所有前缀各自所对应的下一跳。
[0105] 这样,可以将前缀对应的下一跳设置在prefix节点的数据结构中,作为PCL的一部 分。比如,可以在每个PCL中设置第二数据域,从而将前缀对应的下一跳放置在相应的PCL 中,也可以在prefix节点中集中设置一个第二数据域,从而将所有PCL所包含的前缀对应的 下一跳集中放置在该数据域中。
[0106] 如果在prefix节点中集中设置一个第二数据域,则优选地,可将所述第二数据域 设置于所述第一数据域之后;所述第二数据域中各个前缀所对应的下一跳的顺序,与所述 第一数据域中各个前缀集合中的第一位置信息所指示的前缀位置的顺序,相同或相反。
[0107] 可选地,在上述PCL中,所述第i前缀节点中还包括第三数据域,所述第三数据域 中包括所述第i前缀节点中的所有前缀集合的数量、所述第i前缀节点中的所有前缀集合 中的每个前缀集合的头部信息,其中,第j前缀集合的头部信息中包含所述第二MBT子树的 关联前缀的长度。关联前缀的长度可用该关联前缀所包含的前置分段的数量来表示,即,关 联前缀的长度等于该关联前缀所包含的前置分段的数量乘以所述第二步长。一个prefix节 点对应的关联前缀可以包括一个或多个前置分段,每个前置分段的长度(即比特数量)与 所述第二步长的取值相同。比如,在第二步长等于3的情况下,一个第二MBT子树的关联前 缀为'001010*',该关联前缀包含2个前置分段,第一个前置分段为'001',第二个前置分段 为 '010'。
[0108] -个prefix节点中的PCL的数量,与所述第一步长、所述第二步长以及前缀分布的 稀松程度相关。比如,如果第一步长取值为8、第二步长取值为3,则一个步长为8的子树基 于取值为3的步长进一步划分后可得到21个子树,需要5个比特来表示这21个子树,但考 虑到前缀分布较为稀松,一个prefix节点内的PCL的数量不会超过16个,因此可用4个比 特表示PCL的总数量。
[0109] 每个PCL的头部信息的长度相同。为了减少存储开销,PCL的头部信息的长度可设 置为Μ个比特,
,其中,IP_length表示IP地址长度,stride表 示所述第二步长,L··」表示向上取整。比如,IPv6地址的长度是128比特,第二步长的取值 为3,则可将PCL的头部长度设置为6比特。
[0110] 可选地,所述第三数据域设置于所述第一数据域之前;所述第三数据域中各个前 缀集合的头部信息的顺序,与所述第一数据域中各个前缀集合的顺序,相同或相反。
[0111] 举例来说,prefix节点的数据结构中,PCL的总数量、PCL的头部信息、PCL的排列 次序可以是:将所有PCL的头部信息设置于PCL的总数量之后,将所有PCL设置于所有PCL 的头部信息之后。PCL的头部信息的排列顺序与PCL的排列顺序一致。
[0112] 图5示例性地示出了一个包含6个PCL的prefix节点的数据结构。其中,PCLNum 域用于存储PCL的数量,长度为4比特;PCL Header域用于存储PCL的头部信息,长度为6 比特;PCL域用于存储关联前缀和第一位置信息(比如前缀的位图),一个PCL的长度由其 关联前缀的长度以及第一位置信息的长度来决定。
[0113] 可选地,所述第一数据域中的所述Μ个前缀集合按照查找顺序包括第1至第Μ前 缀集合,所述Μ个前缀集合中,第j前缀集合中存储的关联前缀的长度,不小于第j+Ι前缀 集合中存储的关联前缀的长度,l<j<M。这样可以减少逻辑解析占用的逻辑资源。也就 是说,在一个prefix节点的数据结构中,所有PCL按照关联前缀的长度从大到小的顺序从前 到后进行排列,即,较长的PCL总是位于较短的PCL之前。相应地,所有PCL的头部信息也 按照PCL中的关联前缀的长度从大到小的顺序排列。
[0114] 上述prefix节点中,所述第一位置信息可以是位图,即,通过位图方式指示出前缀 在第二MBT子树中的位置。
[0115] 为了进一步节省存储资源,在一个PCL中仅包含一个前缀的情况下,可用前缀在 所述第二MBT子树中的编号作为第一位置信息以标识该前缀在该第二MBT子树中的位置; 在一个PCL中包含至少两个前缀的情况下,可用位图作为第一位置信息以标识这些前缀在 所述第二MBT子树中的位置。
[0116] 具体来说,所述第i前缀节点中包含第一指示信息,用于指示所述第j前缀集合所 对应的第二MBT子树中包含唯一一个前缀,所述第j前缀集合中的第一位置信息为所述唯 一一个前缀在所述第二MBT子树中的节点位置编号,所述第一位置信息的长度等于所述第 二步长;或者,所述第i前缀节点中包含第二指示信息,用于指示所述第j前缀集合所对应 的第二MBT子树中包含至少2个前缀,所述第j前缀集合中的所述第一位置信息为位图,用 于指示所述第二MBT子树中的所述至少2个前缀在该第二MBT子树中的位置,所述第一指 示信息的长度为2stnde-l,stride为所述第二步长。
[0117] 其中,所述第一指示信息和/或第二指示信息的长度为1比特。
[0118] 举例来说,可以在一个PCL的头部信息中额外设置1比特,当该比特的取值等于1 时,表示对应的PCL中的第一位置信息表示节点位置编号;当该比特的取值等于0时,表示 对应的PCL中的第一位置信息是位图形式。
[0119] 再举例来说,针对前缀分布比较稀松的情况,比如一个步长为3的子树中仅有一 个前缀的情况,可以在prefix节点的数据结构中,比如在PCL的总数量之后额外设置1比 特。当该比特的取值等于1时,表示该prefix节点中的所有PCL中的第一位置信息表示节 点位置编号;当该比特的取值等于〇时,表示该prefix节点中的所有PCL中的第一位置信息 是位图形式。
[0120] 比如,当某个PCL中只有一个前缀时,可以用该前缀在7比特位图中的节点位置编 号来表示,若使用节点位置编号则只需要3比特就可以了。所以在这种情况下,用节点位置 编号来表示会更节省存储资源。尤其对于IPv4虚拟专用网络(Virtual Private Network, 简称VPN)或IPv6路由,由于前缀比较稀疏,用节点位置编号来指示前缀位置会明显降低存 储资源的开销。
[0121] 举例来说,在第一步长为8、第二步长为3的情况下,一个步长为8的子树基于取值 为3的步长被划分为7个子树,如果一个步长为3的子树中仅有1个前缀且位于该子树中 的第5个节点,则可用节点位置编号"110"作为第一位置信息,以指示出前缀在该子树中的 节点位置;如果一个步长为3的子树中有2个前缀且分别位于该子树中的第1个和第5个 节点,则可以用位图"1000100"指示出这两个前缀在该子树中的节点位置。
[0122] 根据以上描述,图6示例性地示出了一个包含前缀下一跳的prefix节点的数据结 构。其中,较长的PCL总是排列在较短的PCL之前。RE Index域用于存储前缀的下一跳,长 度为20比特。RE Index的排列顺序与对应的前缀的排列顺序相反。
[0123] 为了清楚理解本发明实施例,下面以图7所示的一个MBT树为例,描述prefix节点 的数据结构。
[0124] 图7(1)示出了一个步长为8的MBT子树内分布的前缀;图7(2)示出了基于较小 的步长(此例中为3)将该步长为8的MBT子树进行划分所得到的较小的子树(如图中所示 的Tl、T2、T3、T4),每个较小的子树对应一个PCL ;图7 (3)示出了每个PCL内包含的前缀; 图7(4)示出了每个PCL的数据结构。其中,PCL1中仅包含7比特的位图,PC
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1