存储、查找路由表的方法及装置的制作方法

文档序号:7696702阅读:139来源:国知局

专利名称::存储、查找路由表的方法及装置的制作方法
技术领域
:本发明涉及通信
技术领域
,尤其涉及一种存储、查找路由表的方法及装置。
背景技术
:为了在用户众多的互联网络中完成由一地址到另一个地址的路由,通常将各种传输路径的相关数据存储在一起形成路由表,供进行路由时查询。无类型域间路由(CIDR,ClasslessInter-DomainRouting)是一种比较常用的路由表结构。在使用CIDR结构形成路由表时,一个网际协议(IP,InternetProtocol)网络使用一个前缀代表,这个前缀通常由IP网络的IP地址和和标识其有效位的掩码复合表示,例如"111*"表示IP地址为"111",有效位为三位,在存储时通常使用多比特树(Multi-BitTire)的方式进行存储,将在地址空间中相互邻近、路由相同的2的整数次幂个子网的路由表条目合并成一条路径,作为一个表项存储于路由表中,在进行查找时可以依照路径进行查找。现以实例对存储的方法进行描述,假设有9个前缀"PI""P2""P3""P4""P5""P6""P7""P8""P9",前缀标号与前缀值之间的关系如表1所示前纟毁才示号前缀值PI承P2P300*P4101*P5P61000*P711101*<table>tableseeoriginaldocumentpage7</column></row><table>表l、前缀标号与前缀值之间的关系表基本的二叉树搜索一步检查1个比特,若相应的地址前缀最长为M,则树的深度为M。如果一次检查K个比特则树的深度可减少到M/K,这样树的内部结点包含的匹配项增加为2的K次幂。这样的树被称为2的K次幂分支树,树的最大层数为M/K。查表算法在每个结点处检查的比特数为K,也就被称为树的步长。假设该Multi-BitTire的步长为3,则树中每个节点将包含2的3次幂项,即8项,其结构如表2所示匹配项下一级节点指针<table>tableseeoriginaldocumentpage7</column></row><table>表2、步长为3的节点结构其中前缀匹配项(Prefix)是指能与该项匹配的前缀,例如,"PI"的值为说明"PI"可以与任何一项匹配,假若该节点为根节点,初始记录为空时,从"000"到"111"都是"PI"的匹配项;"P2"的值为"1*",说明"P2"的IP地址为"1",有效位为1位,任何以'T,开头的项都可以与"P2"匹配,假若该节点为根节点,从"100"到"111"都是"P2"的匹配项,此时若已存入"Pl,,,则在存入"P2"时,从"100"到"111"都将被"P2"覆盖;其它有效位在3位以内的前缀"P3""P4""P5"存储方式可以依此类推,"000""001"为"P3"的匹配项,"101"为"P4"的匹配项,"111"为"P5"的匹配项,存入"P1""P2""P3""P4""P5"的节点结构如表3所示<table>tableseeoriginaldocumentpage8</column></row><table>表3、存入"P1""P2',"P3""P4""P5"的节点结构表2、表3中"下一级节点指针(Ptr)"—栏存储的是指向下一级节点的指针,这是由于在前缀的有效位超过节点步长时,需要建立下一级节点,查找时根据这个指针就可以寻找到下一级节点,以"P6""P7""P8""P9"为例,"P6"的值为"1000*",说明"P6"的有效值为4位,在步长为3的根节点中寻找不到匹配项,因此在存入"P6"时需要建立下一级节点,根节点中"100"与"P6"的前三位匹配,因此要在"100"的"下一级节点指针,,一栏存入新建立的下一级节点指针,该新建立的下一级节点中,以"0"开头的表项都可以与"P6,'匹配,存入"P6"的节点结构如表4所示<table>tableseeoriginaldocumentpage8</column></row><table><table>tableseeoriginaldocumentpage9</column></row><table>表4、存入"P6"的节点结构"P7"的值为"11101*,,,"P8"的值为"111001*",其前3位值相同,都是"111",因此可以为"P7""P8"建立一个下一级节点,在根节点"111"的"下一级节点指针,,一栏存入新建立的下一级节点指针,该新建立的下一级节点中,以"01"开头的"010""011"可与"P7"匹配,"001"可与"P8"匹配,存入"P7""P8"的节点结构如表5所示<table>tableseeoriginaldocumentpage9</column></row><table>表5、存入"P7""P8"的节点结构"P9"的值为"1000011*,,,有效值为7位,是节点步长"3"的2倍多,因此在根节点下一级节点的基础上还需要再建立一级新的节点,建立时,看现有的节点有没有可以与其前6位相匹配的项,若有则将新建立的节点指针填入该项"下一级节点指针,,一栏,若无则在根节点与其前3位相匹配项的"下一级节点指针,,一栏填入新建立的节点指针,本例中,表4所示存入"P6"的节点"001"可与"P9"前6位匹配,因此在该项的"下一级节点指针,,一栏填入新建立的节点指针,新建立的项以"1"开头的表项都可以与"P9"匹配,存入"P9"的节点结构如表6所示匹配项下一级节点指针<table>tableseeoriginaldocumentpage10</column></row><table>表6、存入"P9"的节点结构至此,"P1""P2""P3""P4""P5""P6""P7""P8""P9"均已存入步长为3的Multi-BitTire,该Multi-BitTire完整结构如图1所示,包括相当于表3所示节点的根节点、相当于表4所示节点的节点1、相当于表5所示节点的节点2、相当于表6所示节点的节点3。在对现有技术的研究和实践过程中,发明人发现现有技术存在以下问题每一个节点都需要申请固定大小的存储空间,而这些节点的表项大部分时候都没有下一级节点,即Ptr表项多数为空,以图1为例,共有29个Ptr表项为空,非常浪费内存资源,而在多数时候内存资源都是非常紧缺的资源,实际中的路由表节点可能多达上百、上千、或更多个,浪费内存资源就更多了。
发明内容本发明实施例要解决的技术问题是提供一种形成路由表的方法及装置,可以减少路由表占用的内存资源。为解决上述技术问题,本发明实施例一方面,提供了一种存储路由表的方法,包括将所述路由表分为下一级节点指针部分和匹配项编码部分保存;在所述下一级节点指针部分保存根节点数据和第一级节点数据;其中,所述根节点数据包括具有下一级节点指针的根节点匹配项,所述匹配项的根节点哈希函数、根节点的下一级节点指针;使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针;所述第一级节点的下一级节点指针指向第一级节点的匹配项编码指针,所述第一级节点的匹配项编码指针指向所述匹配项编码部分。另一方面,提供了一种查找路由表的方法,包括根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;读取查找到的哈希函数、下一级节点指针;使用查找到的哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;根据所述查找结果读取匹配项编码。另一方面,提供了一种存储路由表的装置,包括匹配项编码单元,用于保存路由表的匹配项编码部分;下一级节点指针单元,用于保存根节点数据和第一级节点数据;其中,所述根节点数据包括具有下一级节点指针的根节点匹配项,所述匹配项的根节点哈希函数、根节点的下一级节点指针;使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针;所述第一级节点的下一级节点指针指向第一级节点的匹配项编码指针,所述第一级节点的匹配项编码指针指向所述匹配项编码部分。另一方面,提供了一种查找路由表的装置,包括直接查找单元,用于根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;第一读取单元,用于读取查找到的哈希函数、下一级节点指针;哈希查找单元,用于使用查找到的哈希函数对下一级节点的待查步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;第二读取单元,用于根据所述查找结果读取匹配项编码。由以上技术方案可以看出,由于本发明实施方式为路由表的下一级节点指针部分单独分配存储空间,使用IP地址的哈希结果作为偏移地址保存下一级节点数据,只需要保存存在"下一级节点指针,,的部分表项相关数据,因此使用本发明实施方式提供的技术方案可以减少为空白表项分配的存储空间,有效减少路由表占用的内存资源。图1为现有技术Multi-BitTire示意图2为两个实际中的路由表中节点的下一级节点的数量分布图;图3为本发明提供的存储路由表的方法实施例存储结构图;图4为本发明提供的存储路由表的方法实施例中节点结构图;图5为本发明提供的存储路由表的方法实施例一的存储结构图;图6为本发明提供的查找路由表的方法实施例一流程图。具体实施例方式本发明提供了一种存储、查找路由表的方法及装置,可以有效地节省路由表占用的内存资源。在本发明提供的存储路由表的方法实施例中,将路由表分为Prefix和Ptr两个部分分别进行存储。在对目前常见路由表的研究中发现,有下一级节点的且下一级节点为树节点的节点在整个路由表中所占比例非常少,这类节点的下一级节点数目大部分情况下不会大于64个。现以两个实际中的路由表进行说明,图2是两个实际中的路由表中节点的下一级节点的数量分布图,横坐标是节点的下一级节点的数目,纵坐标为节点的数量,两条曲线分别对应两个实际中的路由表,步宽为8。由图2可以看出大量的节点都只有一个或两个下一级节点,下一级节点多于5个的节点所占比例非常少,在此基础上,本发明实施例提供的存储路由表的方法实施例提出了使用哈希(HASH)方式存储指针的方法。由于靠近根节点的匹配项有下一级节点指针的可能性比较大,因此本发明实施例提供的存储路由表的方法实施例中,按照路由表的实际情况对靠近根节点的匹配项的IP地址不进行HASH,通常选择的范围为0-8Bit或0-16Bit的匹配项不进行HASH,直接进行存储,这是由于在常见的路由表中,0-8Bit、甚至0-16Bit的匹配项及其下一级节点指针部分占用的空间所占比例并不大,根据实际情况,选择0-3Bit、0-4Bit的匹配项不进行HASH也是可以的。在直接存储的匹配项存在下一级节点指针,且该下一级节点指针指向的匹配项的IP地址需要经过哈希后存储的,该直接存储的匹配项的保存数据中就应当包含该哈希函数,该哈希函数用于对该下一级节点指针指向的匹配项的IP地址进行哈希。由于离根节点较远的匹配项没有下一级节点指针的可能性比较大,因此本发明实施例提供的存储路由表的方法实施例中,按照路由表的实际情况对离根节点较远的匹配项的IP地址进行HASH之后,存储^^希后的值与下一级节点指针,例如,假如选择的范围为0-8或0-16Bit的匹配项不进行HASH,直接进行存储,则将0-8Bit或0-16Bit之后的匹配项的IP地址进行HASH之后,再进行存储。由于哈希通常会存在沖突,为了防止沖突,通常在存储结构中增加若干个冲突项,根据实际情况,以选2个、或3个冲突项为宜,以选择3个冲突项,且有下一级节点指针的情况为例,存储哈希后数值的数据结构如表7所示哈希函凄t(HashFunction)IPHashFunctionIPHashFunctionIP下一级节点指针表7、存储哈希后数值的数据结构其中,表项"HashFunction"存放的是不同的哈希函数;表项"IP"是用来存储实际IP地址的,这是为了防止出现找错的情况。哈希函数的冲突,既是指不同的值在使用同一哈希函数哈希后有可能出现相同结果,例如,以与0x01110000相与为哈希函数,01010011、和01010111在进行哈希后得到的结果都是"101",为了防止冲突,本发明实施例提供的存储路由表的方法实施例,给出了保留多个哈希函数的方法,在出现沖突时,选择使用其他的哈希函数进行哈希以避免冲突,但是找查找时,仍然有可能找错,为防止找错,本发明实施例提供的存储路由表的方法实施例,在存储哈希后数值的数据结构给出了存储实际IP地址的表项,查找到对应的^i后再核对IP地址,IP地址核对通过则证明查找正确。根据实际情况,IP地址可以取实际的长度,例如,步宽为3Bit的取3Bit,步宽为8Bit的取8Bit,也可以取最可能存在差异的Bit位进行比较,仍以与0x01110000相与为哈希函数为例,就可以取第1、5、6、7、8位Bit位的实际IP地址进行比较,以减小数据结构大小,或者使用节省下来的空间存储更多的沖突项。以选择直接存储0-3Bit的匹配项为例,存储结构如图3所示以"*"为0Bit开始计,共有4级匹配项被直接保存,最后一级匹配项只有000有下一级节点,因此只有000的下一级节点指针指向一个存储哈希后数值的数据结构,该数据结构中包含"哈希函数""IP""下一级节点指针"。现以实例说明具体的存储方法,假设要存储的路由表长度为32Bit,以Multi-BitTire存储时,步长为8,共有4级,其节点结构如图4所示根节点401中可储存28个匹配项,其中只有1个匹配项有下一级节点,该匹配项的下一级节点指针指向第一级节点402;第一级节点402同样可储存28个匹配项,其中有2个匹配项有下一级节点,这2个匹配项的下一级节点指针分别指向第二级节点403和第二级节点404;第二级节点403同样可储存28个匹配项,但是其中没有任何一个匹配项有下一级节点,第二级节点404同样可储存28个匹配项,其中只有1个匹配项有下一级节点,该匹配项的下一级节点指针指向第三级节点405;第三级节点405同样可储存28个匹配项,但是其中没有任何一个匹配项有下一级节点。由以上描述可知,第一级节点402、第二级节点403、第二级节点404、第三级节点405共为28x4个匹配项申请并预留了空间,其中只有3个匹配项有下一级节点,既只有3个"下一级节点指针"表项不为空,有2、4-3个匹配项的"下一级节点指针,,表项占用的空间被浪费了,再加上并不是所有位置都有相匹配项的匹配项,"匹配项"表项的浪费也非常严重。在本发明提供的存储路由表的方法实施例中,将所述路由表分为下一级节点指针部分和匹配项编码部分保存;在所述下一级节点指针部分保存根节点数据和第一级节点数据;其中,所述根节点数据包括具有下一级节点指针的根节点匹配项,所述匹配项的根节点哈希函数、根节点的下一级节点指针;使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针;所述第一级节点的下一级节点指针指向第一级节点的匹配项编码指针,所述第一级节点的匹配项编码指针指向所述匹配项编码部分。15在有更多级节点,级数为N时;在所述下一级节点指针部分还要保存第N级节点lt据;使用所述匹配项的第N-l级节点的哈希函数对第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-l级节点的下一级节点指针指向的位置存储所述第N级节点数据;所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点的哈希函数、第N级节点的下一级节点指针;所述第N级节点的下一级节点指针指向第N级节点的匹配项编码指针,所述第N级节点的匹配项编码指针指向所述匹配项部分;其中,所述N为大于等于2的整数。的存储路由表的方法实施例一的存储结构如图5所示虛线框501内为根节点的数据,根据图4可知,根节点中只有1个匹配项有下一级节点,因此在本发明提供的存储路由表的方法实施例一中,只需存储一个匹配项的"下一级节点指针"。由于本发明提供的存储路由表的方法实施例一选择直接存储0-8Bit的匹配项,不需要对0-8Bit的IP地址进行哈希,因此虚线框501内存储的数据为有下一级节点指针的"匹配项"、选择使用的"哈希函数"、"下一级节点指针";其中"哈希函数,,为根节点哈希函数,用于对所述匹配项第一级节点步长范围内IP地址进行哈希,也就是用于对实际IP地址的9-16Bit进行哈希的哈希函数;"下一级节点指针,,指向存放第一级节点数据的地址,通过"下一级节点指针"可以找到存放第一级节点数据的位置,通过对实际IP地址的9-16Bit进行哈希的结果,可以找到对应的匹配项数据。虚线框502内为第一级节点的数据,根据图4可知第一级节点中有两个匹配项有下一级节点,因此虚线框502内存储有2个匹配项的相关数据。其中"哈希ir、"ipir、"哈希12"、"ipi2"、"哈希13"、"ipi3"、"下一级节点指针r为存储第一级节点的具有下一级节点匹配项的相关数据的第一个表项,对匹配项实际IP地址的9-16Bit进行哈希后,以哈希结果作为偏移地址,偏移地址位于本表项的匹配项都保存于该表项;"哈希11"、"哈希12"、"哈希13"对应表7中的"哈希函数,,表项,是第一级节点的哈希函数,保存有对本表项中具有下一级节点匹配项的第17-24Bit进行哈希的三个不同哈希函数,即用于对匹配项第二级节点步长范围内IP地址进行哈希的哈希函数;"IP11"、"IP12"、"IP13"对应表7中的"IP"表项;如果使用虚线框501中的哈希函数对具有下一级节点匹配项的第9-16Bit进行哈希后,偏移地址位于本表项,且哈希结果没有冲突,则根据实际情况保存实际IP地址的9-16Bit,或者实际IP地址的9-16Bit中的几个Bit于"IP11",使用"哈希11"对该匹配项IP地址的17-24Bit进行哈希;如果出现冲突,则按沖突顺序进行处理,如果是第一个沖突项,根据实际情况保存实际IP地址的9-16Bit,或者实际IP地址的9-16Bit中的几个Bit于"IP12",使用"哈希12"对该匹配项IP地址的17-24Bit进行哈希,如果是第二个冲突项,则根据实际情况保存实际IP地址的9-16Bit,或者实际IP地址的9-16Bit中的几个Bit于"IP13",使用"哈希13"对该匹配项IP地址的17-24Bit进行哈希,也可以直接将实际IP地址的9-16Bit,或者实际IP地址的9-16Bit中的几个Bit保存在为空的"IP"项中,使用相应"哈希函数,,对该匹配项IP地址的17-24Bit进行哈希;"下一级节点指针1"指向该匹配项的"最长匹配前缀r存放地址;"最长匹配前缀r和"匹配项指针r及第二级节点的"哈希41"、"IP41,'、"哈希42"、"IP42"、"哈希43"、"IP43"、"下一级节点指针4"存放在一起;"匹配项指针1"指向该匹配项对应的"匹配项编码l","匹配项编码l"中保存有501中"下一级节点指针,,指向的第一级节点的匹配项部分相关数据,通过"匹配项指针1"可以将第一级节点信息和对应的"匹配项"信息联系在一起。"哈希21"、"IP21"、"哈希22"、"IP22"、"哈希23"、"IP23"、"下一级节点指针2"为存储第一级节点的具有下一级节点匹配项的相关数据的第二个表项,和"哈希ir、"ipir、"哈希12"、"ipi2"、"哈希13"、"ipi3"、"下一级节点指针r保存于同一张表中,这张表可以被称为是一个子节点数组(ChildArray),如果第一级节点中有更多的匹配项有下一级节点,这些匹配项的相关数据也都将存储于这个子节点数组中;"哈希11"、"哈希12"、"哈希13"对应表7中的"哈希函数,,表项,是第一级节点的哈希函数,保存有对第二个具有下一级节点匹配项的第17-24Bit进行哈希的三个不同哈希函数,即用于对匹配项第二级节点步长范围内IP地址进行哈希的哈希函数;"IP21"、"IP22"、"IP23"对应表7中的"IP"表项;如果使用虚线框501中的哈希函数对具有下一级节点匹配项的第9-16Bit进行哈希后,偏移地址位于本表项,且哈希结果没有沖突,则根据实际情况保存实际IP地址的9-16Bit,或者实际IP地址的9-16Bit中的几个Bit于"IP21",使用"哈希21"对该匹配项IP地址的17-24Bit进行哈希;如果出现冲突,则4要冲突顺序,如果是第一个冲突项,根据实际情况保存实际IP地址的9-16Bit,或者实际IP地址的9-16Bit中的几个Bit于"IP22",使用"哈希22"对该匹配项IP地址的17-24Bit进行哈希,如果是第二个冲突项,则根据实际情况保存实际IP地址的9-16Bit,或者实际IP地址的9-16Bit中的几个Bit于"IP23",使用"哈希23"对该匹配项IP地址的17-24Bit进行哈希,也可以直接将实际IP地址的9-16Bit,或者实际IP地址的9-16Bit中的几个Bit保存在为空的"IP"项中,使用相应"哈希函数,,对该匹配项IP地址的17-24Bit进行哈希;"下一级节点指针2"指向该匹配项的"最长匹配前缀2"存放地址;"最长匹配前缀2"和"匹配项指针2"及第二级节点的"哈希31"、"IP31"、"哈希32"、"IP32"、"哈希33"、"IP33"、"下一级节点指针3"存放在一起;"匹配项指针2"指向该匹配项对应的"匹配项编码l","匹配项编码r中保存有501中"下一级节点指针"指向的第一级节点的匹配项部分相关数据,由于一个子节点数组中所有数据都属于同一个节点,因此所有"匹配项指针"最终都指向属于同一个节点的匹配项编码。通过"匹配项指针2"可以将第一级节点信息和对应的"匹配项,,信息联系在一起。虚线框503内为第二级节点的数据,根据图4可知第二级节点中有两个节点,其中有一个节点中有一个匹配项有下一级节点,因此虚线框503内存储有2个节点的相关数据,但是只有一个的下一级节点指针指向的数据包含第三级节点数据。其中"哈希31"、"IP31',、"哈希32"、"IP32"、"哈希33"、"IP33"、"下一级节点指针3"为"下一级节点指针2"指向的节点的相关数据,和第一级18节点的第二个具有下一级节点匹配项的相关数据"最长匹配前缀2"和"匹配项指针2,'保存在同一个表格里;"哈希31"、"哈希32"、"哈希33"对应表7中的"哈希函数,,表项,保存有对本表项中具有下一级节点匹配项的第25-32Bit进行哈希的三个不同哈希函数,即用于对匹配项第三级节点步长范围内IP地址进行哈希的哈希函数;"IP31"、"IP32"、"IP33"对应表7中的"IP"表项;如果使用虚线框501中的哈希函数对"下一级节点指针2"指向的节点的第17-24Bit进行哈希后,偏移地址位于本表项,且哈希结果没有冲突,则根据实际情况保存实际IP地址的17-24Bit,或者实际IP地址的17-24Bit中的几个Bit于"IP31",使用"哈希31"对该匹配项IP地址的24-32Bit进行哈希;如果出现冲突,则按冲突顺序进行处理,如果是第一个冲突项,根据实际情况保存实际IP地址的17-24Bit,或者实际IP地址的17-24Bit中的几个Bit于"IP32",使用"哈希32"对该匹配项IP地址的24-32Bit进行哈希,如果是第二个冲突项,则根据实际情况保存实际IP地址的17-24Bit,或者实际IP地址的17-24Bit中的几个Bit于"IP33",使用"哈希33"对该匹配项IP地址的24-32Bit进行哈希,也可以直接将实际IP地址的17-24Bit,或者实际IP地址的17-24Bit中的几个Bit保存在为空的"IP"项中,使用相应"哈希函数"对该匹配项IP地址的24-32Bit进行哈希;"下一级节点指针3"指向该匹配项的"最长匹配前缀3"存》丈地址;"最长匹配前缀3"和"匹配项指针3"存放在一起,由于"下一级节点指针2"指向的节点没有下一级节点,因此"下一级节点指针3"指向的地址不包括第三级节点的数据;"匹配项指针3"指向该匹配项对应的"匹配项编码3","匹配项编码3"中保存有"下一级节点指针2"指向的节点的匹配项部分相关数据,通过"匹配项指针3"可以将第二级节点信息和对应的"匹配项"信息联系在一起。"哈希41"、"IP41"、"哈希42"、"IP42"、"哈希43"、"IP43"、"下一级节点指针4"为"下一级节点指针l"指向的节点的相关数据,和第一级节点的第一个具有下一级节点匹配项的相关数据"最长匹配前缀r和"匹配项指针1"保存在同一个表格里;"哈希41"、"哈希42"、"哈希43"对应表7中的"哈希函数,,表项,保存有对"下一级节点指针1"指向的节点的第17-24Bit进行哈希的三个不同哈希函数,即用于对匹配项第三级节点步长范围内IP地19址进行哈希的哈希函数;"IP41"、"IP42"、"IP43"对应表7中的"IP"表项;如果使用虚线框501中的哈希函数对"下一级节点指针1"指向的节点的第17-24Bit进行哈希,哈希结果没有冲突,则保存在"哈希41"中,并根据实际情况保存实际IP地址的17-24Bit,或者实际IP地址的17-24Bit中的几个Bit于"IP41",使用"哈希41',对该匹配项IP地址的24-32Bit进行哈希;如果出现冲突,则按冲突顺序进行处理,如果是第一个冲突项,根据实际情况保存实际IP地址的17-24Bit,或者实际IP地址的17-24Bit中的几个Bit于"IP42",使用"哈希32"对该匹配项IP地址的24-32Bit进行哈希,如果是第二个冲突项,则根据实际情况保存实际IP地址的17-24Bit,或者实际IP地址的17-24Bit中的几个Bit于"IP43",使用"哈希43"对该匹配项IP地址的24-32Bit进行哈希,也可以直接将实际IP地址的17-24Bit,或者实际IP地址的17-24Bit中的几个Bit保存在为空的"IP"项中,使用相应"哈希函数,,对该匹配项IP地址的24-32Bit进行哈希;"下一级节点指针4"指向该匹配项的"最长匹配前缀4"存放地址;"最长匹配前缀4"和"匹配项指针4"及第三级节点的"哈希51"、"IP51"、"哈希52',、"IP52"、"哈希53"、"IP53"、"下一级节点指针5"存放在一起;"匹配项指针4"指向该匹配项对应的"匹配项编码4","匹配项编码4"中保存有"下一级节点指针1"指向的节点的匹配项部分相关数据,通过"匹配项指针4"可以将第二级节点信息和对应的"匹配项"信息联系在一起。虛线框504内为第三级节点的数据,根据图4可知第三级节点中有一个节点,但是该节点没有下一级节点,因此虚线框504内存储有1个节点的相关数据,且该节点的"下一级节点指针"指向的地址不包括下一级节点的数据。其中"哈希51"、"IP51',、"哈希52"、"IP52"、"哈希53"、"IP53"、"下一级节点指针5"为"下一级节点指针4"指向的节点的相关数据,和下一级节点指针1"指向的节点的相关数据"最长匹配前缀4"和"匹配项指针4"保存在同一个表格里;"哈希51"、"哈希52"、"哈希53"对应表7中的"哈希函数"表项,由于本实施例中IP地址最长只有32位,因此"哈希51"、"哈希52"、"哈希53"通常为空;"IP51"、"IP52"、"IP53"对应表7中的"IP"表项;如果使用虚线框501中的哈希函数对"下一级节点指针4"指向的节点的第25-32Bit进行哈希,哈希结果没有冲突,则保存在"哈希51"中,并根据实际情况保存实际IP地址的25-32Bit,或者实际IP地址的25-32Bit中的几个Bit于"IP51";如果出现沖突,则按沖突顺序进行处理,如果是第一个沖突项,根据实际情况保存实际IP地址的25-32Bit,或者实际IP地址的25-32Bit中的几个Bit于"IP52,',如果是第二个冲突项,则根据实际情况保存实际IP地址的25-32Bit,或者实际IP地址的25-32Bit中的几个Bit于"IP53,,;"下一级节点指针5"指向该匹配项的"最长匹配前缀5"存放地址;"最长匹配前缀5"和"匹配项指针5"存放在一起,由于"下一级节点指针4"指向的节点没有下一级节点,因此"下一级节点指针5"指向的地址不包括第三级节点的数据;"匹配项指针5"指向该匹配项对应的"匹配项编码5","匹配项编码5"中保存有"下一级节点指针4"指向的节点的匹配项部分相关数据,通过"匹配项指针5,'可以将第三级节点信息和对应的"匹配项,,信息联系在一起。由以上对图5的描述可以看出,使用本发明提供的存储路由表的方法实施例一后,原本占用2Sx4-3个"下一级节点指针,,表项空间的"下一级节点指针,,部分,只需要保存其中不为空的部分,及"下一级节点指针"指向部分即可,占用空间大大减少,有效节省了路由表占用空间。间也会更大,因此应用本发明提供的存储路由表的方法实施例可以有效地节省路由表占用的空间。以上为本发明提供的存储路由表的方法实施例,与之对应,本发明提供了查找路由表的方法实施例。本发明提供的查找路由表的方法实施例,是在路由表的下一级节点指针部分采用本发明提供的存储路由表的方法实施例存储的前提下进行的。在本发明提供的查找路由表的方法实施例中,根据存储路由表的下一级节点指针部分直接存储的长度,取待查IP地址进行直接查找;读取查找到的哈希函数、下一级节点指针;使用查找到的哈希函数对下一级节点的相应IP地址进行哈希,使用所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;根据所述查找结果读取匹配项编码。本发明提供的查找路由表的方法实施例一流程如图6所示步骤601、根据直接存储的比特长度,取待查IP地址进行直接查找。开始查找时,根据存储时直接存储的Bit长度,使用相应Bit的IP地址进行直接查找。如存储时,选择直接存储0-8Bit的匹配项,则使用待查IP地址的0-8Bit直接查找路由表的下一级节点指针部分。步骤602、判断是否查找到,是则进入步骤603;否则进入步骤613。步骤603、根据查找到的内容,查找下一级匹配数据。读取查找到的"匹配项,,"哈希函数,,"下一级节点指针",根据查找到的"下一级节点指针"找到存储下一级节点数据的子节点数组,根据实际步长情况使用读取到的"哈希函数,,对下一级节点的相应IP地址进行哈希,使用哈希结果作为偏移地址查找子节点数组。现举例说明根据实际步长情况对相应长度IP地址进行哈希,例如,步长为"8"的时候,对IP地址的9-16Bit进行哈希,步长为"16"时,对17-32Bit进行哈希,等等。步骤604、判断是否查找到,是则执行步骤605;否则执行步骤613。步骤605、比对表项中的实际IP地址,判断是否有吻合的实际IP地址,是则,进入步骤606;否则,进入步骤613。在根据IP地址哈希结果存储数据时,根据实际情况保存有实际IP地址、或实际IP的部分Bit位,用于防治找错的状况,这是由于哈希时有可能出现冲突,在步骤604中查找到了与哈希结果匹配的表项,也不能说明查找的结果是正确的,还需要使用待查IP地址与查找到的哈希结果相应的IP地址进行比对,实际IP地址的比对也吻合,则说明查找结果正确,进入步骤606;否则,进入步骤613。步骤606、根据查找到的内容,查找下一级匹配数据。22读取查找到的吻合的实际IP地址对应的"哈希函数,,,例如,待查IP地址与"IP21"中保存的实际IP地址匹配,则读取"哈希21"中的哈希函数;读取查找到的"下一级节点指针,,,根据查找到的"下一级节点指针,,找到存储下一级节点数据的子节点数组,根据实际步长情况使用读取到的"哈希函数,,对相应长度IP地址进行哈希,使用哈希结果作为偏移地址查找子节点数组。步骤607、判断是否查找到,是则执行步骤608;否则执行步骤613。步骤608、比对表项中的实际IP地址,判断是否有吻合的实际IP地址,是则,进入步骤609;否则,进入步骤613。步骤606到步骤608与步骤603到步骤605基本相同,只是查找对象由第一级节点数据,变为了第二级节点数据,路由表有多少级节点就需要进行相应次数的查找,本实施例中,以路由表包含四级节点为例进行i兑明,以上步骤已经查找过"根节点""第一级节点,,"第二级节点",接下来的步骤中将查找"第三级节点"。步骤609、根据查找到的内容,查找下一级匹配数据。读取查找到的吻合的实际IP地址对应的"哈希函数",例如,待查IP地址与"IP31"中保存的实际IP地址匹配,则读取"哈希31"中的哈希函数;读取查找到的"下一级节点指针",根据查找到的"下一级节点指针"找到存储下一级节点数据的子节点数组,根据实际步长情况使用读取到的"哈希函数,,对相应长度IP地址进行哈希,使用哈希结果作为偏移地址查找子节点数组。步骤610、判断是否查找到,是则执行步骤611;否则执行步骤613。步骤611、比对表项中的实际IP地址,判断是否有吻合的实际IP地址,是则,进入步骤612;否则,进入步骤613。步骤612、读取"最长匹配前缀""匹配项指针",根据"匹配项指针"读取对应"匹配项编码"。根据查找到的"下一级节点指针"读取"最长匹配前缀""匹配项指针,,,根据"匹配项指针"读取对应"匹配项编码"。若一个节点的匹配项数据被分为多个部分保存,则此时还需要参考待查IP找到对应的匹配项编码。例如,步长为8时,一个节点需要255个bit记录该节点的匹配项,而我们的结构是128bit的,再加上可能还需要记录一些其他的相关数据,因此通常使用4个128bit的匹配项编码存储空间纪录该节点的匹配项,255bit的数据分为4个部分来存储,4个存储空间可以使用2个Bit进行区分,每一个匹配项与4相除后剩余6Bit,其前2Bit可以作为偏移项,根据前2Bit选择匹配项编码存储空间进行存储,在查找时,使用前2Bit作为偏移地址,再加上查找到的"匹配项指针,,找到对应的匹配项编码存储空间,再在该匹配项编码存储空间中查找对应匹配项,例如10101101,即取10作为偏移,找编号为"10"的匹配项编码部分,查找其中地址为"101101"的匹配项编码,查找到则返回对应的最长前缀匹配数据,查找不到,则返回上一级节点看有没有最长前缀匹配,如果有则返回该最长前缀匹配数据,如果没有则根据查找记录读取最长前缀匹配的节点。步骤613、根据上一级节点中的"下一级节点指针",读取"匹配项指针",#4居"匹配项指针"找到对应的"匹配项编码"。进入步骤613,表示没有在子节点数组中找到正确的表项,即该待查IP地址的最长前缀匹配到本级节点为止,不需要到下一级节点中进行查找。若一个节点的匹配项数据被分为多个部分保存,则此时还需要参考待查IP找到对应的匹配项编码。例如,步长为8时,一个节点需要255个bit记录该节点的匹配项,而我们的结构是128bit的,再加上可能还需要记录一些其他的相关数据,因此通常使用4个128bit的匹配项编码存储空间纪录该节点的匹配项,255bit的数据分为4个部分来存储,4个存储空间可以使用2个Bit进行区分,每一个匹配项与4相除后剩余6Bit,其前2Bit可以作为偏移项,根据前2Bit选择匹配项编码存储空间进行存储,在查找时,使用前2Bit作为偏移地址,再加上查找到的前缀指针找到对应的匹配项编码存储空间,再在该匹配项编码存储空间中查找对应匹配项,例如10101101,即取IO作为偏移,找编号为"10"的匹配项编码部分,查找其中地址为"101101"的匹配项编码,查找到则返回对应的最长前缀匹配数据,查找不到,则返回上一级节点看有没有最长前缀匹配,如果有则返回该最长前缀匹配数据,如果没有则根据查找记录读取最长前缀匹配的节点。采用本发明提供的查找路由表的方法实施例后,存储路由表时,不再需要为全部的表项都分配存储"下一级节点指针,,的空间,大大节省了路由表占用的内存空间。是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括如下步骤一种存储路由表的方法,包括为路由表的下一级节点指针部分分配相应存储空间,存储所述具有下一级节点的匹配项实际IP地址,及相应哈希函数、下一级节点指针;在所述下一级节点指针指向的位置,使用所述哈希函数对IP地址哈希的结果作为偏移地址存储所述匹配项的下一级节点数据、指向匹配项编码的指针。一种查找路由表的方法,包括根据存储路由表的下一级节点指针部分直接存储的长度,取待查IP地址进行直接查找;读取查找到的哈希函数、下一级节点指针;使用查找到的哈希函数对下一级节点的相应IP地址进行哈希,使用所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;根据所述查找结果读取匹配项编码。上述提到的存储介质可以是只读存储器,磁盘或光盘等。本发明提供的存储路由表的装置实施例,包括匹配项编码单元,用于保存路由表的匹配项编码部分;下一级节点指针单元,用于保存根节点数据和第一级节点数据;其中,所述根节点数据包括具有下一级节点指针的根节点匹配项,所述25匹配项的根节点哈希函数、根节点的下一级节点指针;使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针;所述第一级节点的下一级节点指针指向第一级节点的匹配项编码指针,所述第一级节点的匹配项编码指针指向所述匹配项编码部分。其中,所述下一级节点指针单元还用于保存第N级节点数据;使用所述匹配项的第N-l级节点的哈希函数对第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-l级节点的下一级节点指针指向的位置存储所述第N级节点数据;所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点的哈希函数、第N级节点的下一级节点指针;所述第N级节点的下一级节点指针指向第N级节点的匹配项编码指针,所述第N级节点的匹配项编码指针指向所述匹配项部分;其中,所述N为大于等于2的整数。本发明提供的查找路由表的装置实施例,包括直接查找单元,用于根据存储路由表的下一级节点指针部分直接存储的长度,取待查IP地址进行直接查找;第一读取单元,用于读取查找到的哈希函数、下一级节点指针;哈希查找单元,用于使用查找到的哈希函数对下一级节点的待查步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;第二读取单元,用于根据所述查找结果读取匹配项编码。IP地址比对单元,用于使用所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据,查找到地址吻合的表项后,比对实际IP地址与表项中保存的IP地址,有匹配的IP地址,通知成功处理单元查找成功,否则,通知失败处理单元查找失败。其中,所述第二读取单元包括成功处理单元,用于在查找成功时,控制第一读取单元读取查找到的哈希函数、下一级节点指针;哈希查找单元使用查找到的哈希函数对下一级节点的待查步长范围内IP地址进行哈希,使用所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;直到查找到最后一级节点,读取匹配项指针,#4居所述匹配项指针读:f又匹配项编码;失败处理单元,用于在查找失败时,读取上一级节点数据中的匹配项指针,根据所述匹配项指针读取匹配项编码。本发明提供的存储路由表的装置实施例、查找路由表的装置实施例的具体运作方式,可参考上文描述的本发明提供的存储、查找路由表的方法实施例,在此不再详细描述。以上对本发明所提供的一种本发明提供的存储、查找路由表的方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。权利要求1、一种存储路由表的方法,其特征在于,包括将所述路由表分为下一级节点指针部分和匹配项编码部分保存;在所述下一级节点指针部分保存根节点数据和第一级节点数据;其中,所述根节点数据包括具有下一级节点指针的根节点匹配项,所述匹配项的根节点哈希函数、根节点的下一级节点指针;使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针;所述第一级节点的下一级节点指针指向第一级节点的匹配项编码指针,所述第一级节点的匹配项编码指针指向所述匹配项编码部分。2、如权利要求1所述的存储路由表的方法,其特征在于,所述方法还包括在所述下一级节点指针部分保存第N级节点数据;使用所述匹配项的第N-l级节点的哈希函数对第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-l级节点的下一级节点指针指向的位置存储所述第N级节点数据;所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协iU也址,所述匹配项的第N级节点的哈希函数、第N级节点的下一级节点指针;所述第N级节点的下一级节点指针指向第N级节点的匹配项编码指针,所述第N级节点的匹配项编码指针指向所述匹配项部分;其中,所述N为大于等于2的整数。3、如权利要求1或2所述的存储路由表的方法,其特征在于,所述步长范围内网际协议地址包括步长范围内部分实际网际协议地址、或全部网际协议地址。4、一种查找路由表的方法,其特征在于,包括根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;读取查找到的哈希函数、下一级节点指针;使用查找到的哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;根据所述查找结果读取匹配项编码。5、如权利要求4所述的查找路由表的方法,其特征在于,所述根据所述查找结果读取匹配项编码包括在查找结果为成功时,重复上述步骤读取查找到的哈希函数、下一级节点指针;使用查找到的哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;直到查找到最后一级节点,读取匹配项指针,根据所述匹配项指针读耳又匹配项编石马。6、如权利要求4所述的查找路由表的方法,其特征在于,所述根据所述查找结果读取匹配项编码包括在查找失败时,读取上一级节点数据中的匹配项指针,根据所述匹配项指针读取匹配项编码。7、如权利要求4、5或6所述的查找路由表的方法,其特征在于,所述使用所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据之后还包括使用所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据,查找到地址吻合的表项后,比对待查步长范围内实际网际协议地址与表项中保存的网际协议地址,有匹配的网际协议地址,则查找成功,否则,查找失败。8、一种存储路由表的装置,其特征在于,包括匹配项编码单元,用于保存路由表的匹配项编码部分;下一级节点指针单元,用于保存根节点数据和第一级节点数据;其中,所述根节点数据包括具有下一级节点指针的根节点匹配项,所述匹配项的根节点哈希函数、根节点的下一级节点指针;使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针;所述第一级节点的下一级节点指针指向第一级节点的匹配项编码指针,所述第一级节点的匹配项编码指^l十指向所述匹配项编码部分。9、如权利要求8所述的存储路由表的装置,其特征在于,所述下一级节点指针单元还用于保存第N级节点数据;使用所述匹配项的第N-l级节点的哈希函数对第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-l级节点的下一级节点指针指向的位置存储所述第N级节点数据;所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点的哈希函数、第N级节点的下一级节点指针;所述第N级节点的下一级节点指针指向第N级节点的匹配项编码指针,所述第N级节点的匹配项编码指针指向所述匹配项部分;其中,所述N为大于等于2的整数。10、一种查找路由表的装置,其特征在于,包括直接查找单元,用于根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;第一读取单元,用于读取查找到的哈希函数、下一级节点指针;哈希查找单元,用于使用查找到的哈希函数对下一级节点的待查步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;第二读取单元,用于4艮据所述查找结果读取匹配项编码。11、如权利要求IO所述的查找路由表的装置,其特征在于,所述第二读取单元包括成功处理单元,用于在查找成功时,控制第一读取单元读取查找到的哈希函数、下一级节点指针;哈希查找单元使用查找到的哈希函数对下一级节点待查步长范围内网际协议地址进行哈希,使用所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;直到查找到最后一级节点,读取匹配项指针,根据所述匹配项指针读取匹配项编码。12、如权利要求IO所述的查找路由表的装置,其特征在于,所述第二读取单元包括失败处理单元,用于在查找失败时,读取上一级节点数据中的匹配项指针,根据所述匹配项指针读耳又匹配项编码。13、如权利要求10、11或12所述的查找路由表的装置,其特征在于,还包括网际协议地址比对单元,用于使用所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据,查找到地址吻合的表项后,比对待查步长范围内实际网际协议地址与表项中保存的网际协议地址,有匹配的网际协议地址,通知成功处理单元查找成功,否则,通知失败处理单元查找失败。全文摘要本发明公开了一种存储路由表的方法,包括将所述路由表分为下一级节点指针部分和匹配项编码部分保存;在所述下一级节点指针部分保存根节点数据和第一级节点数据。本发明还公开了一种查找路由表的装置,包括根据存储路由表的下一级节点指针部分直接存储的长度,取待查IP地址进行直接查找;读取查找到的哈希函数、下一级节点指针;查找下一级节点数据;根据所述查找结果读取匹配项编码。本发明还公开了相应的装置。通过应用本发明可以有效减少路由表占用的内存资源。文档编号H04L29/06GK101621502SQ20081012528公开日2010年1月6日申请日期2008年6月30日优先权日2008年6月30日发明者睿胡,翀詹,赵鸿翔,钧龚申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1