摘要

  • RFC 5004 只在现有外部最佳路径与挑战者都通过 BGP Identifier 之前的全部比较时保留前者。保留不等于证明它更快、更安全或更便宜,只说明挑战者尚未拿出足以扰动转发的理由。
  • Enke Chen 与 Srihari Sangli 把一次实际振荡经验写成很窄的连续性规则。运营者必须证明候选集确实相等、实现记录了 retention 原因、FIB 与数据包结果分别可见,而且后来的策略或可达性变化仍能结束保留。

“没有变化”也需要一份运行记录

路由器当前用外部路径 A 转发,随后收到外部路径 B。BGP 依次比较本地策略形成的 LOCAL_PREF、AS_PATH、ORIGIN、适用时的 MED、EBGP 与 IBGP 属性,以及到 NEXT_HOP 的 IGP 代价。A 与 B 每一步都相同。按照 RFC 4271,算法仍要收敛到一个答案,于是来到很靠后的 BGP Identifier 比较;对端编号更小的 B 胜出。

这个编号能让算法结束,却没有测量路径。它不表示容量、费用、时延、物理分离、安全状况或数据包是否到达。RFC 6286 把 BGP Identifier 定义为一个非零四字节无符号整数,并要求它在 AS 内保持唯一;它甚至不必是分配给该 BGP speaker 的地址。点分十进制外观不能把标识符变成质量证据。

但一次“只是为了打破平局”的胜出仍可能改写 Loc-RIB、触发 FIB 编程,并向邻居发送新的 UPDATE。控制平面看见的是确定选择,业务可能承受的却是收敛、重排或故障域变化。两者之间不能靠想象补齐。

RFC 5004 在这里插入一条有限规则:若 A 是现有外部最佳路径,B 是普通算法本来会选中的外部挑战者,而两者在 BGP Identifier 之前都未被淘汰,则继续保留 A。A 没有因此升级为“更佳”;B 只是没有赢得替换正在运行状态的权限。

规则真正保护的是相等条件

这条扩展最重要的不是“旧”,而是“此前都相等”。只要 LOCAL_PREF、AS_PATH、ORIGIN、可比较的 MED、EBGP/IBGP 或 IGP 代价出现差异,原有比较就必须发挥作用。A 被撤回、NEXT_HOP 失去可达性,或显式策略变化,也必须终止保留。RFC 5004 从未授权设备用惯性对抗新的运行事实。

它还有两个明确排除项。任一路径来自 BGP Confederation peer 时不适用;两个 peer 使用相同 BGP Identifier 时也不适用,因为并行会话最后按对端地址选择,可能正是运营者有意设置的控制面。连续性不能吞掉其他位置已经表达的意图。

因此,“配置已开启”只是配置记录。要证明某前缀实际使用了 RFC 5004,至少需要当时两个 Adj-RIB-In 候选、进口策略后的属性、逐步比较结果、普通算法原本将在何处换路,以及实现给出的实际 selection reason。随后还要分别检查 Loc-RIB、FIB 与数据包。它们处在同一时间线,却各自拥有不同的事实权限。

一张前后相同的路由表尤其容易误导。它可能意味着没有挑战者、挑战者被入口策略挡住、挑战者早在 LOCAL_PREF 就失败,也可能才是 incumbent retention。没有候选与决策理由,“未变化”只是观测空白。

1998 年的一次振荡为何只能说明一类机制

Chen 与 Sangli 说明,这个想法来自 1998 年 BBN/Genuity 网络中观察到的一次路由振荡,算法当时得到实现与部署。这项记载让标准具有真实故障的来源,也划出证据边界:它不是今天全球部署率,不证明所有拓扑都会获益,更不能把任何 UPDATE/withdraw 循环都归因于同一原因。

该例与部分可见性有关。RFC 4456 的 route reflection 通过反射器选择并重新发布路由,避免 IBGP 全互联。扩展性代价是客户端通常只看到反射器选中的路径,而不是 AS 内全部外部候选。

在 RFC 5004 的示例中,MED 比较遇上这种不完整视图。新外部路径改变一台反射器发布的内容,邻居随之改变选择,邻居的新选择又撤掉最初决定成立的条件。如果最初那一步只靠 BGP Identifier 换路,保留 A 可以切断循环中的一次关键转换。

RFC 3345 记录的持续振荡并不都属于这一类。某些 route reflection 或 confederation 拓扑、以及只在部分候选之间发生的 MED 比较,需要拓扑约束或明确策略。RFC 5004 也承认自己的范围。故障名称不能代替候选集重建。

本地过去成为当前输入

两台配置相同、此刻候选属性也相同的路由器,若先后收到路径的顺序不同,可能各自保留不同 incumbent。RFC 5004 明示这种历史依赖,有时称为 non-determinism。它不是随机数控制路由,而是把“此前已在运行”纳入一个很窄的末位决策。

在拥有多个外部 peer 的交换节点上,这种取舍可能合理:避免仅因无业务含义的编号而重复改写转发。但它会增加诊断成本。比较两台设备时,当前快照不再完整;还要知道平局形成前谁占据 best path。

若网络确实要求全局一致偏好,应在自己掌握的权限内写明,例如 LOCAL_PREF,或在语义适合时使用 MED。用到达顺序替代商业、容量或韧性政策,会让历史偶然性获得从未被正式授予的权力。

后来的另一种预算:多展示路径

RFC 7911 的 ADD-PATH 从信息侧处理问题。双方按方向协商能力后,一个 speaker 可为同一前缀发布多条路径,并用本地意义的 Path Identifier 区分。Identifier 可能在控制平面重启后改变;协商成功也不保证发送完整候选集,不负责挑选最佳路径,更不自动形成 ECMP。

RFC 7964 随后把 ADD-PATH 用于 MED 振荡:发布全部路径,或按相邻 AS 形成 Group Best 集合,可让远端基于更一致的候选做决定。代价是内存、UPDATE 量与收敛工作上升,因此文档建议尽量限定到受影响前缀。

两种思路花费不同资源。RFC 5004 在狭窄平局里保留一个现有状态,以少变化换取历史依赖;ADD-PATH 分发更多状态,以资源换取可见性。它们不是“稳定”口号下的替代品,选择必须来自已被证明的振荡机制。

Enke Chen 的位置必须与协议边界同样清楚

Enke Chen 与 Srihari Sangli 共同撰写 RFC 5004。他的 IETF 记录还连到 route reflection、BGP Identifier 修订、ADD-PATH 与后续持续振荡工作。这条人物线索让人看见 BGP 设计如何反复分配三种稀缺品:完整信息、有限状态与较少切换。

它不意味着 Chen 拥有某个运营网络的政策。外部 peer 写入部分路由属性;接收 AS 决定进口与 LOCAL_PREF;IGP 提供内部代价;实现执行算法并暴露理由;route reflector 限制他人所见;FIB 安装结果;数据平面才回答包是否交付。作者身份不能吞并这些独立权限。

University of Michigan Engineering 的机构文章可为 Chen 的身份、教育经历与互联网技术生涯提供带日期的来源,却不能证明任何具体网络今天启用了 RFC 5004,也不能把当前运行责任归给他。

一条可审计的“不换路”证据链

可靠记录至少连接六层:原始候选及接收属性、入口策略后的本地属性、直到 BGP Identifier 的逐步比较、明确的 incumbent-retained 原因、Loc-RIB 与 FIB 的实际变化、以及数据包与服务探针。每层都应有可关联的时间与前缀、peer、地址族标识。

证据链还必须包含退出条件。改变显式策略、撤回 A、让 NEXT_HOP 不可达、改变适用的 MED 或 IGP 代价,都应触发重新选择。若系统只会保留却无法在条件消失时释放,连续性已经变成隐形锁定。

RFC 5004 最值得保留的思想很克制:当一个系统已经运行,而挑战者只在最弱的末位标识上占优时,不应让该标识自动拥有扰动转发的强权力。旧路径可以继续坐在原位,但它的席位是一条可验证、可撤销的程序性许可,不是质量证书。

来源