摘要

  • RFC 9746 允许支持两种防环方法的 All-Active EVPN 封装显式广告偏好,但非零 SHT 首先表达管理意图,不自动证明实际运行方法。
  • 同一 ES、给定 EVI 的参与者广告不一致时,各节点必须按封装回到默认方法。至少一条默认 00 广告,就足以要求升级节点回退,不能用多数偏好覆盖它。
  • MPLSoUDP 的默认回退可能要求重新广告此前省掉的非零 ESI 标签。兼容入网因此涉及标签余量、路由分组和实际 BUM 交付,不只是版本检查。

省掉的资源,并未永久退出义务

设备替换常被当作库存问题。RFC 9746 却给出一个会改变邻居资源需求的例子:两个升级 NVE 在同一以太网段使用 MPLSoUDP,广告 local bias,ESI 标签为零。第三个尚未支持新规范的 NVE 加入,广告默认 SHT。前两个节点必须采用 MPLSoUDP 的默认 ESI 防环方法,并更新路由,给出有效非零 ESI 标签。

这不是已发生的事故,而是规范第 2.4 节的假想兼容场景。它重要之处在于:前两个节点的管理偏好无需被修改,实际转发义务已经改变。资源节约由原有参与者组合支撑;组合变了,省去的资源可能重新进入必需清单。

RFC 9746 于 2025 年 3 月发布,更新 RFC 7432 和 RFC 8365,属于 IETF 标准轨道,文档状态为 Proposed Standard。今天的正式勘误查询没有列出匹配项。这些是规范状态,不是厂商支持率、实际部署数量或可靠性实测。新规范改变的是两种方法的选择和信令,不是重新发明防环算法。

要阻止的是回到原客户侧的那一份

EVPN 多归属让客户设备同时连接多个边缘节点。源自该客户设备的广播、未知单播或组播帧,不能经过另一边缘节点又回到同一个客户设备。防环保护的是这个来源边界;合法目的地仍应收到流量。因此“源端没有看见回灌”与“服务交付正常”是两个都要检验的结果。

ESI 方法让出口节点识别帧的来源段,在向该段发送时过滤。MPLS 使用 ESI 标签承载相关标识。local bias 则利用外层隧道源 IP 识别入口 NVE,过滤出口节点上与入口节点共同连接的 ES。同时,入口节点必须把从接入侧进入的 BUM 流量本地复制到直接相连的段,不依赖 DF 选举结果。本地复制不是附加的性能选项,而是这套机制成立的一部分。

两种方法并非在所有场景都可互换。local bias 仅适用于 All-Active,并受同 ES 节点之间 next hop 不改变的约束;ESI 方法可用于 All-Active 和 Single-Active,也可跨不同网络域。规范提到 local bias 可简化封装、减少资源消耗,并使本地交付更直接,但未给出适用于所有设备的延时收益或资源节省数值。

广告一个偏好,不等于取得多数授权

SHT 是 ESI Label Extended Community Flags 中第 6、7 位。当前 IANA 登记仍为 00 默认、01 local bias、10 ESI 过滤,11 未分配。其他 Flags 位已有后续登记,不能把 RFC 发布时的整张空位表当作今天的全貌。

显式选择只适用于同时支持两种方法的封装。规范列出 MPLSoGRE、MPLSoUDP、Geneve 和 SRv6;VXLAN、NVGRE、VXLAN-GPE 仍仅支持 local bias,MPLS 与 SR-MPLS 仅支持 ESI。一个 SHT 值不能凭空增加隧道能力。Single-Active 与非零 SHT 同时收到时,要求按 treat-as-withdraw 处理,而不是试图协商使用 local bias。

对同一 ES、给定 EVI,广告的 SHT 不一致,所有有关 NVE 必须回到该封装默认方法。升级节点收到至少一条同段 00 路由,也必须不论自己的管理值而回退运行方法。两个 01 不会击败一个 00,因为这里没有多数票规则。

00 也不是旧软件的身份证。升级节点同样可以主动选择默认。运营者应把版本证据与路由广告分开记录,否则可能把“观察到默认意图”误报成“发现未升级设备”。规范对旧实现忽略除 Single-Active 外其他 Flags 的处理,是明确的兼容假设,不等于所有现存厂商设备均已验证。

默认方法要连同封装一起解释

MPLSoUDP 与 MPLSoGRE 的默认是 ESI;VXLAN 的默认是 local bias。Geneve 还取决于 Ethernet option 和来源 ESI 标识:缺少相应标签或选项时走 local bias,否则走 ESI;显式 10 要求存在非零 Source-ID 的 Ethernet option。SRv6 默认使用类似 ESI 的源段过滤参数,这不意味着每个 SRv6 包都携带普通 MPLS 标签。

正因默认不统一,“运行回到 00”不能只作为仪表盘颜色。它应被解析成该服务实际使用的方法。local bias 下可以省去不用的标签;运行 ESI 时则必须广告有效非零值。MPLSoUDP 示例里的更新是规范要求,而不是可有可无的补充配置。一般转换规则也有所有未升级参与者只支持 local bias 的例外,不能简写成任何回退都要新分配标签。

对运营而言,兼容能力应包括回退所需的余量,而不只是当前优化态的占用。这是由机制推导的管理建议,并非 RFC 提供的容量公式。本文未获得厂商标签池上限,也没有测量从路由更新到硬件过滤项生效的时间。不能拿规范要求的存在替代实际完成的证据。

多封装不能用一个广告抹平差别

同一条 A-D per ES 路由里的封装必须使用同一防环方法。若其中包含只支持一种方法的封装,SHT 必须为 00;全部支持两种方法的组才可以广告 0110。MPLS 与 VXLAN 不能为了方便汇总而放入同一条路由。

不同 EVI 子集需要不同方法时,规范要求分别广告路由或路由组。每个 EVI 的 Route Target,在该 ES 的一条且仅一条 A-D per ES 路由中出现;多条路由使用不同 Route Distinguisher。第 3 节把 VXLAN/default、MPLSoUDP/local bias 与 Geneve/ESI 分组,后者还须有非零标签和 Ethernet option。给定 EVI 的所有节点仍必须支持共同封装;把广告拆开,并不会创造不存在的共同能力。

所以变更审查不能只写“该 ES 已批准”。必须保留 ES、EVI、封装以及实际参与者的对应关系。汇总到设备级或整个机群,可能恰好丢掉决定运行方法的条件。

安全回退不是故障证明,规范也不是零中断保单

RFC 的安全章节认为,攻击者在单个节点修改合法 SHT,按这些程序不应造成流量中断,但可能改变转发行为。这一带前提的判断,不能延伸为任意非法配置、未知实现或回退资源耗尽都不会丢包。默认运行本身不是故障;无法观察的运行状态也应标成未知,而不是擅自宣布成功或失败。

有意义的验收应在有限段里测试默认参与者加入和退出:追踪广告、标签分配、路由更新和过滤项,并从接入入口观察 BUM 是否到达预期目的地、是否被阻止返回来源客户设备。重复、环回和丢失都需要明确观察窗口。只看配置仍为 01,或只看源接口没有回灌,都不能确认完整交付与回滚。这些是运营核验建议,不是新协议字段或统一毫秒级 SLA。

来源与边界

本文未证明任何真实部署事故、采用数量、资源上限或实测恢复时间。配图为 AI 生成的概念性编辑摄影,不是现场证据。