摘要

  • IGMP 成员指示促使指定路由器建立 (*,G) 通配组状态,并沿反向路径向组的汇合点发出 Join。所谓共享树,是多台路由器各自记录的组合,不是一份全网共同签署的对象。
  • 源端指定路由器最初把数据封装在 Register 中送往 RP。Register-Stop 只在抑制计时器运行期间暂停封装,不是“原生路径永久就绪”的确认。
  • Join/Prune 没有显式确认。周期刷新修复丢包,Holdtime 删除过期分支,数据超时删除沉默源状态;SPT bit 只有在数据真正从源特定入口到达时才改变。

RFC 2117 最值得记住的句子不是某个字段定义,而是它对不确定性的公开承认:Join/Prune 不会引出任何显式确认。如果一次控制报文丢失,协议不靠端到端回执完成事务,而靠下一轮周期刷新修复局部状态。

这份 1997 年 6 月发布的文档属于 Experimental,而非 Internet Standard。它描述了 PIM Sparse Mode 的首个 RFC 版本:网络只向确有成员的方向建立组播状态,不先假定接收者遍布各处;同时可借用单播的反向路径信息,却不从属于某一种单播路由协议。

一个链路本地指示,逐步变成多条路由器记录

主机先通过 IGMP 报告组 G 的成员存在。这个报告只属于相邻链路;它不枚举所有监听者,也不认证某个用户或应用。指定路由器收到指示后查找 G 对应的 Rendezvous Point,建立 (*,G),把本地接口加入 outgoing-interface list,并把通向 RP 的单播接口作为 incoming interface。

星号表示:在没有更具体源记录时,任意源都可匹配这条组状态。DR 随后向 RP 方向发出带 WC 与 RPT 标志的 Join/Prune。每一跳上游路由器分别建立或刷新自己的 (*,G),加入下游接口,再继续向 RP 传播。共享树由这些局部条目拼成。

因此,任何一条记录都不等于“整棵树”。成员指示说明这台 DR 有理由保留一个本地分支;Join 说明一个下游邻居在一个 Holdtime 内请求上游状态。它们都没有证明接收者身份、所有路由器已经一致,或者每条预期分支都存在。

新源先借 Register 穿过尚未形成的路径

稀疏模式给发送端留下一个启动难题:新源刚开始发包时,源到 RP 的源特定树尚不存在。源端 DR 因而把原始组播数据封装进 PIM Register,以单播方式发给 RP;RP 解封后再把数据送入共享树。

Register 是两个认知状态之间的桥梁。网络尚未形成原生源路径时,数据先借控制关系到达汇合点。流量达到本地阈值后,RP 可以建立 (S,G) 并向源方向发 Join,让沿途路由器逐步安装源特定状态。

Register-Stop 的名称很像完成回执,但机制恰好相反:它只启动源 DR 上某个 (S,G) 的抑制计时器。计时器到期后,DR 会恢复 Register,或先用 Null-Register 探测 RP 是否仍希望抑制。它能证明的只是“当前 RP 要求这台 DR 暂停封装一段时间”,不能证明原生路径永远有效,更不能证明所有接收者已经收到数据。

源特定树要由实际到包来成立

RP 或最后一跳路由器可以把某个源从共享树迁往 shortest-path tree。RFC 2117 推荐用流量速率阈值触发,但明确允许规则在无需全球协调的情况下改变。共同协议规定如何表达切换,本地运营选择决定何时切换。

建立 (S,G) 并不等于切换完成。新条目的 SPT bit 初始为零,此时路由器仍可从共享树入口接收该源。只有当源 S 的数据从 (S,G) 所指定的 incoming interface 抵达,并且该接口不同于共享树入口时,路由器才设置 SPT bit,并朝 RP 发出针对该源的 prune。

这是运行代码可观察到的局部进展:这台路由器已经在预期源路径上看到数据,可以停止使用一个共享分支。但这仍不是所有下游接收者的回执。错误入口上的包可能被丢弃,树的其他位置也可能处于不同阶段。

失效不是清理工作,而是正确性的一部分

Soft state 的纪律在于:记忆与遗忘同时被设计。周期 Join/Prune 刷新活动条目,Holdtime 维持各个出口;刷新消失,分支便过期。沉默源的 (S,G) 由 Data-Timeout 删除;Register 抑制也会到期。RFC 2117 给出的默认值展示了取舍:60 秒的 Join/Prune 周期对应 210 秒 Holdtime,沉默源数据超时同为 210 秒,Register 抑制以 60 秒为均值。更短会增加 RP 的 Register 突发,更长则可能增加新接收者等待时间。

Bootstrap Router 把同样的局部性放大到域级。BSR 周期分发 RP-Set,路由器依据最近收到的集合和哈希选择 RP。域发生分区时,各区域可以选出不同 BSR;分区恢复后再选一次,RFC 2117 也承认这一过程中可能出现交付中断。协议没有假装每台路由器始终拥有同一现实。

历史价值在于对不确定性的约束

RFC 2117 后来被 RFC 2362 取代;RFC 4601 把修订版送上 Standards Track;RFC 7761 最终成为 Internet Standard。因而,2117 证明的是早期设计,而不是今天每个实现的合规状态。

但核心结构延续下来:RP 共享树、可选源特定树、Register 与 Register-Stop、Join/Prune 以及计时器。IANA 至今仍登记这些消息类型。成熟的不是“全网瞬时确定”这一幻想,而是管理局部、过期、可刷新观察的规则。

IGMP 报告说明链路上至少存在成员;RP 映射说明当前集合下的汇合选择;Join 刷新一段上游关系;Register 运送启动期数据;Register-Stop 暂停这种运送;(S,G) 提议源路径;SPT bit 记录数据已从该路径进入;计时器撤销无人继续支持的主张。系统通过组合这些狭义事实而工作。把其中任何一条抬高为全链路交付证明,才会制造误判。

来源