背景技术:
在IP网络中,路由器和三层交换机等IP转发设备使用IP路由表控制报文的转发。随着IP网络的高速发展,在大型IP网络中,尤其是在因特网中,路由数量持续增长,在因特网中已经达到几十万条路由的数量级。大容量路由表为IP转发设备带来较大的系统开销,如占用大量内存、查询和维护效率降低等。
在目前的IP转发设备中,高层软件将路由表中的有效路由提交到IP转发引擎,保存在转发路由表中,转发引擎按转发路由表的指示,具体执行报文的高速转发功能。转发引擎可以由软件或硬件实现,但在高速转发设备中通常使用硬件实现。硬件转发引擎的灵活性较低,对转发路由表的容量通常有固定的限制。而目前路由表中的有效路由必须全部提交到转发路由表中,以保证转发引擎能够正确地实施报文转发。路由协议和转发引擎在设备中的关系参见图1:其中图中箭头表示路由提交方向,(1)是物理接口,(2)是链路层协议,(3)是IP转发引擎,(4)是IP层,(5)是TCP/UDP协议层,(6)是单播路由协议层,(7)是单播路由表,(8)是单播路由转发表。
中国专利00804339.6提出了一种高效率转发路由表的实现方法,目的是实现高效率的转发表检索,其中的“压缩”是指路由转发表占用内存空间的减少。而本方法的目的是为了减少提交到转发路由表的路由数量,是在将路由加入转发路由表之前所采取的一种优化方法,其中的“压缩”是指转发路由表中路由数量的减少,这与具体的转发路由表实现方式无关。
发明目的:
本发明针对大容量IP转发设备提出一种转发路由表的压缩方法,通过创建聚合路由减少转发路由表中的路由数量,同时保证不影响正确地执行转发功能。发明的技术方案:
尽管大型IP网络中的路由数量很大,但每个IP转发设备的相邻设备却不会很多,通常在几个到几十个之间,转发设备的目的不过是将数据包转发到这少量相邻设备中的一个,这就为路由的压缩提供了可能。
IP路由表的原理是使用最长匹配方法,即用一个目的IP地址检索转发路由表时,选择被路由网段包含并且网段范围最小(掩码长度最长)的路由,然后把报文转发到路由指定的相邻设备。相邻设备的IP地址在路由表中称为下一跳地址。对于多个下一跳地址相同的路由,可以用一个掩码较短的路由取代,称为聚合路由。对于IP转发来说,采用聚合路由地址的转发效果是相同的,而转发路由表中的路由数量可以因此而减少。当然,并不是所有的下一跳地址相同的路由都可以简单地聚合,需要设计某种方案得到正确的聚合路由。
本方法以当前路由表为基础,采用特定方案计算聚合路由;将聚合路由和不能被聚合的路由提交转发路由表,被聚合路由覆盖的路由不提交转发路由表;由聚合路由取代原先的路由,不影响正确地执行转发功能,同时对转发路由表进行了压缩。
构造路由表常用的数据结构是二叉基树(Radix Tree),基树是目前广泛使用的方法。基树由树节点构成。树节点上可能有路由数据,也可能没有路由数据。没有路由数据的树节点称为空节点,有路由数据的树节点称为实节点。空节点必然有两个子节点,实节点可以有零至二个子节点。在基树中,每个节点至少要包含位高度信息,实节点的位高度即路由的掩码长度。两个兄弟节点从高位开始的第一个不同的位(比特),就是它们的父节点的位高度,并且两个子节点在该位为0的是左子节点,为1的是右子节点。两个实节点有上下级关系,则这两个路由有包含关系,即有相同的一段目的地址前缀,但掩码长度不同。在图2中给出了一个二叉基树的例子,其中a、b、d等节点为空节点,c、e、f等节点为实节点,包含路由信息。
在基树中,一个连续的空节点区域为可优化区间。即这个区域内只包含空节点,并且这些空节点通过二叉树的父指针和左右孩子指针直接连接。在图3的例子中,有3个可优化区间,分别为{a,b,d}、{i,m}、{j}。除了可优化区间的根节点的父节点之外,其他与可优化区间直接连接的实节点为可优化的对象。可优化区间内的优化处理只需要考虑这些实节点。例如图3中第一个可优化区间内的可优化对象为:e、f、g、c。第二个可优化区间内的可优化对象为:l、n、o。不连续的可优化区间之间没有相关影响,聚合计算可以分别进行。在整个路由表中,只要对每个可优化区间分别做优化即可。在基树中,只需在空节点上增加聚合路由,就可达到充分的聚合效果。所以计算聚合路由的过程,也就是考虑每个空节点上是否需要增加聚合路由、聚合路由的下一跳取为什么值的过程。
本发明提出四个级别的优化压缩方法:
1)利用路由表中自然的聚合,被上级路由覆盖而且下一跳相同的路由不
被选中,不向转发路由表提交。例如在图4中,节点h和p、q为可
省略路由,它们被下一跳相同的父节点h和j覆盖,不必向转发表提
交。
2)对一个可优化的区间,仅当整个区间或一个子区间的路由都有相同下
一跳时才生成一个聚合路由,可不覆盖整个区间。例如在图5中,节
点b和j上新增加了聚合路由,它们使得e、f、g、h、p、q等节点不
必向转发表提交,从而压缩了转发表的大小。
3)对一个可优化的区间,取区间内数量最大的下一跳生成一个聚合路
由,覆盖整个区间。例如在图6中,节点a上新增加了聚合路由,它
使得f、g、h、l、o等节点不必向转发表提交,从而压缩了转发表的
大小。
4)对一个可优化的区间,综合考虑生成多个聚合路由,达到整个区间的
选中路由数量最小。例如在图7中,节点a和j上新增加了聚合路由,
它们使得f、g、h、l、p、q等节点不必向转发表提交,从而压缩了转
发表的大小。
这四个级别中,级别一是基础。另外三个级别的优化之后,都要使用级别一的原理选择应该提交的路由,忽略不必提交的路由。它单独使用时,对于正常的路由分布,可以使转发表的大小有所下降。但由于路由协议提供的路由通常不重叠,所以级别1单独使用时优化效果不太明显。级别2和级别3的优化效果比较明显,但不是最优方法。级别4是最优方法,但方案复杂,计算开销大,实用性不强。因此可以将级别2和级别3组合起来,形成一种计算复杂度较小而效果较好的实用优化方法。有益效果:
本方法通过采用聚合路由来取代大量的路由数据,减少了转发路由表中的路由数量,从而能够降低转发引擎的容量压力,减少空间开销,降低成本,提高设备的路由容纳能力。本方法可以应用于IPV4和IPV6网络设备,可应用的设备包括IP网络内的各种转发设备,如路由器、三层交换机、IP网关等。
实施例:
实施中操作流程如下:
1)单播路由协议生成路由或删除路由,提交到路由表
2)路由表维护模块采用下述方案做优化计算
3)如果优化计算得到新的选中路由,则提交到路由转发表
4)如果优化计算使原有的选中路由变成不选中,则从路由转发表删除
其中优化计算的具体流程有3个方案,分别对应到前文说述的3个级别。
级别1的具体处理过程如下:
加入过程:
1)路由R加入路由表;
2)如果R的父节点下一跳与R相同,将R标记为不选中。
3)否则R标记为选中,并检查R的子树,遇到实节点则回溯。
4)如果R的子树有下一跳与R相同的AR,则删除。
5)如果R的子树有下一跳与R相同的普通路由并且选中,则改为不选中。
6)如果R的子树有下一跳与R不同的普通路由并且没选中,则改为选中。
删除过程:
1)如果R没有选中则直接删除。
2)检查R的子树,遇到实节点则回溯。
3)如果R的子树有下一跳与R的父节点相同的AR,则删除。
4)如果R的子树有下一跳与R的父节点相同的普通路由并且选中,则改为
不选中。
5)如果R的子树有下一跳与R的父节点不同的普通路由并且没选中,则改
为选中。
6)路由R从路由表删除;
级别2的具体处理过程如下:
加入过程:
1)路由R加入路由表;
2)如果R的父节点下一跳与R相同,则结束。3)如果R的父节点是AR,则删除父节点AR,并为父节点的另一分支重新计算AR。4)从R向上逐步检查兄弟子树,遇到实节点则回溯。找到包含R的并且下一跳都与R相同的最大子树。5)在最大子树的根节点增加一个AR。下一跳就是R的下一跳。6)每次加入删除路由都使用级别1的方法调整相邻的AR。删除过程:1)如果R的父节点是AR,则删除父节点AR。2)找到R的一个兄弟节点B。3)删除路由R。4)用级别2的加入过程处理B节点,重新建立这个区域的AR。5)每次加入删除路由都使用级别1的方法调整相邻的AR。级别3的具体处理过程如下:加入过程:1)路由R加入路由表;2)找到R上方第一个非空父节点。3)如果父节点下一跳与R相同,则结束4)否则如果父节点是AR,删除这个AR5)如果父节点不是AR,检查父节点下的直接下属非空子节点,如果下一跳都与R相同,则在父节点下方增加AR。6)对R的左右子树各取一个直接下属非空子节点,重复以上处理。7)每次加入删除路由都使用级别1的方法调整相邻的AR。删除过程:1)找到R上方第一个非空父节点。2)如果父节点不是AR,则直接删除R,结束。3)如果R的左右子节点是AR,删除这些AR。4)取R的一个直接下属非空子节点,用级别3的加入过程处理它,重新建立这个区域的AR。5)每次加入删除路由都使用级别1的方法调整相邻的AR。