摘要
- RFC 9790 废弃了仅凭 MPLS 标签栈后四个比特识别载荷类型的做法。
0x4与0x6可以像 IPv4、IPv6,也可能只是非 IP 帧或栈后报头的开头。 - 正确解释来自前置标签的控制面或管理面上下文。负载分担应优先使用显式 Entropy Label 或 FAT Pseudowire Label,而不是让中转设备猜一种格式后到错误偏移读取字段。
- IANA 登记、控制字和熵标签都能缩小歧义,却不能单独证明设备已经实现、路径确实均衡、报文保持有序,或客户业务已达到结果。
一台中转设备找到 MPLS 标签栈底,看到后续字节以 0100 开始。旧解析器把它当作 IPv4 版本号,于是跳到“源地址”“目的地址”和“端口”应该出现的位置,用这些字节计算 ECMP。
实际报文却是伪线承载的以太网帧。0100 只是目的 MAC 地址的开头。设备没有识别出 IPv4;它只是把相似当成了身份,并据此作出真实的转发决定。
RFC 9790 处理的是一个只有十六种取值的空间,但它揭开的风险并不小:观察不等于上下文,上下文也不等于结果。
四个比特只证明四个比特存在
MPLS 报文由二层报头、若干四字节标签栈条目、可选的栈后报头以及可选的嵌入报文组成。最后一个标签条目的 Bottom-of-Stack 位告诉设备标签在哪里结束。它没有告诉设备后面必然是什么。
Post-stack First Nibble(PFN)只是标签栈后第一个字节的高四位。若后面恰好是裸 IPv4,它与版本号 4 重合;若是裸 IPv6,它与 6 重合。若后面是以太网帧、控制字、关联通道或其他栈后报头,这四位属于那个结构。
因此,RFC 9790 明确指出:必须结合前置标签条目或标签组在控制面、管理面中建立的上下文,才能正确解释 PFN。抓包能够证明线路上出现了 0x4,却不能靠这个事实证明报文是 IPv4。
这正是现实层纪律。比特属于数据平面观察;标签绑定说明预期服务;实现选择一种解析器;转发表再作出动作。把四句话压缩成“它是 IP”,就把推断伪装成事实。
猜测已经成为隐蔽的转发策略
旧方法之所以流行,是因为 IP 五元组适合分流。遇到 0x4 就按 IPv4 读取,遇到 0x6 就按 IPv6 读取,其他值退回标签栈哈希。对真正的裸 IP,这比只看顶层标签细致。
前提错误时,细致反而放大危险。以太网目的 MAC 可以以 4 或 6 开头。RFC 8469 说明,正式分配的 MAC 和隐私随机化地址都会产生这种模式。没有伪线控制字时,设备可能把以太网内容误读成 IP 字段,在无意义的偏移上制造哈希键。
后果并不限于统计不漂亮。属于同一有序流的报文可能被送到不同成员链路而乱序;差异化转发设备也可能基于虚构出来的“IP 字段”套用策略。四位启发式规则于是拥有了选择路径、定义流和改变服务质量的权力,却没有相称的证据。
语义来自标签上下文,而非视觉相似
RFC 9790 改变了提问方向。不是先问“这四位像什么”,而是先问“前面的标签绑定允许什么结构出现”。当 MPLS 载荷既不是 IPv4 也不是 IPv6 时,新规范要求使用首半字节不为 0x4 或 0x6 的栈后报头。
伪线控制字的一个价值,就是让旧硬件不会误启动 IP 解析器。它并不验证来源,也不证明后续帧正确;它只消除一种可预见的歧义。边界越准确,承诺越可信。
IANA 的 PFN 表故意允许复用。0x0 同时用于 DetNet、NSH 和伪线控制字,0x1 也服务多个关联通道。它们要靠前置服务标签区分。若把 PFN 当成全球唯一的类型号,反而误解了这份登记表的设计。
这与 Heng Lu 的最小初始规范相呼应:公共层只保存互操作真正需要的值、引用与约束。节点仍须依据自己持有的标签状态作本地验证。登记表协调语义,不替设备看包,更不替运营者证明结果。
两张登记表不是同一命名空间
IP Version Numbers 登记的是 IP 报头里的版本;Post-Stack First Nibble 登记的是栈后报头类型。RFC 9790 说,两者只有 4 与 6 因向后兼容而交叉。
新的 PFN 登记表覆盖十六个值,并以 Standards Action 管理新增条目。它能让占用、复用和引用变得可审计,但一条登记记录只证明规范状态。它不能证明现场报文符合该规范,不能证明某块线卡实现了对应解析,也不能证明配置已经启用。
登记不是运行。发布也不是采用。最危险的运营简写,是看到“已在 IANA 登记”便把后续所有因果链一并标绿。
把熵放到真正拥有上下文的位置
RFC 9790 推荐用专门标签承载负载分担信息,例如 RFC 6790 的 Entropy Label 或 RFC 6391 的 FAT Pseudowire Label。入口设备尚未被 MPLS 封装遮住视野,知道业务与原始报文格式,适合选择真实流字段并生成熵值。
在 RFC 6790 中,保留标签 7 是 Entropy Label Indicator,紧邻其后的才是 Entropy Label。中转节点只需对标签栈取哈希,无须猜测嵌入载荷。这不是把所有权交给入口,而是把判断放在信息更充分的位置。
显式也不等于成功。端点能力需要信令,标签栈深度有硬件限制,入口的哈希算法仍可能把大流撞到同一链路。熵标签能证明报文携带了一个明确值,不能证明利用率均衡、延迟达标或报文没有乱序。
FAT 伪线还保留单路径默认值,流感知模式是可选项。动态环境要交换发送、接收能力,静态伪线则要在两端一致配置。抓到一个 Flow Label 不能替代两端协商记录,更不能证明每个中转设备都按预期使用它。
废弃是一条方向,不是已经完成的迁移
RFC 9790 更新 RFC 4928,要求新实现、新部署不得再根据 PFN 推断载荷类型,同时让旧路由器继续原有行为。它还要求在彻底淘汰相关封装之前,先收集市场与部署中是否仍使用启发式分流的证据。
因此,网络会长期处于混合状态。标准文本改变了设计基线,却不会自动更新现网 ASIC、线卡与软件版本。同一条端到端业务可能经过行为不同的节点。
运行代码优先要求的不是相信“已废弃”标签,而是能回答:这台设备收到什么标签与报头?它持有什么上下文?实际使用哪些哈希输入?稳定流最终走了哪条成员链路?
让证据在边界处停下来
一次可复核的事件至少应保留九层记录:完整标签栈与栈底位置、紧随其后的原始字节与 PFN、当时的标签绑定、适用的报头规范与 IANA 条目、设备型号和解析版本、显式熵标签或回退哈希输入、每个稳定流的成员选择、乱序损失与时延观测,以及客户或应用结果。
抓包能支持前两层,控制面快照支持标签上下文,配置与能力记录支持解析路径,转发遥测和重复探测才支持路径与性能。任何一层都不能被“首半字节是 4”替代。
RFC 9790 的贡献不是赋予四个比特更多权威,而是拿走它们不该拥有的权威。可靠的协调系统不让符号变成主权者;它要求每一次跨层推断都出示自己的收据。
来源
- RFC 9790 — IANA Registry and Processing Recommendations for the First Nibble Following a Label Stack
- RFC 4928 — Avoiding Equal Cost Multipath Treatment in MPLS Networks
- RFC 3032 — MPLS Label Stack Encoding
- RFC 4385 — Pseudowire Emulation Edge-to-Edge Control Word
- RFC 6790 — The Use of Entropy Labels in MPLS Forwarding
- RFC 6391 — Flow-Aware Transport of Pseudowires over an MPLS Packet Switched Network
- RFC 8469 — Recommendation to Use the Ethernet Control Word
- IANA — Post-Stack First Nibble
- Heng Lu — Running-Code Primacy
- Heng Lu — Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
- Heng Lu — On Reality Layers, Symbolic Power, and Why Clarity Feels So Hostile
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
