多分支Trie树的遍历方法

文档序号:7646604阅读:1340来源:国知局
专利名称:多分支Trie树的遍历方法
技术领域
本发明涉及网络技术,特别涉及IP地址査找方法。
技术背景随着Internet的迅猛发展,用于主干网络互联的核心路由器的接 口速率己经达到了 2.5Gbit/s到10Gbit/s。这一速率要求核心路由器能 够每秒钟转发几百万到上千万个以上的分组。分组转发的重要一步就 是查找路由表,因此快的IP地址查找算法是实现高分组转发的关键 技术。IP地址查找需要实现最长前缀匹配。传统的二进制Trie树和 路径压縮Trie树的不足之处在于查找过程需要大量的存储器访问操 作。近几年来,随着对路由器研究的逐步深入以及对于路由器性能要 求的不断提高,人们提出了多分支Trie树査找算法,与二进制Trie 树和路径压縮Trie树等传统的地址前缀査找方法相比,这个算法在查 找性能方面有了很大的提高。如果把每一次査找中需要检查的比特数称为査找步宽,那么二分 支Trie树实际上就是查找步宽为1的Trie树,多分支Trie树(或称 为m-trie树)是査找步宽大于1的Trie树。多分支Trie树算法是基于前缀长度空间内的线性查找思想,但是 由于多分支Trie树采用大于1的步宽,所以查找性能得到了很大的提 高。假设多分支Trie树的每一步步宽均为K,当查找地址长度为W 时,查找过程的算法复杂度为(W/K)。多分支Trie树的每一个中间 结点都需要包含2K个分支,最差情况下每加入一个新前缀,需要在 Trie树中加入W/K个中间结点,从而需要占用存储空间为(2KX W/K),所以N个前缀多分支Trie树的存储容量为(2KXNXW/K)。 对多分支Trie树来说,查找速度与存储容量是一对互相矛盾的性能指 标。当步宽K较大时,Trie树的深度相对较大,查找性能较差,但是 存储空间的需求小。因此可以根据实际系统的软、硬件条件选择多分支Trie树的步宽K值。由于多分支Trie树査找过程中的每一步需要检查多个比特,因此 它不能支持任意长度的地址前缀。为了能够用多分支Trie树来进行前 缀查找,路由表中的地址前缀需要转换成多分支Trie树查找能够允许 的地址前缀才行,最直接的方法就是前缀扩展法。如前缀1*所覆 盖的地址范围既可以扩展为10*, 11*,也可以扩展为 画*,101*,110*, 111*。当用m-trie树组织IP前缀表时,有时需要遍历整个m-trie树, 而由于m-trie的节点是扩展过的,可能多个节点存储的信息都是同一 个IP前缀,故在遍历时需要从各个节点中恢复出原来的IP前缀,针 对真实的IP前缀做需要的处理,而不是针对每个节点做处理,以免 针对一个IP前缀处理多次。遍历的一般的做法是记录己处理过的前 缀项,与后续需要处理的节点中的前缀进行比较,这通常需要消耗大 量的内存,性能也较低。另一种做法是在各个IP前缀的具体信息中 增加字段,使整个表中的IP前缀链起来成为线性表,这种方法遍历 性能较高,但会使本已很庞大的m-trie树占用更多内存,而且此方法 存在另一个问题是,其处理前缀时没有顺序,按加入的顺序处理, 当在显示前缀项时,其输出的IP前缀项是没有顺序的,这不利于检 査和问题定位,若要改进其无序的问题,则会增加更新m-trie树的复 杂度。 发明内容本发明所要解决的技术问题,就是提供一种多分支Trie树的遍历 方法,以提高遍历性能,并降低内存消耗。本发明解决所述技术问题,采用的技术方案是,多分支Trie树的 遍历方法,包括以下步骤a. 从根节点开始遍历,每次遍历一个块;b. 判断节点是否为有效节点,对有效节点计算其前缀和掩码;c. 根据计算得到的前缀和掩码,判断节点对应的前缀是否已经 处理过;若是,则遍历下一个节点,否则用遍历时传入的处理函数处理此前缀;d.处理完一个节点,记录此节点对应的前缀、掩码、所在级数、 节点的位置信息以及位置存储的前缀、掩码和块首指针信息。进一步的,步骤C中,下列判断结果为是,则所述节点对应的前 缀己处理过判断节点的前缀与上次处理过的节点的前缀是否相等或较小; 判断节点的掩码与上次处理过的节点的掩码是否相等或较小。 特别的,步骤C中,所述处理函数为输出函数,所述处理此前缀 是指输出此前缀。本发明的有益效果是,在遍历过程中仅保存最近处理过的一个节 点对应的位置信息、IP前缀信息和其位置相关的最多四个前缀掩码信 息,不需要分配和释放内存,也不需要缓存本级其它的IP前缀信息, 也不需要与本级其它的IP前缀比较,遍历性能高。而且由于采用先 根遍历方式,故可以保证处理顺序。


图l是本发明的程序流程图;图2是判断节点对应的IP前缀是否处理过的示意图。
具体实施方式
以下结合附图及实施例,详细描述本发明的技术方案。 本发明可用于路由器、包交换系统或者其它通信或计算机系统中,当使用m-trie树存储IP前缀时,对m-trie树遍历的方法。 本发明中涉及的术语含义为 级数——是指m-trie树从根到此节点的深度; 有效节点——节点中的valid标志为1,且含有路由信息,也即掩码长度不为0的节点;叶节点——是指该节点下一级指针为空;内节点——是指该节点下一级指针不为空,有儿子节点;处理函数——是指用于处理节点的函数,如输出函数,设置标志的函数等;块——包含2K个相邻节点,是一个节点的所有儿子节点的集合。 本发明的核心思想是采取由小到大的先根遍历方式,在处理一个 节点时,先与上次处理过的记录相比较,若已处理过则遍历下一个节 点,否则用处理函数处理此节点。在处理完一个节点后,记录此节点 的位置信息、其位置对应的IP前缀信息以及其各级祖先的块指针和 IP前缀信息。下面以用m-trie树存储的IPv4路由表为例进行详细描述。遍历 中使用固定步长K二8,也就是此m-trie树是8 — 8 —8 —8的四级结构, 每级有28 二256个节点。这里的处理函数以输出函数为例,也即以显 示路由表为例说明本发明的遍历方法。参见图1,由于采用递归方式实现,在步骤10中先判断此次遍 历是由于递归进入的,还是从外部调入的;若是递归进入的,则从递 归参数中得到本次遍历的块指针,否则就是m-trie树的树根。在步骤40中计算当前级数,并计算当前级对应的前缀值。由于 m-trie树中路径对应的就是其bit位的信息,故需要将路径转换为前 缀值。在步骤50中从块首开始依次遍历28个节点。判断是否完成本块 的遍历。如果完成本块遍历,就在步骤60中对级数减1,并结束本块的 遍历,并从递归中退出,当完成整棵树的遍历时,也是在此处退出。 在步骤70中判断此节点是否是有效节点,若不是则继续下一个节点 的遍历。在步骤80中判断此节点是否有掩码,若有说明此节点包含IP前 缀信息,计算此节点对应的前缀信息。在步骤90中判断此节点是否是叶节点,如果不是,说明是内节点。在步骤150中找到此内节点对应的IP前缀的任意一个叶节点。 在步骤100中判断这个叶节点对应的IP前缀是否己输出过。具体判断方法如下参见图2,假设a.b.c.d是上一次输出的前缀的位置,prefixl/maskl 是其前缀和掩码。首先判断当前块是否是己输出过的a.b.c.d所在的块。如前缀g.h 中h所在块就不是上次输出的前缀所在的块,此时将h的前缀和掩码 与prefixl/maskl相比较,如果两者均小,则说明h所表示的前缀已 输出过,否则说明此前缀是未输出过的,需要输出。如果是a.b.c.d所在的块,如前缀a..b.e,此时需要先将e点的前 缀prefix与prefixl相比,若prefix小于prefixl,则再看e点的掩码 mask。如果mask是8的倍数,则说明此节点前缀已输出过,否则如 果e有父节点(也即b有对应的前缀和掩码),且mask等于父节点的 掩码,则说明e的前缀已输出过,如果没有父节点,但从此前缀所在 第一个位置开始查,直到当前位置,如果有相同掩码的节点,说明也 输出过。如果不是如上情况则说明是新前缀需要输出处理。如果是a.b.c.d所在的块,且prefix等于prefixl ,再比较掩码。如 果e点的掩码mask等于maskl,则说明此前缀已输出过,否则如果 mask小于maskl,并且此节点处于L1,则说明此前缀已输出过,否 则如果此节点掩码等于父节点掩码,也说明此前缀输出过,否则就是 新前缀,未输出过需要输出处理。如果是a.b.c.d所在的块,且prefix大于prefixl ,则说明此前缀是 新前缀,需要输出处理。在步骤110中,对未输出过的节点对应的IP前缀进行输出。在步骤120中,记录此IP前缀对应的位置、级数、前缀和掩码 信息,和此节点的父节点,各祖先节点的块首指针、前缀和掩码信息。 当此节点位于第一级时,只需要记录一个节点的信息。当此节点位于 第二级时,需要记录两个节点的信息,依此类推,四级的m-trie树, 最多只需要记录四个节点的信息。图2中,当IP前缀是a.b.c.0/24时, 需要记录a点的前缀,掩码,块首指针pO, b点的前缀,掩码,块首 指针pl, c点的前缀,掩码,块首指针p2,以及位置信息,是位于第三级,也即L3的a,b.c。在步骤130中,判断是否是叶节点,如果是,就继续本块的下一 个节点的遍历。如果是内节点,在步骤140中,准备递归参数,也即记录此节点 的前缀和记录此内节点的下一级块首指针,也即子块的首指针。然后 递归调用此遍历函数进入下一级子块的遍历。在从递归调用退出后, 继续本块的下一个节点的遍历,也即进入步骤50。
权利要求
1. 多分支Trie树的遍历方法,包括以下步骤a.从根节点开始遍历,每次遍历一个块;b.判断节点是否为有效节点,对有效节点计算其前缀和掩码;c.根据计算得到的前缀和掩码,判断节点对应的前缀是否已经处理过;若是,则遍历下一个节点,否则用遍历时传入的处理函数处理此前缀;d.处理完一个节点,记录此节点对应的前缀、掩码、所在级数、节点的位置信息以及位置存储的前缀、掩码和块首指针信息。
2. 根据权利要求l所述的多分支Trie树的遍历方法,其特征在 于,步骤c中,下列判断结果为是,则所述节点对应的前缀已处理过:判断节点的前缀与上次处理过的节点的前缀是否相等或较小; 判断节点的掩码与上次处理过的节点的掩码是否相等或较小。
3. 根据权利要求l所述的多分支Trie树的遍历方法,其特征在 于,步骤c中,所述处理函数为输出函数,所述处理此前缀是指输出 此前缀。
全文摘要
本发明涉及网络技术,特别涉及IP地址查找方法。本发明为解决多分支Trie树遍历性能与内存消耗的矛盾,公开了一种多分支Trie树的遍历方法,以提高遍历性能,并降低内存消耗。本发明的技术方案是,采取由小到大的先根遍历方式,在处理一个节点时,先与上次处理过的记录相比较,若已处理过则遍历下一个节点,否则用处理函数处理此节点;在处理完一个节点后,记录此节点的位置信息、其位置对应的IP前缀信息以及其各级祖先的块指针和IP前缀信息。本发明的有益效果是,减少了存储量,不需要分配和释放内存,也不需要缓存本级其它的IP前缀信息,也不需要与本级其它的IP前缀比较,遍历性能高。而且由于采用先根遍历方式,故可以保证处理顺序。
文档编号H04L12/56GK101277252SQ20071004878
公开日2008年10月1日 申请日期2007年3月30日 优先权日2007年3月30日
发明者刘宝琴 申请人:迈普(四川)通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1