BGP dampening

    在一个运行中的网络中,常常出现一些不稳定的现象,如两个设备因互连端口协议不匹配,或线路不稳定出现经常性up-down,并且出现的频率很高,导致某些路由在设备的路由表里面消失-出现-消失-出现现象(即我们称之为route flapping现象),同时这种现象还会导致网络中其它设备不断的刷新自己的路由表,消耗设备的大量处理器时间片。

    如何避免这种消耗呢?分析一下这种现象的因果关系:原因是端口不稳定,结果是导致了路由表的刷新,浪费了处理器时间。这个是必然的因果关系吗?答案是否!当我们不采取任何措施的时候的确是这样,但是如果我们采取有效的措施呢?现在让我们反过来思考一下,我们在避免什么?我们在避免设备浪费资源,而不是避免端口出现不稳定的情况(很多时候我们只能减少这样的事情发生,而不能杜绝这种情况),所以我们要做的是:即使端口在flapping,我们的路由表也不要不停的去刷新!这就是dampening所要实现的功能!所谓dampening就是指当某个端口在flapping的时候,网络设备会自动的抑制这个端口,直到网络设备确定端口恢复正常才启用这个端口。

  在这个dampening过程中,存在着几个问题需要我们去解决:

    1.当这个端口处在什么状态时,网络设备应该认为它处在flapping状态?

    2.网络设备如何确定这个端口已经恢复了正常?然后如何来启用它?

    3.如果这个端口一直不稳定,网络设备应该永久性的抑制它吗?

    解决了以上的问题,我们就实现了dampening的功能。

    1.每当端口flap一次之后,就惩罚它一次,用一个值来表示处惩罚的概念。比如说开始当端口稳定的时候,这个端口的惩罚值为0,当它flap一次后,我们就给它加1000的惩罚值,再flap一次就再加1000;并且我们设定一个dampening的门限值,比如为2500,那么可以计算出,当这个端口 flap三次,它的惩罚值为3000>2500,于是它被dampening了!

    2.接着引用上面的例子,如果当端口flap三次后一直都不在flap了,那么网络设备是否应该一直抑制它呢(由于3000>2500,所以如果不采取其他措施,这个端口肯定一直会被抑制)?显然这不是我们想要的结果!它稳定了,我们就应该再用它,于是我们需要想办法让它启用,办法就是让惩罚值随着时间的推移自动的减少,引用元素衰减中半衰期的概念(当过了一段时间后,元素的质量会衰减到初始的一半,这儿引申为过了一定的时间后(比如10分钟),惩罚值会衰减到当初的一半)。并且设定一个启用的门限值(比如1800),设定当端口的惩罚值衰减到这个以下那么端口就会被重新启用。于是10分钟后,惩罚值变成3000/2=1500<1800,端口重新被启用了。

    3.很明显,我们用了某个端口,必然是有用处的,所以我们不能一直的抑制它,必须要设定一个最大的抑制时间(比如40分钟);

    解决了上面的三个问题后,我们完全的实现了dempening的功能

 

 

    注意:抑制值<最大惩罚值 的条件必须满足,否则dampening的功能自动关闭。比如:dampening 30 500 2500 60 无效

    Route flap dampening应用:

    主要应用在两个地方,一个比较典型的应用在BGP中,另一个是应用在IGP中。两个应用的差别在于抑制的时间不同,bgp dampening中半衰期为1-45分钟,最大抑制时间为255分钟;而IGP中半衰期为1-30秒,最大抑制时间为255秒。当然两个应用的命令也有差异,这个查看相关的命令文档就可以了

常用命令:

clear ip bgp dampening

clear ip bgp flap-statistics 

show ip bgp dampened-paths

show ip bgp flap-statistics