11、BGP邻居震荡抑制
BGP邻居震荡抑制
BGP邻居震荡抑制功能是一种震荡抑制方式,开启该功能后,可以达到抑制BGP邻居震荡的目的。
产生原因
BGP邻居震荡是指BGP对等体建立后很快断开,又很快建立,如此反复。在链路不稳定或承载BGP业务的接口状态不稳定等诸多情况下,会引起邻居频繁震荡。BGP对等体建立后BGP邻居之间交换整个BGP路由表,BGP对等体断开后BGP会删除从邻居学习到的所有路由。由于BGP路由数量巨大,在这种邻居状态频繁震荡的情况下往往伴随着大量的路由变化和数据处理,会占用大量资源,导致CPU占用率升高。为了解决这个问题,设备实现了BGP邻居震荡抑制功能,即在BGP邻居频繁震荡时启动震荡抑制,实现对BGP对等体的建立进行抑制处理。
相关概念
ConnectFlaps:邻居震荡计数,BGP邻居震荡时增加邻居震荡计数。
邻居震荡抑制时间:根据邻居震荡计数调整震荡抑制时间。
Idle hold timer:对等体建连等待时间,即当超过Idle hold timer时,BGP对等体重新建连。
半衰期:邻居震荡计数变化时启动邻居震荡计数调整定时器,当该定时器超时(超过1800s)时,邻居震荡计数便会减少一半,这段时间称为半衰期。
实现原理
震荡抑制
如图1所示,当震荡计数达到一定值(大于5次)时,通过Idle hold timer来实现对BGP对等体建连的抑制。Idle hold timer计算方式如下:
Idle hold timer=初始值+邻居震荡抑制时间。
其中,初始值为10s,但是当配置了连接重传时间间隔connect-retry-time,则初始值为配置的connect-retry-time值。
邻居震荡抑制时间处理规则为:ConnectFlaps在1~5次时,不进行抑制;6~10次时,ConnectFlaps每增1次则邻居震荡抑制时间增加10s;11~15次,ConnectFlaps每增1次则邻居震荡抑制时间增加20s,后续每隔5次在前一轮基础上抑制时间加倍,以此类推。直至Idle hold timer到达600s后邻居震荡抑制时间便不再增加,防止BGP协议由于长时间抑制而无法协商,待本次抑制结束后ConnectFlaps清零。
邻居震荡计数变化时启动邻居震荡计数调整定时器,当该定时器超时(超过1800s)时,邻居震荡计数减半,一个半衰期结束,此时若邻居震荡计数不为0,则下一个半衰期开始,直至邻居震荡计数清0。以邻居震荡计数为10次为例,经历4个半衰期后,邻居震荡计数清0,如图2所示。
退出震荡抑制
退出震荡抑制有以下几种方式:
- 复位BGP进程或BGP对等体,直接退出震荡抑制。
- 用户通过命令行强制退出震荡抑制状态,直接退出震荡抑制。