BFD原理与应用
BFD(Budurectional Forwarding Detection)双向转发检测
BFD是一种双向转发检测机制,它是介质无关和协议无关的快速故障检测机制,可以提供毫秒级的检测,可以实现链路的快速检测,BFD通过与上层路由协议联动,可以实现路由的快速收敛,确保业务的永续性。
BFD 主要是用来实现毫秒级的切换。从而降低业务的故障率。而BFD不是单独启用的,通常是和ospf vrrp等这些路由协议和热备份协议一起使用的。比如ospf默认情况下,你要等待40秒才能知道邻居down了,但是bfd和OSPF一起使用在毫秒内就能发现邻居down了这样的话路由切换肯定要快很多。
现有的故障检测方法主要包括以下几种
硬件检测:
例如:通过SDH(SynchronousDigitalHierarchy,同步数字体系)告警检测链路故障。硬件检测的优点是可以很快发现故障,但并不是所有介质都能提供硬件检测。
慢Hello机制:
通常采用路由协议中的Hello报文机制。这种机制检测到故障所需时间为秒级。对于高速数据传输,例如吉比特速率级,超过1秒的检测时间将导致大量数据丢失;对于时延敏感的业务,例如语音业务,超过1秒的延迟也是不能接受的。并且,这种机制依赖于路由协议。
其他检测机制:
不同的协议有时会提供专用的检测机制,但在系统间互联互通时,这样的专用检测机制通常难以部署。
BFD检测方式
单跳检测:BFD单跳检测是指对两个直连系统进行IP连通性检测,这里所说的“单跳”是IP的一跳。
多跳检测:BFD可以检测两个系统间的任意路径,这些路径可能跨越很多跳,也可能在某些部分发生重叠。
双向检测:BFD通过在双向链路两端同时发送检测报文,检测两个方向上的链路状态,实现毫秒级的链路故障检测。(BFD检测LSP是一种特殊情况,只需在一个方向发送BFD控制报文,对端通过其他路径报告链路状况。)
BFD的检测机制:
BFD的检测机制是两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障,BFD控制报文是UDP报文,端口号3784。
BFD提供异步检测模式。在这种模式下,系统之间相互周期性地发送BFD控制报文,如果某个系统连续3个报文都没有接收到,就认为此BFD会话的状态是Down。
BFD状态机,有 3 种 :Down ,Init ,UP
初始状态为 Down, 收到状态为Down的BFD报文后,状态切换至Init, 相互收到 Init之后,变为 UP
⦁ 随着网络应用的广泛部署,网络发生故障极大可能导致业务异常。为了减小链路、设备故障对业务的影响,提高网络的可靠性,网络设备需要尽快检测到与相邻设备间的通信故障,以便及时采取措施,保证业务正常进行。
⦁ BFD(Bidirectional Forwarding Detection,双向转发检测)提供了一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状态。
⦁ 本章节主要介绍BFD工作原理以及常见的应用场景。
⦁ 由于同一个数据路径上只建立一个BFD会话,如果不同的应用使用的BFD参数不一致,则应该配置一个能满足所有应用要求的BFD参数。
BFD报文结构
**
⦁ Ver:BFD协议版本号,目前为1。
⦁ Diag:诊断字,标明本地BFD系统最近一次会话状态发生变化的原因。
⦁ P:参数发生改变时,发送方在BFD报文中置该标志,接收方必须立即响应该报文。
⦁ F:响应P标志置位的回应报文中必须将F标志置位。
⦁ C:转发/控制分离标志,一旦置位,控制平面的变化不影响BFD检测。
⦁ A:认证标识,置1代表会话需要进行验证。
⦁ D:查询请求,置位代表发送方期望采用查询模式对链路进行监测。
⦁ M:为BFD将来支持点对多点扩展而设的预留位。
⦁ Length:报文长度,单位为字节。
BFD会话建立
⦁ 动态建立BFD会话时,系统对本地标识符和远端标识符的处理方式如下:
⦁ 动态分配本地标识符,当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。然后向对端发送Remote Discriminator的值为0的BFD控制报文,进行会话协商。
⦁ 自学习远端标识符,当BFD会话的一端收到Remote Discriminator的值为0的BFD控制报文时,判断该报文是否与本地BFD会话匹配,如果匹配,则学习接收到的BFD报文中Local Discriminator的值,获取远端标识符。
BFD的会话状态
⦁ BFD会话过程中包含有三个状态:init和up两个用来建立会话,down用来断开会话。建立和断开会话都需要三次握手确保两端系统都感知到。另外还有一个特殊状态:管理down,使会话可以通过管理手段down,在状态机中管理down也是down状态。每个系统通过报文中的sta域发送本端状态,接收报文中的sta域了解对端状态,综合起来决定状态机的跳转。
⦁ Down状态说明会话down。一个会话会维持在down状态直到收到对端的报文并且该报文的sta字段标志着对端状态不是up。如果收到的是down包,状态机将从down状态跳转到init状态,如果收到的是init包,状态机将从down状态跳转到up状态,如果收到的是up包,状态机维持down状态。
⦁ Init状态说明与远端正在通信,并且本地会话期望进入up状态,但是远端还没回应。一个init状态的会话会维持init状态直到收到对端的init包或者up包,就会跳转到up状态,否则等到检测时间超时以后,便会跳转到down状态,意味着与远端的通信丢失。
⦁ Up状态说明BFD会话成功建立,并且正在确认链路的联通性,会话会一直保持在up状态直到链路故障或者管理down操作。如果收到远端的down包或者检测时间超时会话就会从up状态跳转到down状态。
⦁ 管理down意味着会话是被管理操作down的,这会导致远端系统会话进入down状态,并且一直保持down状态直到本端退出管理down。管理down并不意味着转发路径的连通性问题。
BFD的检测模式
⦁ 异步模式和查询模式的本质区别:检测的位置不同,异步模式下本端按一定的发送周期发送BFD控制报文,检测位置为远端,远端检测本端是否周期性发送BFD控制报文;查询模式下本端检测自身发送的BFD控制报文是否得到了回应。
BFD的检测时间
⦁ BFD缺省时间参数
⦁ BFD报文发送间隔默认1000毫秒,接受间隔默认1000毫秒,本地检测倍数3次。
⦁ BFD会话等待恢复时间0秒,会话延迟Up时间0秒。
⦁ 检测超时倍数,用于检测方计算检测超时时间。
⦁ 查询模式:采用本地检测倍数。
⦁ 异步模式:采用对端检测倍数。
⦁ 监测模块负责对链路状态、网络性能等进行监测,并将探测结果通知给Track模块 。
⦁ Track模块收到监测模块的探测结果后,及时改变Track项的状态,并通知应用模块。
⦁ 应用模块根据Track项的状态,进行相应的处理,从而实现联动。
⦁ 配置编辑完成后,用户可以执行commit提交配置,使新的配置数据在当前的系统运行配置中生效。
BFD的基础命令
⦁ 配置编辑完成后,用户可以执行commit提交配置,使新的配置数据在当前的系统运行配置中生效。