双向转发检测 (BFD) 概览

本页面介绍了 Cloud Router 路由器的双向转发检测 (BFD)

BFD(RFC 5880RFC 5881)是一种转发路径故障检测协议,大多数商用路由器都支持该协议。借助 Cloud Router 路由器的 BFD,您可以在 BGP 会话中启用 BFD 功能,以检测转发路径故障,例如链路关闭事件。此功能使混合网络的弹性更高。

使用专用互连或合作伙伴互连从本地网络与 Google Cloud 对等互连时,您可以启用 BFD,以快速检测链接故障并通过故障切换功能将流量切换到具有备份 BGP 会话的替代链接。通过这种方式,BFD 提供了高可用性网络连接路径,可以快速响应链接故障。

BFD 的优势

使用默认设置配置的 BFD 会在 5 秒内检测故障,而基于 BGP 的故障检测则需要 60 秒。在 Cloud Router 路由器上实现 BFD 时,端到端检测时间可能短至 5 秒。

BFD 是一种固定长度的通信协议,连接的每端均通过转发路径定期传输数据包。

BFD 是一种基于 UDP 的检测协议,提供开销较低的方法来检测两个相邻路由器之间的转发路径中的故障。其中包括检测接口、数据链接和转发层面中的故障。您可以在路由协议级层启用 BFD。

BFD 限制

您只能在为专用互连或合作伙伴互连中的 VLAN 连接配置的 BGP 会话中启用 BFD。为高可用性 VPN 隧道或路由器设备(该设备属于 Network Connectivity Center 的一部分)配置的 BGP 会话不支持 BFD。

BFD 会话建立

如需建立 BFD 会话,请在以下两个 BGP 对等方上配置 BFD:Cloud Router 路由器和运行 BFD 的本地路由器。在路由器上为 BGP 路由协议启用 BFD 后,系统会创建一个 BFD 会话,协商 BFD 计时器,然后 BFD 对等方开始按协商的时间间隔相互发送 BFD 控制数据包。

通过向本地路由器上的 BGP 发送快速故障检测通知来启动路由表重新计算过程,BFD 有助于显著缩短整体网络收敛时间。

下图展示了一个简单的网络,其中包含两个运行 BGP 和 BFD 的路由器。图中的数字表示 BFD 会话的建立流程:

  1. 已设置 BGP 邻居。
  2. BGP 向本地 BFD 进程发送请求,以启动与 BGP 对等/令居路由器的 BFD 邻居会话。
  3. 与 BGP 邻居路由器的 BFD 邻居会话已建立。
BFD 会话建立。
BFD 会话建立(点击可放大)

故障事件期间的 BFD

下图显示当网络发生故障时会出现什么情况。

在 BFD 仅控制模式中,Cloud Router 路由器和您的本地路由器会定期向彼此发送 BFD 控制数据包。如果本地路由器未接收的连续控制数据包的数量达到 Cloud Router 路由器的 bfd multiplier 设置中配置的值,则会话会被声明为关闭。然后,会发生以下情况:

  1. Google Cloud 和本地路由器之间出现链接故障。
  2. 与 BGP 邻居路由器之间的 BFD 邻居会话会被关闭。
  3. BFD 会通知本地 BGP 进程 BFD 邻居无法再访问。
  4. 本地 BGP 进程删除 BGP 邻居关系。

如果有替代路径可用,则路由器会立即开始使用该路径。

故障事件期间的 BFD。
故障事件期间的 BFD(点击可放大)

BFD 抑制

Cloud Router 路由器在内部实现 BFD 抑制,以降低频繁 BFD 会话抖动对 BGP 造成的负面影响。BFD 抑制使用默认参数,用户无法修改这些参数。

BFD 抑制使用处罚系统。处罚值从 0 开始,第一次抖动后增加到 1。第一次抖动后,每发生一次 BFD 抖动,处罚都会加倍。当处罚值超过阈值 4 时,BFD 会禁止向 BGP 发送通知。如果在此期间没有发生抖动,则处罚值每 10 分钟减少一半。

在处罚值低于重用阈值 4 之后,BFD 会再次启用向 BGP 发送通知。

BFD 向 BGP 发送通知的最大禁止间隔为 1 小时。这可确保 BFD 会话关闭通知不会永远被抑制。

BFD 异步模式

Cloud Router 路由器支持异步操作模式,在这种模式下,所涉及的系统会定期互相发送 BFD 控制数据包。如果另一个系统未接收某一行中这些数据包的配置数量,则声明会话已关闭。

不支持 BFD 操作的需求模式。对于数据包模式,BFD 支持“仅控制”模式;不支持回声模式。

在采用仅控制数据包模式的操作的异步模式下,BFD 在控制层面上运行,因此可能会略微增加开销和 CPU 处理时间。

默认情况下,Cloud Router 路由器的 BGP 会话中已停用 BFD。如需使用 BFD,您必须启用 BFD

在以下故障场景中,路由器具有以下设置:

  • Cloud Router 路由器的 BFD 接收间隔设置为 1000 毫秒乘以 BFD 系数 5,于是检测计时器设置为 5000 毫秒。
  • 对等路由器的 BFD 传输时间间隔设置为 1000 毫秒乘以 BFD 系数 5,于是检测计时器设置为 5000 毫秒。

Cloud Router 路由器与对等路由器协商,并预计每 1000 毫秒从对等路由器接收控制数据包一次。如果 Cloud Router 路由器在 5000 毫秒内未接收控制数据包,则其检测计时器会到期,并声明 BFD 会话将关闭。

没有 echo 数据包的 BFD。
没有 echo 数据包的 BFD(点击可放大)

优雅重启和 BFD

为了最大限度地降低 Cloud Router 路由器软件维护事件期间对流量的影响,我们建议您启用 BGP 优雅重启功能。

如果同时启用了 BGP 优雅重启功能和 BFD,则在 Cloud Router 路由器重启后,它会尝试通过向本地路由器发送 AdminDown 消息来关闭 BFD。发生这种情况时,BGP 会话会保留在本地端,并且本地路由器会进入优雅重启模式。当本地路由器处于优雅重启模式时,Cloud Router 路由器可以重启,而不会影响数据平面流量。

同样,如果本地路由器在其控制平面重启之前发送 AdminDown 消息,则 Cloud Router 路由器将进入优雅重启模式。当 Cloud Router 路由器处于优雅重启模式时,本地路由器可以重启,而不会影响数据平面流量。

在与对等路由器建立 BFD 时,Cloud Router 路由器会将控制平面独立位设置为 0,以指示其 BFD 的实现与控制平面相关。如果出现接口故障,对等路由器可能无法区分由控制平面故障或数据平面故障导致的 BFD 故障。例如,接口故障可能会导致本地路由器进入优雅重启模式,并且会对来自受影响链路的流量故障切换造成不必要的延迟。

由于 BFD 故障可能不明确,因此不同的供应商会以不同的方式处理此特定情况,并提供配置设置来更改默认行为。我们建议您查看路由器供应商的文档并配置本地路由器,以确保与控制平面相关的 BFD 对等方发生的 BFD 接口故障事件在与 BGP 优雅重启结合使用时会触发即时故障切换。

BFD 设置和计时器

本部分介绍您可以在 Cloud Router 路由器上配置的 BFD 设置。

BFD 会话发起模式

说明 此 BGP 对等体的 BFD 会话初始化模式。
gcloud 命令 --bfd-session-initialization-mode
API 字段 bgpPeers[].bfd.sessionInitializationMode
默认设置 Disabled

BFD 模式设置有三种:ActivePassiveDisabled。如果您未设置此模式,则默认为 Disabled 设置,使用非回声模式(仅控制数据包)。

  • Disabled(默认):为此 BGP 对等体停用 BFD。
  • Passive:Cloud Router 路由器等待对等路由器为此 BGP 对等体发起 BFD 会话。
  • Active:Cloud Router 路由器为此 BGP 对等体发起 BFD 会话。

您必须至少在连接的一端将路由器(Cloud Router 路由器或对等路由器)设置为 Active。在两个 Cloud Router 路由器之间配置 BGP 会话时,请将某个路由器的 BFD 会话初始化模式设置为 Active

如果您将两端都设置为 Active,则两端都会发送初始控制数据包以协商参数,并且最终将建立会话。

如果您将 BFD 会话初始化模式设置为 Disabled,则可以选择配置其余的 BFD 设置。这些设置将在您重新启用 BFD 后生效。

BFD 最小传输时间间隔(发送到对等体的 BFD 数据包)

说明 BFD 控制数据包传输到 BGP 对等体之间的最短间隔。
gcloud 命令 --bfd-min-transmit-interval
API 字段 bgpPeers[].bfd.minTransmitInterval
默认设置

1000 毫秒。您可以指定 1000 毫秒到 30000 毫秒之间的设置。

BFD 最小接收时间间隔(来自对等体的 BFD 数据包)

说明 从 BGP 对等体接收 BFD 控制数据包之间的最短间隔。
gcloud 命令 --bfd-min-receive-interval
API 字段 bgpPeers[].bfd.minReceiveInterval
默认设置

1000 毫秒。您可以指定 1000 毫秒到 30000 毫秒之间的设置。

BFD 系数

说明 连续错过该数量的 BFD 控制数据包后,BFD 会声明对等体不可用。
gcloud 命令 --bfd-multiplier
API 字段 bgpPeers[].bfd.multiplier
默认设置

5 个数据包。您可以指定 5 到 16 个数据包之间的设置。

后续步骤