[发明专利]IPv6地址前缀压缩存储方法及设备有效
申请号: | 201010611546.2 | 申请日: | 2010-12-28 |
公开(公告)号: | CN102045412A | 公开(公告)日: | 2011-05-04 |
发明(设计)人: | 黄友俊;李星;吴建平;胡松;张辉 | 申请(专利权)人: | 赛尔网络有限公司 |
主分类号: | H04L29/12 | 分类号: | H04L29/12 |
代理公司: | 中科专利商标代理有限责任公司 11021 | 代理人: | 赵伟 |
地址: | 100084 北京市海淀区中*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | ipv6 地址 前缀 压缩 存储 方法 设备 | ||
技术领域
本发明涉及下一代互联网领域,更具体地,涉及一种IPv6地址前缀存储方法和设备。
背景技术
众所周知,IPv6地址长度是128比特,而IPv4地址长度是32比特。就地址长度而言,IPv6比IPv4扩大了4倍;就容量而言,则扩大了296倍。由于IPv6地址容量的急剧增长,因此需要一种高效可行的IPv6地址存储和查找方式。
随着技术的发展,人们提出了基于多分支Trie树的IPv6地址前缀存储和查找算法。字典树(Trie)是一种用于快速字符串检索的多叉树结构。其原理是利用字符串的公共前缀来降低时空开销,从而达到提高程序效率的目的。Trie树在本质上是一个确定的有限状态自动机,每个结点代表一个状态,根据输入变量的不同,进行状态转移。用Trie树搜索一个关键码的时间与关键码自身及其长度有关,最快是0(1),即在第一层即可判断是否搜索到,最坏的情况是0(n),n为Trie树的层数。由于很多时候Trie树的大多数结点分支很少,因此Trie树结构空间浪费比较多。如果把每次查找检查的字符个数定义为步长,传统的Trie树步长为1,多分支Trie树的查找步长大于1。利用多分支Trie树可以有效减少查找过程中的存储器访问次数。
虽然该算法在查找速度上获得了很大的提高,但仍然需要较大的存储空间。图1示出了步长为K=16、层数为128/16=8的多分支Trie树(MT)的示意结构。如图1所示,多分支Trie树的每一个节点都包含216=65536个分支节点。因此,每个节点包含一块连续的大小为65536个单元的内存,分别指向65536个子节点。由于IPv6地址长度为128比特,因此MT的最大层数(深度)为8(128/16=8)。MT的实际层数由存储的IPv6地址前缀决定,当MT中不存储任何IPv6地址前缀时,MT中只包含根节点,层数为0,当存储的IPv6地址前缀中包含长度为16的前缀时,层数为1。依此类推,当存储的IPv6地址前缀中包含长度为128的前缀时,层数为8。
因此,当IPv6地址前缀较多且比较分散时,需要非常大的存储空间,同时产生了很多的空指针,一方面会造成内存的巨大浪费,另一方面会影响查找效率。
发明内容
本发明提出了一种IPv6地址前缀存储方法,可以在使用有限内存的情况下实现IPv6地址前缀的存储,并且能够实现高效查找。
根据本发明的一个方面,提供了一种用于存储IPv6地址前缀的方法,包括:将IPv6地址前缀划分为具有固定长度K的L个部分,其中K和L均为正整数;使用步长为K、层数为L的多分支Trie树结构存储IPv6地址前缀,其中每一个节点使用长度为2K的数组来存储节点指针,节点指针在数组中的位置表示IPv6地址前缀的K个比特;以及利用额外数组对生成的多分支Trie树中的每一个节点进行压缩存储。
优选地,所述压缩存储包括:针对多分支Trie树中的每一个节点,利用两个数组来代替,第一数组存储该节点中的非空指针值,而第二数组存储每一个非空指针值在该节点中的对应位置。
优选地,初始化多分支Trie树结构,使得与根节点相对应的数组中均为空指针。
优选地,针对多分支Trie树中的每一个节点,通过遍历与该节点相对应的数组,将非空指针和其相应的位置分别存储在第一数组和第二数组中。
优选地,所述方法还包括:如果需要查找已存储的IPv6地址前缀,则使用二分法依次查找每一层节点的第二数组。
优选地,步长K等于16。
根据本发明的另一个方面,提供了一种用于存储IPv6地址前缀的设备,包括:划分单元,将IPv6地址前缀划分为具有固定长度K的L个部分,其中K和L均为正整数;存储单元,使用步长为K、层数为L的多分支Trie树结构存储IPv6地址前缀,其中每一个节点使用长度为2K的数组来存储节点指针,节点指针在数组中的位置表示IPv6地址前缀的K个比特;以及压缩单元,利用额外数组对生成的多分支Trie树中的每一个节点进行压缩存储。
优选地,所述压缩单元针对多分支Trie树中的每一个节点,利用两个数组来代替,第一数组存储该节点中的非空指针值,而第二数组存储每一个非空指针值在该节点中的对应位置。
优选地,所述存储单元初始化多分支Trie树结构,使得与根节点相对应的数组中均为空指针。
优选地,所述压缩单元针对多分支Trie树中的每一个节点,通过遍历与该节点相对应的数组,将非空指针和其相应的位置分别存储在第一数组和第二数组中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于赛尔网络有限公司,未经赛尔网络有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010611546.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种压脉带连续自动抽紧装置
- 下一篇:一种甲状腺拉钩