关于 BFD 路由
BFD 是一个检测协议,旨在为媒体类型、封装、拓扑和路由协议提供快速转发路径故障检测时间。BFD 可以在单播、点对点模式下对正在两系统之间转发的任何数据协议上运行。数据包在适用于媒体和网络的封装协议负载中携带。
除了快速转发路径故障检测外,BFD 还为网络管理员提供一致的故障检测方法。由于网络管理员可以使用 BFD 按照统一的速率检测转发路径故障,而不是为不同的路由协议呼叫机制采用不同的速率,因此网络分析和计划更简单,重新聚合时间一致且可预测。
BFD 异步模式和回应功能
不管是否启用回应功能,BFD 均可在异步模式下运行。
- 异步模式
-
在异步模式下,系统之间会定期发送 BFD 控制数据包,如果某一行中有大量此类数据包未被其他系统接收,则会话将宣布关闭。纯异步模式(无回应功能)很有用,因为它达到特定检测时间所需的数据包数量是回应功能所需数据包数量的一半。
- BFD 回应功能
-
BFD 回应功能将回应数据包从转发引擎发送至直连单跳 BFD 邻居。回应数据包由转发引擎负责发送,并沿同一条路径重新进行转发,以执行检测。另一端的 BFD 会话不参与回应包的实际转发。回应功能和转发引擎负责检测进程,BFD 邻居之间发出的 BFD 控制数据包数量将减少。此外,由于转发引擎在远程邻居系统上测试转发路径,并未涉及远程系统,因此数据包间的延迟差异增大了。这会导致故障检测时间缩短。
启用回应功能后,BFD 可以使用较慢的计时器降低异步会话的速度并减少 BFD 邻居之间发送的 BFD 控制数据包的数量,从而降低处理开销,同时提高故障检测速度。
注
IPv4 多跳或 IPv6 单跳 BFD 邻居不支持回应功能。
您可以在接口级别和路由协议级别启用 BFD。您必须在两个系统(BFD 对等体)上配置 BFD。在接口上并且在相应路由协议的路由器级别启用 BFD 后,将会创建 BFD 会话,协商 BFD 计时器,并且 BFD 对等体在协商的级别互相发送 BFD 控制数据包。
BFD 会话建立
以下示例显示 ASA 和运行边界网关协议 (BGP) 的相邻路由器。当两台设备启动时,二者之间不会建立 BFD 会话。
![](/content/dam/en/us/td/i/400001-500000/410001-420000/412001-413000/412231.png)
BGP 识别其 BGP 邻居后,会使用邻居的 IP 地址通过引导程序启动 BFD 进程。BFD 不是动态发现其对等体。它依靠配置的路由协议告知它要使用的 IP 地址以及要形成的对等体关系。
路由器上的 BFD 和 ASA 上的 BFD 共同形成 BFD 控制数据包,并开始以一秒的间隔向彼此发送数据包,直到 BFD 会话建立为止。来自任一系统的初始控制数据包都非常相似,例如 Vers、Diag,H、D、P 和 F 位都设置为零,State 设置为 Down。My Discriminator 字段设置为一个在传输设备上唯一的值。Your Discriminator 字段设置为零,因为 BFD 会话尚未建立。TX 和 RX 计时器设置为在设备配置中找到的值。
远程 BFD 设备在会话初始阶段收到 BFD 控制数据包后,会将 My Discriminator 字段中的值复制到其自己的 Your Discriminator 字段中,并从 Down 状态过度到 Init 状态,最终进入 Up 状态。一旦两个系统都在各自控制数据包中看到自己的 Discriminator,会话即正式建立。
下图显示了建立的 BFD 连接。
![](/content/dam/en/us/td/i/400001-500000/410001-420000/412001-413000/412230.png)
BFD 计时器协商
BFD 设备必须协商 BFD 计时器,以控制和同步 BFD 控制包的发送速率。设备需要确保以下条件,才能协商 BFD 计时器:
-
其对等设备看到包含本地设备的建议计时器的数据包
-
它发送 BFD 控制包的速度永远不会超过被配置为接收这些数据包的对等体
-
对等体发送 BFD 控制包的速度永远不会超过被配置为接收这些数据包的本地系统
Your Discriminator 字段和 H 位的设置足以使远程设备在首次计时器交换期间看到本地设备的数据包。在接收 BFD 控制包后,每个系统都将获得所需最小接收间隔,并将该间隔与其自己的所需最小发送间隔进行比较,然后取两个值中较大者(速度较慢者),并将该值用作其 BFD 数据包的传输速率。两个系统中速度较慢者将决定传输速率。
在协商这些计时器后,可在会话期间随时重新协商它们,而不会导致会话重置。更改其计时器的设备将在所有后续 BFD 控制包上设置 P 位,直到其收到通过远程系统设置了 F 位的 BFD 控制包为止。这种位的交换可以保护数据包,否则它们可能会在传输过程中丢失。
![]() 注 |
远程系统设置 F 位,并不意味着它将接受新建议的计时器。它表示远程系统已经看到已经更改其中的计时器的数据包。 |
BFD 故障检测
如果 BFD 会话和计时器已经过协商,则 BFD 对等体按照协商的间隔互相发送 BFD 控制数据包。这些控制数据包作为检测信号,这非常类似于 IGP 呼叫协议,不同之处是速率得到了显著加速。
只要每个 BFD 对等体在配置的检测间隔(所需的最小 RX 间隔)内接收到 BFD 控制数据包,则 BFD 会话会保持,并且与 BFD 关联的任何路由协议均保持其邻接关系。如果 BFD 对等未在此间隔内收到控制数据包,则会向参与该 BFD 会话的所有客户端通知故障情况。路由协议可确定对该信息的适当响应。典型的响应是终止路由协议对等会话和重新收敛,从而绕过出现故障的对等体。
每次 BFD 对等体在 BFD 会话中成功接收到 BFD 控制数据包时,该会话的检测计时器都会重置为零。因此故障检测取决于接收的数据包,而不是接收方上次何时传输数据包。
BFD 部署场景
以下内容介绍了 BFD 在这些特定场景中如何运行。
- 故障转移
-
在故障转移场景中,将在主用设备与邻居设备之间建立和保留 BFD 会话。备用设备不会通过邻居保留任何 BFD 会话。当发生故障转移时,新主用设备必须通过邻居发起会话建立,因为主用设备与备用设备之间的会话信息没有同步。
对于无中断重新启动/NSF 场景,客户端 (BGP IPv4/IPv6) 负责通知其邻居关于事件的信息。当邻居收到该信息时,它将保留 RIB 表,直到故障转移完成为止。在故障转移期间,设备上的 BFD 和 BGP 会话将关闭。在故障转移完成后,当 BGP 会话启动时,将在邻居之间建立新的 BFD 会话。
- 跨网络 EtherChannel 和 L2 集群
-
在跨网络 EtherChannel 集群场景中,将在主设备与其邻居之间建立和保留 BFD 会话。从属设备不会通过邻居保留任何 BFD 会话。如果由于交换机上的负载均衡而将 BFD 数据包路由到从属设备,则该从属设备必须通过集群链路将此数据包转发到主设备。当发生集群故障恢复时,新主设备必须通过邻居发起会话建立,因为主设备与从属设备之间的会话信息没有同步。
- 单个接口模式和 L3 集群
-
在单个接口模式集群场景中,单个设备将通过其邻居保留其 BFD 会话。