CN100401723C - 一种快速索引方法 - Google Patents

一种快速索引方法 Download PDF

Info

Publication number
CN100401723C
CN100401723C CNB2005101083784A CN200510108378A CN100401723C CN 100401723 C CN100401723 C CN 100401723C CN B2005101083784 A CNB2005101083784 A CN B2005101083784A CN 200510108378 A CN200510108378 A CN 200510108378A CN 100401723 C CN100401723 C CN 100401723C
Authority
CN
China
Prior art keywords
address
section
index
prefix
tree root
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
Application number
CNB2005101083784A
Other languages
English (en)
Other versions
CN1852238A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CNB2005101083784A priority Critical patent/CN100401723C/zh
Publication of CN1852238A publication Critical patent/CN1852238A/zh
Application granted granted Critical
Publication of CN100401723C publication Critical patent/CN100401723C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开一种快速索引方法,将同类型的所有索引地址分段,对每段的前缀段地址建立树根表,对每段地址建立索引表,该方法包括:将待索引的索引地址按照上述分段方式分段;确定当前索引的表:如果确定当前索引的表为第一段索引表,则以待索引的索引地址的第一段地址为关键字,在第一段索引表进行索引,结束本流程;如果确定当前索引的表为一段索引地址的树根表,则以待索引的索引地址中该树根表对应的前缀段地址为关键字,在该树根表中查找与该前缀段地址匹配的表项,如果查找到,则根据所查找到的匹配的表项指针作为索引表的入口,以待索引的索引地址中对应段地址为关键字进行索引,结束本流程;如果查找不到,则重新确定当前索引的表。

Description

一种快速索引方法
技术领域
本发明涉及通信计算机领域索引技术,特别是指一种快速索引方法。
背景技术
迅速发展中的互联网将不再是仅仅连接计算机的网络,它将发展成为同电话网、有线电视网类似的信息通信基础设施。因此,正在使用的网际协议(IP,即IPv4)已经难以胜任,为了能够满足网络规模不断增长的需要,因特网工程部(IETF)设计了下一代网际协议IPv6。IPv6与IPv4相比,在地址格式上发生了巨大的改变,地址长度由原来的32比特(bit)变成了128bit。
IP路由技术经过几代的发展,已经从最初的集中式软件路由技术发展到当前的以网络处理器(NP)作为核心处理器的分布式路由技术。在以NP作为核心的分布式路由技术中,由通用CPU完成路由控制处理、由NP完成IP包路由处理。由于NP提供灵活的可编程性,当前的路由器都能通过升级来加强功能,伴随IPv6技术的逐步应用,IPv6也将作为NP路由功能的必备功能之一。
在使用NP设计IP路由功能的一个关键环节是路由表索引,要支持IPv6路由,NP也必须适用IPv6地址的路由表索引功能。由于IPv6的地址长度由IPv4的32bit扩展到128bit,因此在IPv4中使用的路由索引技术已经无法满足要求,需要提出一种适合IPv6路由索引技术。下面介绍几种IPv4的路由索引技术,并说明所述的路由索引技术直接应用在IPv6时的缺点。
使用NP独立进行路由索引时的T树路由技术,是一种分级索引技术,将把32bit的IPv4地址按8bit为一级,分四级建立索引,每级建立具有256个索引单元的索引表,以指针的形式连接各级索引表或路由节点。如果为无子网掩码的所有IP地址建立索引,则第一级需要建立1个索引表,第二级需要建立256个索引表,第三级需要建立2562个索引表,第四级需要建立2563个索引表。实际路由索引并不需要建立如此多的索引表,根据实际使用的IP地址和子网掩码的长度,索引表中的指针可以指向下一级的索引表或直接指向路由节点(ROUTENODE)。
IPv4地址用点分十进制法可以表示为A.B.C.D的形式,为IPv4路由索引建立索引表的方法为:将IPv4地址分成A、B、C、D四级,在每级建立大小为256的完整线性表,即索引表。然后第一级索引表中与A值对应的索引单元指向下一级索引表,该第二级索引表中与B值对应的索引单元指向下一级索引表,该第三级索引表中与C值对应的索引单元指向第四级索引表,第四级索引表中与D值对应的索引单元指向路由节点。进行IPv4路由索引时,以A、B、C、D为索引关键字在上述所建立的路由索引表中依次索引,得到索引结果为路由节点。
对具有子网掩码的IP地址建立索引的方法为:根据子网掩码的长度确定分级的级数之后,在每一级建立索引表,由于子网掩码的特性,最后一级索引表中的指针直接指向路由节点。索引关键字也根据子网掩码的长度不同而不等。对于子网掩码为255.255.0.0的IP地址,例如,IP地址为A.B.0.0需要建立两级路由索引表,进行IPv4路由索引时,以A、B为索引关键字在所建立的路由索引表中依次索引,在索引到第二级索引表之后,直接得到路由节点。对于子网掩码为255.255.255.0的IP地址,索引到第三级索引表就能得到路由节点。T树路由技术中,对于具有子网掩码的IP地址只需要索引对应子网掩码长度的IP地址段,而不需要索引主机号字段地址,就能索引到路由节点。T树路由技术根据IP地址和子网掩码确定索引关键字进行索引,这表明T树路由技术支持网段路由。
图1为IPv4中T树路由索引示意图,结合图1,举例详细说明T树路由技术。对IP地址为12.34.56.78建立索引的方法为:将IP地址分为12、34、56、78四级,对于每一级建立大小为256的索引表。在第一级的索引表中与地址12相对应的第12项表项内的指针指向第二级的索引表,该第二级索引表中与地址34相对应的第34项表项内的指针再指向第三级的索引表,该第三级索引表中与地址56相对应的第56项表项内的指针再指向第四级的索引表,最后一级的索引表中与地址78相对应的第78项表项内的指针指向12.34.56.78地址的出接口路由表的ROUTENODE 2。根据上述建立的路由索引表进行地址为12.34.56.78的IPv4路由索引时,12、34、56、78为索引关键字,ROUTENODE 2为索引结果。
结合图1,举例说明具有子网掩码IP地址的T树路由技术,即说明网段路由的方法。对子网掩码为255.255.0.0的IP地址为20.30.0.0建立索引的方法为:在第一级的索引表中第20项的指针指向第二级索引表,该第二级索引表中第30项的指针指向20.30.0.0地址的出接口路由表的ROUTENODE40。
以上所述IPv4的T树路由技术是一种分级索引方式,如果IPv6使用IPv4的T树路由技术,则由于IPv6的地址长度是IPv4的4倍,因此会存在明显的缺点:对IPv6地址以8bit为一级建立索引时,需要建立16级索引,导致转发速度下降到IPv4时的25%,且需要4倍的硬件资源。而如果增加每一级索引的长度,例如以16bit为一级建立索引,这样每一个索引表的长度为65536,导致内存消耗过大。因此,IPv6使用T树路由技术,路由索引速度大幅度下降。
另外一种路由索引技术是散列技术(HASH),其本质是一种精确匹配技术。建立HASH索引表的方法为:压缩索引关键字表示的地址空间得到压缩的地址空间,再为该压缩的地址空间建立线性表,并提供解决冲突的机制。压缩必然会带来一些冲突,即多个索引关键字对应一个压缩地址。对冲突的压缩地址建立一个冲突链,即建立包括与该冲突的压缩地址对应的所有地址的表。例如,IPv4地址有32bit,如果使用全局地址建立索引表大概需要4G的地址空间。按照上述HASH索引表的建立方法,把IPv4地址按照某种算法压缩到20bit,这时只需要大概1M的地址空间,再建立一个有1M表项的线性表,并为冲突建立冲突链。
根据上述所建立的HASH索引表,进行IPv4路由索引时,首先将32bit的地址按照指定的算法压缩成HASH索引所需的地址长度之后,以该压缩后的局部地址为关键字,在HASH索引表中索引匹配的表项,如果该表项有冲突链,则在该冲突链上查找与所要索引的IPv4地址对应的表项,根据该表项的指针就能索引到目的节点。
HASH技术索引速度快,通常只需要一次索引就能找到目的节点。但是HASH路由索引技术,与T树路由技术不同,不能根据IP地址和子网掩码确定索引关键字,对于不同子网掩码的IP地址的索引关键字必须等长,因此无法支持网段路由。
由于IPv6地址长度为IPv4的4倍,如果IPv6使用HASH技术建立1M地址空间的HASH索引表,这时索引表中的一条路由将对应几百万、上千万个主机地址,特别是在核心节点,由于IPv6的地址空间急剧扩大,用HASH技术无法保证正确路由,而且消耗很多的硬件资源。
内容寻址寄存器(CAM)是进行快速路由索引使用的辅助器件,它可以完成50包/秒(mpps)以上的快速路由索引。但是,使用CAM进行路由索引的最大问题是CAM支持的路由索引数量有限,在IPv4路由中能支持2K个路由表项,而IPv6地址长度扩大4倍后只能支持500个路由表项,显然CAM无法满足IPv6路由索引的要求。如果通过增加CAM数量来加大路由表项,会大大提高硬件成本。
综上所述,使用IPv4的路由技术解决IPv6路由时,存在的缺点为:
1)使用T树技术进行IPv6路由索引时,由于IPv6地址长度长,如果以8bit为一级建立索引,则需要16级索引;如果以16bit为一级建立索引,则每一级的索引表长度很长。因此路由索引速度下降,内存消耗大,需要的硬件资源也大。
2)使用HASH技术进行IPv6路由索引时,如果建立与较小地址空间的HASH索引表,则由于IPv6地址长度长,因此索引表中一个地址对应很多个主机地址,因此无法保证正确路由;如果建立较大地址空间的HASH索引表,则耗费很多硬件资源。由于HASH路由索引中,索引关键字必须等长,因此无法支持网段路由。
3)使用CAM辅助器件进行IPv6路由索引时,由于CAM支持的路由索引数量有限,无法满足IPv6路由索引的需求;如果增加CAM数量来加大路由索引数量,则大大提高硬件成本。
发明内容
有鉴于此,本发明的主要目的在于提供一种快速索引方法,提高对于长索引地址的索引速度。
为达到上述目的,本发明提供一种快速索引方法,其特征在于,将同类型的所有索引地址分段为多个段,对每段的前缀段地址建立树根HASH表,对每段地址建立T树索引表,该方法包括:
A.将待索引的索引地址按照上述分段方式分段为多个段;
B.确定当前索引的表:
如果确定当前索引的表为第一段T树索引表,则以待索引的索引地址的第一段地址为关键字,在第一段T树索引表进行索引,结束本流程;
如果确定当前索引的表为一段索引地址的树根HASH表,则以待索引的索引地址中该树根HASH表对应的前缀段地址为关键字,在该树根HASH表中查找与该前缀段地址匹配的表项,如果查找到,则执行步骤C;如果查找不到,则执行步骤B;
C.根据所查找到的匹配的表项指针作为T树索引表的入口,以待索引的索引地址中对应段地址为关键字进行索引。
其中,步骤B所述确定当前索引的表的步骤包括:如果在第一次索引时确定当前索引的表,则确定最长前缀段对应的树根HASH表作为当前索引的表;如果在第一次索引之后确定当前索引的表,则确定上一次索引的树根HASH表的前一段树根HASH表或第一段T树索引表作为当前索引的表。
其中,所述对每段的前缀段地址建立树根HASH表之后进一步包括:对每段的前缀段地址建立预测表,该预测表中与前缀段地址对应的表项内容为在树根HASH表中与该前缀段地址对应的表项存在与否的信息;
步骤B所述确定当前索引的表的步骤包括:如果在第一次索引时确定当前索引的表,则根据利用前缀段地址从各段预测表中查询的结果,确定当前索引的表;如果在第一次索引之后确定当前索引的表,则确定上一次索引的树根HASH表的前一段树根HASH表或第一段T树索引表作为当前索引的表。
其中,所述对每段的前缀段地址建立树根HASH表的步骤包括:对每段的前缀段地址压缩得到局部地址空间,并建立包括该局部地址空间的树根HASH表;
步骤B所述以该树根HASH表对应的前缀段地址为关键字,在该树根HASH表中查找与该前缀段地址匹配的表项的步骤包括:对该树根HASH表的前缀段地址压缩得到局部地址之后,从树根HASH表中查找与该局部地址匹配的表项。
其中,所述对每段的前缀段地址压缩得到局部地址空间,并建立包括该局部地址空间的树根HASH表之后,进一步包括:如果树根HASH表中表项的局部地址对应多个前缀段地址,则为该表项建立冲突链表项;
步骤B所述如果查找到匹配的表项之后,执行步骤C之前进一步包括:判断所查找到的匹配的表项的冲突链上是否存在与前缀段地址对应的表项,如果是,则执行步骤C,结束本流程;如果不是,则执行步骤B。
其中,步骤B和步骤C所述进行索引为进行T树索引。
其中,所述对每段地址建立T树索引表的步骤包括:对每段地址分级,对每级地址建立索引表;
步骤B或步骤C所述进行T树索引的步骤包括:根据该段所建立的T树索引表,将该段地址按照上述分级方式分级,然后以每一级地址为索引关键字,逐级在索引表中索引。
其中,所述树根HASH表使用内容寻址寄存器CAM建立。
其中,所述预测表使用内容寻址寄存器CAM建立。
其中,所述索引地址为IPv6地址;
所述索引地址分段的步骤包括:索引地址最多分为16个段,其中一个段是8比特的整数倍。
其中,所述索引地址为IPv6地址;
所述索引地址分段的步骤包括:将索引地址分成4个段,每段为32比特;
所述对每段地址建立T树索引表的步骤包括:对每段地址分为4个级,每级为8比特,对每级地址建立索引表。
其中,所述对每段的前缀段地址建立树根HASH表的步骤包括:对每段的前缀段地址压缩到16~20比特,得到64K~1M局部地址空间,并建立包括该局部地址空间的树根HASH表;
步骤B所述以该树根HASH表对应的前缀段地址为关键字,在该树根HASH表中查找与该前缀段地址匹配的表项的步骤包括:对该树根HASH表的前缀段地址对应地压缩到16~20比特得到局部地址之后,从树根HASH表中查找与该局部地址匹配的表项。
其中,所述索引地址为IPv6地址;
所述索引地址分段的步骤包括:将索引地址分成4个段,每段为32比特;
所述对每段地址建立T树索引表的步骤包括:对每段地址分为4个级,每级为8比特,对每级地址建立索引表;
所述对每段的前缀段地址建立预测表的步骤包括:预测表项数同对每段的前缀段地址压缩到10~12比特得到的地址空间的大小,预测表内容为表示在树根HASH表中与该前缀段地址所对应的表项存在与否的信息。
其中,所述索引地址为IPv6地址;所述索引地址分段的步骤包括:将索引地址分成4个段,每段为32比特;
所述对每段地址建立T树索引表的步骤包括:对每段地址分为4个级,每级为8比特,对每级地址建立索引表;
步骤B所述根据利用前缀段地址从各段预测表中查询的结果,确定当前索引的表的步骤包括:
如果查询结果为:第二段预测表结果为在第二段的树根HASH表中存在该段的前缀段地址对应表项的信息,且第三段预测表结果为在第三段的树根HASH表中存在该段的前缀段地址对应表项的信息,且第四段预测表结果为在第四段的树根HASH表中存在该段的前缀段地址对应表项的信息,则确定从第四段的树根HASH表开始索引;
如果查询结果为:第二段预测表结果为在第二段的树根HASH表中存在该段的前缀段地址对应表项的信息,且第三段预测表结果为在第三段的树根HASH表中存在该段的前缀段地址对应表项的信息,且第四段预测表结果为在第四段的树根HASH表中不存在该段的前缀段地址对应表项的信息,则确定从第三段的树根HASH表开始索引;
如果查询结果为:第二段预测表结果为在第二段的树根HASH表中存在该段的前缀段地址对应表项的信息,且第三段预测表结果为在第三段的树根HASH表中不存在该段的前缀段地址对应表项的信息,且第四段预测表结果为在第四段的树根HASH表中存在或不存在该段的前缀段地址对应表项的信息,则确定从第二段的树根HASH表开始索引;
如果查询结果为:第二段预测表结果为在第二段的树根HASH表中不存在该段的前缀段地址对应表项的信息,且第三段预测表结果为在第三段的树根HASH表中存在或不存在该段的前缀段地址对应表项的信息,且第四段预测表结果为在第四段的树根HASH表中存在或不存在该段的前缀段地址对应表项的信息,则确定从第一级T树索引表开始索引。
根据本发明提供的快速路由方法,需要索引长地址时,将所索引的地址分成若干段,对每段的前缀段地址建立树根表,又把每段分成若干级,建立T树索引。因此与单纯的索引技术相比,提高了索引速度,减少了索引级数。通过预测确定开始索引的表,进一步提高了索引速度和减少了索引级数。本发明中根据索引地址的长度和索引地址的特性,可以任意分段和分级,并任意设置树根表的大小和预测表的大小,提高在不同场合下应用时的效率。根据本发明提供的快速路由方法,进行IPv6路由索引时,与单纯使用T树索引相比,减少了索引级数,提高了索引速度;与单纯使用HASH技术相比,减少了HASH表项的个数,减少了硬件资源;与单纯使用CAM相比,减少了硬件成本。
附图说明
图1所示为现有技术IPv4使用T树路由索引的示意图;
图2所示为本发明中前缀分段HASH索引的示意图;
图3所示为本发明中按照图2所示的路由索引表进行IPv6路由索引的流程图;
图4所示为本发明中前缀分段预测技术的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面举具体实施例,对本发明作进一步详细的说明。
本发明提出前缀分段HASH技术,该技术结合HASH精确匹配的快速性能和T树对网段路由的支持性能,同时实现快速索引和网段路由。前缀分段HASH技术中,把128bit的IPv6地址分为若干段,每段地址的前面的地址称为前缀段地址。在完成上述分段后,为每个前缀段地址建立树根HASH表,表大小可以在64K~1M之间,即对应16bit~20bit的地址;对每段建立T树索引表。其中,建立树根HASH表的方法为:将前缀段地址按照某种算法压缩到16bit~20bit,建立树根HASH表。对每段地址建立T树索引表的方法为:将每段地址又分成若干级,然后为每级地址建立索引表。
按照上述建立的IPv6路由索引表,进行IPv6路由索引的方法为:首先在树根HASH表中得到根入口,然后通过T树索引得到最终的路由节点。
图2为前缀分段HASH索引的示意图,下面结合图2详细介绍IPv6路由索引表的建立与路由索引方法。
IPv6地址分为4段,对于每段地址又分为4级T树,因此整个IPv6地址共有16级索引。上述分段和分级中,每段包括32bit,每一级包括8bit。为了描述方便,将IPv6地址分段后的各段分别命名为A、B、C、D,再将每段地址分级后的各级分别命名为,A1、A2、A3、A4;B5、B6、B7、B8;C9、C10、C11、C12;D13、D14、D15、D16。
根据前缀分段HASH技术,对A、B、C、D各段建立T树索引。为A段地址建立的T树称为第一段T树、为B段地址建立的T树称为第二段T树、为C段地址建立的T树称为第三段T树、为D段地址建立的T树称为第四段T树。
然后对每一段T树再次建立4级索引。例如,对于第一段T树,为A1地址建立1级索引、为A2地址建立2级索引、为A3地址建立3级索引、为A4地址建立4级索引;对于第二段T树、为B5地址建立5级索引、为B6地址建立6级索引、为B7地址建立7级索引、为B8地址建立8级索引等。
最后,为每段树的前缀段地址建立树根HASH表。例如,对于第二段T树的前缀段地址建立第二段树根HASH表,该第二段树根HASH表中的索引项是对A段地址按照某种算法压缩得到;对于第三段T树的前缀段地址建立第三段树根HASH表,该第三段树根HASH表中的索引项是对A、B两段地址按照某种算法压缩得到;对于第四段T树的前缀段地址建立第四段树根HASH表,该第四段树根HASH表中的索引项是对A、B、C三段地址按照某种算法压缩得到。所述的树根HASH表大小一般在64k~1M之间,需要把长地址压缩成16~20bit。经过压缩的局部地址将对应多个全部地址,因此上述树根HASH表中存有压缩得到的局部地址与全部地址之间的对应关系,即对冲突的表项建立冲突链。
根据上述所建立的IPv6路由索引表,进行IPv6路由索引的流程如图3所示,详细描述其步骤如下:
步骤301:把IPv6地址分为4段,每段32bit,即4字节,分别命名为A、B、C、D;
步骤302:ABC作为第四段树根HASH表的关键字,将ABC进行压缩得到局部地址之后,在第四段树根HASH表中查找与该局部地址匹配的表项,如果查找到匹配的表项,则执行步骤303;如果查找不到匹配的表项,则执行步骤305;
步骤303:判断所查找到的匹配的表项的冲突链上是否存在与ABC地址对应的表项,如果是,则执行步骤304;如果否,则执行步骤305;
步骤304:第四段树根HASH表中查找到的表项指针指向第四段T树的其中一个表的入口,以D为索引关键字,在所述指针指向的第四段T树中按照T树索引方法索引路由节点,结束本流程;
步骤305:步骤302所述,在第四段树根HASH表中没有查找到匹配的地址,说明路由掩码长度小于3个4字节,因此,再以AB作为第三段树根HASH表的关键字,将AB进行压缩得到局部地址之后,在第三段树根HASH表中查找与该局部地址匹配的表项,如果查找到匹配的表项,则执行步骤306;如果查找不到匹配的表项,则执行步骤308;
步骤306:判断所查找到的匹配的表项的冲突链上是否存在与AB地址对应的表项,如果是,则执行步骤307;如果否,则执行步骤308;
步骤307:第三段树根HASH表中查找到的表项指针指向第三段T树的其中一个表的入口,以C为索引关键字,在所述指针指向的第三段T树中按照T树索引方法索引路由节点,结束本流程;
步骤308:步骤305所述,在第三段树根HASH表中没有查找到匹配的地址,说明路由掩码长度小于2个4字节,因此,再以A作为第二段树根HASH表的关键字,将A进行压缩得到局部地址之后,在第二段树根HASH表查找与该局部地址匹配的表项,如果查找到匹配的表项,则执行步骤309;如果查找不到匹配的表项,则执行步骤311;
步骤309:判断所查找到的匹配的表项的冲突链上是否存在与A地址对应的表项,如果是,则执行步骤310;如果否,则执行步骤311;
步骤310:第二段树根HASH表中查找到的表项指针指向第二段T树的其中一个表的入口,以B为索引关键字,在所述指针指向的第二段T树中按照T树索引方法索引路由节点,结束本流程;
步骤311:步骤308所述,在第二段树根HASH表中没有查找到匹配的地址,说明路由掩码长度小于1个4字节,因此,以A为索引关键字,在第一段T树中按照T树索引方法索引路由节点,结束本流程。
其中,步骤304、307、310、311中所述按照T树索引方法索引路由节点的方法包括:将索引关键字分成四级,然后在第一级索引表中按照第一级关键字查找对应的表项,然后根据该表项指针的指向继续在下一级索引表中按照下一级关键字查找,直到指针指向路由节点。例如,在步骤304中,将D地址分成D13、D14、D15、D16四级,每一级为8bit;首先,在13级索引表中查找与D13对应的表项,如果该表项指针指向路由节点,则结束索引;如果该表项指针指向第14级索引表,则在第14级索引表中查找与D14对应的表项,然后根据该表项指针的指向,继续在下一级查找或结束索引。
从以上图3所示的IPv6路由索引方法,在路由索引时,从树根HASH得到根入口,其顺序是,先第四段树根HASH表中查找,如果查找不到,则再在第三段树根HASH表中查找,如果还是查找不到,则最后在第二段树根HASH表中查找。如果在上述树根HASH表中查找到根入口,则访问对应段的T树;如果在第二段树根HASH表中也未找到根入口,则访问第一段T树,在该第一段T树中进行T树索引到路由节点。
根据上述索引方法,IPv6路由时,最多索引7次即可。如果按照单纯的T树索引方法,最多要索引16次。因此,按照本发明提供的结合T树和HASH技术的方法索引IPv6地址,大大提高索引速度。而且,该方法还支持网段路由。例如,如果在第三段树根HASH表中找到根入口,则在第三段T树中按照T树方法路由索引时,最多四级索引就能索引到路由节点,不必要再去第四段T树中索引。如果按照单纯的HASH技术,并不能提供网段路由功能。因此,按照本发明提供的T树和HASH技术结合的方法索引IPv6地址,提供网段路由的功能。
以上实施例的前缀分段策略为4×4的分段方法,即将IPv6地址首先分成4段,然后对每段地址又分成4级,其中一段地址长度为32bit,一级地址长度为8bit。这种分段方式比较均衡、简单。理论上IPv6地址最多可以分成128段,每段1bit。如果将IPv6地址分成每段4bit的32段,则索引次数将达到32次,这导致索引效率的下降。在实际设计中,为了保证索引效率,最多把IPv6地址分为16段,每段T树包括一级索引,即16×1的分段方式,其中一段地址长度为8bit。根据网络结构和路由器属性,也可以分为几个不等长前缀段。例如,将IPv6地址分为3段,其中第一段地址长度为64bit,第二、三段地址长度各为32bit,然后将第一段T树分为8级索引,将第二、三段T树分为4级索引。
以上实施例的对每一段地址建立的索引方式为T树索引,其中,对于每一段地址也可以建立其他索引方式。
使用上述前缀分段HASH技术,索引子网掩码长度小于32bit的IPv6地址时,需要分别索引第四段树根HASH表、第三段树根HASH表、第二段树根HASH表,最后才能判断从第一段T树中索引。通过以上分析,对于索引子网掩码长度相对较短的IPv6地址,每次需要从第四段树根HASH表开始索引。为了进一步提高路由索引速度,本发明提供前缀分段预测技术。前缀分段预测技术能够大大提高索引子网掩码相对较短的IPv6地址的速度。
图4为前缀分段预测技术的示意图。在前缀分段HASH技术的基础上使用的前缀分段预测技术为,给前缀分段HASH技术中的每一段树根HASH表建立预测表,得到紧缩的预测表,该预测表的大小远小于树根HASH表,其表项可以在1K~5K左右。建立预测表的方法为:将前缀段的地址按照某种算法压缩到10bit~12bit,并根据该前缀段在其树根HASH表中是否有对应的有效表项,如果有对应的有效表项,则预测表中对应该前缀段的表项内的值置为1;如果没有,则置为0。其中,1、0只是一种标识符号,也可以采用其他符号代替。
在建立有图2所示的路由索引表,即IPv6地址分为4段,对于每段地址又分为4级T树的前缀分段HASH技术的基础上,建立前缀分段预测技术中所述的预测表的方法以及路由索引方法详细描述如下所述。
分为A、B、C、D四段的IPv6地址,首先将ABC按照某种算法压缩计算得到12bit的值,然后将此12bit的值作为第四段预测表的表项地址,如果ABC对应的第四段树根HASH表中有内容,则所得到的第四段预测表的表项地址中的内容设置为1;如果ABC对应的第四段树根HASH表中没有内容,则所得到的预测表的表项地址中的内容设置为0。按照同样方法,将AB按照某种算法压缩得到12bit的值,然后将此12bit的值作为第三段预测表的表项地址,并根据AB对应的第三段树根HASH表中是否有内容为依据,将所得到的第三段预测表中表项地址中的内容设置为1或0。按照同样方法,将A按照某种算法得到12bit的值,然后将此12bit的值作为第二段预测表的表项地址,并根据A对应的第二段树根HASH表中是否有内容为依据,将所得到的第二段预测表中表项地址中的内容设置为1或0。
表1:
  查询结果   000   001   010   011
  预测分析结果   直接查询第一段T树   直接查询第一段T树   直接查询第一段T树   直接查询第一段T树
  查询结果   100   101   110   111
  预测分析结果   从第二段树根HASH表开始查询   从第二段树根HASH表开始查询   从第三段树根HASH表开始查询   从第四段树根HASH表开始查询
根据以上所得到的预测表的内容,分析IPv6地址的第二、第三、第四段预测表中的内容,得到如表1所示的预测分析结果,根据预测表中的内容确定该IPv6地址从哪一段T树或哪一段树根HASH表中索引。表1中查询结果是以第二、第三、第四段预测表中的查询结果为顺序表示的。
如果,对于某一IPv6地址,获取前缀分段预测结果的方法为:首先将IPv6地址分成A、B、C、D四段,然后使用A按照指定的压缩算法计算得到12bit的地址,根据该地址从第二段预测表中查询对应表项内的值;同样方法,使用AB获取第三段预测表中对应表项内的值;使用ABC获取第四段预测表中对应表项内的值。
如果,前缀分段预测的查询结果为111,则表明第二、第三、第四段树根HASH表中均存在与A、AB、ABC地址对应的表项,能够分析出子网掩码大于或等于3个四字节。因此,索引该IPv6地址时,需要从第四段树根HASH表开始查询,得到第四段T树的根入口后,在第四段T树中路由索引,具体方法如同前述步骤304。
如果,前缀分段预测的查询结果为101,则表明第二、第四段树根HASH表中存在与A、ABC地址对应的表项,第三段树根HASH表中不存在与AB地址对应的表项,因此能够分析出在第四段预测表中获取的结果为虚假结果,是由于地址压缩产生的冲突现象。在这种情况下,子网掩码大于等于1个四字节且小于2个四字节。因此,索引该IPv6地址时,需要从第二段树根HASH表中开始查询,得到第二段T树的根入口后,在第二段T树中路由索引。
如果,前缀分段预测的查询结果为000,则表明第二、第三、第四段树根HASH表中均不存在与A、AB、ABC地址对应的表项,能够分析出子网掩码小于1个四字节。因此,索引该IPv6地址时,需要从第一段T树中路由索引。
下面介绍使用前缀分段预测技术和前缀分段HASH技术进行IPv6路由索引的流程,结合图3,详细步骤如下所述:
在步骤301和步骤302之间进一步包括:A作为第二段预测表的关键字,将A进行压缩得到预测表的地址之后,从第二段预测表获取对应地址的表项内容;AB作为第三段预测表的关键字,将AB进行压缩得到预测表的地址之后,从第三段预测表获取对应地址的表项内容;ABC作为第四段预测表的关键字,将ABC进行压缩得到预测表的地址之后,从第四段预测表获取对应地址的表项内容;从各段预测表中获取结果之后,根据如表1所示的预测分析结果,判断该IPv6地址从哪一段开始索引,将获取的结果以二、三、四段顺序表示时,如果结果为111,则执行步骤302;如果结果为110,则执行步骤305;如果结果为100或101,则执行步骤308;如果结果为000或001或010或011,则执行步骤311。
综上所述,前缀分段预测技术结合前缀分段HASH技术,在子网掩码长度较短的情况下,例如子网掩码长度小于1个四字节时,通过预测直接能够从第一段T树中查询,而对于子网掩码长度大于等于1个四字节时,通过预测直接能够查询到有效的树根HASH表,因此最多索引5次即可。前缀分段预测技术结合前缀分段HASH技术,与单纯的前缀分段HASH技术相比进一步提高了索引速度,与单纯的T树技术相比更进一步提高了索引速度,同时也支持网段路由。
上述方法中,建立树根HASH表和预测表的过程中,将地址按照某种算法压缩得到局部地址空间中所述的某种算法可以是任何一种压缩算法,例如线性压缩算法等。需要指名的是,在建立表所使用的压缩算法和在该表中索引时所使用的压缩算法相同。
在有CAM的系统中,使用CAM建立预测表和树根HASH表。通过使用CAM,不仅能提高处理速度,也能克服单纯使用CAM时地址不够的不足。
综上所述,本发明提供快速索引方法,首先将索引地址分为若干段,为每段的前缀段地址建立树根表,对每段地址建立T树索引表,通过以上建立的索引表,进行索引的方法为:首先将索引地址根据上述所建立的索引表分为若干段,然后确定开始索引的表之后,进行索引。其中确定开始索引的表的方法,一种是:从最后一段的树根HASH表开始索引,如果查找到对应该段前缀段地址的表项,则在相应的段内进行索引;如果查找不到,则继续从前一段的树根HASH表开始索引,直到在树根HASH表中查找到对应的表项,或在倒数第二段树根HASH表中仍未查找到对应的表项,则从第一段索引表开始索引。另一种确定开始索引的表的方法是,预先对树根HASH表建立预测表,然后根据预测表中的内容查找分析得到开始索引的表。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (14)

1.一种快速索引方法,其特征在于,将同类型的所有索引地址分段为多个段,对每段的前缀段地址建立树根HASH表,对每段地址建立T树索引表,该方法包括:
A.将待索引的索引地址按照上述分段方式分段为多个段;
B.确定当前索引的表:
如果确定当前索引的表为第一段T树索引表,则以待索引的索引地址的第一段地址为关键字,在第一段T树索引表进行索引,结束本流程;
如果确定当前索引的表为一段索引地址的树根HASH表,则以待索引的索引地址中该树根HASH表对应的前缀段地址为关键字,在该树根HASH表中查找与该前缀段地址匹配的表项,如果查找到,则执行步骤C;如果查找不到,则执行步骤B;
C.根据所查找到的匹配的表项指针作为T树索引表的入口,以待索引的索引地址中对应段地址为关键字进行索引。
2.根据权利要求1所述的方法,其特征在于,步骤B所述确定当前索引的表的步骤包括:如果在第一次索引时确定当前索引的表,则确定最长前缀段对应的树根HASH表作为当前索引的表;如果在第一次索引之后确定当前索引的表,则确定上一次索引的树根HASH表的前一段树根HASH表或第一段T树索引表作为当前索引的表。
3.根据权利要求1所述的方法,其特征在于,
所述对每段的前缀段地址建立树根HASH表之后进一步包括:对每段的前缀段地址建立预测表,该预测表中与前缀段地址对应的表项内容为在树根HASH表中与该前缀段地址对应的表项存在与否的信息;
步骤B所述确定当前索引的表的步骤包括:如果在第一次索引时确定当前索引的表,则根据利用前缀段地址从各段预测表中查询的结果,确定当前索引的表;如果在第一次索引之后确定当前索引的表,则确定上一次索引的树根HASH表的前一段树根HASH表或第一段T树索引表作为当前索引的表。
4.根据权利要求1所述的方法,其特征在于,
所述对每段的前缀段地址建立树根HASH表的步骤包括:对每段的前缀段地址压缩得到局部地址空间,并建立包括该局部地址空间的树根HASH表;
步骤B所述以该树根HASH表对应的前缀段地址为关键字,在该树根HASH表中查找与该前缀段地址匹配的表项的步骤包括:对该树根HASH表的前缀段地址压缩得到局部地址之后,从树根HASH表中查找与该局部地址匹配的表项。
5.根据权利要求4所述的方法,其特征在于,所述对每段的前缀段地址压缩得到局部地址空间,并建立包括该局部地址空间的树根HASH表之后,进一步包括:如果树根HASH表中表项的局部地址对应多个前缀段地址,则为该表项建立冲突链表项;
步骤B所述如果查找到匹配的表项之后,执行步骤C之前进一步包括:判断所查找到的匹配的表项的冲突链上是否存在与前缀段地址对应的表项,如果是,则执行步骤C,结束本流程;如果不是,则执行步骤B。
6.根据权利要求1所述的方法,其特征在于,
步骤B和步骤C所述进行索引为进行T树索引。
7.根据权利要求6所述的方法,其特征在于,
所述对每段地址建立T树索引表的步骤包括:对每段地址分级,对每级地址建立索引表;
步骤B或步骤C所述进行T树索引的步骤包括:根据该段所建立的T树索引表,将该段地址按照上述分级方式分级,然后以每一级地址为索引关键字,逐级在索引表中索引。
8.根据权利要求1所述的方法,其特征在于,所述树根HASH表使用内容寻址寄存器CAM建立。
9.根据权利要求3所述的方法,其特征在于,所述预测表使用内容寻址寄存器CAM建立。
10.根据权利要求1至9中任一权利要求所述的方法,其特征在于,
所述索引地址为IPv6地址;
所述索引地址分段的步骤包括:索引地址最多分为16个段,其中一个段是8比特的整数倍。
11.根据权利要求10所述的方法,其特征在于,
所述索引地址为IPv6地址;
所述索引地址分段的步骤包括:将索引地址分成4个段,每段为32比特;
所述对每段地址建立T树索引表的步骤包括:对每段地址分为4个级,每级为8比特,对每级地址建立索引表。
12.根据权利要求11所述的方法,其特征在于,
所述对每段的前缀段地址建立树根HASH表的步骤包括:对每段的前缀段地址压缩到16~20比特,得到64K~1M局部地址空间,并建立包括该局部地址空间的树根HASH表;
步骤B所述以该树根HASH表对应的前缀段地址为关键字,在该树根HASH表中查找与该前缀段地址匹配的表项的步骤包括:对该树根HASH表的前缀段地址对应地压缩到16~20比特得到局部地址之后,从树根HASH表中查找与该局部地址匹配的表项。
13.根据权利要求3所述的方法,其特征在于,
所述索引地址为IPv6地址;
所述索引地址分段的步骤包括:将索引地址分成4个段,每段为32比特;
所述对每段地址建立T树索引表的步骤包括:对每段地址分为4个级,每级为8比特,对每级地址建立索引表;
所述对每段的前缀段地址建立预测表的步骤包括:预测表项数同对每段的前缀段地址压缩到10~12比特得到的地址空间的大小,预测表内容为表示在树根HASH表中与该前缀段地址所对应的表项存在与否的信息。
14.根据权利要求3所述的方法,其特征在于,
所述索引地址为IPv6地址;
所述索引地址分段的步骤包括:将索引地址分成4个段,每段为32比特;
所述对每段地址建立T树索引表的步骤包括:对每段地址分为4个级,每级为8比特,对每级地址建立索引表;
步骤B所述根据利用前缀段地址从各段预测表中查询的结果,确定当前索引的表的步骤包括:
如果查询结果为:第二段预测表结果为在第二段的树根HASH表中存在该段的前缀段地址对应表项的信息,且第三段预测表结果为在第三段的树根HASH表中存在该段的前缀段地址对应表项的信息,且第四段预测表结果为在第四段的树根HASH表中存在该段的前缀段地址对应表项的信息,则确定从第四段的树根HASH表开始索引;
如果查询结果为:第二段预测表结果为在第二段的树根HASH表中存在该段的前缀段地址对应表项的信息,且第三段预测表结果为在第三段的树根HASH表中存在该段的前缀段地址对应表项的信息,且第四段预测表结果为在第四段的树根HASH表中不存在该段的前缀段地址对应表项的信息,则确定从第三段的树根HASH表开始索引;
如果查询结果为:第二段预测表结果为在第二段的树根HASH表中存在该段的前缀段地址对应表项的信息,且第三段预测表结果为在第三段的树根HASH表中不存在该段的前缀段地址对应表项的信息,且第四段预测表结果为在第四段的树根HASH表中存在或不存在该段的前缀段地址对应表项的信息,则确定从第二段的树根HASH表开始索引;
如果查询结果为:第二段预测表结果为在第二段的树根HASH表中不存在该段的前缀段地址对应表项的信息,且第三段预测表结果为在第三段的树根HASH表中存在或不存在该段的前缀段地址对应表项的信息,且第四段预测表结果为在第四段的树根HASH表中存在或不存在该段的前缀段地址对应表项的信息,则确定从第一级T树索引表开始索引。
CNB2005101083784A 2005-10-13 2005-10-13 一种快速索引方法 Active CN100401723C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005101083784A CN100401723C (zh) 2005-10-13 2005-10-13 一种快速索引方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005101083784A CN100401723C (zh) 2005-10-13 2005-10-13 一种快速索引方法

Publications (2)

Publication Number Publication Date
CN1852238A CN1852238A (zh) 2006-10-25
CN100401723C true CN100401723C (zh) 2008-07-09

Family

ID=37133707

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005101083784A Active CN100401723C (zh) 2005-10-13 2005-10-13 一种快速索引方法

Country Status (1)

Country Link
CN (1) CN100401723C (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102035899B (zh) * 2009-09-24 2014-12-10 中兴通讯股份有限公司 基于IPv6的局域网内的地址确定方法与装置
TWI602074B (zh) * 2016-12-29 2017-10-11 慧榮科技股份有限公司 建立多重命名空間方法與存取多重命名空間的資料的方法
CN109995662A (zh) * 2019-03-07 2019-07-09 盛科网络(苏州)有限公司 一种ACL短key匹配部分ipv6地址的芯片实现方法
CN110290117B (zh) * 2019-06-06 2021-11-05 新华三信息安全技术有限公司 一种匹配ip地址的方法及装置
CN114153400B (zh) * 2021-12-08 2024-01-30 国仪石油技术(无锡)有限公司 一种用于测井仪器中的数据存储方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1341314A (zh) * 1999-02-26 2002-03-20 红石通信公司 使用压缩树转发表的网络路由器搜索引擎
US20030126113A1 (en) * 1999-12-10 2003-07-03 Mosaid Technologies, Inc. Method and apparatus for storing sparse and dense subtrees in a longest prefix match lookup table
CN1489849A (zh) * 2001-01-30 2004-04-14 ŵ�������ܱ�Ե·������˾ 用于三重内容可寻址存储器(tcam)表管理的方法和设备
CN1538663A (zh) * 2003-04-16 2004-10-20 华为技术有限公司 一种采用哈希链表查找路由表项的方法
US20050114393A1 (en) * 2003-11-24 2005-05-26 Alcatel Dynamic forwarding method using binary search

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1341314A (zh) * 1999-02-26 2002-03-20 红石通信公司 使用压缩树转发表的网络路由器搜索引擎
US20030126113A1 (en) * 1999-12-10 2003-07-03 Mosaid Technologies, Inc. Method and apparatus for storing sparse and dense subtrees in a longest prefix match lookup table
CN1489849A (zh) * 2001-01-30 2004-04-14 ŵ�������ܱ�Ե·������˾ 用于三重内容可寻址存储器(tcam)表管理的方法和设备
CN1538663A (zh) * 2003-04-16 2004-10-20 华为技术有限公司 一种采用哈希链表查找路由表项的方法
US20050114393A1 (en) * 2003-11-24 2005-05-26 Alcatel Dynamic forwarding method using binary search

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
US2003/0126113A1 2003.07.03

Also Published As

Publication number Publication date
CN1852238A (zh) 2006-10-25

Similar Documents

Publication Publication Date Title
US7529746B2 (en) Search circuit having individually selectable search engines
CN101309216B (zh) 一种ip包分类方法和设备
US7069268B1 (en) System and method for identifying data using parallel hashing
US6522632B1 (en) Apparatus and method for efficient prefix search
US7469243B2 (en) Method and device for searching fixed length data
CN1794236B (zh) 高效的基于cam在分组有效载荷中进行串搜索的技术
US7098815B1 (en) Method and apparatus for efficient compression
US20020152413A1 (en) Prefix search circuitry and method
US20060117088A1 (en) Network processor system
US20070194957A1 (en) Search apparatus and search management method for fixed-length data
CN101043421B (zh) 一种基于内存的ip地址最长匹配快速查找的方法
CN100401723C (zh) 一种快速索引方法
JP2001509978A (ja) スイッチング装置における高速可変長ベストマッチルックアップ
JP4995125B2 (ja) 固定長データの検索方法
US8990492B1 (en) Increasing capacity in router forwarding tables
US7460538B2 (en) Communication control apparatus and method for searching an internet protocol address
US7403526B1 (en) Partitioning and filtering a search space of particular use for determining a longest prefix match thereon
US20140358886A1 (en) Internal search engines architecture
CN112347377A (zh) Ip地址段查找方法与业务调度方法、装置、电子设备
CN100426791C (zh) 一种路由转发表地址查找引擎装置
Han et al. A novel routing algorithm for IoT cloud based on hash offset tree
CN102014065A (zh) 报文包头的解析方法、包头解析预处理装置和网络处理器
JPH10257066A (ja) ネットワークアドレス検索方式
CN100452732C (zh) 路由查找方法及其系统
US7653070B2 (en) Method and system for supporting efficient and cache-friendly TCP session lookup operations based on canonicalization tags

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