BFD控制报文格式

BFD控制报文封装在UDP报文中传送,对于单跳检测其UDP目的端口号为3784,对于多跳检测其UDP目的端口号为4784或3784。

BFD控制报文根据场景不同封装不同。BFD控制报文包括两部分:强制部分和可选的认证字段。不同的认证类型,认证字段的格式不同。

报文格式

BFD控制报文强制部分的格式如下(RFC5880):

图1 强制部分的格式
字段 长度 含义
Version (Vers) 3 bits BFD协议版本号,目前为1。
Diagnostic (Diag) 5 bits

诊断字,标明本地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

  •  
State (Sta) 2 bits

BFD本地状态。

0 -- AdminDown

1 -- Down

2 -- Init

3 -- Up

Poll (P) 1 bit 参数发生改变时,发送方在BFD报文中置该标志,接收方必须立即响应该报文。
  • 1:表示发送系统请求进行连接确认,或者发送请求参数改变的确认。
  • 0:表示发送系统不请求确认。
Final (F) 1 bit 响应P标志置位的回应报文中必须将F标志置位。
  • 1:表示发送系统响应一个接收到P比特为1的BFD包。
  • 0:表示发送系统不响应一个P比特为1的包。
Control Plane Independent (C) 1 bit

转发/控制分离标志,一旦置位,控制平面的变化不影响BFD检测,如:控制平面为IS-IS,当IS-IS重启/GR时,BFD可以继续监测链路状态。

  • 1:表示发送系统的BFD实现不依赖于它的控制平面。即,BFD报文在转发平面传输,即使控制平面失效,BFD仍然能够起作用。
  • 0:表示BFD报文在控制平面传输。
Authentication Present (A) 1 bit 认证标识,置1代表会话需要进行验证。
Demand (D) 1 bit 查询请求,置位代表发送方期望采用查询模式对链路进行监测。
  • 1:表示发送系统希望工作在查询模式。
  • 0:表示发送系统不希望、或不能工作在查询模式。
Multipoint (M) 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)。
图2 BFD控制报文可选部分的格式
字段 长度 含义
Auth Type 8 bits BFD控制报文使用的认证类型。不同值表示的认证类型如下:

0 - Reserved

1 - Simple Password

2 - Keyed MD5

3 - Meticulous Keyed MD5

4 - Keyed SHA1

5 - Meticulous Keyed SHA1

6-255 - Reserved for future use

Auth Len 8 bits 认证字段的长度,包括认证类型与认证长度字段,单位为字节。
Authentication Data Variable

认证字段净荷。

如果A比特位置1且认证类型值为1(Simple Password),则认证字段格式如下:

  • Auth Type:认证类型,对于简单密码认证,值为1。
  • Auth Len:认证字段长度,对于简单密码认证,长度等于密码长度+3。
  • Auth Key ID:该报文使用的认证秘钥ID,该值允许同时激活多个秘钥。
  • Password: 密码值,是个二进制字符串,长度为1~16字节。

如果A比特位置1切认证类型值为2(Keyed MD5)或3(Meticulous Keyed MD5),则认证字段格式如下:

  • Auth Type:认证类型,值为2 (Keyed MD5)或3 (Meticulous Keyed MD5)。
  • Auth Len:认证字段长度,对于Keyed MD5和Meticulous Keyed MD5认证,长度值为24。
  • Auth Key ID:该报文使用的认证秘钥ID,该值允许同时激活多个秘钥。
  • Reserved:在传输过程中,该值必须为0,接收端接收时忽略此字段。
  • Sequence Number: 报文顺序号。对于Keyed MD5认证,该值随机增加,对于Meticulous Keyed MD5认证,同一个会话中的报文按顺序逐渐增加。该值用于预防重放攻击。
  • Auth Key/Digest: 该字段携带16字节MD5摘要信息。当MD5摘要被计算后,该字段填的是MD5共享秘钥,并按需尾填充16字节的0。

如果A比特位置1切认证类型值为4(Keyed SHA1)或5(Meticulous Keyed SHA1),则认证字段格式如下:

  • Auth Type:认证类型,值为4 (Keyed SHA1)或5 (Meticulous Keyed SHA1)。
  • Auth Len:认证字段长度,对于Keyed SHA1和Meticulous Keyed SHA1认证,长度为28。
  • Auth Key ID:该报文使用的认证秘钥ID,该值允许同时激活多个秘钥。
  • Reserved:在传输过程中,该值必须为0,接收端接收时忽略此字段。
  • Sequence Number: 报文顺序号。对于Keyed SHA1认证,该值随机增加,对于Meticulous Keyed SHA1认证,同一个会话中的报文按顺序逐渐增加。该值用于预防重放攻击。
  • Auth Key/Digest: 该字段携带20字节SHA1哈希值。当hash被计算后,,该字段填的是SHA1共享秘钥,并按需尾填充20字节的0。

报文示例

图3 BFD报文格式(不认证)
图4 BFD报文格式(简单认证)
图5 BFD报文格式(MD5认证)
图6 BFD报文格式(SHA1认证)

参考标准

标准 描述
RFC 5880 Bidirectional Forwarding Detection

本资料收集于互联网
2016 ©