摘要

  • 当前 LISP 多播草案指出,封装用的入口隧道路由器失效后,接收站点需要朝新的根节点建立状态,并重新告诉它自己需要哪个 (S-EID,G) 流。
  • 任播可以保持 RLOC 地址可达,也可以把底层网络的变化缩小为一次 RPF 收敛;但 ETR 未必知道承载该地址的物理 ITR 已经更换,因此新节点可能要等到下一次周期性 Join/Prune 才获得接收者状态。
  • Daniel Kade 提议用“根节点继任凭证”和明确的“加入重放债务”来记录这段空白。两者都是运营治理工具,不是新增的 LISP 或 PIM 协议字段。

恢复的是地址,不一定是树

设想一场跨多个网络直播的技术会议。源站点的 LISP 入口隧道路由器突然失效,路由系统把同一个任播 RLOC 导向另一台 ITR。地址探测恢复,底层多播网络也完成了逆向路径切换。按常见事故流程,负责路由的人会把故障记为一次短暂收敛,然后结束告警。

这个判断并非虚假,却不够完整。旧 ITR 持有的是具体接收站点对具体源组的状态。新的物理 ITR 接管了同一个地址,并不意味着那些 (S-EID,G) 记录也随之迁移。结果可能是:地址可达,根节点在线,底层树看起来也存在,但替代节点并不知道应该为哪些接收者封装哪些流。

问题不在于任播“不可靠”。任播承诺的是多个位置对同一地址的可达性,由路由决定流量抵达哪个实例;它从未承诺实例之间会复制应用状态或协议状态。治理上的失误,是把共享地址的恢复报告当成背后所有有状态服务已经连续的证明。

draft-ietf-lisp-rfc6831bis-07 把这条边界写得很清楚。该草案正在 IESG Evaluation,目标是 Proposed Standard;如果获批,它将取代实验性 RFC 6831。第 07 版发布于 2026 年 9 月 11 日。对第 06 与第 07 版的逐行核对显示,更新主要是规范性措辞、IGMP/MLD 引用和编辑维护。本文讨论的是整份现行架构中的持续问题,而不是把一次编辑修订包装成新的协议事件。

一条多播流有两套名字

LISP 把端点标识符 EID 与底层路由定位符 RLOC 分开。站点内,源与接收者使用源 EID 和多播组;跨站点的底层网络则按 RLOC 转发。这个分离让端点身份不必跟着接入位置改变,但也使多播状态跨越了不止一个命名空间。

接收者先通过 IGMPv3 或 MLDv2 加入 (S-EID,G)。站点边界上的 ETR 查询源 EID 的映射,依据优先级和权重选择源站点的一台 ITR。若底层支持多播,ETR 会发出两种信号:一条以单播封装的 PIM Join/Prune 把 (S-EID,G) 告诉选中的 ITR;另一条在底层建立 (S-RLOC,G) 状态。前者说明接收者要的是哪一个 EID 流,后者让底层围绕定位符形成分发树。

若底层只有单播,ETR 仍把加入信息送到 ITR,但复制工作转移到源端。ITR 明确维护接收 ETR 的 RLOC 列表,并为每个目的地制作一份外层报文。数据到达接收站点后,ETR 去掉 LISP 头,再按内层 (S-EID,G) 多播转发表把报文送向本地接收者。

这些状态彼此关联,却不能互相替代。Map-Reply 能列出定位符,不证明某个物理 ITR 已安装该流;底层 RPF 成功,不证明根节点知道内层源 EID;接收站点仍保存本地加入,也不证明远端封装器还记得它。共享的 (RLOC,G) 树甚至可能把并未请求的内层流送到某站点,最后由 ETR 因无匹配状态而丢弃。

所以,运营对象不是一条笼统的“多播路由”,而是一条证据链:接收者意图、ETR 边界状态、所选根节点、根端 EID 状态、底层或源端复制状态、ETR 接收以及终端观察。每一环由不同主体控制,也可能按不同的定时器老化。

物理根节点更换时发生了什么

草案第 6 节指出,ITR 失效比普通 RPF 变化更复杂。在单播中,本地可达性变化通常足以把报文送向另一个定位符;在 LISP 多播中,选中的 ITR 是整棵分发树的封装根。根节点更换后,已经加入的 ETR 需要对新 ITR 触发 (S-RLOC,G) Join/Prune,还要再次发送单播封装的 Join/Prune,告诉它具体的 (S-EID,G) 需求。

这是一项“状态继任义务”。它有明确的人群——所有受影响的接收 ETR;也有明确的对象——它们希望新节点持有的源组状态。各站点检测故障、重新选择和重放的时间并不一致。只有把这些分散变化拼起来,“切换完成”的时间戳才有可审计含义。

任播恰好会隐藏触发点。多个 ITR 共用一个 RLOC 时,路由可以把地址迁往健康节点,底层只看到 RPF 接口变化。ETR 看到的远端地址没有变,因此不一定知道物理设备已经更换,也就没有理由立即重发 (S-EID,G)。草案明确写到,新的任播 ITR 可能只能等待 ETR 下一次周期性发送,才能学到这份状态。

本文不为这段等待发明一个统一秒数。实际时间取决于实现、PIM 定时器、报文丢失、收敛和刷新策略,也取决于底层是单播还是多播。不能据此断言每次切换都必然丢包,更不能保证一个固定恢复时长。可以确定的只是:地址恢复与状态恢复有不同证据,前者不能证明后者已经完成。

把未完成的加入视为债务

我把这项未清义务称为“加入重放债务”。活跃物理根节点发生变化时,只要某个接收 ETR 所需的 (S-EID,G) 尚未在新节点得到可验证安装,它就是一项未结条目。这里的债务不是道德判断,也不是简单的丢包计数;它是为了避免多接收者迁移被一个绿色地址图标吞没。

条目应绑定到一条受保护的流,或边界清晰的一组流。最小记录包括接收 ETR、源 EID、组地址、旧 ITR、预期新 ITR、最近一次加入代际、最近刷新时间、底层模式以及清偿条件。如果实现暴露状态安装确认,它可以成为证据;如果没有,就需要把根端状态检查与 ETR 报文观察或受控接收者探针结合起来。

任播 RLOC 能被 ping 通、RIB 中有路由、映射缓存有条目、PIM 邻接正常或进程存活,都不足以单独清偿债务。这些信号不证明特定接收意图已经跨进新的物理根。一个站点恢复也不代表全部恢复;另一个 ETR 可能仍在等待自己的刷新周期。

债务也可以因合法退出而关闭。接收者可能主动离开,源可能停止,策略也可能把流迁往别处。关闭记录应明确是“安装并观察”“显式撤销”“按既定规则到期”,还是由具名负责人接受降级。没有证据的消失不能被悄悄算成恢复。

根节点继任凭证

与债务配套的是“根节点继任凭证”。这是我的运营治理建议,不是要给 LISP、PIM、IGMP 或 MLD 增加线缆上的字段。它把原本散落在不同团队和设备上的证据连接起来,防止任何一方只凭自己掌握的层次宣布服务恢复。

凭证首先确认身份:旧、新物理 ITR 实例,各自或共享的 RLOC,变化检测来源、时间与置信度,ETR 使用的映射版本,以及谁有权作出处置。只写共享地址不够,因为需要查明的恰恰是地址背后的物理继任。

随后按受影响范围记录控制面进度:旧根最后已知的 (S-EID,G)、新的定位符选择、底层 RPF 收敛、ETR 下一次加入代际、封装重放,以及新节点可观察到的已安装状态。所有证据都要带采集点和时钟来源;如果 ETR 与 ITR 的时钟无法比较,两边的时间戳就不能被强行排成因果顺序。

最后记录数据面结果:新根接受的第一个报文、样本 ETR 收到的第一个报文、可用时的序列连续性或应用连续性、丢失与重复窗口、因内层状态不匹配而丢弃的意外流量,以及剩余债务达到约定阈值的时刻。只有路由器证据时,凭证不应宣称应用已经健康。

回退权也应写进同一记录。可选动作可能包括恢复一个特定单播定位符、排空替代节点、受控触发加入刷新、把流迁往另一台 ITR,或暂时接受源端复制。本文不发明通用命令;治理要求只是明确动作范围、授权人和验证条件。

复制位置决定谁能看到故障

草案允许复制发生在站点内部、底层多播路由器、接收 ETR 或源 ITR。底层多播把树状态留在传输网络;单播底层则减少中间状态,却增加源端复制和带宽成本。不同接收站点还可能因 Map-Reply 的优先级与权重选到不同 ITR。

证据必须跟着复制位置移动。源端的接收 ETR 列表只能说明计划复制给谁,不说明下游已经交付;底层 (S-RLOC,G) 树健康,也可能同时携带多个不同的内层源。草案还描述了一种情况:共享底层树会把某个站点没有加入的流量也送过去,ETR 再根据内层状态丢弃。丢弃动作是正确的,但带宽已经被消耗。

这也是安全问题。恶意接收站点可能让共享树上的合法站点收到并未请求的流。继任凭证必须区分“预期流量缺失”和“非预期流量出现”。“报文到达 ETR”可能是成功、浪费或攻击,含义取决于内层状态与预期接收集合。

诊断边界仍未闭合

草案明确把详细的 locator reachability、mPITR 行为和 mtrace 设计留在范围之外,并称 LISP 多播环境中的 mtrace 方案仍待确定。这种边界本身是诚实的,却意味着通用路径探测不能被当成跨 EID 与 RLOC 两套命名空间的完整证明。

监控系统应标明自己观察的是哪一层。底层测试证明当前 RLOC 路径;根端检查证明 (S-EID,G) 是否安装;ETR 计数器证明解封装和内层查询;接收者探针证明数据是否真正到达并可用。把它们关联起来可以支持服务结论,用其中任何一个替代全部则不行。

IETF 草案的任务是描述机制和边界,而不是替运营者制造一个万能可观测性产品。运营者、厂商和评审者必须准确说明自己的证据覆盖了什么。“任播切换成功”最多证明地址迁移;要宣布多播服务恢复,还需要状态与接收者这一半。

来源

  1. LISP 多播当前草案
  2. 草案历史
  3. Datatracker API 记录
  4. 第 07 版 HTML
  5. 第 07 版纯文本
  6. 第 06 至 07 版差异
  7. LISP 工作组
  8. RFC 6831:实验性 LISP 多播
  9. RFC 9300:LISP 数据面
  10. RFC 9301:LISP 控制面
  11. RFC 8059:LISP 的 PIM Join 属性
  12. RFC 7761:PIM
  13. RFC 8487:Mtrace 第 2 版
  14. RFC 9776:IGMPv3
  15. RFC 9777:MLDv2
  16. RFC 7799:互联网测量术语
  17. 第 07 版 XML 源文件