CN101277252A - 多分支Trie树的遍历方法 - Google Patents
多分支Trie树的遍历方法 Download PDFInfo
- Publication number
- CN101277252A CN101277252A CNA2007100487830A CN200710048783A CN101277252A CN 101277252 A CN101277252 A CN 101277252A CN A2007100487830 A CNA2007100487830 A CN A2007100487830A CN 200710048783 A CN200710048783 A CN 200710048783A CN 101277252 A CN101277252 A CN 101277252A
- Authority
- CN
- China
- Prior art keywords
- node
- prefix
- traversal
- mask
- trie 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 238000012545 processing Methods 0.000 claims abstract description 14
- 230000015654 memory Effects 0.000 abstract description 14
- 230000006870 function Effects 0.000 abstract description 11
- 101100269850 Caenorhabditis elegans mask-1 gene Proteins 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/93—Document management systems
- G06F16/94—Hypermedia
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- General Business, Economics & Management (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及网络技术,特别涉及IP地址查找方法。本发明为解决多分支Trie树遍历性能与内存消耗的矛盾,公开了一种多分支Trie树的遍历方法,以提高遍历性能,并降低内存消耗。本发明的技术方案是,采取由小到大的先根遍历方式,在处理一个节点时,先与上次处理过的记录相比较,若已处理过则遍历下一个节点,否则用处理函数处理此节点;在处理完一个节点后,记录此节点的位置信息、其位置对应的IP前缀信息以及其各级祖先的块指针和IP前缀信息。本发明的有益效果是,减少了存储量,不需要分配和释放内存,也不需要缓存本级其它的IP前缀信息,也不需要与本级其它的IP前缀比较,遍历性能高。而且由于采用先根遍历方式,故可以保证处理顺序。
Description
技术领域
本发明涉及网络技术,特别涉及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个中间结点,从而需要占用存储空间为(2K×W/K),所以N个前缀多分支Trie树的存储容量为(2K×N×W/K)。对多分支Trie树来说,查找速度与存储容量是一对互相矛盾的性能指标。当步宽K较大时,Trie树的深度相对较大,查找性能较差,但是存储空间的需求小。因此可以根据实际系统的软、硬件条件选择多分支Trie树的步宽K值。
由于多分支Trie树查找过程中的每一步需要检查多个比特,因此它不能支持任意长度的地址前缀。为了能够用多分支Trie树来进行前缀查找,路由表中的地址前缀需要转换成多分支Trie树查找能够允许的地址前缀才行,最直接的方法就是前缀扩展法。如:前缀1*所覆盖的地址范围既可以扩展为:10*,11*,也可以扩展为:100*,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前缀比较,遍历性能高。而且由于采用先根遍历方式,故可以保证处理顺序。
附图说明
图1是本发明的程序流程图;
图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是上一次输出的前缀的位置,prefix1/mask1是其前缀和掩码。
首先判断当前块是否是已输出过的a.b.c.d所在的块。如前缀g.h中h所在块就不是上次输出的前缀所在的块,此时将h的前缀和掩码与prefix1/mask1相比较,如果两者均小,则说明h所表示的前缀已输出过,否则说明此前缀是未输出过的,需要输出。
如果是a.b.c.d所在的块,如前缀a..b.e,此时需要先将e点的前缀prefx与prefix1相比,若prefx小于prefix1,则再看e点的掩码mask。如果mask是8的倍数,则说明此节点前缀已输出过,否则如果e有父节点(也即b有对应的前缀和掩码),且mask等于父节点的掩码,则说明e的前缀已输出过,如果没有父节点,但从此前缀所在第一个位置开始查,直到当前位置,如果有相同掩码的节点,说明也输出过。如果不是如上情况则说明是新前缀需要输出处理。
如果是a.b.c.d所在的块,且prefix等于prefix1,再比较掩码。如果e点的掩码mask等于mask1,则说明此前缀已输出过,否则如果mask小于mask1,并且此节点处于L1,则说明此前缀已输出过,否则如果此节点掩码等于父节点掩码,也说明此前缀输出过,否则就是新前缀,未输出过需要输出处理。
如果是a.b.c.d所在的块,且prefix大于prefix1,则说明此前缀是新前缀,需要输出处理。
在步骤110中,对未输出过的节点对应的IP前缀进行输出。
在步骤120中,记录此IP前缀对应的位置、级数、前缀和掩码信息,和此节点的父节点,各祖先节点的块首指针、前缀和掩码信息。当此节点位于第一级时,只需要记录一个节点的信息。当此节点位于第二级时,需要记录两个节点的信息,依此类推,四级的m-trie树,最多只需要记录四个节点的信息。图2中,当IP前缀是a.b.c.0/24时,需要记录a点的前缀,掩码,块首指针p0,b点的前缀,掩码,块首指针p1,c点的前缀,掩码,块首指针p2,以及位置信息,是位于第三级,也即L3的a.b.c。
在步骤130中,判断是否是叶节点,如果是,就继续本块的下一个节点的遍历。
如果是内节点,在步骤140中,准备递归参数,也即记录此节点的前缀和记录此内节点的下一级块首指针,也即子块的首指针。然后递归调用此遍历函数进入下一级子块的遍历。在从递归调用退出后,继续本块的下一个节点的遍历,也即进入步骤50。
Claims (3)
1. 多分支Trie树的遍历方法,包括以下步骤:
a.从根节点开始遍历,每次遍历一个块;
b.判断节点是否为有效节点,对有效节点计算其前缀和掩码;
c.根据计算得到的前缀和掩码,判断节点对应的前缀是否已经处理过;若是,则遍历下一个节点,否则用遍历时传入的处理函数处理此前缀;
d.处理完一个节点,记录此节点对应的前缀、掩码、所在级数、节点的位置信息以及位置存储的前缀、掩码和块首指针信息。
2. 根据权利要求1所述的多分支Trie树的遍历方法,其特征在于,步骤c中,下列判断结果为是,则所述节点对应的前缀已处理过:
判断节点的前缀与上次处理过的节点的前缀是否相等或较小;
判断节点的掩码与上次处理过的节点的掩码是否相等或较小。
3. 根据权利要求1所述的多分支Trie树的遍历方法,其特征在于,步骤c中,所述处理函数为输出函数,所述处理此前缀是指输出此前缀。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007100487830A CN101277252A (zh) | 2007-03-30 | 2007-03-30 | 多分支Trie树的遍历方法 |
PCT/CN2008/000531 WO2008119242A1 (fr) | 2007-03-30 | 2008-03-18 | Méthode de recherche dans un arbre multi-bit de type trie |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007100487830A CN101277252A (zh) | 2007-03-30 | 2007-03-30 | 多分支Trie树的遍历方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101277252A true CN101277252A (zh) | 2008-10-01 |
Family
ID=39807797
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2007100487830A Pending CN101277252A (zh) | 2007-03-30 | 2007-03-30 | 多分支Trie树的遍历方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN101277252A (zh) |
WO (1) | WO2008119242A1 (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102195853A (zh) * | 2010-03-09 | 2011-09-21 | 杭州华三通信技术有限公司 | 一种保存位图的方法和装置 |
CN102571599A (zh) * | 2012-02-08 | 2012-07-11 | 福建三元达通讯股份有限公司 | 一种路由表项的快速存储方法 |
WO2014183531A1 (zh) * | 2013-05-17 | 2014-11-20 | 华为技术有限公司 | 一种分配远程内存的方法及装置 |
WO2015109586A1 (en) * | 2014-01-27 | 2015-07-30 | Hewlett-Packard Development Company, L.P. | Multi-bit trie based indexed shape graph |
CN105141525A (zh) * | 2015-06-30 | 2015-12-09 | 杭州华三通信技术有限公司 | IPv6路由查找方法及装置 |
CN108989222A (zh) * | 2017-06-05 | 2018-12-11 | 中兴通讯股份有限公司 | 一种网络路由发布的方法及装置 |
CN109376272A (zh) * | 2018-09-03 | 2019-02-22 | 中新网络信息安全股份有限公司 | 一种基于字典树的ip匹配方法 |
CN112219199A (zh) * | 2017-03-15 | 2021-01-12 | 森塞尔公司 | 在数据库中对trie数据结构的有效使用 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9378304B2 (en) | 2013-01-16 | 2016-06-28 | Google Inc. | Searchable, mutable data structure |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6697363B1 (en) * | 2000-06-28 | 2004-02-24 | Alcatel Canada Inc. | Method and apparatus for longest matching prefix determination in a communication network |
US20030174717A1 (en) * | 2002-03-15 | 2003-09-18 | Boris Zabarski | System and method for longest prefix match for internet protocol lookup |
US7486672B2 (en) * | 2004-04-20 | 2009-02-03 | Samsung Electronics Co., Ltd. | Apparatus and method for searching trie trees using masks with non-symbol boundaries and flooding default routes in a massively parallel router |
-
2007
- 2007-03-30 CN CNA2007100487830A patent/CN101277252A/zh active Pending
-
2008
- 2008-03-18 WO PCT/CN2008/000531 patent/WO2008119242A1/zh active Application Filing
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102195853B (zh) * | 2010-03-09 | 2013-09-04 | 杭州华三通信技术有限公司 | 一种保存位图的方法和装置 |
CN102195853A (zh) * | 2010-03-09 | 2011-09-21 | 杭州华三通信技术有限公司 | 一种保存位图的方法和装置 |
CN102571599A (zh) * | 2012-02-08 | 2012-07-11 | 福建三元达通讯股份有限公司 | 一种路由表项的快速存储方法 |
CN102571599B (zh) * | 2012-02-08 | 2014-12-10 | 福建三元达通讯股份有限公司 | 一种路由表项的快速存储方法 |
CN104166597B (zh) * | 2013-05-17 | 2018-07-03 | 华为技术有限公司 | 一种分配远程内存的方法及装置 |
WO2014183531A1 (zh) * | 2013-05-17 | 2014-11-20 | 华为技术有限公司 | 一种分配远程内存的方法及装置 |
CN104166597A (zh) * | 2013-05-17 | 2014-11-26 | 华为技术有限公司 | 一种分配远程内存的方法及装置 |
WO2015109586A1 (en) * | 2014-01-27 | 2015-07-30 | Hewlett-Packard Development Company, L.P. | Multi-bit trie based indexed shape graph |
CN105141525A (zh) * | 2015-06-30 | 2015-12-09 | 杭州华三通信技术有限公司 | IPv6路由查找方法及装置 |
CN105141525B (zh) * | 2015-06-30 | 2018-08-10 | 新华三技术有限公司 | IPv6路由查找方法及装置 |
CN112219199A (zh) * | 2017-03-15 | 2021-01-12 | 森塞尔公司 | 在数据库中对trie数据结构的有效使用 |
US11899667B2 (en) | 2017-03-15 | 2024-02-13 | Censhare Gmbh | Efficient use of trie data structure in databases |
CN108989222A (zh) * | 2017-06-05 | 2018-12-11 | 中兴通讯股份有限公司 | 一种网络路由发布的方法及装置 |
CN108989222B (zh) * | 2017-06-05 | 2022-02-25 | 中兴通讯股份有限公司 | 一种网络路由发布的方法及装置 |
CN109376272A (zh) * | 2018-09-03 | 2019-02-22 | 中新网络信息安全股份有限公司 | 一种基于字典树的ip匹配方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2008119242A1 (fr) | 2008-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101277252A (zh) | 多分支Trie树的遍历方法 | |
Li et al. | Packet forwarding in named data networking requirements and survey of solutions | |
CN103238145B (zh) | 用于网络装备中的高性能、可更新和确定的哈希表的方法和设备 | |
CN102377664B (zh) | 一种基于tcam的区域匹配装置和方法 | |
EP2560327B1 (en) | Routing table establishment method and device | |
CN100536435C (zh) | 一种基于二叉树的流分类查找方法 | |
CN103051543A (zh) | 一种路由前缀的处理、查找、增加及删除方法 | |
CN101667958A (zh) | 选择哈希函数的方法、存储及查找路由表的方法及装置 | |
US7054994B2 (en) | Multiple-RAM CAM device and method therefor | |
CN102045412B (zh) | IPv6地址前缀压缩存储方法及设备 | |
CN101286935A (zh) | 一种基于ip地址范围的路由查找方法 | |
CN104158744A (zh) | 用于网络处理器的建表和查找方法 | |
CN114884877B (zh) | 一种哈希表和HOT相结合的IPv6路由查找方法 | |
CN103577564A (zh) | 通过软件搬移降低hash冲突的方法及装置 | |
Wuu et al. | A longest prefix first search tree for IP lookup | |
CN101241499A (zh) | Patricia树快速查找方法 | |
CN110995876B (zh) | 一种ip存储与查找的方法及装置 | |
CN105791132B (zh) | 一种基于多路搜索树路由查找的表项更新方法及装置 | |
KR20100022565A (ko) | 해시트리를 이용한 url 검색방법 | |
CN102984071A (zh) | 分段地址路由的路由表组织方法及查找路由的方法 | |
CN104301227B (zh) | 基于tcam的高速低功耗ip路由表查找方法 | |
Demetriades et al. | An efficient hardware-based multi-hash scheme for high speed IP lookup | |
Lin et al. | A multi-index hybrid trie for lookup and updates | |
CN113343034A (zh) | Ip查找方法、系统及存储介质 | |
Erdem | Pipelined hierarchical architecture for high performance packet classification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20081001 |