摘要

  • RFC 8326 的 Graceful Shutdown 在主动关闭 EBGP 会话前降低路径优先级;RFC 4724 的 Graceful Restart 则在 BGP 重启期间保留转发状态和暂时标记为陈旧的路由。
  • 合格的维护合同必须写明机制、数据平面是否继续工作、对端策略与收敛证据,以及在哪个条件下中止或回滚。

一个词掩盖了两种相反动作

Graceful Shutdown 面向的是转发路径将被撤出的维护。RFC 8326 定义 GRACEFUL_SHUTDOWN 团体属性,目的不是立刻撤销路由,而是让旧路径暂时存在、同时把 LOCAL_PREF 降到可用替代路径之下。文档建议使用 0。

这项操作需要双方提前准备。接收方要在 EBGP 入方向策略中识别该团体属性并降低本地优先级。维护开始时,发起方给向外通告的路径打标,也降低从待维护会话收到的路径优先级,等待重新通告和 BGP 收敛,最后才关闭会话。这里的“平滑”意味着先排流,再拆除。

Graceful Restart 的前提相反。RFC 4724 假定 BGP 控制面可以重启,而数据平面仍保留可用的转发表项。双方通过能力协商,接收方暂时保留并标记陈旧路由;会话恢复后,新更新替换旧状态,End-of-RIB 标志完成这一轮重建。这里的“平滑”意味着在有界时间内继续转发。

因此,两者不是同义功能。Shutdown 要求网络离开即将失效的路径;Restart 要求网络暂时信任仍能转发的路径。变更单如果只写“启用 graceful”,就没有回答流量应该走还是留。

团体属性传递意图,却不证明事实

RFC 8326 为 Graceful Shutdown 使用 65535:0。RFC 1997 把 BGP Communities 定义为可选、可传递的路径属性,并允许接收路由器按本地策略修改。发起网络可以表达意图,但不能强迫邻居如何选路。

RFC 4271 进一步说明,LOCAL_PREF 是自治系统内部的偏好,数值越高越优先,通常不会发送给外部邻居。也就是说,对端必须把外部收到的团体属性翻译成自己的内部偏好。一次真正完成的排流,需要发起方打标、接收方执行策略,并用观测证明替代路径已经进入 RIB 和 FIB。

这个团体属性也不能证明备用路径有足够容量,更不能证明待维护端口一定会停止转发。信号、物理状态和容量是三种不同证据,不能合并成一个布尔值。

保留陈旧路由是一笔有到期日的信用

Graceful Restart 让邻居暂时相信原有转发仍然有效。RFC 4724 给这种信任设置了边界:会话未在 Restart Time 内回来,陈旧路由必须删除;重新建连后若没有确认相应地址族的转发状态,也要立即移除;收到 End-of-RIB 后,尚未被新更新替换的陈旧路由同样不能继续存在。

标准明确提醒:如果数据平面其实没有保留,或拓扑在收敛完成前发生变化,就可能出现短暂环路或黑洞。仅看到 TCP/BGP 会话重新建立并不能证明这段时间的流量安全。运维系统还要观察数据平面、AFI/SAFI 范围、计时器、陈旧路由数量和 End-of-RIB。

把维护写成可验证合同

变更记录至少要回答六个问题:选择 Shutdown 还是 Restart;维护期间转发是否存活;对端已验证哪条策略或能力;备用路径是否安装且容量足够;哪个事件代表收敛完成;谁有权在证据不符时停止或回滚。

这些要求会增加自动化、遥测、协同和等待收敛的成本。但成本应由发起变更的一方承担,而不是在语义不清时转嫁给用户,以丢包、黑洞和漫长排障的形式支付。

来源与证据边界

本文使用 RFC 8326RFC 4724RFC 1997RFC 4271。它们证明协议文本中的机制和要求,不证明全球部署率、厂商实现一致性、某条备用路径的容量或任何具名网络的实际合规情况。