CN101667958B - 选择哈希函数的方法、存储及查找路由表的方法及装置 - Google Patents
选择哈希函数的方法、存储及查找路由表的方法及装置 Download PDFInfo
- Publication number
- CN101667958B CN101667958B CN200810213963A CN200810213963A CN101667958B CN 101667958 B CN101667958 B CN 101667958B CN 200810213963 A CN200810213963 A CN 200810213963A CN 200810213963 A CN200810213963 A CN 200810213963A CN 101667958 B CN101667958 B CN 101667958B
- Authority
- CN
- China
- Prior art keywords
- node
- hash function
- hash
- occurrence
- next stage
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 166
- 238000003860 storage Methods 0.000 claims abstract description 141
- 230000011218 segmentation Effects 0.000 claims description 162
- 230000008569 process Effects 0.000 abstract description 17
- 238000009825 accumulation Methods 0.000 abstract 1
- 230000006870 function Effects 0.000 description 334
- 239000003550 marker Substances 0.000 description 15
- 239000002699 waste material Substances 0.000 description 12
- 238000000151 deposition Methods 0.000 description 10
- 230000000295 complement effect Effects 0.000 description 9
- 230000004069 differentiation Effects 0.000 description 5
- 238000007689 inspection Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 4
- 238000005859 coupling reaction Methods 0.000 description 4
- 239000012467 final product Substances 0.000 description 4
- 238000012216 screening Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000001186 cumulative effect Effects 0.000 description 3
- RJKFOVLPORLFTN-LEKSSAKUSA-N Progesterone Chemical compound C1CC2=CC(=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H](C(=O)C)[C@@]1(C)CC2 RJKFOVLPORLFTN-LEKSSAKUSA-N 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 244000188472 Ilex paraguariensis Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/54—Organization of routing tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
- G06F16/325—Hash tables
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种选择哈希函数的方法、存储及查找路由表的方法及装置。其中选择哈希函数的方法包括:使用当前备选哈希函数对待哈希数据进行哈希;将所述哈希的结果进行解码,将所述解码结果进行累加,直到进行所述累加时,没有进位产生,则选择所述当前备选哈希函数作为正式使用的哈希函数。存储路由表的方法,包括:将所述路由表分为下一级节点指针部分和匹配项部分保存;使用本发明实施例提供的选择哈希函数的方法选择哈希函数。查找路由表的方法包括:根据存储路由表的下一级节点指针部分直接存储的长度,取待查IP地址进行直接查找;根据所述查找结果读取匹配项编码。通过应用本发明可以避免哈希冲突,有效减少路由表占用的存储资源。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种选择哈希函数的方法、存储及查找路由表的方法及装置。
背景技术
为了在用户众多的互联网络中完成由一地址到另一个地址的路由,通常将各种传输路径的相关数据存储在一起形成路由表,供进行路由时查询。
无类型域间路由(CIDR,Classless Inter-Domain Routing)是一种比较常用的路由表结构。在使用CIDR结构形成路由表时,一个网际协议(IP,InternetProtocol)网络使用一个前缀代表,这个前缀通常由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表项多数为空,以图1为例,共有29个Ptr表项为空,非常浪费内存资源,而在多数时候内存资源都是非常紧缺的资源,实际中的路由表节点可能多达上百、上千、或更多个,浪费内存资源就更多了。
发明内容
本发明实施例要解决的技术问题是提供一种选择哈希函数的方法、存储及查找路由表的方法及装置,可以减少路由表占用的内存资源。
为解决上述技术问题,本发明实施例一方面,提供了一种选择哈希函数的方法,包括:
输入待哈希数据;使用当前备选哈希函数对所述待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希,直到进行所述累加时,没有进位产生,则选择所述没有进位产生的当前备选哈希函数作为正式使用的哈希函数。
另一方面,提供了一种选择哈希函数的装置,包括:
备选哈希函数单元,用于发送当前备选哈希函数;
哈希单元,用于接收输入的待哈希数据;使用备选哈希函数单元发送的当前备选哈希函数对所述待哈希数据进行哈希;
解码器,用于将所述哈希单元哈希的结果进行解码;
累加器,用于将所述解码器解码的结果进行累加,出现进位,则通知所述备选哈希函数单元使用下一个备选哈希函数替代当前备选哈希函数;没有进位产生,则通知所述备选哈希函数单元选择所述没有进位产生的当前备选哈希函数作为正式使用的哈希函数。
另一方面,提供了一种存储路由表的方法,包括:
将所述路由表分为下一级节点指针部分和匹配项部分保存;
在所述下一级节点指针部分保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点哈希函数、根节点的下一级节点指针、根节点的匹配项指针,所述根节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针、第一级节点的匹配项指针,所述第一级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
另一方面,提供了一种存储路由表的方法,包括:
将所述路由表分为下一级节点指针部分和匹配项部分保存;
在所述下一级节点指针部分保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点分段哈希函数、根节点分段的下一级节点指针、根节点的匹配项指针;所述根节点分段为将根节点匹配项的下一级节点分为两段以上的分段,所述根节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第一级节点步长范围内网际协议地址选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点分段哈希函数对所述匹配项根节点分段内的第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述根节点分段内的第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点分段哈希函数、第一级节点分段的下一级节点指针、第一级节点的匹配项指针,所述第一级节点分段为将第一级节点匹配项的下一级节点分为两段以上的分段,所述第一级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第二级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
另一方面,提供了一种查找路由表的方法,包括:
根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
读取查找到的根节点数据;
在所述根节点数据存在下一级节点指针时,使用所述查找到的根节点数据中的根节点哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
根据所述查找结果读取匹配项。
另一方面,提供了一种查找路由表的方法,包括:
根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
读取查找到的根节点数据;
根据待查网际协议地址的分段标志查找所述查找到的根节点数据,获取所述分段标志对应的根节点分段数据;
在所述根节点分段数据中存在下一级节点指针时,使用所述根节点分段数据中的哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
根据所述查找结果读取匹配项。
另一方面,提供了一种存储路由表的装置,包括:
第一匹配项单元,用于保存路由表的匹配项部分;
第一下一级节点指针单元,用于保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点哈希函数、根节点的下一级节点指针、根节点的匹配项指针,所述根节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针、第一级节点的匹配项指针,所述第一级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
另一方面,提供了一种存储路由表的装置,包括:
第二匹配项单元,用于保存路由表的匹配项部分;
第二下一级节点指针单元,用于保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点分段哈希函数、根节点分段的下一级节点指针、根节点的匹配项指针;所述根节点分段为将根节点匹配项的下一级节点分为两段以上的分段,所述根节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第一级节点步长范围内网际协议地址选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点分段哈希函数对所述匹配项根节点分段内的第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述根节点分段内的第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点分段哈希函数、第一级节点分段的下一级节点指针、第一级节点的匹配项指针,所述第一级节点分段为将第一级节点匹配项的下一级节点分为两段以上的分段,所述第一级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第二级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
另一方面,提供了一种查找路由表的装置,包括:
第一直接查找单元,用于根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
第一读取单元,用于读取所述第一直接查找单元查找到的根节点数据;
第一哈希查找单元,用于在所述第一读取单元查找到的根节点数据存在下一级节点指针时,使用所述根节点数据中的根节点哈希函数对下一级节点的待查步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
第二读取单元,用于根据所述第一哈希查找单元查找下一级节点数据的查找结果读取匹配项。
另一方面,提供了一种查找路由表的装置,包括:
第二直接查找单元,用于根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
分段数据获取单元,用于读取所述第二直接查找单元查找到的根节点数据;根据待查网际协议地址的分段标志查找所述查找到的根节点数据,获取所述分段标志对应的根节点分段数据;
第四哈希查找单元,在所述分段数据获取单元获取的根节点分段数据中存在下一级节点指针时,使用所述根节点分段数据中的哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
第三读取单元,用于根据所述第四哈希查找单元查找下一级节点数据的查找结果读取匹配项。
由以上技术方案可以看出,由于本发明对备选哈希函数进行筛选,使用备选哈希函数对待哈希数据进行哈希,将所述哈希的结果进行解码,如果有哈希结果相同,解码后的数据也必然相同,解码结果相累加时必然出现进位,因此在解码结果累加出现进位时,就可以判断使用该备选哈希函数进行哈希会出现冲突,在解码结果累加没有出现进位时,就可以判断使用该备选哈希函数进行哈希不会出现冲突,可选择该哈希函数进行后续操作,因此可以避免哈希出现冲突。使用本发明实施例提供的技术方案选择哈希函数,在存储路由表时进行哈希,可有效减少路由表占用的空间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术Multi-Bit Tire示意图;
图2为本发明提供的选择哈希函数的方法实施例二流程图;
图3为本发明提供的选择哈希函数的装置实施例一结构图;
图4为本发明提供的选择哈希函数的装置实施例二结构图;
图5为两个实际中的路由表中节点的下一级节点的数量分布图;
图6为本发明提供的存储路由表的方法实施例存储结构图;
图7为本发明提供的存储路由表的方法实施例中节点结构图;
图8为本发明提供的存储路由表的方法实施例一的存储结构图;
图9为本发明提供的查找路由表的方法实施例一流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前越来越多的系统需要在大量的数据信息中快速查找所需要的信息,例如,在数据通信领域,需要查找各种转发表的核心路由器就属于这样的系统。目前,对于定长信息的查找一般使用基于哈希(HASH)的方法进行查找。
基于哈希的查找方法主要是将某一长度较长的关键字(key)按照某种映射关系,映射到较短长度的空间上进行存储,这种映射关系就是一种哈希函数(Hash Function),例如,使用哈希函数将32位(bit)的因特网协议(IP,Internet Protocol)地址映射到20bit的地址空间。当添加某一信息时,对该信息的key进行哈希运算,即f(key)=h,其中,f()是特定的哈希函数,key是需要存储信息的关键字,h则是信息存储的哈希地址,该地址对应存储空间的第h个存储单元,把该key值以及该key值对应的附属信息都存入该地址。这样在查找时,对key值进行哈希(hash)运算获取相应的hash地址就可以取得对应的附属信息。但是,当两个key值进行hash运算后得到同样哈希值时,即f(key1)=f(key2),两条信息可能需要存入一个地址,这就产生了冲突(collision),这两个key值对应的信息就形成冲突表项,给信息存储和查找带来了很大困难。
为了避免冲突,本发明实施例提供的选择哈希函数的方法实施例一中,输入待哈希数据;使用当前备选哈希函数对待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希;直到进行所述累加时,没有进位产生,则选择所述当前备选哈希函数作为正式使用的哈希函数。
本发明实施例提供的选择哈希函数的方法实施例一,对备选哈希函数进行筛选,使用备选哈希函数对待哈希数据进行哈希,将所述哈希的结果进行解码,如果有哈希结果相同,解码结果相累加时必然出现进位,因此在解码结果累加出现进位时,就可以判断使用该备选哈希函数进行哈希会出现冲突,在解码结果累加没有出现进位时,就可以判断使用该备选哈希函数进行哈希不会出现冲突,可选择该哈希函数进行后续操作,因此使用本发明实施例提供的选择哈希函数的方法实施例一可以避免出现冲突。
例如,有两个待哈希数据:数据1=0x1100,数据2=0x0010,第一个备选哈希函数为“0x0001”,使用“0x0001”对数据1、数据2进行“与”操作,获得的结果均为“0”,对“0”进行3位到8位解码,也即3/8译码之后,结果均为“00000001”,相累加即会出现进位,则可以判断使用“0x0001”为哈希函数会产生冲突,则继续使用下一个备选哈希函数进行哈希,假如下一个哈希函数为“0x0010”,则获得的结果将分别为“0”和“1”,进行3位到8位BIT解码后,结果为“00000001”“00000010”,“1”在不同的BIT位上,相累加时不会出现进位,此时可以判断使用“0x0010”作为哈希函数不会出现冲突,可选择“0x0010”作为正式使用的哈希函数,进行后续操作。本例中待哈希数据的步长为4BIT,因此待选哈希函数的有效位长度可以在1到3BIT之间,解码的方式可以是3位到8位解码,也可以是4位到16位解码,这里只是一个实例。
本发明实施例提供的选择哈希函数的方法实施例二流程如图2所示:
201、输入待哈希数据;使用当前备选哈希函数对待哈希数据进行哈希;
在实际实现时,可采用同一输入线路,依次串行输入待哈希数据,依次使用备选哈希函数进行哈希,也可以使用多路输入线路,同时并行输入待哈希数据,同时使用备选哈希函数进行哈希,但为了提高运算速度,通常采用并行的方式输入待哈希数据,在待哈希数据较多时,可以采用并行加串行的方式输入数据,即在多路输入线路上分别串行输入待哈希数据,例如有40个待哈希数据,只有10路输入线路,则将40个待哈希数据分为10组,每组4个待哈希数据,分别在每一路上串行输入4个数据,每一路的输入动作同时并行进行。
202、将所述哈希的结果进行解码,所述解码结果只有一位为“1”;
哈希结果的数据长度通常会小于待哈希数据的步长,例如步长为6的待哈希数据,哈希后的数据长度通常都小于等于“5”,因此通常可选用5到32BIT解码。
203、将所述解码结果进行累加;
204、判断累加过程中是否出现进位,是则进入205;否则进入206;
205、使用下一个备选哈希函数替代当前备选哈希函数,进入201;
累加过程出现进位说明有相同的哈希结果,使用当前备选哈希函数进行哈希,一定会出现冲突,因此需要换下一个备选哈希函数继续重复本流程;
备选哈希函数的数量可以根据实际情况确定,例如,待哈希数据步长为4,哈希函数的进行哈希时,使用哈希函数中为“1”的BIT位作为有效位,对待哈希数据进行筛选,哈希函数为“0x1010”,则选取待哈希数据的第2位和第4位为有效位,这种情况下,备选哈希函数可以从“0x0001”到“0x1110”之间选取。实际使用中哈希的方法有很多种,这只是其中的一种实例。
筛选备选哈希函数的顺序可以随机,也可以按照从大到小的顺序,也可以按照从有效位从少到多的顺序,其中较优的方式为按照从有效位从少到多的顺序进行筛选,因为有效位越少,哈希得到的数据越短,在利用哈希查表存储表项时,越有利于提高查表效率,减少表项占用的空间。
206、选择当前备选哈希函数作为正式使用的哈希函数。
累加过程没有出现进位,说明没有相同的哈希结果,使用当前备选哈希函数对待哈希数据进行哈希不会出现冲突,因此可选择当前备选哈希函数作为正式使用的哈希函数,进行后续操作。
本发明实施例提供的选择哈希函数的方法实施例二,对备选哈希函数进行筛选,使用备选哈希函数对待哈希数据进行哈希,将所述哈希的结果进行解码,所述解码结果只有一位为“1”,不同的哈希结果解码后为“1”的BIT位也将不同,如果有哈希结果相同,解码后的数据为“1”的BIT位也必然相同,解码结果相累加时必然出现进位,因此在解码结果累加出现进位时,就可以判断使用该备选哈希函数进行哈希会出现冲突,在解码结果累加没有出现进位时,就可以判断使用该备选哈希函数进行哈希不会出现冲突,可选择该哈希函数进行后续操作,因此使用本发明实施例提供的选择哈希函数的方法实施例二可以避免出现冲突。
本发明实施例提供的选择哈希函数的装置实施例一结构如图3所示,包括:备选哈希函数单元301、哈希单元302、解码器303、累加器304;
其中,备选哈希函数单元301,用于将当前备选哈希函数发送给哈希单元302;
哈希单元302,用于接收输入口输入的待哈希数据;使用备选哈希函数单元301发送的当前备选哈希函数对所述待哈希数据进行哈希;
解码器303,用于将所述哈希单元302哈希的结果进行解码,所述解码结果只有一位为“1”;
累加器304,用于将所述解码器303解码的结果进行累加,出现进位,则通知所述备选哈希函数单元301使用下一个备选哈希函数替代当前备选哈希函数;没有进位产生,则通知所述备选哈希函数单元301选择所述当前备选哈希函数作为正式使用的哈希函数。
本发明实施例提供的选择哈希函数的装置实施例一,可以对备选哈希函数进行筛选,使用当前备选哈希函数对待哈希数据进行哈希,将所述哈希的结果进行解码,所述解码结果只有一位为“1”,不同的哈希结果解码后为“1”的BIT位也将不同,如果有哈希结果相同,解码后的数据为“1”的BIT位也必然相同,解码结果相累加时必然出现进位,因此在解码结果累加出现进位时,就可以判断使用该备选哈希函数进行哈希会出现冲突,在解码结果累加没有出现进位时,就可以判断使用该备选哈希函数进行哈希不会出现冲突,可选择该哈希函数进行后续操作,因此使用本发明实施例提供的选择哈希函数的装置实施例一可以避免出现冲突。
在本发明实施例提供的选择哈希函数的装置实施例一中,只有一路输入线路,只有一个哈希单元,一个解码器,实际使用中,可能使用多路输入线路,多个哈希单元,多个解码器,以并行输入数据,并行进行哈希和解码等运算,以提高装置整体的运算效率。
本发明实施例提供的选择哈希函数的装置实施例二以有两路输入线路,两个哈希单元,两个解码器为例进行描述,其结构如图4所示,包括:备选哈希函数单元401、哈希单元402、哈希单元403、解码器404、解码器405、累加器406;
其中,备选哈希函数单元401,用于将当前备选哈希函数发送给哈希单元402;
哈希单元402,用于接收输入口输入的待哈希数据;使用备选哈希函数单元401发送的当前备选哈希函数对所述待哈希数据进行哈希;
哈希单元403,用于接收输入口输入的待哈希数据;使用备选哈希函数单元401发送的当前备选哈希函数对所述待哈希数据进行哈希;
解码器404,用于将所述哈希单元402哈希的结果进行解码,所述解码结果只有一位为“1”;
解码器405,用于将所述哈希单元403哈希的结果进行解码,所述解码结果只有一位为“1”;
累加器406,用于将所述解码器404、405解码的结果进行累加,出现进位,则通知所述备选哈希函数单元401使用下一个备选哈希函数替代当前备选哈希函数;没有进位产生,则通知所述备选哈希函数单元401选择所述当前备选哈希函数作为正式使用的哈希函数。
本实施例中两路输入线路,两个哈希单元,两个解码器只是一种实例,根据实际情况,可能具有n路输入线路,n个哈希单元,n个解码器,n为大于等于2的整数。
由于本发明实施例提供的选择哈希函数的装置实施例二中,具有多路输入线路,多个哈希单元,多个解码器,因此待哈希数据可以分别从不同输入线路同时并行输入,由多个哈希单元、多个解码器并行进行哈希、解码,提高装置整体的运算效率。
本发明实施例提供的选择哈希函数的装置实施例二,可以对备选哈希函数进行筛选,使用当前备选哈希函数对待哈希数据进行哈希,将所述哈希的结果进行解码,所述解码结果只有一位为“1”,不同的哈希结果解码后为“1”的BIT位也将不同,如果有哈希结果相同,解码后的数据为“1”的BIT位也必然相同,解码结果相累加时必然出现进位,因此在解码结果累加出现进位时,就可以判断使用该备选哈希函数进行哈希会出现冲突,在解码结果累加没有出现进位时,就可以判断使用该备选哈希函数进行哈希不会出现冲突,可选择该哈希函数进行后续操作,因此使用本发明实施例提供的选择哈希函数的装置实施例二可以避免出现冲突。
使用哈希函数的有效位对待哈希数据进行筛选是一种比较常用的哈希方法,此时本发明实施例提供的选择哈希函数的装置实施例一及二中的哈希单元包括有选路器,选路器用于使用当前备选哈希函数的有效位对所述待哈希数据进行筛选,使用筛选进行解码。
以上为本发明实施例提供的选择哈希函数的方法及装置实施例。
在本发明实施例提供的存储路由表的方法实施例中,将路由表分为Prefix和Ptr两个部分分别进行存储。
在对目前常见路由表的研究中发现,有下一级节点的且下一级节点为树节点的节点在整个路由表中所占比例非常少,这类节点的下一级节点数目大部分情况下不会大于64个。现以两个实际中的路由表进行说明,图5是两个实际中的路由表中节点的下一级节点的数量分布图,横坐标是节点的下一级节点的数目,纵坐标为节点的数量,两条曲线分别对应两个实际中的路由表,步长为8。
由图5可以看出大量的节点都只有一个或两个下一级节点,下一级节点多于5个的节点所占比例非常少,在此基础上,本发明实施例提供的存储路由表的方法实施例提出了使用哈希方式存储指针的方法。
由于靠近根节点的匹配项有下一级节点指针的可能性比较大,因此本发明实施例提供的存储路由表的方法实施例中,按照路由表的实际情况对靠近根节点的匹配项的IP地址不进行HASH,通常选择的范围为0-8Bit或0-16Bit的匹配项不进行HASH,直接进行存储,这是由于在常见的路由表中,0-8Bit、甚至0-16Bit的匹配项及其下一级节点指针部分占用的空间所占比例并不大,根据实际情况,选择0-3Bit、0-4Bit的匹配项不进行HASH也是可以的。在直接存储的匹配项存在下一级节点指针,且该下一级节点指针指向的匹配项的IP地址需要经过哈希后存储的,该直接存储的匹配项的保存数据中就应当包含该哈希函数,该哈希函数用于对该下一级节点指针指向的匹配项的IP地址进行哈希。
为了避免哈希冲突,本实施例使用本发明实施例提供的选择哈希函数的方法选择哈希函数对待存储的IP地址进行哈希。
由于离根节点较远的匹配项没有下一级节点指针的可能性比较大,因此本发明实施例提供的存储路由表的方法实施例中,按照路由表的实际情况对离根节点较远的匹配项的IP地址进行HASH之后,存储哈希后的值与下一级节点指针,例如,假如选择的范围为0-8或0-16Bit的匹配项不进行HASH,直接进行存储,则将0-8Bit或0-16Bit之后的匹配项的IP地址进行HASH之后,再进行存储。存储哈希后数值的数据结构如表7所示:
表7、存储哈希后数值的数据结构
其中,表项“哈希函数”存放的是使用本发明实施例提供的选择哈希函数的方法选择出的哈希函数,也就是用于对待存储的IP地址进行哈希的哈希函数;表项“IP”用来存储相应步长上的实际IP地址,这是为了防止出现找错的情况,例如,哈希函数为“0x1000”,待存储的IP地址为“0x1001”和“0x0010”,进行有效位筛选后,哈希结果分别为“1”“0”,如果待查找的IP地址为“0x1000”,哈希结果也为“1”,就会找到“0x1001”的表项,此时核对表项“IP”的内容,就可以判断出找错了。根据实际情况,IP地址可以取实际的长度,例如,步长为3Bit的取3Bit,步长为8Bit的取8Bit,也可以取最可能存在差异的Bit位进行比较,仍以哈希函数为“0x1000”为例,就可以取第1、2、3位Bit位的实际IP地址进行比较,以减小数据结构大小。
需要说明的是,表7只是一个举例,实际使用时,不同表项的位置可以发生变化,例如可以先是表项“IP”,然后是表项“下一级节点指针”,然后是表项“匹配项指针”,然后是表项“哈希函数”。
以选择直接存储0-3Bit的匹配项为例,存储结构如图6所示:
以“*”为0Bit开始计,共有4级匹配项被直接保存,最后一级匹配项只有000有下一级节点,因此只有000的下一级节点指针指向一个存储哈希后数值的数据结构,该数据结构中包含“哈希函数”“IP”“下一级节点指针”“匹配项指针”。
现以实例说明具体的存储方法,假设要存储的路由表长度为32Bit,以Multi-Bit Tire存储时,步长为8,共有4级,其节点结构如图7所示:
根节点401中可储存28个匹配项,其中只有1个匹配项有下一级节点,该匹配项的下一级节点指针指向第一级节点702;第一级节点702同样可储存28个匹配项,其中有2个匹配项有下一级节点,这2个匹配项的下一级节点指针分别指向第二级节点703和第二级节点704;第二级节点703同样可储存28个匹配项,但是其中没有任何一个匹配项有下一级节点,第二级节点704同样可储存28个匹配项,其中只有1个匹配项有下一级节点,该匹配项的下一级节点指针指向第三级节点705;第三级节点705同样可储存28个匹配项,但是其中没有任何一个匹配项有下一级节点。
由以上描述可知,第一级节点702、第二级节点703、第二级节点704、第三级节点705共为28×4个匹配项申请并预留了空间,其中只有3个匹配项有下一级节点,既只有3个“下一级节点指针”表项不为空,有28×4-3个匹配项的“下一级节点指针”表项占用的空间被浪费了,再加上并不是所有位置都有相匹配项的匹配项,“匹配项”表项的浪费也非常严重。
在本发明实施例提供的存储路由表的方法实施例一中,将所述路由表分为下一级节点指针部分和匹配项部分保存;
在所述下一级节点指针部分保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点哈希函数、根节点的下一级节点指针、根节点的匹配项指针,所述根节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针、第一级节点的匹配项指针,所述第一级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
在有更多级节点,级数为N时;
在所述下一级节点指针部分保存第N级节点数据;
使用所述匹配项的第N-1级节点的哈希函数对第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点的下一级节点指针指向的位置存储所述第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点的哈希函数、第N级节点的下一级节点指针、第N级节点的匹配项指针,所述第N级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
在对该实例使用本发明实施例提供的存储路由表的方法实施例后,本发明实施例提供的存储路由表的方法实施例一的存储结构示意如图8所示:
虚线框801内为下一级节点指针部分的数据,虚线框802内为匹配项部分,保存有匹配项部分的数据,其中包含匹配项编码(Prefix Node);
“匹配项1”“哈希1”“下一级节点指针1”“匹配项指针1”为根节点数据,根据图7可知,根节点中只有1个匹配项有下一级节点,因此在本发明实施例提供的存储路由表的方法实施例一中,只需存储一个匹配项的“下一级节点指针”。由于本发明实施例提供的存储路由表的方法实施例一选择直接存储0-8Bit的匹配项,不需要对0-8Bit的IP地址进行哈希,因此“匹配项1”为根节点有下一级节点指针的匹配项,“哈希1”为根节点哈希函数,用于对所述匹配项第一级节点步长范围内IP地址进行哈希,也就是用于对实际IP地址的9-16Bit进行哈希的哈希函数,为了避免“哈希1”对待哈希数据哈希的结果出现冲突,可使用本发明实施例提供的选择哈希函数的方法选择哈希函数“哈希1”,在下一级节点只有一个地址时,因为不会出现冲突,因此可选用任何一个备选哈希函数,也可以使用本发明实施例提供的选择哈希函数的方法选择;“下一级节点指针1”指向存放第一级节点数据的地址,通过“下一级节点指针1”可以找到存放第一级节点数据的位置,使用“哈希1”对实际IP地址的9-16Bit进行哈希的结果作为偏移加上“下一级节点指针1”,可以找到对应的数据;“匹配项指针1”指向“匹配项1”对应的匹配项编码“匹配项编码1”。
根据图7可知第一级节点中有两个匹配项有下一级节点,“哈希2”“IP2”“下一级节点指针2”“匹配项指针2”为存储第一级节点的具有下一级节点匹配项的相关数据的第一个表项,对匹配项实际IP地址的9-16Bit进行哈希后,以哈希结果作为偏移地址,偏移地址位于本表项的匹配项的数据保存于该表项;
“哈希2”对应表7中的“哈希函数”表项,为第一级节点哈希函数,用于对所述匹配项第二级节点步长范围内IP地址进行哈希,也就是用于对实际IP地址的17-24Bit进行哈希的哈希函数,为了避免“哈希2”对待哈希数据哈希的结果出现冲突,可使用本发明实施例提供的选择哈希函数的方法选择哈希函数“哈希2”,在下一级节点只有一个地址时,因为不会出现冲突,因此可选用任何一个备选哈希函数,也可以使用本发明实施例提供的选择哈希函数的方法选择,在图7的例子中,该匹配项只有一个下一级节点,因此可以选用任何一个备选哈希函数作为“哈希2”;“IP2”对应表7中的“IP”表项,如果使用“哈希1”对具有下一级节点匹配项的第9-16Bit进行哈希后,偏移地址位于本表项,则根据实际情况保存实际IP地址的9-16Bit,或者实际IP地址的9-16Bit中的几个Bit于“IP2”;“下一级节点指针2”指向存放本表项第二级节点数据的地址,通过“下一级节点指针2”可以找到存放第二级节点数据的位置,使用“哈希2”对实际IP地址的17-24Bit进行哈希的结果作为偏移加上“下一级节点指针2”,可以找到对应的数据;“匹配项指针2”指向和本表项对应的匹配项编码“匹配项编码2”。
“哈希3”“IP3”“下一级节点指针3”“匹配项指针3”为存储第一级节点的具有下一级节点匹配项的相关数据的第二个表项,对匹配项实际IP地址的9-16Bit进行哈希后,以哈希结果作为偏移地址,偏移地址位于本表项的匹配项的数据保存于该表项;
“哈希3”对应表7中的“哈希函数”表项,为第一级节点哈希函数,用于对所述匹配项第二级节点步长范围内IP地址进行哈希,也就是用于对实际IP地址的17-24Bit进行哈希的哈希函数,为了避免“哈希3”对待哈希数据哈希的结果出现冲突,可使用本发明实施例提供的选择哈希函数的方法选择哈希函数“哈希3”,在下一级节点只有一个地址时,因为不会出现冲突,因此可选用任何一个备选哈希函数,也可以使用本发明实施例提供的选择哈希函数的方法选择,在图7的例子中,该匹配项没有下一级节点,因此“哈希3”可以为空;“IP3”对应表7中的“IP”表项,如果使用“哈希1”对具有下一级节点匹配项的第9-16Bit进行哈希后,偏移地址位于本表项,则根据实际情况保存实际IP地址的9-16Bit,或者实际IP地址的9-16Bit中的几个Bit于“IP3”;“下一级节点指针3”指向存放本表项第二级节点数据的地址,通过“下一级节点指针3”可以找到存放第二级节点数据的位置,使用“哈希3”对实际IP地址的17-24Bit进行哈希的结果作为偏移加上“下一级节点指针3”,可以找到对应的数据,在图7的例子中,该匹配项没有下一级节点,因此“下一级节点指针3”可以为空;“匹配项指针3”指向和本表项对应的匹配项编码“匹配项编码3”。
“哈希2”“IP2”“下一级节点指针2”“匹配项指针2”“哈希3”“IP3”“下一级节点指针3”“匹配项指针3”构成一个子节点数组。
根据图7可知第二级节点中只有一个匹配项有下一级节点,因此第二级节点数据只有一个表项。“哈希4”“IP4”“下一级节点指针4”“匹配项指针4”为存储第二级节点的具有下一级节点匹配项的相关数据的表项,对匹配项实际IP地址的17-24Bit进行哈希后,以哈希结果作为偏移地址,偏移地址位于本表项的匹配项的数据保存于该表项;
“哈希4”对应表7中的“哈希函数”表项,为第二级节点哈希函数,用于对所述匹配项第三级节点步长范围内IP地址进行哈希,也就是用于对实际IP地址的25-32Bit进行哈希的哈希函数,为了避免“哈希4”对待哈希数据哈希的结果出现冲突,可使用本发明实施例提供的选择哈希函数的方法选择哈希函数“哈希4”,在下一级节点只有一个地址时,因为不会出现冲突,因此可选用任何一个备选哈希函数,也可以使用本发明实施例提供的选择哈希函数的方法选择,在图7的例子中,该匹配项没有下一级节点,因此“哈希4”可以为空;“IP4”对应表7中的“IP”表项,如果使用“哈希2”对具有下一级节点匹配项的第17-24Bit进行哈希后,偏移地址位于本表项,则根据实际情况保存实际IP地址的17-24Bit,或者实际IP地址的17-24Bit中的几个Bit于“IP3”;“下一级节点指针4”指向存放本表项第三级节点数据的地址,通过“下一级节点指针4”可以找到存放第三级节点数据的位置,使用“哈希4”对实际IP地址的25-32Bit进行哈希的结果作为偏移加上“下一级节点指针4”,可以找到对应的数据,在图7的例子中,该匹配项没有下一级节点,因此“下一级节点指针4”可以为空;“匹配项指针4”指向和本表项对应的匹配项编码“匹配项编码4”。
由以上对图8的描述可以看出,使用本发明实施例提供的存储路由表的方法实施例一后,原本占用28×4-3个“下一级节点指针”表项空间的“下一级节点指针”部分,经过哈希后再存储,由于哈希得到的结果长度变短,存储时占用空间也大大减少,有效节省了路由表占用空间。
例如哈希前步长为“8”,哈希后步长为“3”,一个节点占用的空间就由256Bit变成8Bit,包含多个节点的整张路由表节省的空间就更多了。
进一步,当有新的路由IP地址需要存入该路由表时,需根据新的路由IP地址及原本存储的IP地址重新选择没有冲突的哈希函数进行存储。
将本发明实施例提供的存储路由表的方法实施例应用于更大的路由表节省的空间也会更大,因此应用本发明实施例提供的存储路由表的方法实施例可以有效地节省路由表占用的空间。
在使用本发明实施例提供的存储路由表的方法实施例一存储路由表后,假设一个步长为“8”的子节点中有4个匹配项具有下一级节点指针,使用本发明实施例提供的选择哈希函数的方法选择哈希函数,并进行哈希后步长为“3”,其中包含有4个匹配项下一级节点指针部分的数据,此时路由表下一级节点指针部分该子节点的数据结构如表8所示:
表8、路由表下一级节点指针部分某子节点的数据结构
由表8的例子可知,虽然哈希后步长变短,节省了大量存储空间,但还是会有部分空间被浪费,表8中就有4个表项的存储空间被浪费,哈希后的步长越大浪费也越严重,为了减少这种浪费,本发明实施例提供的存储路由表的方法实施例二,给出了使用多个哈希函数分段进行哈希的方法。
将一个节点对应的具有下一级节点指针的匹配项分成若干段,分别为每一段的待哈希数据选择一个不会产生冲突的哈希函数,按照分段分别存储相应哈希函数,和相应“下一级节点指针”。
例如步长为8的节点,可以分为4段,待哈希数据的前两位可以作为分段标志位对不同分段进行区分,需要进行哈希的有效位就变成了后6位,只需要根据分段内待哈希数据的后6位找出没有冲突的哈希函数,和相应“下一级节点指针”保存在表项的分段位置内即可,本实施例分了4段,因此一个节点的表项内就将有4个分段的位置,其他实施例中也都将根据实际分段的情况分配存储空间。
本发明实施例提供的存储路由表的方法实施例二的方案如下所述:
将所述路由表分为下一级节点指针部分和匹配项部分保存;
在所述下一级节点指针部分保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点分段哈希函数、根节点分段的下一级节点指针、根节点的匹配项指针;所述根节点分段为将根节点匹配项的下一级节点分为两段以上的分段,所述根节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第一级节点步长范围内网际协议地址选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点分段哈希函数对所述匹配项根节点分段内的第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述根节点分段内的第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点分段哈希函数、第一级节点分段的下一级节点指针、第一级节点的匹配项指针,所述第一级节点分段为将第一级节点匹配项的下一级节点分为两段以上的分段,所述第一级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第二级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
在有更多级节点,级数为N时;
在所述下一级节点指针部分保存第N级节点数据;
使用所述匹配项分段的第N-1级节点的哈希函数对第N-1级节点分段内第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点分段的下一级节点指针指向的位置存储所述第N-1级节点分段内第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点分段哈希函数、第N级节点分段的下一级节点指针、第N级节点的匹配项指针,所述第N级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第N+1级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
根据实际情况,所述步长范围内网际协议地址可以是步长范围内部分实际网际协议地址、也可以是全部网际协议地址。
应用本发明实施例提供的存储路由表的方法实施例二后,和本发明实施例提供的存储路由表的方法实施例一相比,每一个节点对应的具有下一级节点指针的匹配项都分成若干段,然后再挑选使用本发明实施例提供的选择哈希函数的方法选择哈希函数,进行哈希存储,有效节约了存储空间,这是由于步长越短,浪费越小,将待哈希数据分段后,可以选用的哈希函数有效位自然变少,相应浪费也就变少,现以实例说明如何节省的空间;
假设有8个数据待存储,分别为:
Key1:00000001
Key2:00000010
Key3:01000100
Key4:01001000
Key5:10010000
Key6:10100000
Key7:11000100
Key8:11010000
假如直接使用本发明实施例提供的选择哈希函数的方法为这8个数据选择没有冲突的哈希函数,由于区分Key1、Key2需要8位hash函数的第7、8两位为1,区分Key3、Key4需要8位hash函数的第5、6两位为1,区分Key5、Key6需要8位hash函数的第3、4两位为1,区分Key3、Key7需要8位hash函数的第1位为1,区分Key5、Key8需要8位hash函数的第2位为1,因此只能选出“11111111”作为哈希函数,需要占用256个表项的存储空间,其中有效表项为8,有248个表项为空;
假设将最多256个可能的8bit的key值按照数值大小平均分成四段,每段的所有key值前两位相同,所以每段取6bit的数据进行哈希即可,现分段如下:
第一段:00000000~00111111
第二段:01000000~01111111
第三段:10000000~10111111
第四段:11000000~11111111
分段后,key1、key2属于第一段,只需要6bit的hash函数第5、6位其中之一为1即可,如000010,对应只需要2E1=2项信息存储空间,全部为有效项,没有浪费;
Key3、Key4属于第二段,区分Key3、Key4需要6位hash函数的第3、4位之一为1,如000100,对应只需要2E1=2项信息存储空间,全部为有效项,同样没有浪费;
Key5、Key6属于第三段,区分Key5、Key6需要6位hash函数的第1、2位之一为1,如010000,对应只需要2E1=2项信息存储空间,全部为有效项,同样没有浪费;
Key7、Key8属于第四段,区分Key7、Key8需要6位hash函数的第2、4位之一为1,如010000,对应只需要2E1=2项信息存储空间,全部为有效项,同样没有浪费;
因此,分段之后用四个6bit的哈希函数000010,000100,010000,010000,即可索引8个key值对应信息的存储,需要8项信息的空间,没有浪费,节省了248个表项的空间;
在实际使用中数据分布不一定这么均匀,如果某个区段没有数据需要存储,则不需要分配存储空间,同样会节省存储空间,当然这只是一些极端情况,在实际使用中,按照1M个表项大小的路由表随机仿真结果,取每个节点的下层子节点数目为n,n取值范围为0~256的分布概率,对每个特定n值,在相同IP地址分布情况下用本发明实施例提供的存储路由表的方法实施例一、二分别计算占用空间大小,假设实施例一采用8Bit哈希函数,实施例二分4段,采用6Bit哈希函数,重复10000次取平均值,再将平均值按照分布概率加权计算,结果如表9所示。
概率 | 子节点数量 | 实施例一计算结果 | 实施例二计算结果 |
0.00% | 1 | 100.00% | 100.00% |
0.00% | 2 | 100.00% | 100.00% |
0.00% | 3 | 133.33% | 100.00% |
0.00% | 4 | 123.05% | 100.00% |
0.00% | 5 | 163.90% | 100.00% |
0.00% | 6 | 155.60% | 100.00% |
0.00% | 7 | 178.49% | 100.00% |
0.00% | 8 | 201.11% | 100.00% |
0.00% | 9 | 206.88% | 133.33% |
0.00% | 10 | 219.36% | 133.33% |
0.00% | 11 | 243.10% | 133.33% |
0.00% | 12 | 262.73% | 133.33% |
0.00% | 13 | 275.67% | 135.60% |
0.00% | 14 | 289.25% | 135.60% |
0.00% | 15 | 306.76% | 135.60% |
0.00% | 16 | 327.20% | 135.60% |
0.00% | 17 | 346.60% | 169.66% |
0.00% | 18 | 365.81% | 169.66% |
0.00% | 19 | 382.62% | 169.66% |
0.00% | 20 | 398.37% | 169.66% |
0.00% | 21 | 409.40% | 174.33% |
0.00% | 22 | 428.76% | 174.33% |
0.00% | 23 | 451.21% | 174.33% |
0.00% | 24 | 463.17% | 174.33% |
0.01% | 25 | 480.73% | 201.89% |
0.02% | 26 | 494.07% | 201.89% |
0.04% | 27 | 508.94% | 201.89% |
0.08% | 28 | 520.73% | 201.89% |
0.12% | 29 | 533.98% | 220.54% |
0.18% | 30 | 539.07% | 220.54% |
0.28% | 31 | 549.02% | 220.54% |
0.34% | 32 | 559.26% | 220.54% |
0.58% | 33 | 564.89% | 235.15% |
0.73% | 34 | 570.13% | 235.15% |
1.07% | 35 | 574.67% | 235.15% |
1.23% | 36 | 575.86% | 235.15% |
1.59% | 37 | 582.73% | 253.44% |
1.89% | 38 | 582.47% | 253.44% |
2.46% | 39 | 580.46% | 253.44% |
2.67% | 40 | 576.21% | 253.44% |
2.74% | 41 | 575.83% | 273.06% |
3.02% | 42 | 569.05% | 273.06% |
3.51% | 43 | 564.06% | 273.06% |
2.88% | 44 | 556.22% | 273.06% |
3.24% | 45 | 549.23% | 287.91% |
2.90% | 46 | 541.36% | 287.91% |
3.13% | 47 | 532.64% | 287.91% |
2.77% | 48 | 523.76% | 287.91% |
2.49% | 49 | 515.92% | 299.62% |
2.02% | 50 | 506.78% | 299.62% |
1.86% | 51 | 498.27% | 299.62% |
1.37% | 52 | 489.60% | 299.62% |
1.28% | 53 | 480.85% | 307.26% |
1.01% | 54 | 472.46% | 307.26% |
0.77% | 55 | 464.24% | 307.26% |
0.54% | 56 | 456.48% | 307.26% |
0.32% | 57 | 448.79% | 315.89% |
0.25% | 58 | 441.05% | 315.89% |
0.22% | 59 | 433.64% | 315.89% |
0.24% | 60 | 426.47% | 315.89% |
0.11% | 61 | 419.57% | 321.23% |
0.04% | 62 | 412.86% | 321.23% |
0.05% | 63 | 406.31% | 321.23% |
0.05% | 64 | 399.98% | 321.23% |
0.10% | 65 | 393.79% | 324.37% |
0.16% | 66 | 387.84% | 324.37% |
0.14% | 67 | 382.05% | 324.37% |
0.25% | 68 | 376.45% | 324.37% |
0.27% | 69 | 371.01% | 322.20% |
0.36% | 70 | 365.71% | 322.20% |
0.41% | 71 | 360.55% | 322.20% |
0.70% | 72 | 355.56% | 322.20% |
0.56% | 73 | 350.68% | 316.43% |
0.88% | 74 | 345.95% | 316.43% |
0.98% | 75 | 341.33% | 316.43% |
1.10% | 76 | 336.84% | 316.43% |
1.10% | 77 | 332.47% | 308.35% |
1.47% | 78 | 328.21% | 308.35% |
1.53% | 79 | 324.05% | 308.35% |
1.81% | 80 | 320.00% | 308.35% |
1.85% | 81 | 316.05% | 298.93% |
1.67% | 82 | 312.20% | 298.93% |
1.68% | 83 | 308.43% | 298.93% |
2.08% | 84 | 304.76% | 298.93% |
1.96% | 85 | 301.18% | 287.96% |
1.98% | 86 | 297.67% | 287.96% |
1.89% | 87 | 294.25% | 287.96% |
1.95% | 88 | 290.91% | 287.96% |
2.22% | 89 | 287.64% | 276.99% |
2.11% | 90 | 284.44% | 276.99% |
1.90% | 91 | 281.32% | 276.99% |
1.88% | 92 | 278.26% | 276.99% |
1.77% | 93 | 275.27% | 266.08% |
1.68% | 94 | 272.34% | 266.08% |
1.49% | 95 | 269.47% | 266.08% |
1.35% | 96 | 266.67% | 266.08% |
1.27% | 97 | 263.92% | 255.80% |
1.28% | 98 | 261.22% | 255.80% |
1.08% | 99 | 258.59% | 255.80% |
0.90% | 100 | 256.00% | 255.80% |
0.77% | 101 | 253.47% | 246.06% |
0.66% | 102 | 250.98% | 246.06% |
0.53% | 103 | 248.54% | 246.06% |
0.39% | 104 | 246.15% | 246.06% |
0.36% | 105 | 243.81% | 237.00% |
0.31% | 106 | 241.51% | 237.00% |
0.18% | 107 | 239.25% | 237.00% |
0.29% | 108 | 237.04% | 237.00% |
0.10% | 109 | 234.86% | 228.57% |
0.11% | 110 | 232.73% | 228.57% |
0.08% | 111 | 230.63% | 228.57% |
0.07% | 112 | 228.57% | 228.57% |
0.03% | 113 | 226.55% | 220.69% |
0.03% | 114 | 224.56% | 220.69% |
0.05% | 115 | 222.61% | 220.69% |
0.00% | 116 | 220.69% | 220.69% |
0.01% | 117 | 218.80% | 213.33% |
0.00% | 118 | 216.95% | 213.33% |
0.00% | 119 | 215.13% | 213.33% |
0.00% | 120 | 213.33% | 213.33% |
0.01% | 121 | 211.57% | 206.45% |
0.00% | 122 | 209.84% | 206.45% |
0.00% | 123 | 208.13% | 206.45% |
0.01% | 124 | 206.45% | 206.45% |
0.00% | 125 | 204.80% | 200.00% |
0.00% | 126 | 203.17% | 200.00% |
0.00% | 127 | 201.57% | 200.00% |
0.00% | 128 | 200.00% | 200.00% |
0.00% | 129 | 198.45% | 193.94% |
0.00% | 130 | 196.92% | 193.94% |
0.00% | 131 | 195.42% | 193.94% |
0.00% | 132 | 193.94% | 193.94% |
0.00% | 133 | 192.48% | 188.24% |
0.00% | 134 | 191.04% | 188.24% |
0.00% | 135 | 189.63% | 188.24% |
0.00% | 136 | 188.24% | 188.24% |
0.00% | 137 | 186.86% | 182.86% |
0.00% | 138 | 185.51% | 182.86% |
0.00% | 139 | 184.17% | 182.86% |
0.00% | 140 | 182.86% | 182.86% |
0.00% | 141 | 181.56% | 177.78% |
0.00% | 142 | 180.28% | 177.78% |
0.00% | 143 | 179.02% | 177.78% |
0.00% | 144 | 177.78% | 177.78% |
0.00% | 145 | 176.55% | 172.97% |
0.00% | 146 | 175.34% | 172.97% |
0.00% | 147 | 174.15% | 172.97% |
0.00% | 148 | 172.97% | 172.97% |
0.00% | 149 | 171.81% | 168.42% |
0.00% | 150 | 170.67% | 168.42% |
0.00% | 151 | 169.54% | 168.42% |
0.00% | 152 | 168.42% | 168.42% |
0.00% | 153 | 167.32% | 164.10% |
0.00% | 154 | 166.23% | 164.10% |
0.00% | 155 | 165.16% | 164.10% |
0.00% | 156 | 164.10% | 164.10% |
0.00% | 157 | 163.06% | 160.00% |
0.00% | 158 | 162.03% | 160.00% |
0.00% | 159 | 161.01% | 160.00% |
0.00% | 160 | 160.00% | 160.00% |
0.00% | 161 | 159.01% | 156.10% |
0.00% | 162 | 158.02% | 156.10% |
0.00% | 163 | 157.06% | 156.10% |
0.00% | 164 | 156.10% | 156.10% |
0.00% | 165 | 155.15% | 152.38% |
0.00% | 166 | 154.22% | 152.38% |
0.00% | 167 | 153.29% | 152.38% |
0.00% | 168 | 152.38% | 152.38% |
0.00% | 169 | 151.48% | 148.84% |
0.00% | 170 | 150.59% | 148.84% |
0.00% | 171 | 149.71% | 148.84% |
0.00% | 172 | 148.84% | 148.84% |
0.00% | 173 | 147.98% | 145.45% |
0.00% | 174 | 147.13% | 145.45% |
0.00% | 175 | 146.29% | 145.45% |
0.00% | 176 | 145.45% | 145.45% |
0.00% | 177 | 144.63% | 142.22% |
0.00% | 178 | 143.82% | 142.22% |
0.00% | 179 | 143.02% | 142.22% |
0.00% | 180 | 142.22% | 142.22% |
0.00% | 181 | 141.44% | 139.13% |
0.00% | 182 | 140.66% | 139.13% |
0.00% | 183 | 139.89% | 139.13% |
0.00% | 184 | 139.13% | 139.13% |
0.00% | 185 | 138.38% | 136.17% |
0.00% | 186 | 137.63% | 136.17% |
0.00% | 187 | 136.90% | 136.17% |
0.00% | 188 | 136.17% | 136.17% |
0.00% | 189 | 135.45% | 133.33% |
0.00% | 190 | 134.74% | 133.33% |
0.00% | 191 | 134.03% | 133.33% |
0.00% | 192 | 133。33% | 133.33% |
0.00% | 193 | 132.64% | 130.61% |
0.00% | 194 | 131.96% | 130.61% |
0.00% | 195 | 131.28% | 130.61% |
0.00% | 196 | 130.61% | 130.61% |
0.00% | 197 | 129.95% | 128.00% |
0.00% | 198 | 129.29% | 128.00% |
0.00% | 199 | 128.64% | 128.00% |
0.00% | 200 | 128.00% | 128.00% |
0.00% | 201 | 127.36% | 125.49% |
0.00% | 202 | 126.73% | 125.49% |
0.00% | 203 | 126.11% | 125.49% |
0.00% | 204 | 125.49% | 125.49% |
0.00% | 205 | 124.88% | 123.08% |
0.00% | 206 | 124.27% | 123.08% |
0.00% | 207 | 123.67% | 123.08% |
0.00% | 208 | 123.08% | 123.08% |
0.00% | 209 | 122.49% | 120.75% |
0.00% | 210 | 121.90% | 120.75% |
0.00% | 211 | 121.33% | 120.75% |
0.00% | 212 | 120。75% | 120.75% |
0.00% | 213 | 120.19% | 118.52% |
0.00% | 214 | 119.63% | 118.52% |
0.00% | 215 | 119.07% | 118.52% |
0.00% | 216 | 118.52% | 118.52% |
0.00% | 217 | 117.97% | 116.36% |
0.00% | 218 | 117.43% | 116.36% |
0.00% | 219 | 116.90% | 116.36% |
0.00% | 220 | 116.36% | 116.36% |
0.00% | 221 | 115.84% | 114.29% |
0.00% | 222 | 115.32% | 114.29% |
0.00% | 223 | 114.80% | 114.29% |
0.00% | 224 | 114.29% | 114.29% |
0.00% | 225 | 113.78% | 112.28% |
0.00% | 226 | 113.27% | 112.28% |
0.00% | 227 | 112.78% | 112.28% |
0.00% | 228 | 112.28% | 112.28% |
0.00% | 229 | 111.79% | 110.34% |
0.00% | 230 | 111.30% | 110.34% |
0.00% | 231 | 110.82% | 110.34% |
0.00% | 232 | 110.34% | 110.34% |
0.00% | 233 | 109.87% | 108.47% |
0.00% | 234 | 109.40% | 108.47% |
0.00% | 235 | 108.94% | 108.47% |
0.00% | 236 | 108.47% | 108.47% |
0.00% | 237 | 108.02% | 106.67% |
0.00% | 238 | 107.56% | 106.67% |
0.00% | 239 | 107.11% | 106.67% |
0.00% | 240 | 106.67% | 106.67% |
0.00% | 241 | 106.22% | 104.92% |
0.00% | 242 | 105.79% | 104.92% |
0.00% | 243 | 105.35% | 104.92% |
0.00% | 244 | 104.92% | 104.92% |
0.00% | 245 | 104.49% | 103.23% |
0.00% | 246 | 104.07% | 103.23% |
0.00% | 247 | 103.64% | 103.23% |
0.00% | 248 | 103.23% | 103.23% |
0.00% | 249 | 102.81% | 101.59% |
0.00% | 250 | 102.40% | 101.59% |
0.00% | 251 | 101.99% | 101.59% |
0.00% | 252 | 101.59% | 101.59% |
0.00% | 253 | 101.19% | 100.00% |
0.00% | 254 | 100.79% | 100.00% |
0.00% | 255 | 100.39% | 100.00% |
0.00% | 256 | 100.00% | 100.00% |
表9、空间节省效果仿真结果表
由表9可知,使用本发明实施例提供的存储路由表的方法实施例二较本发明实施例提供的存储路由表的方法实施例一节省空间不小于26%。
以上为本发明实施例提供的存储路由表的方法实施例,与之对应,本发明提供了查找路由表的方法实施例。
本发明实施例提供的查找路由表的方法实施例一,是在路由表的下一级节点指针部分采用本发明实施例提供的存储路由表的方法实施例一存储的前提下进行的。
在本发明实施例提供的查找路由表的方法实施例一中,根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
读取查找到的根节点数据;
在所述根节点数据存在下一级节点指针时,使用所述查找到的根节点数据中的根节点哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
根据所述查找结果读取匹配项。
本发明实施例提供的查找路由表的方法实施例一流程如图9所示:
901、根据直接存储的比特长度,取待查IP地址进行直接查找,记录查找到的根节点数据。
开始查找时,根据存储时直接存储的Bit长度,使用相应Bit的IP地址进行直接查找。如:存储时,选择直接存储0-8Bit的匹配项,则使用待查IP地址的0-8Bit直接查找路由表的下一级节点指针部分。
902、检查查找到的根节点数据中是否存在下一级节点指针,是则进入905;否则进入903;
下一级节点指针若存在,则表示有更长前缀匹配项存在,需要继续查找;否则,表示没有更长前缀匹配项存在,没有子节点。
903、检查根节点数据中是否存在匹配项指针,是则根据匹配项指针获取Prefix Node地址,并保存在Prefix寄存器中,进入910;否则进入904。
假设步长是8,则最多需要255个bit记录一个节点的匹配项,而存储器的结构为128bit,加上其他须记录的信息,需要4个128bit来记录,但是如果节点中的匹配项很少,只用几个8Bit就可以记录全部的节点,这样的记录方式称为压缩模式(Compact),如果比较多需要4个128bit来表示,称为全模式(Full)。
在使用Compact方式记录时,匹配项指针直接指向Prefix Node的地址,保存该地址到Prefix寄存器;在使用Full方式记录时,由于可能分为多个部分来记录,因此可根据偏移的规则和匹配项指针得到Prefix Node的地址,保存该地址到Prefix寄存器;
现以实例说明Full方式记录的情况以及偏移计算规则,例如,步长为8时,一个节点需要255个bit记录该节点的匹配项,而我们的结构是128bit的,再加上可能还需要记录一些其他的相关数据,因此通常使用4个128bit的匹配项编码存储空间纪录该节点的匹配项,255bit的数据分为4个部分来存储,4个存储空间可以使用2个Bit进行区分,每一个匹配项与4相除后剩余6Bit,其前2Bit可以作为偏移项,根据前2Bit选择匹配项编码存储空间进行存储,计算偏移时,使用前2Bit作为偏移地址,再加上查找到的“匹配项指针”得到Prefix Node的地址,例如10101101,即取10作为偏移地址。
904、返回缺省匹配项,流程结束。
匹配项指针若不存在,表示本级没有匹配项。
905、根据查找到的内容,读取下一级节点数据。
以查找到的“下一级节点指针”为基址,使用901中查找的哈希函数对下一级节点步长范围内的IP地址进行哈希,使用哈希结果作为偏移地址,读取下一级节点数据“哈希函数”“IP”“下一级节点指针”“匹配项指针”。
现举例说明使用哈希函数对下一级节点步长范围内的IP地址进行哈希,例如,步长为“8”的时候,对IP地址的9-16Bit进行哈希,步长为“16”时,对17-32Bit进行哈希,等等。
906、比对校验IP是否匹配,是则进入907;否则进入910;
比对905中读取到的用于校验的IP是否与被哈希的IP地址匹配,是则进入907;否则进入910。
907、根据读取到的匹配项指针得到Prefix Node的地址,并保存到Prefix寄存器;
在使用Compact方式记录时,匹配项指针直接指向Prefix Node的地址,保存该地址到Prefix寄存器;在使用Full方式记录时,由于可能分为多个部分来记录,因此可根据偏移的规则和匹配项指针得到Prefix Node的地址,保存该地址到Prefix寄存器。
908、检查上一级最长前缀匹配(PLPM,Parent Longest Prefix match)标志,通过PLPM标志判断经过的节点在本级的路径上是否有匹配项,是则进入909;否则返回905,继续读取下一级节点数据;
909、复制Prefix寄存器内容到最长前缀匹配项(Longest Prefix)寄存器;然后返回905,继续读取下一级节点数据。
Longest Prefix寄存器用于保存查到目前为止最长前缀匹配存在的Prefix节点的指针。
910、根据Prefix寄存器的值读取Prefix Node。
911、检查Prefix Node中是否有匹配项,是则进入912;否则进入913。
912、返回PrefixNode中的匹配项,查找结束;
Prefix Node中如果存在匹配项,则直接返回Prefix Node中匹配项,查找结束。
913、返回Longest Prefix寄存器指向的Prefix Node中的匹配项,查找结束;
Prefix Node中如果不存在匹配项,返回Longest Prefix寄存器指向的PrefixNode中的匹配项,查找结束。
采用本发明实施例提供的查找路由表的方法实施例一后,存储路由表时,不再需要为全部的表项都分配存储“下一级节点指针”的空间,而是将下一级节点指针部分经过哈希后再存储,由于哈希得到的结果长度变短,存储时占用空间也大大减少,有效节省了路由表占用空间。
例如哈希前步长为“8”,哈希后步长为“3”,一个节点占用的空间就由256Bit变成8Bit,包含多个节点的整张路由表节省的空间就更多了。
本发明实施例提供的查找路由表的方法实施例二,是在路由表的下一级节点指针部分采用本发明实施例提供的存储路由表的方法实施例二存储的前提下进行的。
在本发明实施例提供的查找路由表的方法实施例二中,根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
读取查找到的根节点数据;
根据待查网际协议地址的分段标志查找所述查找到的根节点数据,获取所述分段标志对应的根节点分段数据;
在所述根节点分段数据中存在下一级节点指针时,使用所述根节点分段数据中的哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
根据所述查找结果读取匹配项。
在所述根节点分段数据中不存在下一级节点指针时,检查所述根节点数据是否存在匹配项指针,是则根据所述根节点数据中的匹配项指针读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项;否则返回缺省匹配项。
所述读取匹配项编码之后,在所述匹配项编码中没有匹配项时,返回所述最长前缀匹配项寄存器指向的匹配项编码中的匹配项。
其中,所述根据所述查找结果读取匹配项包括:
读取查找到的下一级节点数据,读取匹配项指针、网际协议地址;根据待查网际协议地址的分段标志查找所述查找到的下一级节点数据,读取所述分段标志对应的下一级节点分段哈希函数、下一级节点分段的下一级节点指针;
在待查步长范围内实际网际协议地址与所述查找到的网际协议地址相匹配时,根据所述下一级节点数据中的匹配项指针获取匹配项编码地址,并保存在匹配项寄存器中;
在经过的节点在本级的路径上有匹配项时,复制匹配项寄存器内容至最长前缀匹配项寄存器;使用所述下一级节点分段哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用查找到的所述下一级节点分段的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;返回读取查找到的下一级节点数据,读取匹配项指针、网际协议地址的步骤;
在经过的节点在本级的路径上没有匹配项时,使用所述下一级节点分段哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用查找到的所述下一级节点分段的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;返回读取查找到的下一级节点数据,读取匹配项指针、网际协议地址的步骤;
在待查步长范围内实际网际协议地址与所述查找到的网际协议地址不相匹配时,根据所述匹配项寄存器保存的匹配项编码地址读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项。
应用本发明实施例提供的查找路由表的方法实施例二后,和本发明实施例提供的查找路由表的方法实施例一相比,存储路由表时,每一个节点对应的具有下一级节点指针的匹配项都分成若干段,然后再挑选使用本发明实施例提供的选择哈希函数的方法选择哈希函数,进行哈希存储,有效节约了存储空间。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括如下步骤:
一种选择哈希函数的方法,包括:
输入待哈希数据;使用当前备选哈希函数对所述待哈希数据进行哈希;将所述哈希的结果进行解码,所述解码结果只有一位为“1”;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希,直到进行所述累加时,没有进位产生,则选择所述当前备选哈希函数作为正式使用的哈希函数。
一种存储路由表的方法,包括:
将所述路由表分为下一级节点指针部分和匹配项部分保存;
在所述下一级节点指针部分保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点哈希函数、根节点的下一级节点指针、根节点的匹配项指针,所述根节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针、第一级节点的匹配项指针,所述第一级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
一种存储路由表的方法,包括:
将所述路由表分为下一级节点指针部分和匹配项部分保存;
在所述下一级节点指针部分保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点分段哈希函数、根节点分段的下一级节点指针、根节点的匹配项指针;所述根节点分段为将根节点匹配项的下一级节点分为两段以上的分段,所述根节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第一级节点步长范围内网际协议地址选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点分段哈希函数对所述匹配项根节点分段内的第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述根节点分段内的第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点分段哈希函数、第一级节点分段的下一级节点指针、第一级节点的匹配项指针,所述第一级节点分段为将第一级节点匹配项的下一级节点分为两段以上的分段,所述第一级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第二级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
一种查找路由表的方法,包括:
根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
读取查找到的根节点数据;
在所述根节点数据存在下一级节点指针时,使用所述查找到的根节点数据中的根节点哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
根据所述查找结果读取匹配项。
一种查找路由表的方法,包括:
根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
读取查找到的根节点数据;
根据待查网际协议地址的分段标志查找所述查找到的根节点数据,获取所述分段标志对应的根节点分段数据;
在所述根节点分段数据中存在下一级节点指针时,使用所述根节点分段数据中的哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
根据所述查找结果读取匹配项。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
本发明实施例提供的存储路由表的装置实施例一,包括:
第一匹配项单元,用于保存路由表的匹配项部分;
第一下一级节点指针单元,用于保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点哈希函数、根节点的下一级节点指针、根节点的匹配项指针,所述根节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针、第一级节点的匹配项指针,所述第一级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
其中,所述第一下一级节点指针单元还用于:
保存第N级节点数据;
使用所述匹配项的第N-1级节点的哈希函数对第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点的下一级节点指针指向的位置存储所述第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点的哈希函数、第N级节点的下一级节点指针、第N级节点的匹配项指针,所述第N级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
本发明实施例提供的存储路由表的装置实施例二,包括:
第二匹配项单元,用于保存路由表的匹配项部分;
第二下一级节点指针单元,用于保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点分段哈希函数、根节点分段的下一级节点指针、根节点的匹配项指针;所述根节点分段为将根节点匹配项的下一级节点分为两段以上的分段,所述根节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第一级节点步长范围内网际协议地址选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点分段哈希函数对所述匹配项根节点分段内的第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述根节点分段内的第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点分段哈希函数、第一级节点分段的下一级节点指针、第一级节点的匹配项指针,所述第一级节点分段为将第一级节点匹配项的下一级节点分为两段以上的分段,所述第一级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第二级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
其中,所述第二下一级节点指针单元还用于:
保存第N级节点数据;
使用所述匹配项分段的第N-1级节点的哈希函数对第N-1级节点分段内第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点分段的下一级节点指针指向的位置存储所述第N-1级节点分段内第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点分段哈希函数、第N级节点分段的下一级节点指针、第N级节点的匹配项指针,所述第N级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第N+1级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
本发明实施例提供的查找路由表的装置实施例一,包括:
第一直接查找单元,用于根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
第一读取单元,用于读取所述第一直接查找单元查找到的根节点数据;
第一哈希查找单元,用于在所述第一读取单元查找到的根节点数据存在下一级节点指针时,使用所述根节点数据中的根节点哈希函数对下一级节点的待查步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
第二读取单元,用于根据所述第一哈希查找单元查找下一级节点数据的查找结果读取匹配项。
进一步,所述装置还包括:
第一匹配项单元,用于在所述第一读取单元查找到的根节点数据中不存在下一级节点指针时,检查所述根节点数据是否存在匹配项指针,是则根据所述根节点数据中的匹配项指针读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项;否则返回缺省匹配项。
其中,所述第二读取单元包括:
第一下一级节点读取单元,用于读取第一哈希查找单元查找到的下一级节点数据中的哈希函数、下一级节点指针、匹配项指针、网际协议地址;
第一匹配单元,用于在待查步长范围内实际网际协议地址,与所述第一下一级节点读取单元读取到的网际协议地址相匹配时,根据所述下一级节点数据中的匹配项指针获取匹配项编码地址,并保存在匹配项寄存器中;
第二哈希查找单元,用于在经过的节点在本级的路径上有匹配项时,复制匹配项寄存器内容至最长前缀匹配项寄存器;使用所述第一下一级节点读取单元读取到的所述哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述第一下一级节点读取单元读取到的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;控制所述第一下一级节点读取单元继续读取查找到的下一级节点数据中的哈希函数、下一级节点指针、匹配项指针的步骤;
第三哈希查找单元,用于在经过的节点在本级的路径上没有匹配项时,使用所述第一下一级节点读取单元读取到的哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述第一下一级节点读取单元读取到的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;控制所述第一下一级节点读取单元读取查找到的下一级节点数据中的哈希函数、下一级节点指针、匹配项指针的步骤;
第二匹配单元,用于在待查步长范围内实际网际协议地址,与所述第一下一级节点读取单元读取到的网际协议地址不相匹配时,根据所述匹配项寄存器保存的匹配项编码地址读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项。
进一步,所述装置还包括:
第二匹配项单元,用于在所述第一匹配项单元或第二匹配单元读取匹配项编码之后,所述匹配项编码中没有匹配项时,返回所述最长前缀匹配项寄存器指向的匹配项编码中的匹配项。
本发明实施例提供的查找路由表的装置实施例二,包括:
第二直接查找单元,用于根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
分段数据获取单元,用于读取所述第二直接查找单元查找到的根节点数据;根据待查网际协议地址的分段标志查找所述查找到的根节点数据,获取所述分段标志对应的根节点分段数据;
第四哈希查找单元,在所述分段数据获取单元获取的根节点分段数据中存在下一级节点指针时,使用所述根节点分段数据中的哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
第三读取单元,用于根据所述第四哈希查找单元查找下一级节点数据的查找结果读取匹配项。
进一步,所述装置还包括:
第三匹配项单元,用于在所述第二直接查找单元查找到的根节点分段数据中不存在下一级节点指针时,检查所述根节点数据是否存在匹配项指针,是则根据所述根节点数据中的匹配项指针读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项;否则返回缺省匹配项。
其中,所述第三读取单元包括:
第二下一级节点读取单元,用于读取所述第四哈希查找单元查找到的下一级节点数据,读取匹配项指针、网际协议地址;根据待查网际协议地址的分段标志查找所述查找到的下一级节点数据,读取所述分段标志对应的下一级节点分段哈希函数、下一级节点分段的下一级节点指针;
第三匹配单元,用于在待查步长范围内实际网际协议地址,与所述第二下一级节点读取单元读取到的网际协议地址相匹配时,根据所述下一级节点数据中的匹配项指针获取匹配项编码地址,并保存在匹配项寄存器中;
第五哈希查找单元,用于在经过的节点在本级的路径上有匹配项时,复制匹配项寄存器内容至最长前缀匹配项寄存器;使用所述第二下一级节点读取单元读取到的下一级节点分段哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述第二下一级节点读取单元读取到的下一级节点分段的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;控制所述第二下一级节点读取单元继续读取查找到的下一级节点数据的步骤;
第六哈希查找单元,用于在在经过的节点在本级的路径上没有匹配项时,使用所述第一下一级节点读取单元读取到的下一级节点分段哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述第一下一级节点读取单元读取到的下一级节点分段的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;控制所述第二下一级节点读取单元读取查找到的下一级节点数据的步骤;
第四匹配单元,用于在待查步长范围内实际网际协议地址,与所述第一下一级节点读取单元读取到的到的网际协议地址不相匹配时,根据所述匹配项寄存器保存的匹配项编码地址读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项。
进一步,所述装置还包括:
第四匹配项单元,用于在所述第三匹配项单元或第四匹配单元读取匹配项编码之后,所述匹配项编码中没有匹配项时,返回所述最长前缀匹配项寄存器指向的匹配项编码中的匹配项。
本发明实施例提供的存储路由表的装置实施例、查找路由表的装置实施例的具体运作方式,可参考上文描述的本发明实施例提供的存储、查找路由表的方法实施例,在此不再详细描述。
以上对本发明实施例所提供的一种本发明实施例提供的选择哈希函数的方法、存储及查找路由表的方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (16)
1.一种存储路由表的方法,其特征在于,包括:
将所述路由表分为下一级节点指针部分和匹配项部分保存;
在所述下一级节点指针部分保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点哈希函数、根节点的下一级节点指针、根节点的匹配项指针,所述根节点哈希函数为使用选择哈希函数的方法选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针、第一级节点的匹配项指针,所述第一级节点哈希函数为使用所述选择哈希函数的方法选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分;
所述选择哈希函数的方法包括:
输入待哈希数据;使用当前备选哈希函数对所述待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希,直到进行所述累加时,没有进位产生,则选择所述没有进位产生的当前备选哈希函数作为正式使用的哈希函数。
2.如权利要求1所述的存储路由表的方法,其特征在于,所述方法还包括:
在所述下一级节点指针部分保存第N级节点数据;
使用所述匹配项的第N-1级节点的哈希函数对第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点的下一级节点指针指向的位置存储所述第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点的哈希函数、第N级节点的下一级节点指针、第N级节点的匹配项指针,所述第N级节点哈希函数为使用所述选择哈希函数的方法选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
3.如权利要求1或2所述的存储路由表的方法,其特征在于,所述步长范围内网际协议地址包括:
步长范围内部分网际协议地址、或全部网际协议地址。
4.根据权利要求1或2所述的存储路由表的方法,其特征在于,所述输入待哈希数据包括:
并行输入待哈希数据;
或,串行输入待哈希数据;
或,并行加串行输入待哈希数据。
5.根据权利要求1或2所述的存储路由表的方法,其特征在于,所述使用当前备选哈希函数对所述待哈希数据进行哈希为:
使用当前备选哈希函数的有效位对所述待哈希数据进行筛选。
6.根据权利要求1或2所述的存储路由表的方法,其特征在于,所述使用下一个备选哈希函数替代当前备选哈希函数为:
随机选择下一个备选哈希函数替代当前备选哈希函数;
或,按照从大到小的顺序选择下一个备选哈希函数替代当前备选哈希函数;
或按照有效位从少到多的顺序选择下一个备选哈希函数替代当前备选哈希函数。
7.一种存储路由表的方法,其特征在于,包括:
将所述路由表分为下一级节点指针部分和匹配项部分保存;
在所述下一级节点指针部分保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点分段哈希函数、根节点分段的下一级节点指针、根节点的匹配项指针;所述根节点分段为将根节点匹配项的下一级节点分为两段以上的分段,所述根节点分段哈希函数为使用选择哈希函数的方法,为所述匹配项根节点分段内的第一级节点步长范围内网际协议地址选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点分段哈希函数对所述匹配项根节点分段内的第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点分段的下一级节点指针指向的位置存储所述根节点分段内的第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点分段哈希函数、第一级节点分段的下一级节点指针、第一级节点的匹配项指针,所述第一级节点分段为将第一级节点匹配项的下一级节点分为两段以上的分段,所述第一级节点分段哈希函数为使用所述选择哈希函数的方法,为所述匹配项第一级节点分段内的第二级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分;
所述选择哈希函数的方法包括:
输入待哈希数据;使用当前备选哈希函数对所述待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希,直到进行所述累加时,没有进位产生,则选择所述没有进位产生的当前备选哈希函数作为正式使用的哈希函数。
8.如权利要求7所述的存储路由表的方法,其特征在于,所述方法还包括:
在所述下一级节点指针部分保存第N级节点数据;
使用所述匹配项第N-1级节点分段哈希函数对第N-1级节点分段内第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点分段的下一级节点指针指向的位置存储所述第N-1级节点分段内第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点分段哈希函数、第N级节点分段的下一级节点指针、第N级节点的匹配项指针,所述第N级节点分段哈希函数为使用所述选择哈希函数的方法,为所述匹配项第N级节点分段内的第N+1级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
9.如权利要求7或8所述的存储路由表的方法,其特征在于,所述步长范围内网际协议地址包括:
步长范围内部分网际协议地址、或全部网际协议地址。
10.根据权利要求7或8所述的存储路由表方法,其特征在于,所述输入待哈希数据包括:
并行输入待哈希数据;
或,串行输入待哈希数据;
或,并行加串行输入待哈希数据。
11.根据权利要求7或8所述的存储路由表的方法,其特征在于,所述使用当前备选哈希函数对所述待哈希数据进行哈希为:
使用当前备选哈希函数的有效位对所述待哈希数据进行筛选。
12.根据权利要求7或8所述的存储路由表的方法,其特征在于,所述使用下一个备选哈希函数替代当前备选哈希函数为:
随机选择下一个备选哈希函数替代当前备选哈希函数;
或,按照从大到小的顺序选择下一个备选哈希函数替代当前备选哈希函数;
或按照有效位从少到多的顺序选择下一个备选哈希函数替代当前备选哈希函数。
13.一种存储路由表的装置,其特征在于,包括:
第一匹配项单元,用于保存路由表的匹配项部分;
第一下一级节点指针单元,用于保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点哈希函数、根节点的下一级节点指针、根节点的匹配项指针,所述根节点哈希函数为使用选择哈希函数的方法选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针、第一级节点的匹配项指针,所述第一级节点哈希函数为使用所述选择哈希函数的方法选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分;
所述选择哈希函数的方法包括:
输入待哈希数据;使用当前备选哈希函数对所述待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希,直到进行所述累加时,没有进位产生,则选择所述没有进位产生的当前备选哈希函数作为正式使用的哈希函数。
14.如权利要求13所述的存储路由表的装置,其特征在于,所述第一下一级节点指针单元还用于:
保存第N级节点数据;
使用所述匹配项的第N-1级节点的哈希函数对第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点的下一级节点指针指向的位置存储所述第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点的哈希函数、第N级节点的下一级节点指针、第N级节点的匹配项指针,所述第N级节点哈希函数为使用所述选择哈希函数的方法选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
15.一种存储路由表的装置,其特征在于,包括:
第二匹配项单元,用于保存路由表的匹配项部分;
第二下一级节点指针单元,用于保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点分段哈希函数、根节点分段的下一级节点指针、根节点的匹配项指针;所述根节点分段为将根节点匹配项的下一级节点分为两段以上的分段,所述根节点分段哈希函数为使用选择哈希函数的方法,为所述匹配项根节点分段内的第一级节点步长范围内网际协议地址选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点分段哈希函数对所述匹配项根节点分段内的第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点分段的下一级节点指针指向的位置存储所述根节点分段内的第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点分段哈希函数、第一级节点分段的下一级节点指针、第一级节点的匹配项指针,所述第一级节点分段为将第一级节点匹配项的下一级节点分为两段以上的分段,所述第一级节点分段哈希函数为使用所述选择哈希函数的方法,为所述匹配项第一级节点分段内的第二级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分;
所述选择哈希函数的方法包括:
输入待哈希数据;使用当前备选哈希函数对所述待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希,直到进行所述累加时,没有进位产生,则选择所述没有进位产生的当前备选哈希函数作为正式使用的哈希函数。
16.如权利要求15所述的存储路由表的装置,其特征在于,所述第二下一级节点指针单元还用于:
保存第N级节点数据;
使用所述匹配项的第N-1级节点分段哈希函数对第N-1级节点分段内第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点分段的下一级节点指针指向的位置存储所述第N-1级节点分段内第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点分段哈希函数、第N级节点分段的下一级节点指针、第N级节点的匹配项指针,所述第N级节点分段哈希函数为使用所述选择哈希函数的方法,为所述匹配项第N级节点分段内的第N+1级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810213963A CN101667958B (zh) | 2008-09-01 | 2008-09-01 | 选择哈希函数的方法、存储及查找路由表的方法及装置 |
US12/511,558 US8325721B2 (en) | 2008-09-01 | 2009-07-29 | Method for selecting hash function, method for storing and searching routing table and devices thereof |
EP09167458.0A EP2159708B1 (en) | 2008-09-01 | 2009-08-07 | Method for selecting hash function, method for storing and searching routing table and devices thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810213963A CN101667958B (zh) | 2008-09-01 | 2008-09-01 | 选择哈希函数的方法、存储及查找路由表的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101667958A CN101667958A (zh) | 2010-03-10 |
CN101667958B true CN101667958B (zh) | 2012-08-29 |
Family
ID=41138819
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810213963A Expired - Fee Related CN101667958B (zh) | 2008-09-01 | 2008-09-01 | 选择哈希函数的方法、存储及查找路由表的方法及装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8325721B2 (zh) |
EP (1) | EP2159708B1 (zh) |
CN (1) | CN101667958B (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9268779B2 (en) * | 2009-01-28 | 2016-02-23 | Mckesson Financial Holdings | Methods, computer program products, and apparatuses for dispersing content items |
US8386749B2 (en) | 2010-03-16 | 2013-02-26 | Advanced Micro Devices, Inc. | Address mapping in virtualized processing system |
CN102609509B (zh) * | 2010-04-26 | 2015-09-30 | 华为技术有限公司 | 哈希数据处理方法和装置 |
US10069720B2 (en) * | 2011-06-06 | 2018-09-04 | Alcatel Lucent | Routing by resolution |
US9729669B2 (en) * | 2012-03-15 | 2017-08-08 | Alcatel Lucent | Method and system for fast and large-scale longest prefix matching |
CN102739526B (zh) * | 2012-06-13 | 2015-02-25 | 烽火通信科技股份有限公司 | 一种高效分布式路由表的实现方法 |
US8392428B1 (en) * | 2012-09-12 | 2013-03-05 | DSSD, Inc. | Method and system for hash fragment representation |
GB2508343A (en) | 2012-11-28 | 2014-06-04 | Ibm | Replacing a hash function if a second hash function is more effective |
US9172743B2 (en) * | 2012-12-31 | 2015-10-27 | Futurewei Technologies, Inc. | Scalable storage systems with longest prefix matching switches |
US10110492B2 (en) | 2013-04-11 | 2018-10-23 | Marvell Israel (M.I.S.L.) Ltd. | Exact match lookup with variable key sizes |
US20160241474A1 (en) * | 2015-02-12 | 2016-08-18 | Ren Wang | Technologies for modular forwarding table scalability |
CN104917852B (zh) * | 2015-05-29 | 2019-01-18 | 中国科学院信息工程研究所 | 一种针对IPv6地址的数据快速处理方法 |
US9979648B1 (en) * | 2015-12-28 | 2018-05-22 | Amazon Technologies, Inc. | Increasing entropy across routing table segments |
US10462059B2 (en) | 2016-10-19 | 2019-10-29 | Intel Corporation | Hash table entries insertion method and apparatus using virtual buckets |
US10394784B2 (en) | 2016-12-22 | 2019-08-27 | Intel Corporation | Technologies for management of lookup tables |
WO2018120109A1 (zh) * | 2016-12-30 | 2018-07-05 | 华为技术有限公司 | 数据处理的方法和装置 |
US10783153B2 (en) * | 2017-06-30 | 2020-09-22 | Cisco Technology, Inc. | Efficient internet protocol prefix match support on No-SQL and/or non-relational databases |
CN109995659B (zh) * | 2017-12-29 | 2022-03-01 | 阿里巴巴集团控股有限公司 | 一种网络通信方法及装置 |
CN109582674B (zh) * | 2018-11-28 | 2023-12-22 | 亚信科技(南京)有限公司 | 一种数据存储方法及系统 |
US11636224B2 (en) * | 2019-12-19 | 2023-04-25 | Micro Focus Llc | Generating hash values for input strings |
US11271898B2 (en) * | 2020-01-27 | 2022-03-08 | Dell Products L.P. | Hash collision prevention system |
CN113489649B (zh) * | 2021-06-29 | 2022-07-22 | 新华三信息安全技术有限公司 | 一种表项存储方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5032987A (en) * | 1988-08-04 | 1991-07-16 | Digital Equipment Corporation | System with a plurality of hash tables each using different adaptive hashing functions |
EP0594196A1 (en) * | 1992-10-22 | 1994-04-27 | Digital Equipment Corporation | Address lookup in packet data communications link, using hashing and content-addressable memory |
CN1964311A (zh) * | 2005-11-10 | 2007-05-16 | 中国科学院计算技术研究所 | IPv6路由表快速查找和更新的方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5920900A (en) * | 1996-12-30 | 1999-07-06 | Cabletron Systems, Inc. | Hash-based translation method and apparatus with multiple level collision resolution |
US6119171A (en) * | 1998-01-29 | 2000-09-12 | Ip Dynamics, Inc. | Domain name routing |
KR100699470B1 (ko) * | 2000-09-27 | 2007-03-26 | 삼성전자주식회사 | 멀티레이어 패킷 처리 장치 |
US6941417B1 (en) * | 2000-12-15 | 2005-09-06 | Shahram Abdollahi-Alibeik | High-speed low-power CAM-based search engine |
US7251707B1 (en) * | 2004-02-06 | 2007-07-31 | Netlogic Microsystems, Inc. | Content based content addressable memory block enabling using search key |
-
2008
- 2008-09-01 CN CN200810213963A patent/CN101667958B/zh not_active Expired - Fee Related
-
2009
- 2009-07-29 US US12/511,558 patent/US8325721B2/en active Active
- 2009-08-07 EP EP09167458.0A patent/EP2159708B1/en not_active Not-in-force
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5032987A (en) * | 1988-08-04 | 1991-07-16 | Digital Equipment Corporation | System with a plurality of hash tables each using different adaptive hashing functions |
EP0594196A1 (en) * | 1992-10-22 | 1994-04-27 | Digital Equipment Corporation | Address lookup in packet data communications link, using hashing and content-addressable memory |
CN1964311A (zh) * | 2005-11-10 | 2007-05-16 | 中国科学院计算技术研究所 | IPv6路由表快速查找和更新的方法 |
Also Published As
Publication number | Publication date |
---|---|
US20100058027A1 (en) | 2010-03-04 |
EP2159708B1 (en) | 2013-10-16 |
US8325721B2 (en) | 2012-12-04 |
CN101667958A (zh) | 2010-03-10 |
EP2159708A1 (en) | 2010-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101667958B (zh) | 选择哈希函数的方法、存储及查找路由表的方法及装置 | |
CN101621502A (zh) | 存储、查找路由表的方法及装置 | |
CN101577662B (zh) | 一种基于树形数据结构的最长前缀匹配方法和装置 | |
US8856203B1 (en) | System and method for algorithmic TCAM packet classification | |
US9235651B2 (en) | Data retrieval apparatus, data storage method and data retrieval method | |
US8295286B2 (en) | Apparatus and method using hashing for efficiently implementing an IP lookup solution in hardware | |
CN101604337B (zh) | 一种哈希表项存储、查找装置及方法 | |
EP2040184B1 (en) | Database and database processing methods | |
CN102377664B (zh) | 一种基于tcam的区域匹配装置和方法 | |
CN101141389B (zh) | 增强多位Trie树查找方法和装置 | |
JP3823089B2 (ja) | 固定長データ検索装置、及び固定長データ検索方法、及びコンピュータプログラム、並びにコンピュータ読み取り可能な記録媒体 | |
US20120137060A1 (en) | Multi-stage TCAM search | |
CN102333036B (zh) | 一种实现高速路由查找的方法和系统 | |
US8103772B2 (en) | Cluster extension in distributed systems using tree method | |
CN108134739B (zh) | 一种基于索引特里树的路由查找方法及装置 | |
TW200401206A (en) | Enhanced multiway radix tree and related methods | |
US8499078B2 (en) | Address generation in distributed systems using tree method | |
CN113139100B (zh) | 一种网络流量实时索引方法及系统 | |
US20050001744A1 (en) | Block programmable priority encoder in a CAM | |
CN109889205A (zh) | 编码方法及系统、解码方法及系统、编解码方法及系统 | |
US9292549B2 (en) | Method and system for index serialization | |
CN102597973A (zh) | 用于改善最长前缀匹配的可扩展性的方法和设备 | |
CN102609509A (zh) | 哈希数据处理方法和装置 | |
CN107798117B (zh) | 一种数据存储与读取的方法和装置 | |
CN105389394A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120829 |
|
CF01 | Termination of patent right due to non-payment of annual fee |