摘要

  • RFC 8029 让 MPLS Echo 请求沿目标 FEC Stack 对应的数据路径前进,由收到探针的标签交换路由器把数据平面处置与控制平面认识进行核对;回复只对这一探针、这一 FEC、这一响应者和这一时刻负责。
  • 规范承认 ECMP 未必能够完整覆盖,平时不用的备份路径不在程序范围内,回复还可以走普通 IP 或独立控制通道。因此一次成功或一次沉默都不能直接代表整项业务。
  • 可审计回执需要连接探针输入、实际路径与返回码、回复模式与回程、已尝试及未测试路径、持续 BFD 状态,以及一项独立的代表性客户交易。

运维屏幕上出现一条绿线:MPLS ping 回来了。最顺口的判断是“业务正常”。

然而,返回的那个包原本只被设计来完成一件更窄的工作。它携带 Target FEC Stack、标签上下文、序列号和回复模式;这些字段共同选择了某个转发结果。一台路由器收到它,执行规定的检查,再返回一个代码。若把这件事直接命名为“业务”,就恰好丢掉了测试最重要的信息。

2017 年发布的 RFC 8029 是当前整合后的 MPLS 数据平面故障检测规范。Kireeti Kompella 被列为六位作者中的第一位,其余作者为 George Swallow、Carlos Pignataro、Nagendra Kumar、Sam Aldrin 与 Mach Chen。它取代最初的 RFC 4379 及若干后续更新。这个归属说明 Kompella 是 IETF 集体工作的有据可查的贡献者,不说明他拥有每一种实现,更不说明他经营任何采用该机制的网络。

探针真正提出的问题是 FEC

普通 IP ping 询问一个 IP 端点能否返回 ICMP 回复。LSP Ping 面对的情形不同:发送者可能根本不知道 LSP 末端路由器的地址,却仍要检验标签交换路径。请求因此携带目标转发等价类的描述。简单场景可能只有一个 LDP 前缀或 RSVP 会话;VPN 或嵌套隧道则可能需要多个 FEC 元素组成的栈。

请求靠 MPLS 标签栈转发,不靠 127/8 目的地址作路径选择。这个特殊地址是安全边界:如果错误的 LSP 提前弹出标签,诊断包不应被当作普通客户 IP 流量继续送达。到达预期出口后,包进入控制平面,由路由器检查自己是否确为该 FEC 的出口。traceroute 模式逐步增加 TTL,让沿途路由器依次参加检查,以定位控制平面与数据平面的不一致。

只有保存输入,这份证据才强。“ping 通过”无法复核;“UTC 10:14:07,标签栈 X 携带 FEC Stack Y 到达 LSR Z,序列 S 得到返回码 R”则可以与当时的标签和路由状态对照。前者甚至没有说明原问题是什么。

承载 MPLS payload 的业务更能显出差异。RFC 8029 提醒,测试某些 L2VPN 或 L3VPN 时可能需要增加一层标签,否则简单 Echo 包可以通过,而真正的 MPLS payload 仍会在某接口失败。探针必须代表准备宣称的转发处理。少了决定性一层的合成包,不能把自己的成功借给那一层。

一次散列命中不等于全部 ECMP

同一 FEC 可能有多个下一跳。目的地址、UDP 源端口、熵标签、traffic class、payload 类型甚至厂商自有算法,都可能影响实际选择。LSP Ping 提供可变化字段,也能跟随 downstream mapping;它不承诺知道一切。

RFC 8029 直言,私有的负载分配算法可能使完整替代路径覆盖变得不现实;通常不用的 backup path 不在这套程序范围内;多个 ECMP 阶段组合后,即使反复探测也可能覆盖不了所有组合。因此一次 Echo 成功只证明该包选中的路径和实际执行的检查,不能让未触及的成员“连带健康”。

RFC 7882 用 BFD 描述过同类风险:一条 BFD session 可能在一个 ECMP path 上持续正常,而分到另一条路径的流量正在进入黑洞。这不是说 LSP Ping 或 BFD 无效,而是说汇总结论必须保留分母。屏幕应显示“已枚举 8 条、测试 7 条、1 条备份未测”,而不是“整个 MPLS 正常”。

覆盖还要保留报文类别。被当作 IP 的探针可能与非 IP MPLS payload 采用不同散列;低速控制包可能避开真实负载才会出现的丢包;一个 traffic class 正常,不说明另一个队列或 policer 正常。回执必须保存参与选择的字段,并明确结果适用于哪一组流量。

回复拥有自己的路

Echo Reply 无须沿被测 LSP 原路返回。RFC 8029 规定了多种 reply mode:不回复、普通 IPv4/IPv6 UDP、带 Router Alert 的 UDP,或应用层控制通道。RFC 7110 后来又增加指定回程的办法,因为运营者有时需要受控的 reverse path,而不能接受普通 IP 转发随意选择。

这一区分消除了两个常见误判。第一,经管理网收到回复,并没有证明反向客户路径。第二,没收到回复,也没有自动证明前向探针失败。出口可能不支持 LSP Ping,控制平面 policer 可能丢包,回程也可能损坏。RFC 8029 明确提到不兼容路由器会产生假阴性,并建议 traceroute 在沉默节点之后继续尝试。

所以前向与回程应分别记录。前向保留标签和 FEC Stack、TTL、选中的 downstream 与校验结果;回程保留请求模式、响应地址、目的地址、传输方式、回程约束和到达时间。若回复走普通 IP,就应明说。若完全没有收集 reverse LSP 证据,就把该字段留为未知。

LSP Ping 与 BFD 运行在两只时钟上

按需测试可以验证某一时刻的转发关系,运营网络还需要快速、持续的检测。RFC 5884 用 LSP Ping 引导 BFD session,并携带把该 session 绑定到 MPLS LSP 所需的信息;此后由 BFD 按协商间隔持续交换检测包。

两份回执不能压成一个状态。LSP Ping 提供 FEC 与路径语境;BFD 提供某个 session、某种路径选择下的连续性时间序列。BFD 一小时未掉线,不能追认所有 ECMP 成员;中午收到 Echo Reply,也不能保证 12:05 仍连续。结论必须带 observation window。

客户体验还有第三只时钟。代表性业务交易可能涉及 CE 接口、pseudowire、MTU、payload 大小、服务等级、加密、DNS、transport 和应用本身,并需在合同窗口内测量 loss、delay 与 availability。LSP Ping 可以在这条链中定位 MPLS 故障,却不能替代整条链。

返回码是一份说明,不是一枚徽章

RFC 8029 通过 return code、subcode 和 downstream mapping 说明响应节点是否为出口、标签与接口是否匹配、转发在哪里分歧。分层或拼接隧道还会改变沿途 FEC Stack,有些隧道甚至可以用 Nil FEC 隐去细节。这是节点披露并检查了什么的结构化说明,不是普遍 attestation。

安全章节也支持这种谨慎读法。规范讨论 DoS、伪造、重放、劫持和拓扑信息泄露。Sender's Handle 与序列号用于把回复同未完成请求配对,还可检查时间戳、限制进入控制平面的速率、约束来源地址。这些措施提高诊断交换的可信度,但不会认证客户应用,也不会让响应路由器变成独立审计者。

Heng Lu 对 agency 的分析在此很有用。标准作者定义共享诊断语法,实施者决定如何实现,运营者选择参数、覆盖与升级路径,业务负责人定义什么结果才有意义。这些角色不能把自己的有限权力无声借给下一方。标准作者的姓名不能认证实现,路由器的回复也不能代签客户体验。

minimum specification 的原则同样适用。互操作需要共同的 message type、FEC 编码、返回码与程序,却不需要一个中央机构替所有业务宣布健康。当地运营者掌握隧道、traffic class、故障域和合同,因此保留最终判断。running code 提供证据,但只对真实运行的那个实验负责。

组成一份可连接的诊断回执

先记录问题:initiator、时间、目标业务假设、LSP、Target FEC Stack、label stack,以及探针是否代表真实 payload depth;再保留 TTL、ping/traceroute 模式、traffic class、熵标签、目的地址和影响 ECMP 的 UDP 字段。

随后记录观察:响应 LSR、return code/subcode、downstream mapping、接口与标签结果、FEC Stack 变化、响应时间,以及可用时的请求/回复 hash。每一项都连接到准确序列号和配置 epoch。

覆盖必须用清单表达:枚举的下一跳、尝试的字段组合、实际看到的路径、未到达的路径、backup/detour 状态、不兼容节点和 rate limit。若总体路径数未知,就写“抽样”,不要伪造百分比。

回程单列:请求及实际 reply mode、返回目的地、控制通道或 IP route 证据,以及 RFC 7110 约束。收到回复可以确认交换成立,却仍可能没有测试 reverse service。

最后把连续性和业务结果作为独立见证加入。BFD 保留 session identity、discriminator、interval、选路、状态变化和观察窗口;客户交易保留端点、payload、traffic class、性能数据与 SLA 区间。缺少某位见证时,不让另一位替它填空。

这样写出的结论会很精确:某时某 FEC 的探针走过一条已观察前向路径,在所述条件下收到匹配回复;哪些替代路径已经或尚未测试;某项连续性在多长窗口内成立;独立业务交易是否达标。它比“ping 成功”更长,也正因如此才足以支持行动。

来源