摘要

  • RFC 9252 的按位 OR 只有在 Ethernet A-D per ES 与 Inclusive Multicast 两类路由使用相同 SID 结构时才安全;RFC 9819 明确取消了这一普遍假设。
  • 启用 ESI Filtering 时,Route Type 3 给出 End.DT2M 的 LOC:FUNC 与插入边界,Route Type 1 提供 Arg.FE2。AL 相等是必要条件,却不是全部结构相同的证明。
  • 通过结构校验只说明能够构造候选 SID;本地策略、最佳路径、FIB、出口 local SID、实际排除的接口与最终 BUM 交付仍需各自回执。

最容易被忽略的故障,不是字段缺失,而是字段齐全。NOC 看到两条 BGP 路由、两个合法 TLV、一个计算完成的 IPv6 地址,于是把“收到”写成“可用”。RFC 9819 要求工程团队退回半步:这个 ARG 究竟应从哪一位开始写入?

RFC 9252 曾规定,把 EVPN Route Type 1 携带的 ESI Filtering Argument 与 Route Type 3 携带的 End.DT2M SID 做按位逻辑 OR。这个方法没有天然错误;它依赖一个前提——两条路由中的 SID 结构完全相同。RFC 9819 记录,实施与互通测试暴露了原规范细节不足,统一结构并不总是成立。

因此,更新的真正价值不是增加字段,而是重新分配结构解释权。属于 End.DT2M 业务 SID 的 LOC:FUNC 由 Inclusive Multicast Ethernet Tag 路由声明;用于 ESI Filtering 的 ARG 由 Ethernet A-D per ES 路由声明。接收端不能把两个 128 位容器当成匿名位图,而要依据拥有 LOC:FUNC 的路由所声明的结构插入论元。

ARG 是局部含义,不是任意标签

RFC 8986 将 SRv6 SID 划分为 Locator、Function 和可选 Argument。End.DT2M 解封装以太网载荷,在指定 L2 表中泛洪,并用 Arg.FE2 找到应从泛洪集合中排除的接口。这一映射由实例化该行为的段端点节点在本地分配,再通过控制平面告知其他节点。

所以 ARG 的数值并不自带全球语义。相同的十六进制片段,在另一个节点、另一条 SID、另一个 ESI 或另一个时期可能没有同样含义。论元公告至少要说明长度、数值、关联行为以及它适用于哪些 SID;拥有 LOC:FUNC 的端点还必须说明是否接受论元以及接受的位置。

SID Structure Sub-Sub-TLV 承载这个边界。LBL、LNL 与 FL 的和决定 ARG 起点,AL 决定长度。若行为不接受论元,AL 必须为零,FUNC 后的位也必须清零。若接受非零 AL,声明之外的尾部位仍必须为零。这里的“零”不是占位,而是可验证的编码约束。

三种结果不能归并为一个状态

RFC 9819 对入口 PE 的处理可以分成三个分支。

第一,Type 3 的 AL 为零。入口只使用 LOC:FUNC,并忽略对应 Type 1 的 SID 值与结构。即使 Type 1 中恰好出现一段像 ARG 的比特,也不应被提升为转发含义。

第二,Type 3 声明非零 AL,但找不到匹配的 Type 1 End.DT2M 公告,或 Type 1 的 AL 为零。这时没有可用 ARG,入口仍构造 LOC:FUNC-only SID;若业务预期 ESI Filtering,设备应留下便于排障的日志。

第三,两边 AL 都非零。若长度不同,这是配置不一致;为防潜在环路,来自相关 Ethernet Segment 的 BUM 流量不得继续转发。若长度相同,入口才把 Type 1 的 ARG 写入 Type 3 结构所给出的 LBL + LNL + FL 偏移,并把声明范围后的所有位清零。

这个顺序说明,AL 相同并不等于结构相同。RFC 9819 的多 bridge-domain 示例让同一个 16 位 ARG 服务于两个 Type 3 SID:一个 FL 为 32 位,另一个为 16 位。完成后的 ARG 位置自然不同。按位 OR 只能在结构确实相同的旧兼容场景继续使用;显式插入才支持这种异构布局。

“匹配路由”需要身份与时间

RFC 7432 为 EVPN 路由提供 RD、RT、Ethernet Tag、ESI、originating PE、next hop 与撤回机制。它们共同界定一条控制记录属于谁、服务于哪里、何时仍有效。只在数据库里发现 Route Type 1 与 Route Type 3 两行,不能证明这两行属于同一个广播域、同一个 Ethernet Segment 或同一个变更世代。

组合证据应保留源 PE、EVI、广播域、ESI、路径选择、接收时间与撤回序列。它还要说明是否采用 ESI Filtering;若使用 RFC 8365 的 local bias,便不应把 ESI Filtering ARG 合进 End.DT2M SID。

压缩也不能成为省略结构的理由。RFC 9800 定义压缩 SID 行为,RFC 9819 允许压缩与非压缩 End.DT2M flavor 混合出现,只要 AL 一致性检查成立。行为 flavor 必须随证据保留。Transposition Scheme 同样没有被 RFC 9819 改写;一旦 Function 或 ARG 位借用 MPLS label 字段传递,TPOS-O、TPOS-L 与 label 容量仍是独立校验项。

控制平面只交付候选,不交付结果

RFC 9819 直接规范了公告、校验、失败处理与 SID 构造。它没有声称收到路由就表示本地策略接受,解析成功就表示最佳路径采用,构造完成就表示硬件已写入,更没有声称 End.DT2M 已按预期排除接口。

一条可审计链至少包括:原始路由身份与新鲜度;行为与结构;Type 1/Type 3 关联;完成后的 128 位 SID;实现版本与本地策略;RIB/FIB、封装与出口 local SID 编程;绑定到该 SID 世代的报文计数或 trace;接收者看到的业务结果。

出口侧尤其关键。Arg.FE2 必须仍映射到预期 ESI,End.DT2M 必须绑定预期 L2 表,泛洪集合必须排除正确接口。入口发送一个数学上正确的地址,无法替出口设备证明这些本地事实。即使分割视界动作正确,也仍要确认预期接收者收到 BUM、来源段没有收到回送副本、没有重复和环路。

这正是本篇与相邻文章的边界。RFC 10018 的文章拥有 SR P2MP 树、逐节点安装和逐叶交付;RFC 9830 拥有 BGP candidate path 与 SR Policy Manager 的激活边界;RFC 9863 拥有 PCEP Color;RFC 10039 拥有跨域 D-PATH。RFC 9819 处理的是更早、更窄的一步:在任何交付结论之前,两个路由组件是否能够在不捏造统一结构的前提下成为目标业务 SID。

Lu Heng 的最小初始规范主张把共同层限制在确定、可本地验证的规则内,Running-Code Primacy则把文档与实际采用区分开来,Reality Layers提醒读者不要把符号声明误当成物理效果。这里将其用作编辑分析框架,不把它归因于 IETF 的设计动机。

RFC 9819 让“拼接正确”第一次足够精确。领导层仍需坚持:拼接正确不是路由正确,不是编程正确,不是行为正确,也不是业务正确。

来源