CN101667958A - 选择哈希函数的方法、存储及查找路由表的方法及装置 - Google Patents

选择哈希函数的方法、存储及查找路由表的方法及装置 Download PDF

Info

Publication number
CN101667958A
CN101667958A CN200810213963A CN200810213963A CN101667958A CN 101667958 A CN101667958 A CN 101667958A CN 200810213963 A CN200810213963 A CN 200810213963A CN 200810213963 A CN200810213963 A CN 200810213963A CN 101667958 A CN101667958 A CN 101667958A
Authority
CN
China
Prior art keywords
node
occurrence
next stage
hash
hash function
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.)
Granted
Application number
CN200810213963A
Other languages
English (en)
Other versions
CN101667958B (zh
Inventor
龚钧
詹翀
陈洪飞
胡睿
张健
赵鸿翔
苏皓
王小忠
孙团会
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN200810213963A priority Critical patent/CN101667958B/zh
Priority to US12/511,558 priority patent/US8325721B2/en
Priority to EP09167458.0A priority patent/EP2159708B1/en
Publication of CN101667958A publication Critical patent/CN101667958A/zh
Application granted granted Critical
Publication of CN101667958B publication Critical patent/CN101667958B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/54Organization of routing tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/325Hash tables
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing 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所示:
Figure A20081021396300161
表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所示:
Figure A20081021396300181
表4、存入“P6”的节点结构
“P7”的值为“11101*”,“P8”的值为“111001*”,其前3位值相同,都是“111”,因此可以为“P7”“P8”建立一个下一级节点,在根节点“111”的“下一级节点指针”一栏存入新建立的下一级节点指针,该新建立的下一级节点中,以“01”开头的“010”“011”可与“P7”匹配,“001”可与“P8”匹配,存入“P7”“P8”的节点结构如表5所示:
Figure A20081021396300182
表5、存入“P7”“P8”的节点结构
“P9”的值为“1000011*”,有效值为7位,是节点步长“3”的2倍多,因此在根节点下一级节点的基础上还需要再建立一级新的节点,建立时,看现有的节点有没有可以与其前6位相匹配的项,若有则将新建立的节点指针填入该项“下一级节点指针”一栏,若无则在根节点与其前3位相匹配项的“下一级节点指针”一栏填入新建立的节点指针,本例中,表4所示存入“P6”的节点“001”可与“P9”前6位匹配,因此在该项的“下一级节点指针”一栏填入新建立的节点指针,新建立的项以“1”开头的表项都可以与“P9”匹配,存入“P9”的节点结构如表6所示:
Figure A20081021396300191
表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所示:
Figure A20081021396300311
表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所示:
Figure A20081021396300371
表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、返回Prefix Node中的匹配项,查找结束;
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 (33)

1、一种选择哈希函数的方法,其特征在于,包括:
输入待哈希数据;使用当前备选哈希函数对所述待哈希数据进行哈希;将所述哈希的结果进行解码;将所述解码结果进行累加,出现进位,则使用下一个备选哈希函数替代当前备选哈希函数,对所述待哈希数据进行哈希,直到进行所述累加时,没有进位产生,则选择所述没有进位产生的当前备选哈希函数作为正式使用的哈希函数。
2、如权利要求1所述的选择哈希函数的方法,其特征在于,所述输入待哈希数据包括:
并行输入待哈希数据;
或,串行输入待哈希数据;
或,并行加串行输入待哈希数据。
3、如权利要求1或2所述的选择哈希函数的方法,其特征在于,所述使用当前备选哈希函数对所述待哈希数据进行哈希为:
使用当前备选哈希函数的有效位对所述待哈希数据进行筛选。
4、如权利要求3所述的选择哈希函数的方法,其特征在于,所述使用下一个备选哈希函数替代当前备选哈希函数为:
随机选择下一个备选哈希函数替代当前备选哈希函数;
或,按照从大到小的顺序选择下一个备选哈希函数替代当前备选哈希函数;
或按照从有效位从少到多的顺序选择下一个备选哈希函数替代当前备选哈希函数。
5、一种选择哈希函数的装置,其特征在于,包括:
备选哈希函数单元,用于发送当前备选哈希函数;
哈希单元,用于接收输入的待哈希数据;使用备选哈希函数单元发送的当前备选哈希函数对所述待哈希数据进行哈希;
解码器,用于将所述哈希单元哈希的结果进行解码;
累加器,用于将所述解码器解码的结果进行累加,出现进位,则通知所述备选哈希函数单元使用下一个备选哈希函数替代当前备选哈希函数;没有进位产生,则通知所述备选哈希函数单元选择所述没有进位产生的当前备选哈希函数作为正式使用的哈希函数。
6、如权利要求5所述的选择哈希函数的装置,其特征在于,所述装置包括至少两个哈希单元和至少两个解码器;所述至少两个哈希单元和所述至少两个解码器为一一对应关系,所述至少两个解码器在对对应哈希单元哈希的结果进行解码后,将所述解码结果发送到所述累加器。
7、如权利要求5所述的选择哈希函数的装置,其特征在于,所述哈希单元包括:
选路器,用于使用当前备选哈希函数的有效位对所述待哈希数据进行筛选,得到所述哈希的结果。
8、一种存储路由表的方法,其特征在于,包括:
将所述路由表分为下一级节点指针部分和匹配项部分保存;
在所述下一级节点指针部分保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点哈希函数、根节点的下一级节点指针、根节点的匹配项指针,所述根节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针、第一级节点的匹配项指针,所述第一级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
9、如权利要求8所述的存储路由表的方法,其特征在于,所述方法还包括:
在所述下一级节点指针部分保存第N级节点数据;
使用所述匹配项的第N-1级节点的哈希函数对第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点的下一级节点指针指向的位置存储所述第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点的哈希函数、第N级节点的下一级节点指针、第N级节点的匹配项指针,所述第N级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
10、如权利要求8或9所述的存储路由表的方法,其特征在于,所述步长范围内网际协议地址包括:
步长范围内部分网际协议地址、或全部网际协议地址。
11、一种存储路由表的方法,其特征在于,包括:
将所述路由表分为下一级节点指针部分和匹配项部分保存;
在所述下一级节点指针部分保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点分段哈希函数、根节点分段的下一级节点指针、根节点的匹配项指针;所述根节点分段为将根节点匹配项的下一级节点分为两段以上的分段,所述根节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第一级节点步长范围内网际协议地址选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点分段哈希函数对所述匹配项根节点分段内的第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述根节点分段内的第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点分段哈希函数、第一级节点分段的下一级节点指针、第一级节点的匹配项指针,所述第一级节点分段为将第一级节点匹配项的下一级节点分为两段以上的分段,所述第一级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第二级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
12、如权利要求11所述的存储路由表的方法,其特征在于,所述方法还包括:
在所述下一级节点指针部分保存第N级节点数据;
使用所述匹配项分段的第N-1级节点的哈希函数对第N-1级节点分段内第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点分段的下一级节点指针指向的位置存储所述第N-1级节点分段内第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点分段哈希函数、第N级节点分段的下一级节点指针、第N级节点的匹配项指针,所述第N级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第N+1级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
13、如权利要求11或12所述的存储路由表的方法,其特征在于,所述步长范围内网际协议地址包括:
步长范围内部分网际协议地址、或全部网际协议地址。
14、一种查找路由表的方法,其特征在于,包括:
根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
读取查找到的根节点数据;
在所述根节点数据存在下一级节点指针时,使用所述查找到的根节点数据中的根节点哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
根据所述查找结果读取匹配项。
15、如权利要求14所述的查找路由表的方法,其特征在于,所述方法还包括:
在所述根节点数据中不存在下一级节点指针时,检查所述根节点数据是否存在匹配项指针,是则根据所述根节点数据中的匹配项指针读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项;否则返回缺省匹配项。
16、如权利要求14或15所述的查找路由表的方法,其特征在于,所述根据所述查找结果读取匹配项包括:
读取查找到的下一级节点数据中的哈希函数、下一级节点指针、匹配项指针、网际协议地址;
在待查步长范围内网际协议地址与所述查找到的网际协议地址相匹配时,根据所述下一级节点数据中的匹配项指针获取匹配项编码地址,并保存在匹配项寄存器中;
在经过的节点在本级的路径上有匹配项时,复制匹配项寄存器内容至最长前缀匹配项寄存器;使用查找到的所述哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用查找到的所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;返回读取查找到的下一级节点数据中的哈希函数、下一级节点指针、匹配项指针的步骤;
在经过的节点在本级的路径上没有匹配项时,使用查找到的哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;返回读取查找到的下一级节点数据中的哈希函数、下一级节点指针、匹配项指针的步骤;
在待查步长范围内网际协议地址与所述查找到的网际协议地址不相匹配时,根据所述匹配项寄存器保存的匹配项编码地址读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项。
17、如权利要求16所述的查找路由表的方法,其特征在于,所述方法还包括:
所述读取匹配项编码之后,在所述匹配项编码中没有匹配项时,返回所述最长前缀匹配项寄存器指向的匹配项编码中的匹配项。
18、一种查找路由表的方法,其特征在于,包括:
根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
读取查找到的根节点数据;
根据待查网际协议地址的分段标志查找所述查找到的根节点数据,获取所述分段标志对应的根节点分段数据;
在所述根节点分段数据中存在下一级节点指针时,使用所述根节点分段数据中的哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
根据所述查找结果读取匹配项。
19、如权利要求18所述的查找路由表的方法,其特征在于,所述方法还包括:
在所述根节点分段数据中不存在下一级节点指针时,检查所述根节点数据是否存在匹配项指针,是则根据所述根节点数据中的匹配项指针读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项;否则返回缺省匹配项。
20、如权利要求18或19所述的查找路由表的方法,其特征在于,所述根据所述查找结果读取匹配项包括:
读取查找到的下一级节点数据,读取匹配项指针、网际协议地址;根据待查网际协议地址的分段标志查找所述查找到的下一级节点数据,读取所述分段标志对应的下一级节点分段哈希函数、下一级节点分段的下一级节点指针;
在待查步长范围内网际协议地址与所述查找到的网际协议地址相匹配时,根据所述下一级节点数据中的匹配项指针获取匹配项编码地址,并保存在匹配项寄存器中;
在经过的节点在本级的路径上有匹配项时,复制匹配项寄存器内容至最长前缀匹配项寄存器;使用所述下一级节点分段哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用查找到的所述下一级节点分段的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;返回读取查找到的下一级节点数据,读取匹配项指针、网际协议地址的步骤;
在经过的节点在本级的路径上没有匹配项时,使用所述下一级节点分段哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用查找到的所述下一级节点分段的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;返回读取查找到的下一级节点数据,读取匹配项指针、网际协议地址的步骤;
在待查步长范围内网际协议地址与所述查找到的网际协议地址不相匹配时,根据所述匹配项寄存器保存的匹配项编码地址读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项。
21、如权利要求20所述的查找路由表的方法,其特征在于,所述方法还包括:
所述读取匹配项编码之后,在所述匹配项编码中没有匹配项时,返回所述最长前缀匹配项寄存器指向的匹配项编码中的匹配项。
22、一种存储路由表的装置,其特征在于,包括:
第一匹配项单元,用于保存路由表的匹配项部分;
第一下一级节点指针单元,用于保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点哈希函数、根节点的下一级节点指针、根节点的匹配项指针,所述根节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点哈希函数对所述匹配项第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点哈希函数、第一级节点的下一级节点指针、第一级节点的匹配项指针,所述第一级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
23、如权利要求22所述的存储路由表的装置,其特征在于,所述第一下一级节点指针单元还用于:
保存第N级节点数据;
使用所述匹配项的第N-1级节点的哈希函数对第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点的下一级节点指针指向的位置存储所述第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点的哈希函数、第N级节点的下一级节点指针、第N级节点的匹配项指针,所述第N级节点哈希函数为使用如权利要求1所述的选择哈希函数的方法选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
24、一种存储路由表的装置,其特征在于,包括:
第二匹配项单元,用于保存路由表的匹配项部分;
第二下一级节点指针单元,用于保存根节点数据和第一级节点数据;
其中,所述根节点数据包括具有下一级节点指针的根节点匹配项、所述匹配项的根节点分段哈希函数、根节点分段的下一级节点指针、根节点的匹配项指针;所述根节点分段为将根节点匹配项的下一级节点分为两段以上的分段,所述根节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第一级节点步长范围内网际协议地址选择的正式使用的哈希函数;所述根节点的匹配项指针指向所述匹配项部分;
使用所述匹配项的根节点分段哈希函数对所述匹配项根节点分段内的第一级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述根节点的下一级节点指针指向的位置存储所述根节点分段内的第一级节点数据;
所述第一级节点数据包括所述匹配项第一级节点步长范围内网际协议地址,所述匹配项的第一级节点分段哈希函数、第一级节点分段的下一级节点指针、第一级节点的匹配项指针,所述第一级节点分段为将第一级节点匹配项的下一级节点分为两段以上的分段,所述第一级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第二级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第一级节点的匹配项指针指向所述匹配项部分。
25、如权利要求24所述的存储路由表的装置,其特征在于,所述第二下一级节点指针单元还用于:
保存第N级节点数据;
使用所述匹配项分段的第N-1级节点的哈希函数对第N-1级节点分段内第N级节点步长范围内网际协议地址进行哈希,以哈希结果作为偏移地址在所述第N-1级节点分段的下一级节点指针指向的位置存储所述第N-1级节点分段内第N级节点数据;
所述第N级节点数据包括所述匹配项第N级节点步长范围内网际协议地址,所述匹配项的第N级节点分段哈希函数、第N级节点分段的下一级节点指针、第N级节点的匹配项指针,所述第N级节点分段哈希函数为使用如权利要求1所述的选择哈希函数的方法,为所述匹配项根节点分段内的第N+1级节点步长范围内网际协议地址选择的正式使用的哈希函数;
所述第N级节点的匹配项指针指向所述匹配项部分;
其中,所述N为大于等于2的整数。
26、一种查找路由表的装置,其特征在于,包括:
第一直接查找单元,用于根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
第一读取单元,用于读取所述第一直接查找单元查找到的根节点数据;
第一哈希查找单元,用于在所述第一读取单元查找到的根节点数据存在下一级节点指针时,使用所述根节点数据中的根节点哈希函数对下一级节点的待查步长范围内网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
第二读取单元,用于根据所述第一哈希查找单元查找下一级节点数据的查找结果读取匹配项。
27、如权利要求25或26所述的查找路由表的装置,其特征在于,所述装置还包括:
第一匹配项单元,用于在所述第一读取单元查找到的根节点数据中不存在下一级节点指针时,检查所述根节点数据是否存在匹配项指针,是则根据所述根节点数据中的匹配项指针读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项;否则返回缺省匹配项。
28、如权利要求27所述的查找路由表的装置,其特征在于,所述第二读取单元包括:
第一下一级节点读取单元,用于读取第一哈希查找单元查找到的下一级节点数据中的哈希函数、下一级节点指针、匹配项指针、网际协议地址;
第一匹配单元,用于在待查步长范围内网际协议地址,与所述第一下一级节点读取单元读取到的网际协议地址相匹配时,根据所述下一级节点数据中的匹配项指针获取匹配项编码地址,并保存在匹配项寄存器中;
第二哈希查找单元,用于在经过的节点在本级的路径上有匹配项时,复制匹配项寄存器内容至最长前缀匹配项寄存器;使用所述第一下一级节点读取单元读取到的所述哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述第一下一级节点读取单元读取到的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;控制所述第一下一级节点读取单元继续读取查找到的下一级节点数据中的哈希函数、下一级节点指针、匹配项指针的步骤;
第三哈希查找单元,用于在经过的节点在本级的路径上没有匹配项时,使用所述第一下一级节点读取单元读取到的哈希函数对下一级节点步长范围内网际协议地址进行哈希,使用所述第一下一级节点读取单元读取到的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;控制所述第一下一级节点读取单元读取查找到的下一级节点数据中的哈希函数、下一级节点指针、匹配项指针的步骤;
第二匹配单元,用于在待查步长范围内网际协议地址,与所述第一下一级节点读取单元读取到的网际协议地址不相匹配时,根据所述匹配项寄存器保存的匹配项编码地址读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项。
29、如权利要求28所述的查找路由表的装置,其特征在于,还包括:
第二匹配项单元,用于在所述第一匹配项单元或第二匹配单元读取匹配项编码之后,所述匹配项编码中没有匹配项时,返回所述最长前缀匹配项寄存器指向的匹配项编码中的匹配项。
30、一种查找路由表的装置,其特征在于,包括:
第二直接查找单元,用于根据存储路由表的下一级节点指针部分直接存储的长度,取待查网际协议地址进行直接查找;
分段数据获取单元,用于读取所述第二直接查找单元查找到的根节点数据;根据待查网际协议地址的分段标志查找所述查找到的根节点数据,获取所述分段标志对应的根节点分段数据;
第四哈希查找单元,在所述分段数据获取单元获取的根节点分段数据中存在下一级节点指针时,使用所述根节点分段数据中的哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述下一级节点指针及所述哈希的结果作为偏移,查找下一级节点数据;
第三读取单元,用于根据所述第四哈希查找单元查找下一级节点数据的查找结果读取匹配项。
31、如权利要求30所述的查找路由表的装置,其特征在于,所述装置还包括:
第三匹配项单元,用于在所述第二直接查找单元查找到的根节点分段数据中不存在下一级节点指针时,检查所述根节点数据是否存在匹配项指针,是则根据所述根节点数据中的匹配项指针读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项;否则返回缺省匹配项。
32、如权利要求30或31所述的查找路由表的装置,其特征在于,所述第三读取单元包括:
第二下一级节点读取单元,用于读取所述第四哈希查找单元查找到的下一级节点数据,读取匹配项指针、网际协议地址;根据待查网际协议地址的分段标志查找所述查找到的下一级节点数据,读取所述分段标志对应的下一级节点分段哈希函数、下一级节点分段的下一级节点指针;
第三匹配单元,用于在待查步长范围内网际协议地址,与所述第二下一级节点读取单元读取到的网际协议地址相匹配时,根据所述下一级节点数据中的匹配项指针获取匹配项编码地址,并保存在匹配项寄存器中;
第五哈希查找单元,用于在经过的节点在本级的路径上有匹配项时,复制匹配项寄存器内容至最长前缀匹配项寄存器;使用所述第二下一级节点读取单元读取到的下一级节点分段哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述第二下一级节点读取单元读取到的下一级节点分段的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;控制所述第二下一级节点读取单元继续读取查找到的下一级节点数据的步骤;
第六哈希查找单元,用于在在经过的节点在本级的路径上没有匹配项时,使用所述第一下一级节点读取单元读取到的下一级节点分段哈希函数对下一级节点步长范围内有效网际协议地址进行哈希,使用所述第一下一级节点读取单元读取到的下一级节点分段的下一节点指针及所述哈希的结果作为偏移,查找下一级节点数据;控制所述第二下一级节点读取单元读取查找到的下一级节点数据的步骤;
第四匹配单元,用于在待查步长范围内网际协议地址,与所述第一下一级节点读取单元读取到的到的网际协议地址不相匹配时,根据所述匹配项寄存器保存的匹配项编码地址读取匹配项编码,在所述匹配项编码中有匹配项时,返回所述匹配项编码中的匹配项。
33、如权利要求32所述的查找路由表的装置,其特征在于,还包括:
第四匹配项单元,用于在所述第三匹配项单元或第四匹配单元读取匹配项编码之后,所述匹配项编码中没有匹配项时,返回所述最长前缀匹配项寄存器指向的匹配项编码中的匹配项。
CN200810213963A 2008-09-01 2008-09-01 选择哈希函数的方法、存储及查找路由表的方法及装置 Expired - Fee Related CN101667958B (zh)

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 true CN101667958A (zh) 2010-03-10
CN101667958B 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)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102609509A (zh) * 2010-04-26 2012-07-25 华为技术有限公司 哈希数据处理方法和装置
CN102792286A (zh) * 2010-03-16 2012-11-21 超威半导体公司 虚拟化处理系统中的地址映射
CN104917852A (zh) * 2015-05-29 2015-09-16 中国科学院信息工程研究所 一种针对IPv6地址的数据快速处理方法
CN109076021A (zh) * 2016-12-30 2018-12-21 华为技术有限公司 数据处理的方法和装置
CN109582674A (zh) * 2018-11-28 2019-04-05 亚信科技(南京)有限公司 一种数据存储方法及系统

Families Citing this family (17)

* Cited by examiner, † Cited by third party
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
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
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
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 阿里巴巴集团控股有限公司 一种网络通信方法及装置
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 (4)

* Cited by examiner, † Cited by third party
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
WO1998029986A1 (en) * 1996-12-30 1998-07-09 Cabletron Systems, Inc. Hash-based translation method and apparatus with multiple level collision resolution
CN1964311A (zh) * 2005-11-10 2007-05-16 中国科学院计算技术研究所 IPv6路由表快速查找和更新的方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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

Patent Citations (4)

* Cited by examiner, † Cited by third party
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
WO1998029986A1 (en) * 1996-12-30 1998-07-09 Cabletron Systems, Inc. Hash-based translation method and apparatus with multiple level collision resolution
CN1964311A (zh) * 2005-11-10 2007-05-16 中国科学院计算技术研究所 IPv6路由表快速查找和更新的方法

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102792286A (zh) * 2010-03-16 2012-11-21 超威半导体公司 虚拟化处理系统中的地址映射
CN102792286B (zh) * 2010-03-16 2016-05-11 超威半导体公司 虚拟化处理系统中的地址映射
CN102609509A (zh) * 2010-04-26 2012-07-25 华为技术有限公司 哈希数据处理方法和装置
CN104917852A (zh) * 2015-05-29 2015-09-16 中国科学院信息工程研究所 一种针对IPv6地址的数据快速处理方法
CN104917852B (zh) * 2015-05-29 2019-01-18 中国科学院信息工程研究所 一种针对IPv6地址的数据快速处理方法
CN109076021A (zh) * 2016-12-30 2018-12-21 华为技术有限公司 数据处理的方法和装置
CN109076021B (zh) * 2016-12-30 2020-09-11 华为技术有限公司 数据处理的方法和装置
CN109582674A (zh) * 2018-11-28 2019-04-05 亚信科技(南京)有限公司 一种数据存储方法及系统
CN109582674B (zh) * 2018-11-28 2023-12-22 亚信科技(南京)有限公司 一种数据存储方法及系统

Also Published As

Publication number Publication date
US20100058027A1 (en) 2010-03-04
CN101667958B (zh) 2012-08-29
EP2159708B1 (en) 2013-10-16
US8325721B2 (en) 2012-12-04
EP2159708A1 (en) 2010-03-03

Similar Documents

Publication Publication Date Title
CN101667958B (zh) 选择哈希函数的方法、存储及查找路由表的方法及装置
CN101621502A (zh) 存储、查找路由表的方法及装置
US8856203B1 (en) System and method for algorithmic TCAM packet classification
CN102377664B (zh) 一种基于tcam的区域匹配装置和方法
CN101577662B (zh) 一种基于树形数据结构的最长前缀匹配方法和装置
US8295286B2 (en) Apparatus and method using hashing for efficiently implementing an IP lookup solution in hardware
CN101141389B (zh) 增强多位Trie树查找方法和装置
CN101604337B (zh) 一种哈希表项存储、查找装置及方法
US20120137060A1 (en) Multi-stage TCAM search
US8010557B2 (en) Retrieving method for fixed length data
US8103772B2 (en) Cluster extension in distributed systems using tree method
US7188211B2 (en) Block programmable priority encoder in a CAM
JP2004229163A (ja) 固定長データ検索装置、及び固定長データ検索方法、及びコンピュータプログラム、並びにコンピュータ読み取り可能な記録媒体
CN108134739B (zh) 一种基于索引特里树的路由查找方法及装置
TW200401206A (en) Enhanced multiway radix tree and related methods
CN102333036A (zh) 一种实现高速路由查找的方法和系统
CN101620623A (zh) 内容可寻址存储器表项管理方法和装置
US9292549B2 (en) Method and system for index serialization
CN1319325C (zh) 一种采用哈希链表查找路由表项的方法
CN102609509A (zh) 哈希数据处理方法和装置
US8645620B2 (en) Apparatus and method for accessing a memory device
CN102984071B (zh) 分段地址路由的路由表组织方法及查找路由的方法
Li et al. Deterministic and efficient hash table lookup using discriminated vectors
CN101345710B (zh) 一种区间值存储方法及装置
CN105812258A (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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120829