CN110995876B - 一种ip存储与查找的方法及装置 - Google Patents
一种ip存储与查找的方法及装置 Download PDFInfo
- Publication number
- CN110995876B CN110995876B CN201910964493.3A CN201910964493A CN110995876B CN 110995876 B CN110995876 B CN 110995876B CN 201910964493 A CN201910964493 A CN 201910964493A CN 110995876 B CN110995876 B CN 110995876B
- Authority
- CN
- China
- Prior art keywords
- node
- array
- sub
- subtree
- tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/50—Address allocation
- H04L61/5007—Internet protocol [IP] addresses
-
- 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
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/45—Network directories; Name-to-address mapping
- H04L61/4552—Lookup mechanisms between a plurality of directories; Synchronisation of directories, e.g. metadirectories
Abstract
本发明涉及一种IP存储与查找的方法及装置,该存储方法包括以下步骤:采用多个数组存储所述IP的树结构,形成多个节点数组,每一该节点数组对应该树结构其中一层;在每一所述节点数组存储一节点索引,用于指向所述IP的规则信息;设定该树结构的若干层为关键层,该关键层对应的节点数组为关键层节点数组,并在该每一关键层分别设置:一子树偏移值数组,用于记录子树偏移值,判断节点是否存在子树,并给子树编号;以及一子节点数数组,用于记录所述IP的树结构中的子节点数;其中,所述子节点数数组与所述子树偏移值数组相对应。该方法有效解决了SIAL存储开销大,更新吞吐量低的问题。
Description
技术领域
本发明涉及计算机网络技术领域,特别涉及一种IP存储与查找方法及装置。
背景技术
近年来在很长一段时间内,IP查找作为路由器转发过程中的瓶颈问题,一直在被广泛研究当中。然而随着网络的发展,IP查找算法面临着更大的挑战。一方面主干网路由器上的规则表大小在不断增加,根据RIPE网站上的信息,主干路由器上路由表大小已经超过500K。另一方面,网络流量不断增加,对IP查找算法的速度有了更高的要求,在100G的小包网络下,IP查找速度需要达到约150Mpps。
理想的IP查找算法应该同时满足下列三个条件:第一,当规则表大小增长时,IP查找算法仍能保持稳定的查找速度;第二,IP查找算法应当能够支持快速更新的操作;第三,IP查找算法应该占用尽量少的存储空间,并且在持续更新的条件下保持一定的存储开销。
目前实现高速IP查找的算法主要包括:
基于硬件的查找算法:一些基于TCAM的查找算法和基于FPGA的查找算法,虽然具有快速的IP查找速度,但是硬件本身存储的规则数目有限,同时也不能支持快速的动态更新操作。此外硬件本身需要额外的开销,使用过程中也会带来额外的能源开销。
基于Trie树的算法:一些基于Trie树结构的IP查找算法,如Binary Trie、LC-Trie、Tree Bitmap、Lulea等,均不能达到指定要求的查找速度,并且在更新速度上也有一定的限制。
基于布罗姆过滤器的算法:一些基于布罗姆过滤器的IP查找算法,通过布罗姆过滤器来确定最长前缀匹配的长度。然而因为布罗姆过滤器本身存在假阳性和哈希冲突,使得IP查找速度存在一定的限制。
基于多步长树的算法:一些基于多步长树的查找算法,如DIR24-8、SAIL、PopTrie。三种IP查找算法均能达到高速的IP查找速度,但是更新速度都很慢。其中DIR24-8虽然在查找过程中访问次数少,能达到高速的IP查找速度,但是因为第一层采用24位全展开的形式,需要巨大的存储空间。SAIL分为了16-8-8三层的查找结构,但是仍然需要大量的存储空间。PopTrie通过使用popcnt指令,减少了存储空间的消耗,但是popcnt需要在intel的CPU上执行,使得算法具有硬件的限制。
现有的IP查找方法分为基于硬件的IP查找方法和基于软件的IP查找方法。其中基于硬件的IP查找方法需要额外的硬件设备支持,如TCAM、FPGA,从而需要额外的花销和持续的能源开销,且不支持灵活修改。在SDN(Software Defined Network,软件定义网络)之下,基于软件的IP查找算法具有高灵活性,能够快速移植到软件系统当中。然而目前并没有一个基于软件的IP查找方法能够同时满足上述三个要求。综上,如何设计一个基于软件的IP查找方法,并且能够满足上述要求,成为了一个关键性的问题。
发明内容
为了解决上述技术问题,本发明目的在于提供一种IP存储方法,其特征在于,该方法包括以下步骤:
采用多个数组存储所述IP的树结构,形成多个节点数组,每一该节点数组对应该树结构其中一层;
在每一所述节点数组存储一节点索引,用于指向所述IP的规则信息;
设定该树结构的若干层为关键层,该关键层对应的节点数组为关键层节点数组,并在该每一关键层分别设置:
一子树偏移值数组,用于记录子树偏移值,判断节点是否存在子树,并给子树编号;以及
一子节点数数组,用于记录所述IP的树结构中的子节点数;
其中,所述子节点数数组与所述子树偏移值数组相对应。
上述IP存储方法,其特征在于,所述树结构包括IP的trie树结构。
上述IP存储方法,其特征在于,在所述IP的trie树结构中,设定第16、24、32层为关键层。
上述IP存储方法,其特征在于,所述节点索引将多个索引节点指向同一实节点的存储位置。
上述IP存储方法,其特征在于,所述节点数组均支持IP插入操作和/或IP删除操作;
其中,所述关键层节点数组还支持IP查找操作。
上述IP存储方法,其特征在于,该方法还包括:将所述IP的trie树中所有节点均叶推至所述关键层节点数组。
为实现本发明的另一目的,本发明还提供一种基于权利要求1-6任一所述IP存储方法的IP查找方法,其特征在于,该方法包括:
步骤11,接收待查询数据包的目的IP地址,根据权利要求1-6任一所述IP存储方法存储该IP地址的trie树结构;
步骤12,查找该IP地址trie树各对应层的子树偏移值,并判断该子树偏移值是否为-1,若为-1,则获取该对应层所述节点数组中的节点索引,若不为-1,则根据该子树偏移值继续查找该对应层对应的子树,直至该子树偏移值为-1时,获取该层所述节点数组中的所述节点索引;
步骤13,获取所述节点索引所指向的IP规则信息。
上述的IP查找方法,其特征在于,所述步骤12还包括:
步骤121,获取所述IP地址中的0-16位,查找对应层的子树偏移值数组,若该子树偏移值数组中的值为-1,则获取对应层的所述节点数组的节点索引,否则继续查找;
步骤122,获取所述IP地址中的17-24位,查找对应层的子树偏移值数组,若该子树偏移值数组中的值为-1,则获取对应层的所述节点数组的所述节点索引,否则继续查找;
步骤123,获取所述IP地址中的25-32位,查找并获取对应层所述节点数组上的所述节点索引。
为实现本发明的另一目的,本发明还提供一种基于上述任一所述IP存储方法的IP插入方法,其特征在于,该方法包括:
步骤21,获取一待插入IP规则,根据权利要求1-6任一所述IP存储方法存储该IP规则的trie树结构;
步骤22,根据该IP规则的前缀长度递归查找,当查找到所述关键层节点数组,根据所述子树偏移值查找该IP规则的对应位置,并判断该对应位置是否存在子树,若有子树,则执行步骤23,否则创建一子树,并执行步骤25;
步骤23,判断该子树中的节点是否为实节点,若是实节点,则执行步骤24,否则,创建一实节点,在关键层节点数组对应的所述子节点数数组中增加子节点数,并执行步骤25;
步骤24,修改该实节点数组内所述节点索引的信息,将所述节点索引指向所述待插入的IP规则;
步骤25,通过叶推将该子树节点的所述节点索引位置指向该创建的实节点,直至叶推到其它实节点。
为实现本发明的另一目的,本发明还提供一种基于上述任一所述IP存储方法的IP删除方法,其特征在于,该方法包括:
步骤31,获取一待删除的IP规则,根据权利要求1-6任一所述IP存储方法存储该IP规则的trie树结构;
步骤32,根据该IP规则的前缀长度递归查找,当查找到所述关键层节点数组,则根据所述子树偏移值数组的值查找该关键层节点中所述IP规则对应的子树;
步骤33,当找到所述子树,则判断该子树的节点是否为实节点,若是,则删除该实节点,并在所述关键层节点数组对应的所述子节点数数组中减少所述计数子节点数,若该子节点数减少为0,则删除该子树;
步骤34,通过叶推将该节点索引指向该节点的父节点对应的实节点,直至叶推到其它实节点。
上述IP删除方法,其中,若在根据所述子树偏移值查找所述子树过程中,未找到所述子树或者查找到的所述子树的节点不为实节点,则表示未插入过该待删除的IP规则。
上述IP删除方法,其中,当删除所述子树,则保存该子树存储空间,以用于下一次新建子树使用。
为实现本发明的另一目的,本发明还提供一种利用上述查找方法的IP查找装置。
为实现本发明的另一目的,本发明还提供一种利用上述插入和/或删除方法的IP更新装置。
为实现本发明的另一目的,一种利用上述任一所述IP存储方法的IP存储装置。
为让本发明的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。
附图说明
图1-1为SAIL结构图。
图1-2为Hybrid-SAIL结构图。
图2-1为Hybrid-SAIL索引合并示意图。
图2-2为Hybrid-SAIL指针数组示意图。
图2-3为Hybrid-SAIL子节点数数组示意图。
图3-1为Hybrid_SAIL与SAIL存储开销性能评估对比图。
图3-2为Hybrid_SAIL与SAIL持续更新时存储开销性能评估对比图。
图3-3为Hybrid_SAIL与SAIL插入吞吐量性能评估对比图。
图3-4为Hybrid_SAIL与SAIL删除吞吐量性能评估对比图。
图3-5为Hybrid_SAIL与SAIL构建时间性能评估对比图。
图3-6为Hybrid_SAIL与SAIL查找吞吐量性能评估对比图。
图4-1(a)为Hybrid-SAIL查询流程图。
图4-1(b)为Hybrid-SAIL插入流程图。
图4-1(c)为Hybrid-SAIL删除流程图。
图4-2为Hybrid-SAIL查找示意图。
图4-3为Hybrid-SAIL插入示意图。
图4-4为Hybrid-SAIL删除示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。
发明人在进行SAIL的研究时,发现SAIL需要大量的存储空间是由于三点原因造成的:①更新索引与查找索引之间存在冗余的节点信息。②叶推后的节点内存在冗余节点信息。③在进行动态更新时,删除节点后形成的空子树会依然存在,占用存储空间。此外,SAIL的动态更新速度较慢,有待进一步提高。
发明人经过研究发现:①可以通过构建一个混合索引,由每层节点的数组过程,同时支持查找和更新操作,减少原来更新索引和查找索引之间的冗余节点信息。②混合索引节点采用指针,将多个索引节点指向同一个实节点的存储位置,从而避免节点存储大量的冗余信息。同时也可以在更新时避免重复节点信息的更新,提高更新吞吐量③添加一个数组表示子节点数,当子节点数目为0时,将该子树偏移值设为-1,并将该子树用作下次开辟新子树时使用,从而避免空子树一直占用存储空间。
为解决SIAL存储开销大,更新吞吐量低的问题,提出了一种混合索引的方法。将SAIL如图1-1所示的更新索引和查找索引合并成如图1-2所示的混合索引,同时支持更新和查找操作。并用指针避免重复节点信息的存储开销和修改,减少存储开销的同时提高查找速度。此外计数子节点数来支持空间的动态分配,避免空子树的存在。
其中,混合索引结构,如图2-1所示,混合索引由每层节点的数组构成,支持查找和更新操作,从而避免了原来的更新索引与查找索引之间存在冗余节点信息。其中指定层次(第2层和第4层)同时支持查找和更新操作,且数组的存储方式能够减少树结构用于索引左右孩子节点的指针存储开销,从而大幅度降低存储开销。
指针数组的索引结构,如图2-2所示,混合索引节点采用指针的形式,将多个索引节点指向同一个实节点的存储位置,图中4个d节点均指向同一个实节点d的存储位置。采用指针数组,能够减少混合索引节点的存储开销,同时也减少了同一个实节点的多次索引更新操作,从而减少了存储开销并提高了更新吞吐量。同时针对SAIL更新吞吐量低的问题,指针数组的索引结构也可以避免重复信息的修改,从而提高更新吞吐量。
计数子节点数的结构,如图2-3所示,SAIL为保证更新速度,没有考虑规则删除后产生的空子树问题,在规则不断插入删除的更新过程中,空子树会越来越多,占用的空间也会越来越大。所以本研究提出增加一个记录子节点数的数组,如图中样例所示。第2层的第2个b节点的子节点数原始状态为1;在删除c节点之后,将其子节点数由1变为0,同时因为没有子节点,子树偏移值由0变为-1,并将子树0保存以用于下一次新建子树使用;在添加新的c节点之后,第2层的第1个b节点使用之前保存的子树0,故将子树偏移值由-1变为0,并记录其子节点数为1。通过记录子节点数,实现了空子树的再利用过程,避免因更新而造成的空间膨胀问题,使得该算法能够更好地支持更新操作。
本发明具有以下有益效果:如图3所示,本发明分别在10K、50K、100K的规则集下执行SAIL算法和Hybrid_SAIL算法进行存储开销、插入吞吐量、删除吞吐量、构建时间、查找吞吐量的对比,对比效果如下:
(1)与SAIL相比,Hybrid_SAIL平均减少了84.9%存储开销,如图3-1所示;
(2)与SAIL相比,Hybrid_SAIL能够在持续更新时维持稳定的存储开销,如图3-2所示;
(3)与SAIL相比,Hybrid_SAIL平均提高1.7倍插入吞吐量,如图3-3所示;
(4)与SAIL相比,Hybrid_SAIL平均提高1.0倍删除吞吐量,如图3-4所示;
(5)与SAIL相比,Hybrid_SAIL平均减少87.1%构建时间,如图3-5所示;
(6)Hybrid_SAIL与SAIL算法的查找吞吐量相同,约能达到170Mlps的查找速度,如图3-6所示。
与SAIL相比,Hybrid_SAIL可以大幅度降低存储开销,并提高插入吞吐量、删除吞吐量,减少构建时间,更好地支持动态更新操作,且不影响其本身高速的查找速率。因此,Hybrid_SAIL具有比SAIL更好的全方面性能表现。
SAIL结构包括两个主要部分,第一部分是更新索引,第二部分是查找索引。IP长度实际为32位,而图1-1以4位的IP进行SAIL结构的说明。
更新索引:更新索引主要涉及更新过程。其内部包括一棵高度为0-32的字典树,每条规则根据IP的前缀进行插入,位为0则向左节点递归,位为1则向右节点递归,一直递归到树的深度与IP前缀长度相同为止。SAIL设定16、24、32层为关键层(图中为2、4层),前16位是一棵全展开的完全二叉树,后面则在需要时建立新的子树,17-24层的节点全部叶推到24层,25-32层的节点全部叶推到32层。(如图中2层以上是全展开的,3-4层只有在需要的时候才有子树,图中为2棵子树。)字典树中的节点分为实节点和虚节点两种类型,实节点全部都对应到一条规则(图中黑色节点),虚节点是由实节点叶推之后形成的节点(白色节点),节点内均存储对应规则的信息。更新索引保证在插入删除的更新操作之后,仍然保持这种节点信息叶推到关键层的状态。
查找索引:查找索引主要涉及查找过程。其内部包括关键层节点数组和子树偏移值两部分。关键层节点数组为16、24、32层的节点数组(图中为2、4层),各自保存更新索引中,对应层上的所有节点。然而24、32层上的节点并不是连续的,而是只有在需要时才会建立新的子树,所以子树偏移值数组的作用就用判断节点是否存在子树,并给子树编号。如果节点不存在子树,则子树偏移值数组上的对应的值为-1,否则为子树编号。子树编号对应子树在下一个关键层节点数组上的位置。(如图中0对应第0个子树,1对应第1个子树,由此找到子树的位置。)查找的过程先通过前16位找到第一个关键层节点数组,通过子树偏移值判断是否有子树,如果没有子树则返回查找结果,有子树则通过子树偏移值找到子树的位置。之后通过17-24位再次对24层的第二个关键层节点数组上进行同样的判断,如果依然有子树,则最后通过25-32位在第三个关键层节点数组上找到查找结果。
Hybrid_SAIL的混合索引的结构就是混合了SAIL的更新索引和查找索引两个结构,将更新和查找的功能都集中在混合索引这一个结构里面。混合索引包括节点数组、子树偏移值和子节点数数组三部分组成。图2-1是以4位的IP进行Hybrid_SAIL混合索引结构的说明,与SAIL相比的改动主要体现在如下三个方面:
混合索引结构:节点数组采用数组的形式,存储树的结构。节点数组包含0-32共33个数组(图中为0-4层共5个数组),其操作方式与字典树类似,每个节点依次对应到下一个数组的两个子节点上,如第1层上的两个节点为第0层上的根节点的左右子节点。每条规则根据IP的前缀进行插入,位为0则向左节点递归,位为1则向右节点递归,一直递归到树的深度与IP前缀长度相同为止。与SAIL相同,Hybrid_SAIL也将所有的节点叶推到16、24、32这三个关键层上。33个数组均支持更新操作,且其中16、24、32层的数组还额外支持查找操作。因此Hybrid_SAIL通过混合索引,一方面避免了关键层上数组信息的重复存储,另一方面通过数组存储的方式避免了树结构的额外节点索引开销,从而减少了整体的存储开销。
指针数组索引结构:在节点数组内每个节点并不是像SAIL一样存储规则信息,而是仅存储一个指针,指向规则信息的结构体。如图2-2所示,叶推产生了4个d节点,通过将它们指向同一个实节点d之后,每个节点数组上的位置只需要存储一个指针即可,通过指针,就能直接找到规则内部的信息。在更新操作时,也只需新建或删除实节点,并对数组上相应的位置进行索引的修改即可,因此指针数组索引结构不仅减少了存储开销,而且提高了更新速率。
计数子节点数的结构:子节点数的数组与子树偏移值数组相对应。子树偏移值数组与SAIL中的相同,其作用就用判断节点是否存在子树,并给子树编号。如果节点不存在子树,则子树偏移值数组上的对应的值为-1,否则为子树编号。针对删除节点后的空子树依然存在的问题,本发明提出了通过记录子节点数的方式回收空子树,如图2-3所示。SAIL为保证更新速度,没有考虑规则删除后产生的空子树问题,在规则不断插入删除的更新过程中,空子树会越来越多,占用的空间也会越来越大。所以本发明提出增加一个记录子节点数的数组,如图中样例所示。第2层的第2个b节点的子节点数原始状态为1;在删除c节点之后,将其子节点数由1变为0,同时因为没有子节点,子树偏移值由0变为-1,并将子树0保存以用于下一次新建子树使用;在添加新的c节点之后,第2层的第1个b节点使用之前保存的子树0,故将子树偏移值由-1变为0,并记录其子节点数为1。通过记录子节点数,实现了空子树的再利用过程,避免因更新而造成的空间膨胀问题,使得该算法能够更好地支持更新操作。
在上述基础上,本发明提出了一种IP存储方法,其特征在于,该方法包括以下步骤:
采用多个数组存储所述IP的树结构,形成多个节点数组,每一该节点数组对应该树结构其中一层;
在每一所述节点数组存储一节点索引,用于指向所述IP的规则信息;
设定该树结构的若干层为关键层,该关键层对应的节点数组为关键层节点数组,并在该每一关键层分别设置:
一子树偏移值数组,用于记录子树偏移值,判断节点是否存在子树,并给子树编号;以及
一子节点数数组,用于记录所述IP的树结构中的子节点数;
其中,所述子节点数数组与所述子树偏移值数组相对应。
本发明的一个实施例中,上述存储方法中,所述树结构包括IP的trie树结构。
本发明的一个实施例中,上述存储方法中,在所述IP的trie树结构中,设定第16、24、32层为关键层。
本发明的一个实施例中,上述存储方法中,所述节点索引将多个索引节点指向同一实节点的存储位置。
本发明的一个实施例中,上述存储方法中,所述节点数组均支持IP插入操作和/或IP删除操作;
其中,所述关键层节点数组还支持IP查找操作。
本发明的一个实施例中,上述存储方法中,将所述IP的trie树中所有节点均叶推至所述关键层节点数组。
本发明的另一实施例中还提供一种基于上述任一所述存储方法的IP查找方法,其特征在于,该方法包括:
步骤11,接收待查询数据包的目的IP地址,根据上述任一所述IP存储方法存储该IP地址的trie树;
步骤12,查找该IP地址trie树各对应层的子树偏移值,并判断该子树偏移值是否为-1,若为-1,则获取该对应层所述节点数组中的节点索引,若不为-1,则根据该子树偏移值继续查找该对应层对应的子树,直至该子树偏移值为-1时,获取该层所述节点数组中的节点索引;
步骤13,获取所述节点索引所指向的IP规则。
本发明的一个实施例中,上述的IP查找方法,所述步骤12还包括:
步骤121,获取所述IP地址中的0-16位,查找对应层的子树偏移值数组,若该子树偏移值数组中的值为-1,则获取对应层的所述节点数组的节点索引,否则继续查找;
步骤122,获取所述IP地址中的17-24位,查找对应层的子树偏移值数组,若该子树偏移值数组中的值为-1,则获取对应层的所述节点数组的节点索引,否则继续查找;
步骤123,获取所述IP地址中的25-32位,查找并获取对应层数组上的节点索引。
在本发明的一个实施例中,该查找过程如图4-1(a)所示,具体为:在程序输入需要查询数据包的32位长度的IP值之后,首先获取0-16位的IP数值,查找对应层的子树偏移值,如果为-1则获取对应层数组上的节点索引,不为-1则需要继续查找。继续查找时通过子树偏移值找到对应的子树,获取之后的8位数值,即17-24位,判断对应层位置的子树偏移值,如果为-1则获取对应层数组上的节点索引,不为-1则继续查找。继续查找时通过子树偏移值找到对应的子树,获取最后的8位数值,即25-32位,找到对应层数组上的节点索引。最后输出查询到的节点索引所指向的规则。
在本发明的一个实施例中,以4位的Hybrid_SAIL算法的查找过程为例,如图4-2所示。例如查找IP地址为0011,则根据前两位00找到节点b,其子树偏移值为-1,表示该节点下面没有其它子节点,查找过程结束,即最长前缀匹配为b节点。再例如查找IP地址为1100,则根据前两位11找到节点d,其子树偏移值为1,表示该节点下面还有其它子节点;再根据后两位00找到节点e,即最长前缀匹配为e节点。
本发明的另一实施例中还提供一种基于上述任一所述存储方法的IP插入方法,其特征在于,该方法包括:
步骤21,获取一待插入IP规则,根据上述任一所述IP存储方法存储该IP规则的trie树;
步骤22,根据该IP规则前缀长度递归查找,当查找到所述关键层节点数组,根据所述子树偏移值查找该IP规则的对应位置,并判断该对应位置是否存在子树,若有子树,则执行步骤23,否则创建一子树,并执行步骤25;
步骤23,判断该子树中的节点是否为实节点,若是实节点,则执行步骤24,否则,创建一实节点,在上一关键层节点数组对应的所述子节点数数组中增加子节点数,并执行步骤25;
步骤24,修改该实节点数组内所述指针的信息,将所述指针指向所述待插入的IP规则;
步骤25,通过叶推将该子树节点的索引位置指向该创建的实节点,直至叶推到其它实节点。
在本发明的一个实施例中,该插入过程如图4-1(b)所示,具体为:在程序中输入插入的规则,根据前缀长度不断递归进行查找,查找到关键层时根据子树偏移值找到新的子树,如果没有子树则创建一个。找到对应的位置之后,判断这个节点是否为一个实节点,如果是一个实节点,则修改实节点内的信息,替代原来的一条规则即可。如果不是实节点,则创建一个新的实节点,在上一关键层上添加计数子节点数,之后通过叶推将子节点的索引位置指向新的实节点,直至叶推到其它实节点时停止。
在本发明的一个实施例中,一4位的Hybrid_SAIL的插入操作为例,如图4-3所示。例如插入IP前缀为111*的规则g时,首先根据前缀111*,在Trie树中构建实节点g;然后通过叶推将多个混合索引节点g的指针指向实节点g,并修改对应子节点数。在插入过程中,不必构建多个实节点g,也不必删除多个原始的实节点d,从而减少了空间开销并提高了更新吞吐量。
本发明的另一实施例中还提供一种基于权利要求1-6任一所述路由表存储方法的IP删除方法,其特征在于,该方法包括:
步骤31,获取一待删除的IP规则,根据上述任一所述IP存储方法存储该IP规则的trie树;
步骤32,根据该IP规则前缀长度递归查找,当查找到所述关键层节点数组,则根据所述子树偏移值数组的值查找该层节点所述IP规则对应的子树;
步骤33,当找到所述子树,则判断该子树的节点是否为实节点,若是,则删除该实节点,并在上一关键层节点数组对应的所述子节点数数组中减少所述计数子节点数,若该子节点数减少为0,则删除该子树;
步骤34,通过叶推更新所删除的子节点的索引位置指向该子节点的父节点对应的实节点,直至叶推到其它实节点。
上述IP删除方法,其中,若在根据所述子树偏移值查找所述子树过程中,未找到所述子树或者查找到的所述子树的节点不为实节点,则表示未插入过该待删除的IP规则。
上述IP删除方法,其中,当删除所述子树,则保存该子树存储空间,以用于下一次新建子树使用。
在本发明的一个实施例中,该删除过程如图4-1(c)所示,具体为:在程序中输入删除的规则,根据前缀长度不断递归进行查找,查找到关键层时根据子树偏移值找到新的子树,如果不能找到新的子树或查找到的节点不为实节点,则说明没有插入过这条规则。之后删除该实节点,减少上一关键层上对应计数的子节点数,如果子节点数减少为0,则删除子树。最后需要时叶推更新子节点的索引位置指向父节点对应的实节点,直至叶推到其它实节点时停止。
在本发明的一个实施例中,以4位的Hybrid_SAIL的删除操作为例,如图4-4所示。例如删除IP前缀为11*的规则d时,首先根据前缀11*,删除Trie树中的实节点d;然后通过叶推将原始的混合索引节点d均指向其父节点a对应的实节点a。在删除过程中,不必删除多个实节点d,也不必构建多个新的实节点a,从而减少了空间开销并提高了删除吞吐量。
为实现本发明的另一目的,本发明还提供一种利用上述查找方法的IP查找装置。
为实现本发明的另一目的,本发明还提供一种利用上述插入和/或删除方法的IP更新装置。
为实现本发明的另一目的,一种利用上述任一所述IP存储方法的IP存储装置。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (14)
1.一种IP存储方法,其特征在于,该方法包括以下步骤:
采用多个数组存储所述IP的trie树结构,形成多个节点数组,每一该节点数组对应该树结构其中一层;
在每一所述节点数组存储一节点索引,用于指向所述IP的规则信息;
设定该树结构的若干层为关键层,该关键层对应的节点数组为关键层节点数组,并在该每一关键层分别设置:
一子树偏移值数组,用于记录子树偏移值,判断节点是否存在子树,并给子树编号;以及
一子节点数数组,用于记录所述IP的树结构中的子节点数;
其中,所述子节点数数组与所述子树偏移值数组相对应。
2.根据权利要求1所述的存储方法,其特征在于,在所述IP的trie树结构中,设定第16、24、32层为关键层。
3.根据权利要求1所述的存储方法,其特征在于,所述节点索引将多个索引节点指向同一实节点的存储位置。
4.根据权利要求1所述的存储方法,其特征在于,所述节点数组均支持IP插入操作和/或IP删除操作;
其中,所述关键层节点数组还支持IP查找操作。
5.根据权利要求2所述的存储方法,其特征在于,该方法还包括:将所述IP的trie树中所有节点均叶推至所述关键层节点数组。
6.一种基于权利要求1-5任一所述IP存储方法的IP查找方法,其特征在于,该方法包括:
步骤11,接收待查询数据包的目的IP地址,根据权利要求1-5任一所述IP存储方法存储该IP地址的trie树结构;
步骤12,查找该IP地址trie树各对应层的子树偏移值,并判断该子树偏移值是否为-1,若为-1,则获取该对应层所述节点数组中的节点索引,若不为-1,则根据该子树偏移值继续查找该对应层对应的子树,直至该子树偏移值为-1时,获取该层所述节点数组中的所述节点索引;
步骤13,获取所述节点索引所指向的IP规则信息。
7.根据权利要求6所述的IP查找方法,其特征在于,所述步骤12还包括:
步骤121,获取所述IP地址中的0-16位,查找对应层的子树偏移值数组,若该子树偏移值数组中的值为-1,则获取对应层的所述节点数组的节点索引,否则继续查找;
步骤122,获取所述IP地址中的17-24位,查找对应层的子树偏移值数组,若该子树偏移值数组中的值为-1,则获取对应层的所述节点数组的所述节点索引,否则继续查找;
步骤123,获取所述IP地址中的25-32位,查找并获取对应层所述节点数组上的所述节点索引。
8.一种基于权利要求1-5任一所述IP存储方法的IP插入方法,其特征在于,该方法包括:
步骤21,获取一待插入IP规则,根据权利要求1-5任一所述IP存储方法存储该IP规则的trie树结构;
步骤22,根据该IP规则的前缀长度递归查找,当查找到所述关键层节点数组,根据所述子树偏移值查找该IP规则的对应位置,并判断该对应位置是否存在子树,若有子树,则执行步骤23,否则创建一子树,并执行步骤25;
步骤23,判断该子树中的节点是否为实节点,若是实节点,则执行步骤24,否则,创建一实节点,在关键层节点数组对应的所述子节点数数组中增加子节点数,并执行步骤25;
步骤24,修改该实节点数组内所述节点索引的信息,将所述节点索引指向所述待插入的IP规则;
步骤25,通过叶推将该子树节点的所述节点索引位置指向该创建的实节点,直至叶推到其它实节点。
9.一种基于权利要求1-5任一所述IP存储方法的IP删除方法,其特征在于,该方法包括:
步骤31,获取一待删除的IP规则,根据权利要求1-6任一所述IP存储方法存储该IP规则的trie树结构;
步骤32,根据该IP规则的前缀长度递归查找,当查找到所述关键层节点数组,则根据所述子树偏移值数组的值查找该关键层节点中所述IP规则对应的子树;
步骤33,当找到所述子树,则判断该子树的节点是否为实节点,若是,则删除该实节点,并在所述关键层节点数组对应的所述子节点数数组中减少计数子节点数,若该子节点数减少为0,则删除该子树;
步骤34,通过叶推将该节点索引指向该节点的父节点对应的实节点,直至叶推到其它实节点。
10.根据权利要求9所述的IP删除方法,其特征在于,若在根据所述子树偏移值查找所述子树过程中,未找到所述子树或者查找到的所述子树的节点不为实节点,则表示未插入过该待删除的IP规则。
11.根据权利要求9所述的IP删除方法,其特征在于,当删除所述子树,则保存该子树存储空间,以用于下一次新建子树使用。
12.一种利用权利要求6-7任一所述IP查找方法的IP查找装置。
13.一种利用权利要求8-11任一所述方法的IP更新装置。
14.一种利用权利要求1-5任一所述IP存储方法的IP存储装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910964493.3A CN110995876B (zh) | 2019-10-11 | 2019-10-11 | 一种ip存储与查找的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910964493.3A CN110995876B (zh) | 2019-10-11 | 2019-10-11 | 一种ip存储与查找的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110995876A CN110995876A (zh) | 2020-04-10 |
CN110995876B true CN110995876B (zh) | 2021-02-09 |
Family
ID=70081958
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910964493.3A Active CN110995876B (zh) | 2019-10-11 | 2019-10-11 | 一种ip存储与查找的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110995876B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112887212B (zh) * | 2021-02-25 | 2022-03-29 | 清华大学 | 基于可变步宽trie树的高速路由查找方法和装置 |
CN113286013B (zh) * | 2021-05-19 | 2023-11-07 | 苏州瑞立思科技有限公司 | 一种子网匹配方法和装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101141389B (zh) * | 2007-09-29 | 2010-06-16 | 华为技术有限公司 | 增强多位Trie树查找方法和装置 |
CN101621502A (zh) * | 2008-06-30 | 2010-01-06 | 华为技术有限公司 | 存储、查找路由表的方法及装置 |
CN101521627B (zh) * | 2009-04-13 | 2011-10-05 | 华为技术有限公司 | 插入节点的方法和装置 |
US8179898B2 (en) * | 2009-06-11 | 2012-05-15 | Alcatel Lucent | Packet processing using braided tries |
CN102571599B (zh) * | 2012-02-08 | 2014-12-10 | 福建三元达通讯股份有限公司 | 一种路由表项的快速存储方法 |
CN103051543B (zh) * | 2012-11-01 | 2015-09-09 | 广州键智桥网络技术有限公司 | 一种路由前缀的处理、查找、增加及删除方法 |
CN104679854B (zh) * | 2015-02-15 | 2018-01-26 | 中国科学院计算技术研究所 | 路由表存储与查找方法 |
CN104821829B (zh) * | 2015-05-20 | 2018-06-26 | 东方网力科技股份有限公司 | 一种哈夫曼树保存方法及系统 |
CN108134739B (zh) * | 2016-12-01 | 2020-10-02 | 深圳市中兴微电子技术有限公司 | 一种基于索引特里树的路由查找方法及装置 |
-
2019
- 2019-10-11 CN CN201910964493.3A patent/CN110995876B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110995876A (zh) | 2020-04-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100962653B1 (ko) | 블룸 필터 및 복수 해싱 구조를 사용한 ip 주소 검색방법 및 장치 | |
US6490592B1 (en) | Method of and apparatus for generating a tree data structure supporting longest match lookup | |
CN102484610B (zh) | 路由表建立方法和装置及路由表查找方法和装置 | |
US6434144B1 (en) | Multi-level table lookup | |
CN103873371B (zh) | 一种名字路由快速匹配查找方法与装置 | |
EP1623347B1 (en) | Comparison tree data structures and lookup operations | |
US7774538B2 (en) | Method for ternary contents address memory table management | |
US7418505B2 (en) | IP address lookup using either a hashing table or multiple hash functions | |
US20100058027A1 (en) | Method for selecting hash function, method for storing and searching routing table and devices thereof | |
Warkhede et al. | Multiway range trees: scalable IP lookup with fast updates | |
JP3570323B2 (ja) | アドレスに関するプレフィクスの格納方法 | |
CN110995876B (zh) | 一种ip存储与查找的方法及装置 | |
CN102405623A (zh) | 路由表项的存储方法和装置 | |
US7478109B1 (en) | Identification of a longest matching prefix based on a search of intervals corresponding to the prefixes | |
US7233579B1 (en) | Routing table for forwarding Internet Protocol (IP) packets through a communications network | |
CN101277252A (zh) | 多分支Trie树的遍历方法 | |
US20050114393A1 (en) | Dynamic forwarding method using binary search | |
Hsieh et al. | Multiprefix trie: A new data structure for designing dynamic router-tables | |
KR100999408B1 (ko) | 해시트리를 이용한 url 검색방법 | |
CN106302178B (zh) | 一种路由查询方法及装置 | |
CN109754021B (zh) | 基于范围元组搜索的在线包分类方法 | |
CN115086221B (zh) | 一种报文处理方法、装置、转发设备和存储介质 | |
Lin et al. | A multi-index hybrid trie for lookup and updates | |
CN111865804B (zh) | 一种通过硬件发包机制提升路由下发效率的方法及系统 | |
Erdem | Pipelined hierarchical architecture for high performance packet classification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |