由于链路故障无法完全避免,因此,加快故障感知速度并将故障快速通告给路由协议是一种可行的方案。 L 异步模式:在此模式下,网络节点双方会周期性地发送BFD控制报文,如果在检测时间内没有收到对端的BFD控制报文则认为对应的链路出现故障。 单臂回声功能是指通过BFD报文的环回操作检测转发链路的连通性。 在两台直连设备中,其中一台设备支持BFD功能,另一台设备不支持BFD功能,只支持基本的网络层转发,此时可以使用BFD单臂回声功能来检测链路。 bfd 慢Hello机制:通常采用路由协议中的Hello报文机制。
从本质上讲,BFD是一种高速的独立HELLO协议(类似于那些在路由协议中使用的协议,如开放最短路径优先协议,或可以与链路、接口、隧道、路由或其他网络转发部件建立联系的中间系统到中间系统协议)。 BFD的检测机制是两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD报文,如果一方在既定的时间内没有收到BFD报文,BFD会话状态变为Down,则认为路径上发生了故障。 BFD与接口状态联动提供一种简单的机制,使得BFD检测行为可以关联接口状态,提高了接口感应链路故障的灵敏度,减少了非直连链路故障导致的问题。 BFD检测到链路故障会立即上报Down消息到相应接口,使接口进入一种特殊的Down状态:BFD Down状态。 该状态等效于链路协议Down状态,在该状态下只有BFD的报文可以正常处理,从而使接口也可以快速感知链路故障。
bfd: bfd简介
BFD是从基础传输技术中经过逐步发展而来的,因此它可以检测网络各层的故障。 它可以用以太网、多协议标签交换(MPLS)路径、普通路由封装以及IPSec隧道在内的多种类型的传输正确性。 硬件检测:例如通过SDH(Synchronous Digital Hierarchy,同步数字体系)告警检测链路故障。 硬件检测的优点是可以很快发现故障,但并不是所有介质都能提供硬件检测。 BFD与OSPF联动就是将BFD和OSPF协议关联起来,通过BFD对链路故障的快速感应进而通知OSPF协议,从而加快OSPF协议对于网络拓扑变化的响应。
BFD检测到的网络故障可以由转发平面恢复或由控制平面恢复. 如上图所示,SwitchA支持BFD功能,SwitchB不支持BFD功能。 在SwitchA上配置单臂回声功能的BFD会话,检测SwitchA到SwitchB之间的单跳路径。 SwitchB接收到SwitchA发送的BFD报文后,直接在网络层将该报文环回,从而快速检测SwitchA和SwitchB之间的直连链路的连通性。 如果发现链路故障就拆除BFD邻居,并立刻通知上层协议,则上层协议会立刻进行相应的切换。
bfd: BFD故障检测机制
下图显示了OSPF协议是否绑定BFD时收敛速度的数据。 通常,BFD不能独立运行,而是作为辅助与接口状态或与路由协议(如静态路由、OSPF、IS-IS、BGP等)联动使用,此处介绍两种典型应用,其他应用场景请参见BFD应用场景。 L 可以为不同的上层应用(如MPLS、OSPF、IS-IS等)提供故障检测的服务,并提供相同的故障检测时间。 当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。 然后向对端发送Remote Discriminator的值为0的BFD报文,进行会话协商。 BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化。
BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件。 BFD这个项目本身是binutils项目的一个子项目。 在BFD中还有一个回声功能,回声功能启动后,会话的一端周期性地发送BFD回声报文,对端不对此报文进行处理,而只将此报文转发再发回给发送端。 BFD回声报文只用来检测直连网段的链路状态,而BFD控制报文还可以检测非直连网段的链路状态。 L 查询模式:假定每个系统都有一个独立的方法,确认自己连接到其他系统。
bfd: BFD典型应用场景
在SwitchA和SwitchB上配置BFD会话,配置接口联动后,当BFD检测到链路出现故障,立即上报Down消息到相应接口,使接口进入BFD Down状态。 双向转发检测(BFD)的新协议将帮助解决这个问题,提高故障检测与恢复速度。 作为一项IETF草案标准,BFD提供一种检测链路或系统转发传输流能力的简单方法。 网络上的链路故障或拓扑变化都会导致路由重新计算,要提高网络可用性,缩短路由协议收敛时间非常重要。
- BFD是一种双向转发检测机制,可以提供毫秒级的检测,可以实现链路的快速检测,BFD通过与上层路由协议联动,可以实现路由的快速收敛,确保业务的永续性。
- 从本质上讲,BFD是一种高速的独立HELLO协议(类似于那些在路由协议中使用的协议,如开放最短路径优先协议,或可以与链路、接口、隧道、路由或其他网络转发部件建立联系的中间系统到中间系统协议)。
- 在现有网络中,有些链路通过硬件检测信号检测链路故障,如SDH(Synchronous Digital Hierarchy,同步数字体系)告警,但并不是所有的介质都能提供硬件检测。
- BFD回声报文只用来检测直连网段的链路状态,而BFD控制报文还可以检测非直连网段的链路状态。
- L 可以为不同的上层应用(如MPLS、OSPF、IS-IS等)提供故障检测的服务,并提供相同的故障检测时间。
- 如果发现链路故障就拆除BFD邻居,并立刻通知上层协议,则上层协议会立刻进行相应的切换。
当我们安装了BFD开发库以后(在我的ubuntu下,包括BFD开发库的软件包的名字叫binutils-dev),我们就可以在程序中使用它。
bfd: BFD会话建立方式
BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。 BFD本身并没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。 会话建立后会周期性地快速发送BFD报文,如果设备在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。 上层协议通过BFD感知到链路故障后可以及时采取措施,进行故障恢复。 bfd 在现有网络中,有些链路通过硬件检测信号检测链路故障,如SDH(Synchronous Digital Hierarchy,同步数字体系)告警,但并不是所有的介质都能提供硬件检测。 此时,应用就要依靠上层协议自身的Hello报文机制来进行故障检测。
BFD现在越来越多地应用在重要网络、重要链路上,结合路由、MPLS、VPN、流量工程等技术,可以对重点服务流量提供高可靠性,从而保证服务质量。 bfd 其他检测机制:不同的协议有时会提供专用的检测机制,但在系统间互联互通时,这样的专用检测机制通常难以部署。 bfd 静态建立BFD会话是指通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。 BFD会话有以下四种状态,会话状态变化通过BFD报文的State字段传递,系统根据本地会话状态和接收到对端BFD报文驱动状态改变。
这样,只要有一个BFD会话建立,系统就停止发送BFD控制报文,除非某个系统需要显式地验证连接性。 如果要显式地验证连接性,系统发送一个短系列的BFD控制包,如果在检测时间内没有收到返回的报文就宣布会话为Down;如果收到对端的回应报文,协议再次保持沉默。 如图所示,链路中间存在其他设备,虽然三层仍是直连,但由于实际物理线路分段,一旦链路故障,两端设备需要比较长的时间才能检测到,导致直连路由收敛慢,网络中断时间长。
上层协议的检测时间通常在秒级,当数据传输速率达到GB级时,秒级检测时间内,大量数据将会丢失。 bfd 在三层网络中,Hello报文检测机制无法针对所有路由来检测故障,如静态路由。 BFD是一种双向转发检测机制,可以提供毫秒级的检测,可以实现链路的快速检测,BFD通过与上层路由协议联动,可以实现路由的快速收敛,确保业务的永续性。 BFD能够与相邻系统建立对等关系,然后,每个系统以协商的速率监测来自其他系统的BFD速率。 当对等系统没有接到预先设定数量的数据包时,它推断BFD保护的软件或硬件基础设施发生故障,不管基础设施是标记交换路径、其他类型的隧道还是交换以太网络。
bfd: bfd
对于高速数据传输,例如吉比特速率级,超过1秒的检测时间将导致大量数据丢失;对于时延敏感的业务,例如语音业务,超过1秒的延迟也是不能接受的。 GCC(更具体地讲是GNU汇编器GAS,GNU Assembler)、连接器ld、调试器GDB及binutils的其他工具都通过BFD库来处理目标文件,而不是直接操作目标文件。 这样做的最大的好处是将编译器和连接器本身同具体的目标文件格式隔离开来,一旦我们需要支持一种新的目标文件格式,只须要在BFD库里面添加一种格式就可以了,而不需要修改编译器和连接器。 到目前为止,BFD库支持大约25种处理平台,将近50种目标文件格式。 L bfd BFD的故障检测时间远小于1秒,可以更快地加速网络收敛,减少上层应用中断的时间,提高网络的可靠性和服务质量。 为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要能够尽快检测到与相邻设备间的通信故障,以便及时采取措施,保证业务继续进行。