BFD技术原理及其配置
BFD(Bidirectional Forwarding Detection,双向转发检测):全网统一的检测机制,用于快速检测、监控网络中链路或IP路由的转发连通情况。
BFD提供了一个通用的标准化的介质无关和协议无关的快速故障检测机制。具有以下优点:
- 对相邻转发引擎之间的通道提供轻负荷、快速故障检测。这些故障包括接口、数据链路,甚至有可能是转发引擎本身。
- 用单一的机制对任何介质、任何协议层进行实时检测。
BFD背景
BFD原理
BFD在两台网络设备上建立会话,用来检测网络设备间的双向转发路径,为上层应用服务。BFD本身并没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理。
会话建立
- OSPF通过自己的Hello机制发现邻居并建立连接。
- OSPF在建立了新的邻居关系后,将邻居信息(包括目的地址和源地址等)通告给BFD。
- BFD根据收到的邻居信息建立会话。
- 会话建立以后,BFD开始检测链路故障,并做出快速反应。
BFD故障发生处理流程图
- 被检测链路出现故障。
- BFD快速检测到链路故障,BFD会话状态变为Down。
- BFD通知本地OSPF进程BFD邻居不可达。
- 本地OSPF进程中断OSPF邻居关系。
BFD会话建立方式
BFD会话的建立有两种方式,即静态建立BFD会话和动态建立BFD会话。
静态和动态创建BFD会话的主要区别在于本地标识符(Local Discriminator)和远端标识符(Remote Discriminator)的配置方式不同。BFD通过控制报文中的Local Discriminator和Remote Discriminator区分不同的会话。
-
静态建立BFD会话
静态建立BFD会话是指通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求。
-
动态建立BFD会话
动态建立BFD会话时,系统对本地标识符和远端标识符的处理方式如下:
-
动态分配本地标识符
当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。然后向对端发送Remote Discriminator的值为0的BFD控制报文,进行会话协商。
-
自学习远端标识符
当BFD会话的一端收到Remote Discriminator的值为0的BFD控制报文时,判断该报文是否与本地BFD会话匹配,如果匹配,则学习接收到的BFD报文中Local Discriminator的值,获取远端标识符。
-
BFD监测机制
- BFD的检测机制是两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障。
- BFD提供异步检测模式。在这种模式下,系统之间相互周期性地发送BFD控制报文,如果某个系统连续几个报文都没有接收到,就认为此BFD会话的状态是Down。
BFD会话管理
BFD会话有四种状态:
- Down
- Init
- Up
- AdminDown
会话状态变化通过BFD报文的State字段传递,系统根据自己本地的会话状态和接收到的对端BFD报文驱动状态改变。BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化。
会话建立
- SwitchA和SwitchB各自启动BFD状态机,初始状态为Down,发送状态为Down的BFD报文。对于静态配置BFD会话,报文中的Remote Discriminator的值是用户指定的;对于动态创建BFD会话,Remote Discriminator的值是0。
- SwitchB收到状态为Down的BFD报文后,状态切换至Init,并发送状态为Init的BFD报文。
- SwitchB本地BFD状态为Init后,不再处理接收到的状态为Down的报文。
- SwitchA的BFD状态变化同SwitchB。
- SwitchB收到状态为Init的BFD报文后,本地状态切换至Up。
- SwitchA的BFD状态变化同SwitchB。
BFD抓包
Down状态
Init状态
Up状态
BFD应用场景
BFD检测IP链路
BFD检测IP链路支持单跳检测和多跳检测:
BFD单壁回声功能
通过BFD报文的环回操作检测转发链路的连通性。
在两台直接相连的设备中,其中一台设备支持BFD功能,另一台设备不支持BFD功能,只支持基本的网络层转发。为了能够快速的检测这两台设备之间的故障,可以在支持BFD功能的设备上创建单臂回声功能的BFD会话。支持BFD功能的设备主动发起回声请求功能,不支持BFD功能的设备接收到该报文后直接将其环回,从而实现转发链路的连通性检测功能。
BFD与接口状态联动
BFD与接口状态联动:使得BFD检测行为可以关联接口状态,提高了接口感应链路故障的灵敏度,减少了非直连链路故障导致的问题。
BFD检测到链路故障会立即上报Down消息到相应接口,使得接口进入一种特殊的Down状态:BFD Down状态。该状态等效于链路协议Down状态,在该状态下只有BFD的报文可以正常处理,从而使接口也可以快速感知链路故障。
BFD与静态路由联动
BFD for静态路由可为每条静态路由绑定一个BFD会话,在自身满足参与选路条件的前提下,静态路由最终是否能参与选路还受BFD会话检测状态影响。
- 当某条静态路由上的BFD会话检测到链路故障(BFD会话检测状态为Down)时,BFD会将故障上报系统,系统将这条路由从IP路由表中删除。
- 当某条静态路由上的BFD会话检测到故障的链路重新建立成功(BFD会话检测状态为Up)时,BFD会上报系统,系统将这条路由加入IP路由表。
- 缺省情况下,当BFD会话状态处于Admin down(shutdown命令触发)或邻居Admin down时,与该BFD会话绑定的静态路由可以参与选路。但是在系统整机重启场景下,BFD会话需要重新协商,静态路由是否能参与选路以BFD重新协商状态为准。
BFD for静态路由有单跳检侧和多跳检测两种方式。
-
单跳检测
对于非迭代的静态路由,所配置的出接口和下一跳就是直连下一跳信息。这样,BFD会话的出接口即静态路由的出接口,对端地址即路由的下一跳。
-
多跳检测
对于迭代的静态路由,仅配置了下一跳,需要迭代出直连下一跳和出接口。这样,BFD会话的对端地址为路由的原始下一跳,出接口则不限。一般情况下,迭代的原始下一跳是多跳的,非直接可达,故支持迭代的静态路由进行多跳检测。
BFD与OSPF联动
BFD与OSPF联动就是将BFD和OSPF协议关联起来,通过BFD对链路故障的快速感应进而通知OSPF协议,从而加快OSPF协议对于网络拓扑变化的响应
是否绑定BFD | 链路故障检测机制 | 收敛速度 |
---|---|---|
未绑定BFD | OSPF HELLO keepalive定时器超时 | 秒级 |
绑定BFD | BFD会话Down | 毫秒级 |
BFD与BGP联动
BGP协议通过周期性的向对等体发送Keepalive报文来实现邻居检测机制,但这种机制检测到故障所需时间比较长,超过1秒钟。当数据达到吉比特速率级别时,将会导致大量的数据丢失。
是否绑定BFD | 链路故障检测机制 | 收敛速度 |
---|---|---|
未绑定BFD | keepalive报文机制 | 秒级 |
绑定BFD | BFD会话Down | 毫秒级 |
BFD与MPLS LSP联动
BFD会话协商有静态配置BFD和动态创建BFD两种方式,其中,动态创建BFD方式只支持动态LSP,静态配置BFD方式则支持静态和动态LSP。
BFD检测LSP的连通性,即Ingress和Egress之间相互周期性地发送BFD报文。如果任何一端在检测时间内没有收到对端发来的BFD报文,就认为LSP状态为Down,并向LSPM上报LSP Down消息。
BFD与MPLS TE联动
BFD支持的MPLS TE类型有:
-
静态BFD与TE CR-LSP联动
静态BFD与TE CR-LSP联动使用BFD检测CR-LSP,做到快速发现LSP故障。BFD会话需要手动配置。
-
静态BFD与TE Tunnel联动
静态BFD与TE Tunnel联动使用BFD检测整条TE隧道,触发VPN FRR等应用进行流量切换。
-
动态BFD与TE CR-LSP联动
动态BFD与TE CR-LSP联动的作用和静态BFD与TE CR-LSP联动相同。所不同的是建立BFD会话的方式,动态BFD与TE CR-LSP联动的BFD会话动态触发。
其中,BFD与TE Tunnel联动与BFD与CR-LSP联动的区别是故障通告的对象不同。BFD与TE Tunnel联动是向VPN等应用通告故障,触发业务流在不同隧道接口上的切换;BFD与CR-LSP联动是向TE隧道通告故障,触发业务流在同一TE隧道内的不同CR-LSP上的切换。
通过和LSP绑定,在Ingress和Egress之间建立BFD会话。BFD报文从源端开始经过LSP到达宿端,宿端再对该BFD报文进行回应,通过此方式在源端可以快速检测出LSP所经过链路的故障状态。当检测出链路故障以后,BFD将此信息上报给承载在该LSP上面的应用模块,应用再将流量切换到备份路径上。
-
BFD与TE CR-LSP联动
如图1所示,在设备S1和设备S2之间建立一条主Tunnel,同时配置热备份LSP。在设备S1上建立一个到设备S2的BFD会话,用于检测该Tunnel中的主LSP。当主LSP链路出现故障时,BFD会快速通知设备S1。收到故障信息以后,设备S1会立即将流量切换到热备份LSP上,从而保证流量的不中断性。
-
BFD与TE Tunnel联动
如图1所示,在设备S1到P2、P2到设备S2之间建立一条主Tunnel,同时在设备S1到P3、P3到设备S2之间建立一条备份Tunnel。在路径设备S1到P2、P2到设备S2上建立一个BFD会话,用于检测主Tunnel的路径。当主链路出现故障时,BFD会快速通知设备S1。收到故障信息以后,S1会立即将流量切换到备份Tunnel上,从而保证了流量的不中断。
BFD与VRRP联动
当Master出现故障时,VRRP依靠Backup设置的超时时间来判断是否应该抢占,切换速度在1秒以上。将BFD应用于Backup对Master的检测,可以实现对Master故障的快速检测,缩短用户流量中断时间。BFD对Backup和Master之间的实际地址通信情况进行检测,如果通信不正常,Backup就认为Master已经不可用,升级成Master。VRRP通过监视BFD会话状态实现主备快速切换,切换时间控制在50毫秒以内。
BFD配置
配置BFD单跳检测二层链路示例
AR1配置
#
sysname R1
#
bfd
#
interface GigabitEthernet0/0/0
ip address 10.1.1.1 255.255.255.0
#
bfd r1 bind peer-ip default-ip interface GigabitEthernet0/0/0
discriminator local 1
discriminator remote 2
commit
#
SW1配置
#
sysname SW1
#
vlan batch 10
#
bfd
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk pvid vlan 10
port trunk allow-pass vlan 10
#
bfd sw1 bind peer-ip default-ip interface GigabitEthernet0/0/1
discriminator local 1
discriminator remote 2
commit
#
配置VLANIF接口BFD单跳检测示例
配置BFD多跳检测示例
配置BFD检测VLAN下Eth-Trunk成员链路示例
配置BFD与接口状态联动示例
配置单臂回声功能示例
配置详见 BFD各种配置