- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种实用高效的FIB压缩算法
摘要:研究了高性能路由器FIB空间压缩的问题。基于多位特里算法和结构化分割的方式构造FIB表,实现FIB表的结构冗余和信息冗余的消除。以学校接入路由器FIB数据和FIB自动生成工具生成的FIB数据进行压缩效率对比分析实验,表明该算法具有接近信息熵边界的压缩效率和较高的转发性能。
关键词:FIB表压缩;多位特里树;结构分割;FIB信息熵
中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2014)25-0245-02
现今,由于网络规模的不断增长,影响IP查询效率的FIB(Forward Information Base)表越来越庞大,需要占用更大的存储空间,对路由器线卡上的网络处理器(NP:Network Processor)的要求也就越高。文献[1]指出当前预设自由区(DFZ:Defaul Free Zone)中活动IPv4路由前缀超过440,000,IPv6前缀也会很快达到这个程度。基于此,许多专家认为不断增加的存储需求迟早成为高性能路由器转发平面的瓶颈[2]。FIB聚合是一种有效的降低FIB表大小、延长已部署网络设备生命周期、缓解互联网路由扩张带来的扩展性的解决方案[3,4]。其中以ORTC[3]为代表的降低FIB表转发语义冗余和以多位特里树[4]为代表的降低FIB表结构冗余的方案最为典型。FIB压缩除了要考量压缩空间效率,还需要考虑压缩后FIB查找和更新的算法复杂度必须在可控制范围内。只有满足了这两个条件,才有可能得到实际应用。本文以多位特里树算法为基础,采用多位巴罗斯―惠勒编码,通过降低FIB表的信息冗余的方式,将FIB表压缩到进一步接近FIB信息熵边界的程度。同时,通过采取结构化分割处理的方式,按照设定的子树深度门限,将FIB多位特里树分割成主干树和特里子树,降低FIB查找算法的时间复杂度。
一、系统概述
1.FIB冗余消除。为了实现FIB压缩,首先需弄清楚FIB有哪些信息冗余。路由器中一个FIB表是由地址前缀及其关联的下一跳索引标识构成的。下一跳索引标识取值可以用[1,K]的整型表示。我们将FIB的条目数记为N。一个路由器不需要维护与互联网中的其他所有路由器之间的邻接关系,即KN。同时,我们用W来表示地址长度,如对于IPv4地址W取值32。为了实现分组转发,需要用分组中的目的地址匹配FIB表中最长的地址前缀条目,条目中的下一跳索引标识指导分组向指定邻居转发。这种列表FIB组织方法的转发效率不高,单个查找操作需要O(N)次,存储需要O((log(K)+W)N)位。利用二叉搜索树、前缀树或特里树来组织FIB表,可以优化FIB查找效率。地址空间W位中的每一位都相当于树中的一层,按目的地址的位置来指导FIB查找:位值为0走向左子树,位值为1走向右子树。前缀树可以将FIB查找由O(N)提升到O(W),虽然会付出一定存储空间增长的代价。
2.FIB层次消减。即使按照多位特里树结构来组织FIB,FIB查找的时间复杂度是O(W)。由于前缀地址长度W可以到128位(IPv6地址),要实现分组的线性转发还需要通过层次消减,减少FIB查询次数才有可能。可以通过将FIB结构分割的方式减少FIB树的层次。将源多位特里树分割为设定层次阈值内的多个特里子树。子树根节点作为中继节点实现各子树的关联。
二、算法实现
1.多位特里子树节点生成。本文在实现算法中,每个特里子树节点采用多位特里算法生成。首先通过叶压入算法生成多位特里树,然后利用巴斯特―惠勒编码,将多位特里树进行编码转换。这个基于巴斯特―惠勒编码的多位特里树节点生成算法可用一个三元组表示:XB(T)=(Slast,SI,Sa)来表示。其中:Slast和SI是描述特里子树结构的编码,Sa是描述特里子树下一跳索引标识的编码。其中各子串的生成方法如下:Slast是一个长度为N的位串,如果在T中第i个节点是层级中最后一个“孩子”,则该位置1,否则置0;SI是一个长度为N的位串,如果T中第i个节点是内节点,则该位置0,否则置1;Sa长度为N的串,用来编码叶标识。为了实现巴斯特―惠勒转换,需要使用树的宽度优先来实现。假定根是last:Slast[0]=1,对于一个有t个节点的叶标识特里树T,XB(T)转换可以在O(t)时间内完成。
2.层次化多位特里子树构建。形成巴斯特―惠勒编码的多位特里树后,需要根据设定的子树层级阈值进行结构化分割。当子树层次超过设定层次阈值时,将子树结构化分割为多个特里子树。结构化分割为两个过程:节点增加和节点删除过程。当进行特里子树节点删除操作时,如果子树层次深度小于设定阈值h,且该子树拥有一个父特里子树,则需要将特里子树的根合并到父特里子树中,同时更新根在
文档评论(0)