1. 功能原理
BFD(Bidirectional Forwarding Detection,双向转发检测)是一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于检测IP网络中链路的连通状况,保证设备之间能够快速检测到通信故障,以便能够及时采取措施,保证业务持续运行。
BFD可以为各种上层协议(如路由协议)快速检测两台设备间双向转发路径的故障。上层协议通常采用Hello报文机制检测故障,所需时间为秒级,而BFD可以提供毫秒级检测。
BFD 协议提供一种轻负载、快速检测两台邻接路由器/交换机之间转发路径连通状态的方法,它是一个简单的“Hello”协议,在很多方面,它与那些著名的路由协议的邻居检测部分相似。
一对儿系统在它们之间的所建立会话的通道上周期性的发送检测报文,如果某个系统在足够长的时间内没有收到对端的检测报文,则认为在这条到相邻系统的双向通道的某个部分发生了故障协议邻居通过该方式可以快速检测到转发路径的连通故障,加快启用备份转发路径,恢复网络。
BFD 提供的检测机制与所应用的接口介质类型、封装格式、以及关联的上层协议如 OSPF、BGP、RIP 等无关。BFD 在两台路由器之间建立会话,通过快速发送检测故障消息给正在运行的路由协议,以触发路由协议重新计算路由表,大大减少整个网络的收敛时间。
BFD 本身没有发现邻居的能力,需要上层协议根据收到的 BFD 会话状态的通知来决定与哪个邻居建立会话。
BFD 报文
BFD 报文格式
BFD 发送的检测报文是 UDP 报文,定义两种类型的报文
建立 BFD 会话时缺省采用版本 1,如果收到对端系统发送的是版本 0 的报文,将自动切换到版本 0。可以通过 show bfd neighbors 命令查看采用的版本。
1)控制报文
其格式如下:
Vers:BFD 协议版本号,目前为1
Diag:诊断字,标明本地 BFD 系统最近一次会话状态发生变化的原因
Sta:BFD 本地状态
P:参数发生改变时,发送方在 BFD 报文中置该标志,接收方必须立即响应该报文
F:响应 P 标志置位的回应报文中必须将 F 标志置位
C:转发/控制分离标志,一旦置位,控制平面的变化不影响 BFD 检测,如:控制平面为 ISIS,当 ISIS 重启 /GR 时,BFD 可以继续监测链路状态
A:认证标识,置位代表会话需要进行验证
D:查询请求,置位代表发送方期望采用查询模式对链路进行监测
R:预留位
Detect Mult:检测超时倍数,用于检测方计算检测超时时间
Length:报文长度
My Discreaminator:BFD 会话连接本地标识符
Your Discreaminator:BFD 会话连接远端标识符
Desired Min Tx Interval:本地支持的最小 BFD 报文发送间隔
Required Min RX Interval:本地支持的最小 BFD 接收间隔
Required Min Echo RX Interval:本地支持的最小 Echo 报文接收间隔(如果本地不支持 Echo 功能,则设置 0)
Auth Type:认证类型,目前协议提供有
Simple Password
Keyed MD5
Meticulous Keyed MD5
Keyed SHA1
Meticulous Keyed SHA1
Auth Length:认证数据长度
Authentication Data:认证数据区
其中认证部分为可选部分,可以在报文中选择使用,其中认证方式可以有:Simple Password、Keyed MD5、Meticulous Keyed MD5、Keyed SHA1、Meticulous Keyed SHA1。协议定义了控制报文所使用的 UDP 目的端口号为3784。
1.1.1 BFD 会话的建立与拆除
BFD 本身并没有发现机制,而是靠被服务的上层协议通知来建立会话,具体过程如下:
(1) 上层协议通过自己的 Hello 机制发现邻居并建立连接;
(2) 上层协议在建立新的邻居关系后,将邻居的参数及检测参数(包括目的地址和源地址等)通告给 BFD;
(3) BFD 根据收到的参数建立 BFD 会话。
当网络出现故障时:
(4) BFD 检测到链路故障后,拆除 BFD 会话,通知上层协议邻居不可达;
(5) 上层协议中止邻居关系;
(6) 如果网络中存在备用路径,设备将选择备用路径进行通信。
1.1.2 BFD会话的工作方式和检测模式
BFD 会话通过下面两种报文来实现:
· echo 报文:封装在 UDP 报文中传送,其 UDP 目的端口号为 3785。
· 控制报文:封装在 UDP 报文中传送,对于单跳检测其 UDP 目的端口号为3784,对于多跳检测其 UDP 目的端口号为 4784。
1. echo报文方式
本端发送 echo 报文建立 BFD 会话,对链路进行检测。对端不建立 BFD 会话,只需把收到的 echo 报文转发回本端。
当 BFD 会话工作于 echo 报文方式时,仅支持单跳检测,并且不受检测模式的控制。
2. 控制报文方式
链路两端通过周期性发送控制报文建立 BFD 会话,对链路进行检测。
BFD 会话建立前有两种模式:主动模式和被动模式。
· 主动模式:在建立会话前不管是否收到对端发来的 BFD 控制报文,都会主动发送 BFD 控制报文;
· 被动模式:在建立会话前不会主动发送 BFD 控制报文,直到收到对端发送来的控制报文。
通信双方至少要有一方运行在主动模式才能成功建立起 BFD 会话。
BFD 会话建立后有两种模式:异步模式和查询模式。
· 异步模式:设备周期性发送 BFD 控制报文,如果在检测时间内没有收到对端发送的 BFD 控制报文,则认为会话 down。
· 查询模式:设备周期性发送 BFD 控制报文,但是对端(缺省为异步模式)会停止周期性发送 BFD 控制报文。如果通信双方都是查询模式,则双方都停止周期性发送 BFD 控制报文。当需要验证连接性的时候,设备会以协商的周期连续发送几个 P 比特位置 1 的 BFD 控制报文。如果在检测时间内没有收到返回的报文,就认为会话 down;如果收到对方回应的 F 比特位置 1 的报文,就认为连通,停止发送报文,等待下一次触发查询。
另外,也可以链路两端通过发送控制报文建立和保持 BFD 会话,任意一端通过发送echo 报文检测链路状态。
应用场景
实际应用中,BFD 可以用来进行单跳和多跳检测:
· 单跳检测:是指对两个直连设备进行 IP 连通性检测,这里所说的“单跳”是IP 的一跳。
· 多跳检测:BFD 可以检测两个设备间任意路径的链路情况,这些路径可能跨越很多跳。
BFD 所具备的 ms 级的链路感知与切换的特性,使他特别适用于一些对丢包,延迟比较敏感的环境,比如金融行业的省市县级的双出口 MSTP 线路组网的环境,当某条运营商的链路或者是互联设备故障的时候能马上切换到另外一条备份链路,同时还需要通知上层 OSPF 协议做重新收敛,这个时间如果是普通的 OSPF 协议从邻居 down 到路由重新收敛至少需要 40s-50s,而这个时间对于金融的生产业务来说是无法忍受的,但是如果与 BFD 联动,将缩短到 1s。所以 BFD 功能在一些对网络可靠性,稳定性,容错性要求比较高的行业会容易用到,比如金融,医疗,运营商行业中。
BFD支持的应用
· 静态路由与 BFD 联动:详细情况请参见“三层技术-IP路由配置指导”中的“静态路由”。
· IPv6 静态路由与 BFD 联动:详细情况请参见“三层技术-IP路由配置指导”中的“IPv6静态路由”。
· RIP 与 BFD 联动:详细情况请参见“三层技术-IP路由配置指导”中的“RIP”。
· OSPF 与 BFD 联动:详细情况请参见“三层技术-IP路由配置指导”中的“OSPF”。
· OSPFv3 与 BFD 联动:详细情况请参见“三层技术-IP路由配置指导”中的“OSPFv3”。
· IS-IS 与 BFD 联动:详细情况请参见“三层技术-IP路由配置指导”中的“IS-IS”。
· IPv6 IS-IS 与 BFD 联动:详细情况请参见“三层技术-IP路由配置指导”中的“IPv6 IS-IS”。
· BGP 与 BFD 联动:详细情况请参见“三层技术-IP路由配置指导”中的“BGP”。
· IPv6 BGP 与 BFD 联动:详细情况请参见“三层技术-IP路由配置指导”中的“IPv6 BGP”。
· PIM 与 BFD 联动:详细情况请参见“IP组播配置指导”中的“PIM”。
· Track 与 BFD 联动:详细情况请参见“可靠性配置指导”中的“Track”。
· IP 快速重路由:目前支持快速重路由的有 BGP、OSPF、RIP、IS-IS 和静态路由。详细情况请参见“三层技术-IP 路由配置指导”中的“BGP”、“OSPF”、“IS-IS”、“RIP”和“静态路由”。
· 链路聚合与 BFD 联动:详细情况请参见“二层技术-以太网交换配置指导”中的“以太网链路聚合”。
协议规范
与 BFD 相关的协议规范有:
· RFC 5880:Bidirectional Forwarding Detection (BFD)
· RFC 5881:Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop)
· RFC 5882:Generic Application of Bidirectional Forwarding Detection (BFD)
· RFC 5883:Bidirectional Forwarding Detection (BFD) for Multihop Paths
· RFC 7130:Bidirectional Forwarding Detection (BFD) on Link Aggregation Group (LAG) Interfaces
DLDP 和 BFD 的 区别
DLDP 和 BFD 的区别:
1、DLDP 只能用于以太接口;BFD 与接口无关,任意两个邻居建均可建立 BFD 关系;
2、DLDP 利用 ICMP 报文探测;BFD 使用协议自身探测报文;
3、DLDP 是单向检测行为,可以单向使用;BFD 是双向联动探测行为,两端都要启用;
4、DLDP 基于接口,即探测失败后,逻辑上 shutdown 该接口(SVI,no switchport,三层AP口),和接口相关的路由均失效;BFD 是基于邻居对,即探测一对邻居间的联通性,只对和该 BFD 关联的路由条目进行处理,控制粒度相对更精细。
配置BFD
在配置BFD之前,需配置接口的网络层地址,使相邻节点之间网络层可达。
BFD 会话建立后,可以动态协商 BFD 的相关参数(例如最小发送间隔、最小接收间隔、初始模式、报文认证等),两端协议通过发送相应的协商报文后采用新的参数,不影响会话的当前状态。
· 对于建立在跨板聚合接口上的 BFD 会话,当负责收发 BFD 报文的单板被拔出或异常重启时,备用单板接替收发 BFD 报文的工作需要一定的时间,如果 BFD 会话检测时间较短或者会话数量较多,可能会出现 BFD 会话震荡的情况。
· 缺省 BFD 运行版本 1,同时兼容版本 0。不能通过命令行配置修改为版本 0,当对端设备运行版本 0 会话时,本端自动会切换到版本 0。
H3C 交换机配置 BFD echo 报文
目前尚不清楚在交换机是否可以对子网的网关配置 BFD echo 报文
H3C 交换机配置 BFD 控制报文 (单跳检测)
H3C 交换机配置 BFD 控制报文 (多跳检测)
H3C 交换机配置 BFD 相关的 snmp 告警
2. 通过 BGP+BFD 实现加速路由收敛(专线三层对接)
详看参考链接3,该文档并没有描述出拓扑中关于 BFD 的配置
3. 基于 BFD 的 OSPF 在交换机上配置示例
有几个点:
- 子网网关的 VIP 可以基于 VRRP 做高可用
- OSPF 邻居建立即表示 BFD 会话建立
- 交换机可以全局启用 BFD
这个全局表示在所有 OSPF 接口上启用 BFD,自动检测会话。
VIP 需要占用交换机上的一个端口,在示例中是 GigabitEthernet0/0/0
VRRP 追踪 BFD 的会话状态, 这个图的右边 BFD 定义的那个部分,BFD 会话的建立是在 GigabitEthernet0/0/0 这个接口发出的 BFD 的包,这个接口也就是网关(v)IP 绑定的接口。
和 VRRP 基于 BFD 类似, OSPF 所有接口都启用了 BFD,那么类似的 OSPF 基于 网关接口 GigabitEthernet0/0/0 建立 BFD 会话。
推测结论: 对于内网来说(本例子中 192.168.1.0/24)基于“内网网关接口”的 BFD 会话发出的包的源 IP 应该就是网关 IP,因为这个接口上只有一个 IP。 对于公网来说,BFD 定义了源 ip 是,13.1.1.1.这个ip 在 GigabitEthernet0/0/1 接口(外网网关接口)。
4. BFD 单臂回声配置示例
An adjunct to both modes is the Echo function. When the Echo function is active, a stream of BFD Echo packets is transmitted in such a way as to have the other system loop them back through its forwarding path. If a number of packets of the echoed data streamare not received, the session is declared to be down.
The Echo function may be used with either Asynchronous or Demand mode.
Since the Echo function is handling the task of detection, the rate of periodic transmission of Control packets may be reduced (in the case of Asynchronous mode) or eliminated completely (in the case of Demand mode ) .
Echo 功能是BFD本身支持的两种模式的辅助功能。在激活 Echo 功能的情况下,发送 BFD Echo 报文流的方式是让对方系统通过自己的转发路径进行环回。如果没有收到数据包,则声明会话已关闭。 Echo函数可用于 异步模式或按需模式。由于 Echo 函数正在处理检测任务,因此Control 包的周期传输速率可能会降低(在异步模式下)或完全消除(在需求模式下)。
If the BFD Echo function is used,transmitted packets are immediate routed back towards the sender on the interface over which they were sent. This mav interact with other mechanisms that are used on the two systems that employ BFD. In particular, ingress filtering is incompatible with the way Echo packets need to be sent. Implementations that support the Echo function MUST ensure that ingress filtering is not used on an interface that employs the Echo function or make an exception for ingress filtering Echo packets.
使用 BFD Echo 功能时,发送的报文会立即返回到发送方接口。这可能与使用 BFD的两个系统上使用的其他机制相互作用。 特别是,入口过滤与 Echo 报文的发送方式不兼容。 支持 Echo 功能的实现必须保证在使用 Echo 功能的接口上不使用入接口过滤,或者对入接口过滤 Echo 报文进行例外处理。
5. 关于 BFD 单臂回声包的原理
BFD 单臂回声所发出的包, 该包的源 ip 和目的 ip 都是自己的 ip,源 mac 也是自己的,只有目的 mac 是对方的 mac 地址。
参考: blog.csdn.net/weixin_4356…
参考: