1 前言
由于路由器及其链路的失效和修复,到达或者经过此路由器的路由会相应的消失又产生。对于一个大的网络,这种情况可能经常出现。于是便产生了路由的不稳定。在RFC2439中,这种路由的不稳定称为路由摆动(route flap)。如果不作任何限制,路由摆动会引起路由器不停地发送路由更新报文,同时也会不断的收到(当然还要处理)其它路由器发送过来的路由更新报文。如果路由更新报文非常大,这在一个大的网络中是完全可能的,很可能会导致网络拥塞和增加路由器CPU的负担,这又可能会导致新的不可达路由。BGP路由抑制(BGP Route Flap Damping)就是BGP用来解决路由摆动问题的一个方案。本文以VRP 1.74为例说明路由摆动抑制实现方法与配置。
2 BGP路由摆动抑制算法
BGP路由抑制的主要原理是这样的:BGP给每条路由设置一个值,称为惩罚值(penalty value)。当某条路由发生摆动时,就给予其惩罚――将其惩罚值增加一个量(固定值:1000)。当惩罚达到一个设定的抑制门限(cutoff value,以后简称cut)时,就将该路由抑制住(不向邻居路由器通告这条路由)。为了让被抑制的路由在不再摆动时能够解除抑制(向邻居路由器通告这条路由),惩罚值可随着时间推移按指数(半衰期法则)递减,当惩罚值下降到一个设定的再使用门限(reuse value,以后简称reuse)时,就解除对该路由的抑制,重新向其它路由器通告该路由。
路由抑制的示意图如下:
路由在t1、t2、t3、t4时刻由于摆动而受到惩罚,而在t3时刻的惩罚值已经超出抑制门限,路由被抑制。t4后,路由不再摆动,随着时间的推移,惩罚值逐渐降低,在t5时刻已下降到再使用门限,路由抑制被解除,路由器又将其通告给邻居路由器。
半衰期(half-time):衡量惩罚值衰减程度的指标,表示惩罚值衰减到一半时所经历的时间。与惩罚值的具体数值,以及从何时进行计算是没有关系的。
惩罚值最高上限(ceiling):当某路由的可达、不可达信息在短时间内频繁出现时,惩罚值会非常高。当路由稳定后,惩罚值回到reuse门限的时间会非常长,为了避免这么长的时间,故设置了惩罚值最高上限。
算法:
1) 惩罚值的初值为f = 0
2) 当收到该路由可达的信息时,f = f +1000
3) 当收到该路由不可达的信息时,f = f +1000
4) f 值按照以下算法递减
f ( t ) = K * f ( t ? delta)
其中
0 < K < 1
delta为计算时间间隔,为恒定值
K = K1, 如果上次收到的是路由可达信息
K = K2, 如果上次收到的是路由不可达信息
K1 = e (- delta * ln( 2 ) / T1) ,
K2 = e (- delta * ln( 2 ) / T2)
T1:half-time-reachable (路由可达半衰期)
T2:half-time-unreachable (路由不可达半衰期)
5) 当f = cut值(cutoff value)时,抑制将该路由(不向邻居路由器通告这条路由)。cut的缺省值是2000。
6) 当f celling值时,f = ceiling。这是为了防止抑制时间过长而采取的限制。最大抑制时间可以根据ceiling,reuse,T1,T2算出来。Ceiling的缺省值是16000。
7) 当f <= reuse值时,解除对该路由的抑制(向邻居路由器通告这条路由)。reuse的缺省值是750。
关于路由抑制的详细原理及计算方法,可参考“RFC 2439 BGP Route Flap Damping”。
3 配置BGP路由摆动抑制
3.1 配置BGP路由摆动抑制(路由衰减)
请在BGP视图下进行下列配置:
dampening [ half-life-reachable half-life-unreachable reuse cut ceiling ] [ route-policy policy-name ]
其中:
● half-life-reachable(可达半衰期):路由可达时,惩罚减少到一半的经历时间。缺省值:15(分钟)。
● half-life-unreachable(不可达半衰期):路由不可达时,惩罚减少到一半的经历时间。缺省值:15(分钟)。
● reuse(再使用门限):惩罚低于它,路由解除抑制。缺省值:750。
● cut(抑制门限):惩罚超过它,路由被抑制。缺省值:2000。
● ceiling(惩罚的最高限度):惩罚值的最高上限。缺省值:16000。
缺省情况下,未配置BGP路由衰减。
需要注意的是:命令中各参数相互依存的,只要配置了其中之一,就必须同时指定其它各项参数。
BGP路由衰减其它配置:
3.2 路由摆动信息的显示
4 其他
不同厂家和不同版本的路由器可能采用不同的配置参数,但大都遵循RFC2439。如有的路由器采用的是最大抑制时间参数(max_cut_time),而不是采用最大惩罚值(ceiling)。但他们之间存在换算关系(假设二者惩罚值的增量相同):
max_cut_time = half_time * log2(ceiling / reuse)
反过来计算:
ceiling = reuse * 2 (max_cut_time / half_time)