bidirectional forwarding detect(BFD)可以在转发面实现快速、低overhead流量的path故障检测。
可检测的path非常广泛,可以是interface层面、链路层、网络层、转发引擎、虚拟电路、隧道等。如果需要,BFD也支持检测控制面的故障。
BFD有两种模式:异步模式和demand模式。
异步模式是BFD最常用的工作模式,这种模式下检测path两端的设备周期性的互发BFD control packet,如果detect time内没有接收到对端的BFD control packet,表示path出现了连通性故障。两端互发的BFD control报文的间隔是独立协商和确定的。
demand模式只有在需要的时候才发送BFD control packet,检测path故障,这样可以降低overhead流量。demand模式可以是单向的,也就是说BFD session双方可以一端是demand,另一端不是。
BFD还有echo工作方式,在异步模式和demand模式下都可以使能echo模式。也可以一端使能echo,另一端不使能。接收到echo BFD的一端会把报文内容返回回去。
echo报文是UDP报文,端口号为3875,目的ip地址是发送接口的ip地址,源ip地址只要不引起icmp重定向就可以。
BFD control packet format
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Vers | Diag |Sta|P|F|C|A|D|M| Detect Mult | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| My Discriminator |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Your Discriminator |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Desired Min TX Interval |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Required Min RX Interval |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Required Min Echo RX Interval |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
An optional Authentication Section MAY be present:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Auth Type | Auth Len | Authentication Data... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Diag
通知远端设备本地设备BFD状态机变化的原因,编码如下:
0 -- No Diagnostic
1 -- Control Detection Time Expired
2 -- Echo Function Failed
3 -- Neighbor Signaled Session Down
4 -- Forwarding Plane Reset
5 -- Path Down
6 -- Concatenated Path Down
7 -- Administratively Down
8 -- Reverse Concatenated Path Down
9-31 -- Reserved for future use
Sta通知远端设备本地设备BFD状态机的当前状态
P(poll)
用于协商BFD control报文的发送时间间隔和故障检测时间。远端设备接收到本地设备发送的poll=1的报文,会回应F=1的BFD control报文。本地设备接收到F报文后才会更高发送和检查时间间隔参数
F(final)
用于协商BFD control报文的发送时间间隔和故障检测时间。对poll BFD报文的响应
C
表示本BFD session与控制面无关
A
表示使能authentication功能,需要对报文进行验证。
D
通知远端设备本地设备的工作模式为demand模式,远端不需要或停止发BFD报文给本地设备
M(mutli-point)
表示point-to-multipoint检测模式,当前只支持检测point-to-point的path故障,固定填0
Detect Mult
通知远端设备进行故障检测时detect time=Detect Mult * 本地设备报文发送间隔。该值不能为0,否则丢弃报文。
Length
BFD报文长度
My Discriminator
发送设备的session 区分符。接收设备会把这个值放在Your Discriminator域返回给发送设备,发送设备根据My Discriminator确定对应的BFD session
Your Discriminator
解释见My Discriminator,由远端设备返回给本地设备。
Desired Min TX Interval
通知远端设备本地设备希望自己发送BFD报文的最小间隔
Required Min RX Interval
通知远端设备本地设备希望远端设备发送BFD报文时的最小间隔Required Min Echo RX Interval
通知远端设备本地设备希望远端设备发送BFD echo报文时的最小间隔
BFD状态机
上面状态机的转移条件down、init、up是指接收到的BFD control报文中的sta,也就是远端设备当前的状态
BFD报文发送间隔= min(本地设备Desired Min TX Interval,最近接收到的BFD报文的Required Min RX Interval)
detect time= 最近接收到的BFD报文的Detect Mult X max(本地设备Required Min RX Interval,最近接收到的BFD报文的Desired Min TX Interval)
BFD echo报文发送间隔=最近接收到的BFD报文的Required Min Echo RX Interval
如果要改变时间间隔,需要通过P和F报文交互完,经确认后才能修改