专利名称:一种基于ip地址范围的路由查找方法
技术领域:
本发明涉及数据通信,具体涉及一种基于IP地址范围的路由查找方法。
技术背景随着Internet的迅猛发展,用于主干网络互联的核心路由器的接口速率 已经达到了 2.5Gbps到10Gbps。这一速率要求核心路由器能够每秒钟转发 几百万到上千万个以上的分组。分组转发的重要一步就是查找路由表,因此 快速的IP地址查找算法是实现高速分组转发的关键。IP地址查找需要实现最长路由前缀匹配。近年来,研究人员提出了多种 路由查找算法以提高查找性能。现有技术公开了多种IP路由查找的方法。 在已公开的路由查找方法可以按照其对路由前缀的处理方式归为以下两类 l)按路由前缀对应的二进制字符串查找的方法2 )按路由前缀表示的IP地址 范围查找的方法。在第一类方法中,路由前缀是按路由前缀的掩码来表示的。每条由IP 地址加路由前缀长度构成的路由前缀Pj,都可以表示成诸如"0100****"形 式的二进制比特串,其中最高几位是由IP地址与路由前缀长度的掩码相与 得来的Ol串,从掩码为0的位起全记做*,直到最低位止。每个通过路由器 的IP包的目的IP地址都可以表示成二进制的比特串T者如"01001010"。在 该类方法中,路由查找中的匹配即是指当目的地址代表的二进制的比特串与 路由前缀代表的比特串相匹配,由"*,,表示的位能同时匹配"0"和"1", 最佳匹配即是指在所有匹配的比特串里拥有最长路由前缀长度-即包含最 少"*"-的那一个匹配。在第一类方法里,公开的技术方法有二进制trie树,路径压缩trie树 (Path-Compressed Trie ) Sklower[21],多分支Trie树(Multi-bit Trie )及相 关的优4匕方法Srinivasan [22].。在第二类方法中,路由前缀是用路由前缀的范围表示。每条由IP地址 加路由前缀长度构成的路由前缀Pj,都代表着IP地址空间上一段连续的IP 地址范围,因此将Pj表示成由一个闭区间和一个数值组成的二元组([Pj.Start, Pj.End ], Pj.length )其中Pj.Start, Pj.End分别代表这个IP 地址范围的起始点和结束点,Pj.length代表该路由前缀的路由前缀长度。 每个经过路由器的IP数据报的目的IP地址都代表着IP地址空间上的一个 点。在该类方法中,路由查找结果的匹配即是指当目的地址代表的点落入某 个二元组表示的区间里,最佳匹配即是指在所有匹配的二元组里拥有最长路 由前缀长度的那一个^^由前缀。在第二类方法里,公开的技术方法有ButlerLampson在[23]中提出的第 一个按路由前缀范围检索算法及一系列针对其改进的方法。因为路由前缀之 间可能存在着包含关系,这些包含关系是由实际的网络应用产生的,如多穴 (Multi-homed )主机,或负载均衡等。在[23]中需要预先计算并保存信息来 完成最长路由前缀匹配,如果目的路由前缀在地址空间上分割的小区间,每 个基本区间记为Ik (k>0,kZ),那么对每个Ik都需要预先计算出落入该区 间的数据报的最长匹配路由前缀。如图1所示的一个路由前缀实例集合,需 要按图2所示的所示的箭头方向,提前计算找到包含基本区间Ik的最长路由 前缀匹配,以避免在查找时的回溯。预先计算信息不仅意味着需要更多的存 储空间,同时意味着该方法在路由表重建的初始时间较长。发明内容本发明需要解决的技术问题是如何提供一种基于IP地址范围的路由查 找方法,不需要预先计算信息,并能减少了查找的路由表条目,提高查找时 间。本发明的上述技术问题这样解决,提供一种基于IP地址范围的路由查 找方法,包括以下步骤1.1) 按路由表中路由前缀包含关系分层次划分路由前缀子集合;1.2) 根据接收目的IP地址由高到低逐层在已确定上层路由前缀包含的 下一层路由前缀子集合范围内精确查找直至对应下一层路由前缀子集合为空并将最后 一个确定的路由前缀对应下一跳端口作为查找结果。按照本发明提供的路由查找方法,这种按路由前缀包含关系分层次划分 路由前缀子集合,不仅仅是一种规则,而是一种适用于无类域间路由选择CIDR地址结构的通用方法,不仅仅适用于IPv6同样适用于IPv4。按照本发明提供的路由查找方法,本发明在子路由前缀集合里的查找是 精确查找,可以使用现有的很成熟的查找算法,包括但不限制于哈希查找, 二分查找等。按照本发明提供的路由查找方法,该路由查找方法可以采用以下类型作 为表示路由前缀集合的基本数据结构,所述步骤l.l)是该基本数据结构的初 始化建立,所述类型包括但不限制于平衡树,包括B树和B+树,AVL树等。本发明提供的一种基于IP地址范围的路由查找方法,按路由前缀包含 关系分层次划分路由前缀子集合然后逐级精确查找,与现有的按照地址范围 查找的IP路由查找方法,本发明的有以下优势l)由于不需要预计算信息, 划分的思想使数据结构中只存路由表中存在的目的路由前缀信息,没有路由 前缀扩展或其他因素造成的冗余信息。它的空间复杂度是O(N)。 2)同时该 方法采用按路由前缀包含层次逐级的精确查找,在每一查找不但能够找到 一次匹配,并且为下一次匹配提供了更精确的搜索空间范围,因此在查找的 过程了裁减了解空间范围,即减少了查找的路由表条目,缩短了查找时间。 3)无预计算过程,减小了初始化时间。4)该方法隐含递归的设计思想,便 于实施时的程序设计。
下面结合附图和具体实施例进一步对本发明进4亍详细说明。 图1是 一种路由表实例的路由前缀范围表示。图2是需要预计算信息的普通的路由前缀范围查找方法的预计算示例。图3是图2所示路由表实例的初始化过程建立的数据结构。图4是某个目的IP在图3所示路由表实例的建立的数据结构上的查找过程。
具体实施方式
首先,说明本发明基础1) 包含路由前缀与被包含路由前缀对于CIDR地址结构中的路由前 缀,用一个形如[IP地址/路由前缀长度]的对来表示,每一个这样的路由前缀, 代表了 IP地址空间上一段连续的地址范围。(iX),ieZ)记为路由前缀 i, SetU)记为路由前缀i所包含的IP地址范围,如果Set(A)cSetO》,那么 P,则被定义为p,的包含路由前缀,A被定义为^的纟皮包含路由前缀。2) 第m层路由前缀如果Set(/ 。)cSet(a), Set(a)cSet(a),… SetOJcSet(A) (a<b<c<...<m<n)同时满足,并且包含关系被传递,某路 由前缀A(a「i《n)在包含链中所处的逆序位置为m,则定义A为第m层路 由前缀。第二步,说明本发明方法,具体包括 步骤0:初始化设定默认路由为路由前缀长度为0的路由前缀,将默认路由划为第1层 路由前缀集合。步骤0.1将其余所有不被路由前缀长度非0的路由前缀包含路由前缀,划入第2 层路由前缀集合。步骤0.2设置m的初始值为2, i的初始值为1。对于第m (m>0,meZ)层路由前缀集合里的路由前缀p, (iX),ieZ), 找到仅被它包含并且不被第m层以下(即第m+1, m+2, m+3…)层路由前 缀包含的所有路由前缀,将这些路由前缀放置入由p,的下一层索引字段索引 的第m+l层路由前缀集合里。i加1,重复步骤0.2。m加1,重复步骤0.2。 步骤1:设置m的初始值为1。对每个路由器收到的目的IP地址,在第m层的路由前缀集合进行查找。 如果匹配上该路由前缀集合中的某一条路由前缀A (i>0, ieZ),记下当前 最佳匹配i 各由前缀^。步骤2:检查P,的下一层索引字段,如果p,.的下一层索引字段为空,则结束查找, 将当前最佳匹配路由前缀返回作为最长匹配的路由前缀。如果非空,则按 照的下一层索引字段索引到被A包含的下一层路由前缀集合,m值加1; 跳转到步骤1。最后,结合具体实施例详细i兌明本发明实施方案的选取关键在于选择合适的数据结构来表示每一层路由前缀 集合,以提供高效的查找插入删除操作。作者在此给出一个使用了 height-balance (高度平衡的)平衡树B树的实施实例。(1 )初始化-基本的数据结构建立方法采用B树作为表示路由前缀集合的基本的数据结构。对普通的B树键 值增加了两个字域, 一个开始结束标志,表示该键值代表地址范围的开始点 还是结束点, 一个下一层索引字段,指向被该地址范围代表的路由前缀包含 的下一层路由前缀集合组成的子Btree。同时对Btree的插入查找做适当修 改,改进的Btree插入查找将返回比关键字稍小的最大的那个值。按照如图1所示的路由表实例,按前缀1,前缀2,前缀3插入的步骤解释 如何建立起如图3所示的数据结构。1 )对路由前缀按照其路由前缀长度从小至大排序,排序的结果为{前缀 l,前缀2,前缀3,前缀4,前缀5,前缀6,前缀7,前缀8 }。2 )创建一个新的B树,Btree A。3)将前缀1转化成地址范围表示,将前缀1的开始地址值作为B树键值插入Btree A,标记记该键值是一个地址范围的开始。4 )将前缀1的结束地址值作为B树键值插入Btree A,标记该^建值是一 个地址范围的结束。5) 将前缀2转化成地址范围表示,将前缀2的开始地址值作为关键字 在Btree A中查找,改进的Btree查找将返回比关键字稍小的最大的那个值, 此时,返回前缀1的开始地址值构造的键值。6) 检查返回键值的下一层索引字段,检查键值的开始结束字段。由返回的键值得知是一个地址范围的开始,于是创建一颗新的B树, Btree B。7) 将返回键值的下一层索引字段赋值Btree B的指针。8) 将前缀2转化成地址范围表示,将前缀2的开始地址值作为B树键 值插入Btree B,标记记该键值是一个地址范围的开始。9 )将前缀2的结束地址值作为B树键值插入Btree B,标记该键值是 一个地址范围的结束。10) 将前缀3转化成地址范围表示,将前缀3的开始地址值作为关键 字在BtreeA中查找,此时,返回前缀1的开始地址值构造的键值。11) 检查返回键值的下一层索引字段非空,由下一层索引字段跳转到 Btree B。12) 前缀3的开始地址值作为关键字在Btree B中查找,此时,返回前 缀2的开始地址值构造的键值13) 检查返回键值的下一层索引字段为空,检查键值的开始结束字段, 是一个开始键值,于是创建一颗新的B树,Btree C。14) 将返回键值的下一层索引字段赋值为Btree C的指针。15) 将前缀3转化成地址范围表示,将前缀3的开始地址值作为B树 键值插入Btree C,标记该键值是一个地址范围的开始。16) 将前缀3的结束地址值作为B树键值插入Btree C,标记该键值是 一个地址范围的结束。如图3所示,通过这种插入过程建立SET分层路由前缀子集合Btree A、 BtreeB、 BtreeC、 Btree D和Btree E。 (2)路由查找过程如图4所示,下面一个以前缀4为最长路由前缀匹配的目的IP地址为 例,说明该实施在已建立的分层路由前缀子集合Btree A、 BtreeB、 Btree C、 Btree D和Btree E中的具体查找过程。1) 在第O层的路由前缀B树Btree A中,目的IP与前缀1匹配(在图 4中用黑色方框显示)。2) 通过前缀1的下一层索引跳转到BtreeB,记录下当前最佳匹配为前 缀l。3 )在BtreeB中目的IP匹配上前缀2,更新当前最佳匹配为前缀2。4) 通过前缀2的下一层索引跳转BtreeC,5) 在路由前缀B树Btree C中目的IP匹配上前缀3,更新当前最佳匹 配为前缀3。6 )通过前缀3的索引跳转到Btree D。7)在路由前缀B树Btree D中目的IP匹配上前缀4,更新当前最佳匹 配为前缀4。因为前缀4没有下一级索引,查找结束,返回最佳匹配前缀4 的下一跳端口号。
权利要求
1. 一种基于IP地址范围的路由查找方法,其特征在于,包括以下步骤1.1)按路由表中路由前缀包含关系分层次划分路由前缀子集合;1.2)根据接收目的IP地址由高到低逐层在已确定上层路由前缀包含的下一层路由前缀子集合范围内精确查找直至对应下一层路由前缀子集合为空并将最后一个确定的路由前缀对应下一跳端口作为查找结果。
2、 根据权利要求1所述路由查找方法,其特征在于,所述IP地址是 IPv4地址。
3、 根据权利要求1所述路由查找方法,其特征在于,所述IP地址是 IPv6i也址。
4、 根据权利要求1所述路由查找方法,其特征在于,该路由查找方 法采用平衡树作为表示路由前缀集合的基本数据结构,所述步骤l.l)是该基 本数据结构的初始化建立。
5、 根据权利要求4所述路由查找方法,其特征在于,所述平衡树是 B树、B+树或AVL树。
6、 根据权利要求1所述路由查找方法,其特征在于,所述步骤1.2) 中的精确查找采用哈希查找。
7、 根据权利要求1所述路由查找方法,其特征在于,所述步骤1.2) 中的精确查找采用二分查找。
全文摘要
本发明涉及一种基于IP地址范围的路由查找方法,包括以下步骤按路由表中路由前缀包含关系分层次划分路由前缀子集合;根据接收目的IP地址由高到低逐层在已确定上层路由前缀包含的下一层路由前缀子集合范围内精确查找直至对应下一层路由前缀子集合为空并将最后一个确定的路由前缀对应下一跳端口作为查找结果。这种方法采用分层次划分和逐级精确查找,仅有目的路由前缀信息、无预计算并裁减查找空间范围,能降低数据空间复杂度,减少查找时间并且有利于程序实现。
文档编号H04L12/56GK101286935SQ200810094680
公开日2008年10月15日 申请日期2008年5月7日 优先权日2008年5月7日
发明者邓晓红 申请人:中兴通讯股份有限公司