BFD报文格式
BFD控制报文根据场景不同封装不同。BFD控制报文包括两部分:强制部分和可选的认证字段。不同的认证类型,认证字段的格式不同。
协议栈结构
BFD控制报文封装在UDP报文中传送,对于单跳检测其UDP目的端口号为3784,对于多跳检测其UDP目的端口号为4784或3784。
BFD所处的协议栈结构
+--------+-------+--------------------+
| IP | UDP | BFD |
+--------+-------+--------------------+
强制部分报文格式
强制部分的格式
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
强制部分的字段解释
| 字段 |
长度 |
含义 |
| Vers (Version) |
3 bits |
BFD协议版本号,目前为1。 |
| Diag (Diagnostic) |
5 bits |
诊断字,标明本地BFD系统最近一次会话状态发生变化的原因,取值含义参见Diag Code。 |
| Sta (State) |
2 bits |
BFD本地状态。0 -- AdminDown 1 -- Down 2 -- Init 3 -- Up |
| P (Poll) |
1 bit |
参数发生改变时,发送方在BFD报文中置该标志,接收方必须立即响应该报文。 1:表示发送系统请求进行连接确认,或者发送请求参数改变的确认。 0:表示发送系统不请求确认。 |
| F (Final) |
1 bit |
响应P标志置位的回应报文中必须将F标志置位。 1:表示发送系统响应一个接收到P比特为1的BFD包。 0:表示发送系统不响应一个P比特为1的包。 |
| C (Control Plane Independent) |
1 bit |
转发/控制分离标志,一旦置位,控制平面的变化不影响BFD检测,如:控制平面为IS-IS,当IS-IS重启/GR时,BFD可以继续监测链路状态。 1:表示发送系统的BFD实现不依赖于它的控制平面。即,BFD报文在转发平面传输,即使控制平面失效,BFD仍然能够起作用。 0:表示BFD报文在控制平面传输。 |
| A (Authentication Present) |
1 bit |
认证标识,置1代表会话需要进行验证。 |
| D (Demand) |
1 bit |
查询请求,置位代表发送方期望采用查询模式对链路进行监测。 1:表示发送系统希望工作在查询模式。 0:表示发送系统不希望、或不能工作在查询模式。 |
| M (Multipoint) |
1 bit |
为BFD将来支持点对多点扩展而设的预留位。 |
| Detect Mult |
8 bits |
检测超时倍数,用于检测方计算检测超时时间。 查询模式:采用本地检测倍数。 异步模式:采用对端检测倍数。 |
| Length |
8 bits |
报文长度,单位为字节。 |
| My Discriminator |
32 bits |
BFD会话连接本地标识符。发送系统产生的一个唯一的、非0鉴别值,用来区分一个系统的多个BFD会话。 |
| Your Discriminator |
32 bits |
BFD会话连接远端标识符。从远端系统接收到的鉴别值,这个域直接返回接收到的“My Discriminator”,如果不知道这个值就返回0。 |
| Desired Min TX Interval |
32 bits |
本地支持的最小BFD报文发送间隔,单位为微秒。 |
| Required Min RX Interval |
32 bits |
本地支持的最小BFD报文接收间隔,单位为微秒。 |
| Required Min Echo RX Interval |
32 bits |
本地支持的最小Echo报文接收间隔,单位为微秒(如果本地不支持Echo功能,则设置0)。 |
Diag Code
| Value |
Meaning |
| 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 |
可选部分报文格式
BFD控制报文可选部分的格式
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... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
可选部分报文字段解释
| 字段 |
长度 |
含义 |
| Auth Type |
8 bits |
BFD控制报文使用的认证类型。不同值表示的认证类型参见Auth Type Numbers。 |
| Auth Len |
8 bits |
认证字段的长度,包括认证类型与认证长度字段,单位为字节。 |
| Authentication Data |
Variable |
认证字段净荷。 |
Auth Type Numbers
| Value |
Type |
|
| 0 |
Reserved |
|
| 1 |
Simple Password |
|
| 2 |
Keyed MD5 |
|
| 3 |
Meticulous Keyed MD5 |
|
| 4 |
Keyed SHA1 |
|
| |
Meticulous Keyed SHA1 |
|
| 6-255 |
Reserved for future use |
|
如果A比特位置1且认证类型值为1(Simple Password),则认证字段格式如下:
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 | Auth Key ID | Password... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 字段 |
长度 |
说明 |
| Auth Type |
1B |
认证类型,对于简单密码认证,值为1。 |
| Auth Len |
1B |
认证字段长度,对于简单密码认证,长度等于密码长度+3。 |
| Auth Key ID |
1B |
该报文使用的认证秘钥ID,该值允许同时激活多个秘钥。 |
| Password |
可变 |
密码值,是个二进制字符串,长度为1~16字节。 |
如果A比特位置1切认证类型值为2(Keyed MD5)或3(Meticulous Keyed MD5),则认证字段格式如下:
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 | Auth Key ID | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Auth Key/Digest... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 字段 |
长度 |
说明 |
| Auth Type |
1B |
认证类型,值为2 (Keyed MD5)或3 (Meticulous Keyed MD5)。 |
| Auth Len |
1B |
认证字段长度,对于Keyed MD5和Meticulous Keyed MD5认证,长度值为24。 |
| Auth Key ID |
1B |
该报文使用的认证秘钥ID,该值允许同时激活多个秘钥。 |
| Reserved |
1B |
在传输过程中,该值必须为0,接收端接收时忽略此字段。 |
| Sequence Number |
4B |
报文顺序号。对于Keyed MD5认证,该值随机增加,对于Meticulous Keyed MD5认证,同一个会话中的报文按顺序逐渐增加。该值用于预防重放攻击。 |
| Auth Key/Digest |
|
该字段携带16字节MD5摘要信息。当MD5摘要被计算后,该字段填的是MD5共享秘钥,并按需尾填充16字节的0。 |
如果A比特位置1切认证类型值为4(Keyed SHA1)或5(Meticulous Keyed SHA1),则认证字段格式如下:
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 | Auth Key ID | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Auth Key/Hash... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 字段 |
长度 |
说明 |
| Auth Type |
1B |
认证类型,值为4 (Keyed SHA1)或5 (Meticulous Keyed SHA1)。 |
| Auth Len |
1B |
认证字段长度,对于Keyed SHA1和Meticulous Keyed SHA1认证,长度为28。 |
| Auth Key ID |
1B |
该报文使用的认证秘钥ID,该值允许同时激活多个秘钥。 |
| Reserved |
1B |
在传输过程中,该值必须为0,接收端接收时忽略此字段。 |
| Sequence Number |
4G |
报文顺序号。对于Keyed SHA1认证,该值随机增加,对于Meticulous Keyed SHA1认证,同一个会话中的报文按顺序逐渐增加。该值用于预防重放攻击。 |
| Auth Key/Digest |
可变 |
该字段携带20字节SHA1哈希值。当hash被计算后,该字段填的是SHA1共享秘钥,并按需尾填充20字节的0。 |
参考标准
| 标准 |
描述 |
| RFC 5880 |
Bidirectional Forwarding Detection |
No comments to display
No comments to display