CN101783761A - 一种存储及查找路由表的方法及装置 - Google Patents
一种存储及查找路由表的方法及装置 Download PDFInfo
- Publication number
- CN101783761A CN101783761A CN200910000911A CN200910000911A CN101783761A CN 101783761 A CN101783761 A CN 101783761A CN 200910000911 A CN200910000911 A CN 200910000911A CN 200910000911 A CN200910000911 A CN 200910000911A CN 101783761 A CN101783761 A CN 101783761A
- Authority
- CN
- China
- Prior art keywords
- node
- list item
- hash
- hash function
- routing table
- 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.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种存储及查找路由表的方法及装置,属于通信领域。所述存储方法包括:使用本级节点中的下一级节点匹配项的哈希函数对本级节点的下一级节点的原集合进行哈希映射,将经过所述哈希函数映射后的有效表项作为所述本级节点的下一级节点数据,存储在路由表中。所述查找方法包括:将待查IP地址输入到哈希函数进行哈希;根据哈希结果,和经过哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置。所述存储装置包括:映射模块和存储模块。所述查找装置包括:哈希模块和查找模块。本发明实施例提供的技术方案大大节省了存储空间,加快了查找速度。
Description
技术领域
本发明涉及通信领域,特别涉及一种存储及查找路由表的方法及装置。
背景技术
为了在用户众多的互联网络中完成由一地址到另一个地址的路由,通常将各种传输路径的相关数据存储在一起形成路由表,供进行路由时查询。
无类型域间路由(CIDR,Classless Inter-Domain Routing)是一种比较常用的路由表结构。在使用CIDR结构形成路由表时,一个网际协议(IP,Internet Protocol)网络使用一个前缀代表,这个前缀通常由IP网络的IP地址和和标识其有效位的掩码复合表示,例如“111*”表示IP地址为“111”,有效位为三位,在存储时通常使用多比特树(Multi-Bit Tire)的方式进行存储,将在地址空间中相互邻近、路由相同的2的整数次幂个子网的路由表条目合并成一条路径,作为一个表项存储于路由表中,在进行查找时可以依照路径进行查找。
现以实例对存储的方法进行描述,假设有9个前缀“P1”“P2”“P3”“P4”“P5”“P6”“P7”“P8”“P9”,前缀标号与前缀值之间的关系如表1所示:
前缀标号 | 前缀值 |
P1 | * |
P2 | 1* |
P3 | 00* |
P4 | 101* |
P5 | 111* |
P6 | 1000* |
P7 | 11101* |
P8 | 111001* |
P9 | 1000011* |
表1、前缀标号与前缀值之间的关系表
基本的二叉树搜索一步检查1个比特,若相应的地址前缀最长为M,则树的深度为M。如果一次检查K个比特则树的深度可减少到M/K,这样树的内部节点包含的匹配项增加为2的K次幂。这样的树被称为2的K次幂分支树,树的最大层数为M/K。查表算法在每个节点处检查的比特数为K,也就被称为树的步长。
假设该Multi-Bit Tire的步长为3,则树中每个节点将包含2的3次幂项,即8项,其结构如表2所示:
表2、步长为3的节点结构
其中前缀匹配项(Prefix)是指能与该项匹配的前缀,例如,“P1”的值为“*”,说明“P1”可以与任何一项匹配,假若该节点为根节点,初始记录为空时,从“000”到“111”都是“P1”的匹配项;“P2”的值为“1*”,说明“P2”的IP地址为“1”,有效位为1位,任何以“1”开头的项都可以与“P2”匹配,假若该节点为根节点,从“100”到“111”都是“P2”的匹配项,此时若已存入“P1”,则在存入“P2”时,从“100”到“111”都将被“P2”覆盖;其它有效位在3位以内的前缀“P3”“P4”“P5”存储方式可以依此类推,“000”“001”为“P3”的匹配项,“101”为“P4”的匹配项,“111”为“P5”的匹配项,存入“P1”“P2”“P3”“P4”“P5”的节点结构如表3所示:
表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所示:
表4、存入“P6”的节点结构
“P7”的值为“11101*”,“P8”的值为“111001*”,其前3位值相同,都是“111”,因此可以为“P7”“P8”建立一个下一级节点,在根节点“111”的“下一级节点指针”一栏存入新建立的下一级节点指针,该新建立的下一级节点中,以“01”开头的“010”“011”可与“P7”匹配,“001”可与“P8”匹配,存入“P7”“P8”的节点结构如表5所示:
表5、存入“P7”“P8”的节点结构
“P9”的值为“1000011*”,有效值为7位,是节点步长“3”的2倍多,因此在根节点下一级节点的基础上还需要再建立一级新的节点,建立时,看现有的节点有没有可以与其前6位相匹配的项,若有则将新建立的节点指针填入该项“下一级节点指针”一栏,若无则在根节点与其前3位相匹配项的“下一级节点指针”一栏填入新建立的节点指针,本例中,表4所示存入“P6”的节点“001”可与“P9”前6位匹配,因此在该项的“下一级节点指针”一栏填入新建立的节点指针,新建立的项以“1”开头的表项都可以与“P9”匹配,存入“P9”的节点结构如表6所示:
表6、存入“P9”的节点结构
至此,“P1”“P2”“P3”“P4”“P5”“P6”“P7”“P8”“P9”均已存入步长为3的Multi-Bit Tire,该Multi-Bit Tire完整结构如图1所示,包括:
相当于表3所示节点的根节点、相当于表4所示节点的节点1、相当于表5所示节点的节点2、相当于表6所示节点的节点3。
在对上述现有技术进行分析后,发明人发现:
每一个节点都需要申请固定大小的存储空间,而这些节点的表项大部分时候都没有下一级节点,即Ptr表项多数为空,共有29个Ptr表项为空,非常浪费内存资源,而在多数时候内存资源都是非常紧缺的资源,实际中的路由表节点可能多达上百、上千、或更多个,浪费内存资源就更多了。
发明内容
为了减少路由表占用的内存资源,本发明实施例提供了一种存储及查找路由表的方法及装置。所述技术方案如下:
一种存储路由表的方法,所述方法包括:
使用本级节点中的下一级节点匹配项的哈希函数对本级节点的下一级节点的原集合进行哈希映射,将经过所述哈希函数映射后的有效表项作为所述本级节点的下一级节点数据,存储在路由表中;
本级节点保存所述本级节点的下一级节点匹配项的哈希函数,本级节点的下一级节点的标识,本级节点步长范围内网际协议地址,本级节点的下一级节点指针和本级节点的匹配项指针;所述标识用于标记所述下一级节点的原集合经过哈希函数映射后的各表项是否有效。
一种查找路由表的方法,所述方法包括:
将待查IP地址输入到哈希函数进行哈希;
根据所述哈希结果,和经过所述哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置。
一种存储路由表的装置,所述装置包括:映射模块和存储模块;
所述映射模块,用于使用本级节点中的下一级节点匹配项的哈希函数对所述本级节点的下一级节点的原集合进行哈希映射;
所述存储模块,用于将经过所述映射模块映射后的有效表项作为所述本级节点的下一级节点数据,存储在路由表中;
所述本级节点保存所述本级节点的下一级节点匹配项的哈希函数,本级节点的下一级节点的标识,本级节点步长范围内网际协议地址,本级节点的下一级节点指针和本级节点的匹配项指针;所述标识用于标记所述本级节点的下一级节点的原集合经过哈希函数映射后的各表项是否有效。
一种查找路由表的装置,所述装置包括:哈希模块和查找模块;
所述哈希模块,用于将待查IP地址输入到哈希函数进行哈希;
所述查找模块,用于根据所述哈希模块得到的哈希结果,和经过所述哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置。
本发明实施例提供的技术方案的有益效果是:通过使用哈希函数映射,对映射后的各表项是否有效进行标识来存储路由表,大大节省了存储空间;在所存储的路由表中进行查找下一级节点中各表项的具体位置,大大加快了查找的速度。
附图说明
图1是现有技术Multi-Bit Tire示意图;
图2是本发明实施例1提供的路由表的存储过程;
图3是本发明实施例2提供的查找路由表的方法流程示意图;
图4是本发明实施例3提供的存储路由表的装置结构示意图;
图5是本发明实施例4提供的查找路由表的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
本发明实施例提供了一种存储路由表的方法,该方法包括:
使用本级节点中的下一级节点匹配项的哈希函数对本级节点的下一级节点的原集合进行哈希映射,将经过哈希函数映射后的有效表项作为本级节点的下一级节点数据,存储在路由表中;
其中,本级节点保存:本级节点的下一级节点匹配项的哈希函数,本级节点的下一级节点的标识,本级节点步长范围内网际协议地址,本级节点的下一级节点指针和本级节点的匹配项指针;其中,标识用于标记本级节点的下一级节点的原集合经过哈希函数映射后的各表项是否有效。
例如,如果本级节点为根节点,则根节点包括:根节点的下一级节点的匹配项的哈希函数,根节点的下一级节点的标识,根节点步长范围内网际协议地址,根节点的下一级节点指针,根节点的匹配项指针;
其中,根节点的下一级节点的标识用于标记根节点的下一级节点的原集合经过哈希函数映射后的各表项是否有效。
具体的,使用根节点的下一级节点的匹配项的哈希函数对根节点的下一节点的原集合进行哈希函数映射,参见图2,如果步长为8,对于Multi-Bit Trie算法,每个节点要存储256个表项,而通过哈希函数,将256个表项中映射到一个可能较小(包含表项较少)的节点空间中,依次确定该节点空间中的各表项是否有效,根据表项的有效情况来确定根节点的下一级节点的标识,将有效表项作为根节点的下一级节点数据,存储在路由表中,即按照在哈希函数映射后的表项中的相对位置,在根节点中的下一级节点指针指向的位置顺序存储。
例如,如果经过哈希函数映射后的根节点的下一级节点空间中,某表项有效,则可以将该表项的标识位设置为1,表示该表项有效;某表项无效,可以将该表项的标识位设置为0,表示该表项无效。然后将标识位为1的表项按照在经过哈希函数映射后的节点空间中的相对位置,顺序存储到根节点的下级节点指针指向的位置。
其中,路由表还包括匹配项部分,用于保存前缀匹配项。
其中,为了避免哈希冲突,可以对哈希函数进行选择,具体的选择方法为:输入待哈希数据;使用当前备选哈希函数对待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希;直到进行所述累加时,没有进位产生,则选择所述当前备选哈希函数作为正式使用的哈希函数。
例如,有两个待哈希数据:数据1=0x1100,数据2=0x0010,第一个备选哈希函数为“0x0001”,使用“0x0001”对数据1、数据2进行“与”操作,获得的结果均为“0”,对“0”进行3/8译码之后,结果均为“00000001”,相累加即会出现进位,则可以判断使用“0x0001”为哈希函数会产生冲突,则继续使用下一个备选哈希函数进行哈希,假如下一个哈希函数为“0x0010”,则获得的结果将分别为“0”和“1”,进行3/8译码之后,结果为“00000001”“00000010”,“1”在不同的BIT位上,相累加时不会出现进位,此时可以判断使用“0x0010”作为哈希函数不会出现冲突,可选择“0x0010”作为正式使用的哈希函数,进行后续操作。本例中待哈希数据的步长为4位,因此待选哈希函数的有效位长度可以在1到3位之间,解码可以通过3/8解码器进行解码,也可以通过4/16解码器进行解码。
存储后的每个节点的每个表项的结构如表7所示:
哈希函数 | 标识 | IP | 下级节点指针 | 匹配项指针 |
表7、节点的数据结构
其中,表项“哈希函数”存放的是上述选择的哈希函数,也就是对待存储的IP地址进行哈希的哈希函数;表项“IP”用来存储相应步长上的实际IP地址。
其中,将用于标识的位数设置为n,n≥1,经过哈希函数映射后的节点空间的表项数目>n,则只能标识哈希函数映射后的节点空间的表项中,前n个表项是否有效,如果在该前n个表项中,前m个表项有效,m≤n,则将前m个有效表项按照在哈希函数映射后的表项中的相对位置,在相应的节点数据中从第一表项开始顺序存储,而哈希函数映射后的表项中前n个表项以后的表项,无论有效或者无效,均存储在m个有效表项之后。
例如,用于标识的位数设置为5,使用根节点匹配项的哈希函数对第一节点的原集合进行哈希映射,得到的表项为8,则只能标识这8个表项中前5个表项是否有效,该5个表项依次记为第1表项,第2表项,第3表项,第4表项和第5表项,在标识的这5个表项中,如果第1表项,第2表项,第4表项和第5表项有效,则在第一节点数据中,将该4个有效表项按照在哈希函数映射后的表项中的相对位置,即按照第1表项,第2表项,第4表项和第5表项顺序,从第一个表项开始顺序存储,而哈希函数映射后的表项中前5个表项以后的表项,即第6表项,第7表项,第8表项,无论该3个表项是否有效,均存储第一节点数据的4个有效表项之后。
本发明实施例提供的存储路由表的方法的有益效果是:通过使用哈希函数进行节点的原集合映射,对映射后的各表项是否有效进行标识,根据标识的结果来存储路由表,相对于现有技术的Multi-Bit Trie算法,每个节点要存储256个表项,大大减少了存储的无效表项的数目。如果仅使用哈希函数来索引,虽然也能节省存储空间,但是先使用哈希函数进行映射,然后对映射后的各表项是否有效进行标识,节省的存储空间更多。参见表8,使用软件仿真步长为8的哈希算法存储路由表,计算最后一层的仅经过哈希函数映射后的有效表项占用空间与所有节点占用空间之比,再计算经过哈希函数映射后,对映射后的各表项是否有效进行标识,根据标识的结果来存储路由表节省的空间,结果如下:如果将用于标识的位数设置为64bits,在最后一级可以完全避免直接存储哈希函数映射后的表项所产生的空间浪费,节省空间37.01%;如果将用于标识的位数设置为16bits,最后一级至少节省空间31.78%;如果将用于标识的位数设置为8bits,最后一级至少节省空间15.35%。如表8所示:
表8、本发明实施例的效果
实施例2
参见图3,本发明实施例提供了一种查找路由表的方法,该方法包括:
201:将待查IP地址输入到哈希函数进行哈希;
其中,为了避免哈希冲突,可以对哈希函数进行选择,具体的选择方法为:输入待哈希数据;使用当前备选哈希函数对待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希;直到进行所述累加时,没有进位产生,则选择所述当前备选哈希函数作为正式使用的哈希函数。
例如,有两个待哈希数据:数据1=0x1100,数据2=0x0010,第一个备选哈希函数为“0x0001”,使用“0x0001”对数据1、数据2进行“与”操作,获得的结果均为“0”,对“0”进行3/8译码之后,结果均为“00000001”,相累加即会出现进位,则可以判断使用“0x0001”为哈希函数会产生冲突,则继续使用下一个备选哈希函数进行哈希,假如下一个哈希函数为“0x0010”,则获得的结果将分别为“0”和“1”,进行3/8译码之后,结果为“00000001”“00000010”,“1”在不同的BIT位上,相累加时不会出现进位,此时可以判断使用“0x0010”作为哈希函数不会出现冲突,可选择“0x0010”作为正式使用的哈希函数,进行后续操作。本例中待哈希数据的步长为4位,因此待选哈希函数的有效位长度可以在1到3位之间,解码可以通过3/8解码器进行解码,也可以通过4/16解码器进行解码。
202:根据哈希结果,和经过哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置。
其中,根据哈希结果,和经过哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置,具体包括:
根据经过哈希函数映射后的各表项是否有效标识,确定哈希结果之前无效项的个数,用哈希结果减去确定的哈希结果之前无效项的个数,根据相减的结果在所存储的路由表中查找待查IP地址对应的表项位置。
例如,待查IP地址经过哈希函数哈希后的结果为4,然后在用于标识哈希函数映射后的各表项是否有效的标识位中,计算第4位之前无效项的个数,标识位0表示该表项无效。参见图2中的标识部分,第4位之前无效项的个数为2,则哈希结果4减去哈希结果之前无效项的个数2,相减的结果为2,则在所存储的路由表中,第2项即为待查找的IP地址对应的表项位置。
其中,根据哈希结果,和经过哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置,具体包括:
根据经过哈希函数映射后的各表项是否有效标识,计算哈希结果对应的有效表项的位置,根据计算的有效表项的位置在所存储的路由表中查找待查IP地址对应的表项位置。
例如,待查IP地址经过哈希函数哈希后的结果为4,该哈希结果4对应在用于标识哈希函数映射后的各表项是否有效的标识位中为2,即第2个有效项,则在所存储的路由表中,第2项即为待查找的IP地址对应的表项位置。
其中,该方法还可以包括:
根据所查找的表项位置中的前缀匹配项指针在所存储的前缀匹配项部分获得该前缀匹配项。
本发明实施例提供的查找路由表的方法的有益效果是:通过将待查IP地址进行哈希,根据哈希结果,和经过哈希函数映射后的各表项是否有效标识,在本发明实施例1存储的路由表中查找下级节点中各表项的具体位置,大大加快了查找的速度。
实施例3
参见图3,本发明实施例提供了一种存储路由表的装置,该装置包括:映射模块301和存储模块302;
映射模块301,用于使用本级节点中的下一级节点匹配项的哈希函数对本级节点的下一级节点的原集合进行哈希映射;
存储模块302,用于将经过映射模块301映射后的有效表项作为本级节点的下一级节点数据,存储在路由表中。
其中,本级节点保存:本级节点的下一级节点匹配项的哈希函数,本级节点的下一级节点的标识,本级节点步长范围内网际协议地址,本级节点的下一级节点指针和本级节点的匹配项指针;其中,标识用于标记本级节点的下一级节点的原集合经过哈希函数映射后的各表项是否有效。
例如,如果本级节点为根节点,则根节点包括:根节点的下一级节点的匹配项的哈希函数,根节点的下一级节点的标识,根节点步长范围内网际协议地址,根节点的下级节点指针,根节点的匹配项指针;
其中,根节点的下一级节点的标识用于标记根节点的下一级节点的原集合经过哈希函数映射后的各表项是否有效。
具体的,使用根节点的下一级节点指针的匹配项的哈希函数对根节点的下一节点的原集合进行哈希函数映射,参见图2,如果步长为8,对于Multi-Bit Trie算法,每个节点要存储256个表项,而通过哈希函数,将256个表项中映射到一个可能较小(包含表项较少)的节点空间中,依次确定该节点空间中的各表项是否有效,根据表项的有效情况来确定根节点的下一级节点的标识,将有效表项作为根节点的下一级节点数据,存储在路由表中,即按照在哈希函数映射后的表项中的相对位置,在根节点中的下一级节点指针指向的位置顺序存储。
例如,如果经过哈希函数映射后的根节点的下一级节点空间中,某表项有效,则可以将该表项的标识位设置为1,表示该表项有效;某表项无效,可以将该表项的标识位设置为0,表示该表项无效。然后将标识位为1的表项按照在经过哈希函数映射后的节点空间中的相对位置,顺序存储到根节点的下级节点指针指向的位置。
其中,存储模块302还用于用于保存前缀匹配项。
其中,为了避免哈希冲突,可以对哈希函数进行选择,具体的选择方法为:输入待哈希数据;使用当前备选哈希函数对待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希;直到进行所述累加时,没有进位产生,则选择所述当前备选哈希函数作为正式使用的哈希函数。
例如,有两个待哈希数据:数据1=0x1100,数据2=0x0010,第一个备选哈希函数为“0x0001”,使用“0x0001”对数据1、数据2进行“与”操作,获得的结果均为“0”,对“0”进行3/8译码之后,结果均为“00000001”,相累加即会出现进位,则可以判断使用“0x0001”为哈希函数会产生冲突,则继续使用下一个备选哈希函数进行哈希,假如下一个哈希函数为“0x0010”,则获得的结果将分别为“0”和“1”,进行3/8译码之后,结果为“00000001”“00000010”,“1”在不同的BIT位上,相累加时不会出现进位,此时可以判断使用“0x0010”作为哈希函数不会出现冲突,可选择“0x0010”作为正式使用的哈希函数,进行后续操作。本例中待哈希数据的步长为4位,因此待选哈希函数的有效位长度可以在1到3位之间,解码可以通过3/8解码器进行解码,也可以通过4/16解码器进行解码。
存储后的每个节点的每个表项的结构如表9所示:
哈希函数 | 标识 | IP | 下级节点指针 | 匹配项指针 |
表9、节点的数据结构
其中,表项“哈希函数”存放的是上述选择的哈希函数,也就是对待存储的IP地址进行哈希的哈希函数;表项“IP”用来存储相应步长上的实际IP地址。
其中,将用于标识的位数设置为n,n≥1,经过哈希函数映射后的节点空间的表项数目>n,则只能标识哈希函数映射后的节点空间的表项中,前n个表项是否有效,如果在该前n个表项中,前m个表项有效,m≤n,则将前m个有效表项按照在哈希函数映射后的表项中的相对位置,在相应的节点数据中从第一表项开始顺序存储,而哈希函数映射后的表项中前n个表项以后的表项,无论有效或者无效,均存储在m个有效表项之后。
例如,用于标识的位数设置为5,使用根节点匹配项的哈希函数对第一节点的原集合进行哈希映射,得到的表项为8,则只能标识这8个表项中前5个表项是否有效,该5个表项依次记为第1表项,第2表项,第3表项,第4表项和第5表项,在标识的这5个表项中,如果第1表项,第2表项,第4表项和第5表项有效,则在第一节点数据中,将该4个有效表项按照在哈希函数映射后的表项中的相对位置,即按照第1表项,第2表项,第4表项和第5表项顺序,从第一个表项开始顺序存储,而哈希函数映射后的表项中前5个表项以后的表项,即第6表项,第7表项,第8表项,无论该3个表项是否有效,均存储第一节点数据的4个有效表项之后。
本发明实施例提供的存储路由表的装置的有益效果是:通过映射模块对本级节点的下一级节点的原集合进行哈希映射,存储模块对映射后的各表项是否有效进行标识,将有效表项作为本级节点的下一级节点数据,存储在路由表中,相对于现有技术的Multi-Bit Trie算法,每个节点要存储256个表项,大大减少了存储的无效表项的数目。如果仅使用哈希函数来索引,虽然也能节省存储空间,但是先使用哈希函数进行映射,然后对映射后的各表项是否有效进行标识,节省的存储空间更多。参见表10,使用软件仿真步长为8的哈希算法存储路由表,计算最后一层的仅经过哈希函数映射后的有效表项占用空间与所有节点占用空间之比,再计算经过哈希函数映射后,对映射后的各表项是否有效进行标识,根据标识的结果来存储路由表节省的空间,结果如下:如果将用于标识的位数设置为64bits,在最后一级可以完全避免直接存储哈希函数映射后的表项所产生的空间浪费,节省空间37.01%;如果将用于标识的位数设置为16bits,最后一级至少节省空间31.78%;如果将用于标识的位数设置为8bits,最后一级至少节省空间15.35%。如表10所示:
表10、本发明实施例的效果
实施例4
参见图4,本发明实施例提供了一种查找路由表的装置,该装置包括:哈希模块401和查找模块402;
其中,哈希模块401,用于将待查IP地址输入到哈希函数进行哈希;
其中,为了避免哈希冲突,可以对哈希函数进行选择,具体的选择方法为:输入待哈希数据;使用当前备选哈希函数对待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希;直到进行所述累加时,没有进位产生,则选择所述当前备选哈希函数作为正式使用的哈希函数。
例如,有两个待哈希数据:数据1=0x1100,数据2=0x0010,第一个备选哈希函数为“0x0001”,使用“0x0001”对数据1、数据2进行“与”操作,获得的结果均为“0”,对“0”进行3/8译码之后,结果均为“00000001”,相累加即会出现进位,则可以判断使用“0x0001”为哈希函数会产生冲突,则继续使用下一个备选哈希函数进行哈希,假如下一个哈希函数为“0x0010”,则获得的结果将分别为“0”和“1”,进行3/8译码之后,结果为“00000001”“00000010”,“1”在不同的BIT位上,相累加时不会出现进位,此时可以判断使用“0x0010”作为哈希函数不会出现冲突,可选择“0x0010”作为正式使用的哈希函数,进行后续操作。本例中待哈希数据的步长为4位,因此待选哈希函数的有效位长度可以在1到3位之间,解码可以通过3/8解码器进行解码,也可以通过4/16解码器进行解码。
查找模块402,用于根据哈希模块401得到的哈希结果,和经过哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置。
其中,查找模块402具体包括:确定单元和查找单元;
确定单元,用于根据经过哈希函数映射后的各表项是否有效标识,确定哈希结果之前无效项的个数;
查找单元,用于使用哈希模块401得到的哈希结果减去确定单元确定的哈希结果之前无效项的个数,根据相减的结果在所存储的路由表中查找待查IP地址对应的表项位置。
例如,待查IP地址经过哈希函数哈希后的结果为4,然后在用于标识哈希函数映射后的各表项是否有效的标识位中,计算第4位之前无效项的个数,标识位0表示该表项无效。参见图2中的标识部分,第4位之前无效项的个数为2,则哈希结果4减去哈希结果之前无效项的个数2,相减的结果为2,则在所存储的路由表中,第2项即为待查找的IP地址对应的表项位置。
其中,查找模块402具体包括:计算单元和查找单元;
计算单元,用于根据经过哈希函数映射后的各表项是否有效标识,计算哈希结果对应的有效表项的位置;
查找单元,用于根据上述计算单元计算的有效表项的位置,在所存储的路由表中查找待查IP地址对应的表项位置。
例如,待查IP地址经过哈希函数哈希后的结果为4,该哈希结果4对应在用于标识哈希函数映射后的各表项是否有效的标识位中为2,即第2个有效项,则在所存储的路由表中,第2项即为待查找的IP地址对应的表项位置。
本发明实施例提供的查找路由表装置的有益效果是:通过将待查IP地址进行哈希,根据哈希结果,和经过哈希函数映射后的各表项是否有效标识,在本发明实施例3存储的路由表中查找下级节点中各表项的具体位置,大大加快了查找的速度。
本发明实施例可以利用软件实现,相应的软件程序可以存储在可读取的存储介质中,例如,计算机的硬盘、缓存或光盘中。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种存储路由表的方法,其特征在于,所述方法包括:
使用本级节点中的下一级节点匹配项的哈希函数对本级节点的下一级节点的原集合进行哈希映射,将经过所述哈希函数映射后的有效表项作为所述本级节点的下一级节点数据,存储在路由表中;
本级节点保存所述本级节点的下一级节点匹配项的哈希函数,本级节点的下一级节点的标识,本级节点步长范围内网际协议地址,本级节点的下一级节点指针和本级节点的匹配项指针;所述标识用于标记所述下一级节点的原集合经过哈希函数映射后的各表项是否有效。
2.一种查找权利要求1所存储的路由表的方法,其特征在于,所述方法包括:
将待查IP地址输入到哈希函数进行哈希;
根据所述哈希结果,和经过所述哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置。
3.根据权利要求2所述的查找路由表的方法,其特征在于,根据所述哈希结果,和经过所述哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置,具体包括:
根据经过所述哈希函数映射后的各表项是否有效标识,确定所述哈希结果之前无效项的个数,用所述哈希结果减去所述确定的哈希结果之前无效项的个数,根据相减的结果在所存储的路由表中查找待查IP地址对应的表项位置。
4.根据权利要求2所述的查找路由表的方法,其特征在于,根据所述哈希结果,和经过所述哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置,具体包括:
根据所述经过哈希函数映射后的各表项是否有效标识,计算所述哈希结果对应的有效表项的位置,根据所述计算的有效表项的位置在所存储的路由表中查找待查IP地址对应的表项位置。
5.一种存储路由表的装置,其特征在于,所述装置包括:映射模块和存储模块;
所述映射模块,用于使用本级节点中的下一级节点匹配项的哈希函数对所述本级节点的下一级节点的原集合进行哈希映射;
所述存储模块,用于将经过所述映射模块映射后的有效表项作为所述本级节点的下一级节点数据,存储在路由表中;
所述本级节点保存所述本级节点的下一级节点匹配项的哈希函数,本级节点的下一级节点的标识,本级节点步长范围内网际协议地址,本级节点的下一级节点指针和本级节点的匹配项指针;所述标识用于标记所述本级节点的下一级节点的原集合经过哈希函数映射后的各表项是否有效。
6.一种查找路由表的装置,其特征在于,所述装置包括:哈希模块和查找模块;
所述哈希模块,用于将待查IP地址输入到哈希函数进行哈希;
所述查找模块,用于根据所述哈希模块得到的哈希结果,和经过所述哈希函数映射后的各表项是否有效标识,在所存储的路由表中查找待查IP地址对应的表项位置。
7.根据权利要求6所述的查找路由表的装置,其特征在于,所述查找模块具体包括:确定单元和查找单元;
所述确定单元,用于根据经过所述哈希函数映射后的各表项是否有效标识,确定所述哈希结果之前无效项的个数;
所述查找单元,用于使用所述哈希结果减去所述确定的哈希结果之前无效项的个数,根据相减的结果在所存储的路由表中查找待查IP地址对应的表项位置。
8.根据权利要求6所述的查找路由表的装置,其特征在于,所述查找模块具体包括:计算单元和查找单元;
所述计算单元,用于根据经过所述哈希函数映射后的各表项是否有效标识,计算所述哈希结果对应的有效表项的位置;
所述查找单元,用于根据所述计算单元计算的有效表项的位置,在所存储的路由表中查找待查IP地址对应的表项位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910000911A CN101783761A (zh) | 2009-01-21 | 2009-01-21 | 一种存储及查找路由表的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910000911A CN101783761A (zh) | 2009-01-21 | 2009-01-21 | 一种存储及查找路由表的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101783761A true CN101783761A (zh) | 2010-07-21 |
Family
ID=42523585
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910000911A Pending CN101783761A (zh) | 2009-01-21 | 2009-01-21 | 一种存储及查找路由表的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101783761A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011157144A3 (zh) * | 2011-05-31 | 2012-04-19 | 华为技术有限公司 | 数据读写方法、装置和存储系统 |
CN102571599A (zh) * | 2012-02-08 | 2012-07-11 | 福建三元达通讯股份有限公司 | 一种路由表项的快速存储方法 |
CN106789727A (zh) * | 2016-12-27 | 2017-05-31 | 锐捷网络股份有限公司 | 报文分类方法和装置 |
CN108280208A (zh) * | 2018-01-30 | 2018-07-13 | 深圳市茁壮网络股份有限公司 | 一种样本查找方法及装置 |
CN109428822A (zh) * | 2017-09-01 | 2019-03-05 | 华为技术有限公司 | 一种名字查找方法和网络设备 |
-
2009
- 2009-01-21 CN CN200910000911A patent/CN101783761A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011157144A3 (zh) * | 2011-05-31 | 2012-04-19 | 华为技术有限公司 | 数据读写方法、装置和存储系统 |
US8938604B2 (en) | 2011-05-31 | 2015-01-20 | Huawei Technologies Co., Ltd. | Data backup using distributed hash tables |
CN102571599A (zh) * | 2012-02-08 | 2012-07-11 | 福建三元达通讯股份有限公司 | 一种路由表项的快速存储方法 |
CN102571599B (zh) * | 2012-02-08 | 2014-12-10 | 福建三元达通讯股份有限公司 | 一种路由表项的快速存储方法 |
CN106789727A (zh) * | 2016-12-27 | 2017-05-31 | 锐捷网络股份有限公司 | 报文分类方法和装置 |
CN109428822A (zh) * | 2017-09-01 | 2019-03-05 | 华为技术有限公司 | 一种名字查找方法和网络设备 |
CN109428822B (zh) * | 2017-09-01 | 2020-10-09 | 华为技术有限公司 | 一种名字查找方法和网络设备 |
CN108280208A (zh) * | 2018-01-30 | 2018-07-13 | 深圳市茁壮网络股份有限公司 | 一种样本查找方法及装置 |
CN108280208B (zh) * | 2018-01-30 | 2022-05-13 | 深圳市茁壮网络股份有限公司 | 一种样本查找方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101667958B (zh) | 选择哈希函数的方法、存储及查找路由表的方法及装置 | |
CN108153757B (zh) | 一种哈希表管理的方法和装置 | |
US6553002B1 (en) | Apparatus and method for routing data packets through a communications network | |
US8200686B2 (en) | Lookup engine | |
US20070168377A1 (en) | Method and apparatus for classifying Internet Protocol data packets | |
US6691305B1 (en) | Object code compression using different schemes for different instruction types | |
CN100445999C (zh) | 一种数据存储及搜索方法 | |
CN102377664B (zh) | 一种基于tcam的区域匹配装置和方法 | |
US9535702B2 (en) | Asset management device and method in a hardware platform | |
US8103772B2 (en) | Cluster extension in distributed systems using tree method | |
WO2004114611A2 (en) | Architecture for network search engines with fixed latency, high capacity, and high throughput | |
CN101783761A (zh) | 一种存储及查找路由表的方法及装置 | |
JP5960863B1 (ja) | 検索装置、検索方法、プログラム、及び記録媒体 | |
JP2004229163A (ja) | 固定長データ検索装置、及び固定長データ検索方法、及びコンピュータプログラム、並びにコンピュータ読み取り可能な記録媒体 | |
CN110737682A (zh) | 一种缓存操作方法、装置、存储介质和电子设备 | |
CN107729053B (zh) | 一种实现高速缓存表的方法 | |
CN110018811A (zh) | Cache数据处理方法以及Cache | |
CN101500012A (zh) | 一种报文分类方法和系统 | |
US6925503B2 (en) | Method and system for performing a longest prefix match search | |
JP2014502756A (ja) | ツリー構造に基づくマスデータストレージの装置および方法 | |
CN112269784B (zh) | 一种基于硬件实现的哈希表装置以及插入、查询和删除方法 | |
CN102984071A (zh) | 分段地址路由的路由表组织方法及查找路由的方法 | |
US20090006782A1 (en) | Apparatus and method for accessing a memory device | |
CN101211346A (zh) | 一种优化存储器性能的方法 | |
CN100531140C (zh) | 一种实现无回溯的最长前缀匹配搜索的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20100721 |