05、OSPFv3邻居震荡抑制

OSPFv3邻居震荡抑制

OSPFv3邻居震荡抑制功能是一种震荡抑制方式,通过延迟邻居建立或调整链路开销为最大值的方法达到抑制震荡的目的。

产生原因

如果承载OSPFv3业务的接口状态在Up和Down之间切换,就会引起邻居状态的频繁震荡。此时,OSPFv3会快速发送Hello报文重新建立邻居,同步数据库LSDB,触发路由计算,会造成大量报文交互,影响现有邻居的稳定性,对OSPFv3业务造成较大影响,同时也会影响依赖OSPFv3的其他业务(如:LDP、BGP)的正常运行。为了解决这个问题,OSPFv3实现了邻居震荡抑制功能,即在邻居频繁震荡时,启动震荡抑制,实现邻居延迟建立,或实现业务流量延迟经过频繁震荡的链路,达到抑制震荡的目的。

相关概念

flapping_event:震荡事件,接口上最后一个邻居状态由Full切换为非Full,称之为flapping_event。flapping_event作为震荡源输入,用来触发震荡检测机制启动工作。

flapping_count:当前震荡次数。

detect-interval:震荡检测门限,用于判断是否触发一次有效震荡事件。

threshold:震荡抑制门限,有效震荡事件触发累计大于等于该值时,进入震荡抑制阶段。

resume-interval:震荡检测恢复门限,连续两次有效震荡事件的时间间隔大于该值时,flapping-count清0。

实现原理

震荡检测

OSPFv3接口启动一个flapping_count计数器,相邻两次邻居状态由Full切换为非Full的时间间隔小于detect-interval时,设备识别为一次有效震荡事件,flapping-count计数加1。flapping-count(有效震荡事件次数)大于等于threshold时,进入震荡抑制阶段。相邻两次邻居状态由Full切换为非Full的时间间隔大于resume-interval,flapping-count清0。

用户可以通过命令行配置detect-intervalthresholdresume-interval三个震荡检测的关键参数。

resume-interval必须大于detect-interval

震荡抑制

震荡抑制分为Hold-down和Hold-max-cost两种模式:

  • Hold-down模式:针对邻居建立过程中的频繁泛洪和拓扑变化的问题,在一段时间内禁止该邻居重新建立,避免频繁的数据库同步和大量的报文交互。
  • Hold-max-cost模式:针对用户业务流量频繁切换的问题,在一段时间内将链路开销值设置为最大值Max-cost(65535),避免用户的业务流量经过频繁震荡的链路。

Hold-down模式和Hold-max-cost模式可以叠加使用,同时生效时,先进入Hold-down模式,待Hold-down模式退出后,再进入Hold-max-cost模式。

缺省情况下,OSPFv3使能Hold-max-cost模式,用户可以通过命令行修改震荡抑制模式和震荡持续周期。

在恶意攻击导致邻居频繁震荡的情况下,使用Hold-down模式可以更好的防止攻击。

接口进入震荡抑制阶段后,接口下的全部邻居都会进入震荡抑制阶段。

退出震荡抑制

退出震荡抑制有以下几种方式:

  • 抑制定时器超时。
  • 复位OSPFv3进程。
  • 重启OSPFv3邻居。
  • 用户通过命令行强制退出震荡抑制阶段。

典型场景

基本场景

图1所示,正常的业务流量路径是Router A->Router B->Router C->Router E。链路故障时,业务流量路径切换为Router A->Router B->Router D->Router E。在主备路径切换初期,Router B和Router C之间很可能会发生邻居状态频繁震荡,导致Router A到Router E的用户流量在两条路径不断切换,并且每次故障引发的切换都会导致用户流量部分丢失,影响网络稳定性。此时,如果Router B和Router C之间邻居震荡满足抑制条件时,设备就会启动震荡抑制功能。

  • 采用Hold-down模式:在一段时间内禁止Router B和Router C建立邻居关系,达到将业务流量切换到Router A->Router B->Router D->Router E路径的目的。
  • 采用Hold-max-cost模式:在一段时间内将Router B和Router C之间的链路开销值设置为最大值Max-cost(65535),达到将业务流量切换到Router A->Router B->Router D->Router E路径的目的。
图1 基本场景的邻居震荡抑制

关键路径场景

网络中只有唯一的流量转发路径,转发路径上的任何邻居断开都会导致用户流量中断。如图2所示,唯一的业务流量路径是Router A->Router B->Router C->Router E,如果Router B和Router C之间发生邻居震荡,满足抑制条件,进入震荡抑制阶段。但是,Router B和Router C之间的链路是组网中的关键链路,一旦断开,整个网络将被分割为互不连通的两个网络。因此,关键路径场景不建议采用Hold-down模式断开邻居关系,推荐采用Hold-max-cost模式抑制震荡,在一段时间内将Router B和Router C间的链路开销值设置为最大值Max-cost(65535),进行震荡抑制。待网络稳定后,抑制定时器超时,自动退出抑制状态,迅速恢复业务链路。

缺省情况下,OSPFv3使能Hold-max-cost模式。

图2 关键路径场景的邻居震荡抑制

广播网场景

图3所示,四台设备分别通过交换机接入到同一个广播网中,相互之间建立广播网邻居。此时,如果Router C因为链路原因一直处于震荡状态,并且Router A和Router B接入网络的时间不一致(例如,Router A更早一点),或者Router A和Router B的震荡检测参数配置不一致,导致的结果是,Router A先检测到Router C处于震荡状态,抑制了Router C,在Router A发布的Hello报文中就不会携带Router C的Router ID,但是,Router B无法检测到Router C处于震荡状态,仍然认为Router C为合法节点。在DR选举时,Router A识别到的参与DR选举的设备集合包括Router B和Router D,Router B识别到的参与DR选举的设备集合包括Router A、Router C和Router D。两者备选集合不相同,选举结果也会不一致,这样就会导致广播网中的设备对网络理解的差异,造成路由计算错误。因此,在广播网或P2MP、NBMA等一个接口下存在多个邻居的场景中,不能单独抑制某个邻居,需要对接口下的全部邻居都进行抑制,震荡检测也不能以某个邻居为单位进行检测,需要检测接口上最后一个邻居状态为Down的震荡事件。也就是说,如果Router C震荡,广播网中的Router A、Router B和Router D都会被抑制,待网络稳定后,抑制定时器超时,自动退出抑制状态,Router A、Router B和Router D都会恢复到正常业务状态。

图3 广播网场景的邻居震荡抑制

多区域组网场景

图4所示,Router A、Router B、Router C、Router E和Router F通过Area 1连接,Router B、Router D和Router E通过骨干区域Area 0连接。Router A到Router F的正常的业务流量优先选取区域内路由,路径是Router A->Router B->Router C->Router E->Router F。当Router B和Router C之间发生邻居震荡,满足抑制条件,进入震荡抑制阶段时,缺省情况采用Hold-max-cost模式。但是,根据OSPF路由优选规则,区域内路由和区域间路由相互不会比较链路的开销值,区域内路由优先级大于区域间路由,也就是说,发生邻居震荡后,Router A到Router F的业务流量路径仍然是Router A->Router B->Router C->Router E->Router F,Hold-max-cost模式在此时无法达到抑制流量路径切换的目的。因此,多区域组网场景的邻居震荡抑制只能采用Hold-down模式,即在一段时间内禁止Router B和Router C建立邻居关系,达到将业务流量切换到Router A->Router B->Router D->Router E->Router F路径的目的。

缺省情况下,OSPFv3使能Hold-max-cost模式,用户可以通过命令行修改为Hold-down模式。

图4 多区域组网场景的邻居震荡抑制

 

posted @ 2024-04-15 22:45  博雅塔之客  阅读(7)  评论(0编辑  收藏  举报