摘要

  • RFC 10019 为未来的去中心化零配置组播分配方案提出要求:不依赖中央服务器、外部连接或人工配置,但必须在网络层与链路层同时保持地址唯一。
  • 不同组播 IP 可能映射到同一个以太网目的地址;网络分区的两边也可能独立分配同一组,直到重连时才第一次发现冲突。
  • 冲突处置必须明确保留方与迁移方,完成新地址分配、接收者切换、交换与网卡状态收敛、旧流静默,并由应用验证收到的是正确内容。

最容易被误判的现场,是两份日志都显示“分配成功”。一侧的传感器应用请求一个组播组,没有节点反对;另一侧的高清视频应用在隔离网络中请求同一个组,同样没有反对。两边的分配器都按照当时能看到的事实工作。

重连改变了事实的作用域。若两条流使用同一个 IP 组,目的地址承载了两个含义;即使 IP 组不同,它们也可能在映射后落到同一个以太网 MAC,继而被只看链路层的网卡过滤器或交换机当成一个目的地。此时,“我先分到了”只是一段局部历史,不是永久产权。

RFC 10019《Zeroconf Multicast Address Allocation Problem Statement and Requirements》在 2026 年 7 月以 IETF Informational RFC 发布。它是问题说明与需求集合,不是完整协议;没有定义报文、胜负规则、安全算法,也没有证明某个产品或网络已经部署。它最重要的作用,是拒绝把局部分配结果包装成终局。

同一个组在两层有两种身份

应用使用 IP 组播地址,以太网设备却要把它投影成链路层目的地址。投影不是一一对应。

RFC 1112规定,IPv4 组播地址只有低 23 位进入以太网目的地址。IPv4 组播具有 28 个可变组位,因此 32 个不同 IP 组可以得到同一个 MAC。这并不是算法出错,而是标准映射本身压缩了身份。

IPv6 的空间更大,但 RFC 2464 同样只把目的地址低 32 位放在 33:33 后面。两个 IPv6 组若只在更高位不同,IP 层能够区分,链路层过滤器却可能不能。

所以 RFC 10019 的 REQ-1 要求网络层和链路层都唯一。只查询 IP 组表的分配器,可能返回表内未使用的值,却在物理网络上制造碰撞。后果不是抽象的。

应用加入组时,网卡通常会编程硬件组播过滤器。若另一个 IP 组映射到同一 MAC,过滤器无法只凭 MAC 拒绝多余帧。RFC 1112 允许过滤能力不足的接口开放过滤,把所有组播交给软件再丢弃。应用仍可能得到正确数据,但 CPU、链路负载和可见包面已经改变。

RFC 4541 记录了 IGMP/MLD snooping 交换机的实现差异。有些设备按链路地址形成转发表,而不是保留完整 IP 组身份。一个高码率流便可能进入只申请了另一个同 MAC 组的低带宽端口。固定容量或哈希桶式硬件表还可能拒绝新条目或退化为泛洪。

分配器的成功返回无法证明这些状态。它能说明选择意图和计算结果;网卡、交换机、实际报文与接收应用分别掌握执行层证据。

分区时间必须进入地址账本

RFC 10019 的 REQ-8 要求在两层检测并解决冲突,并明确指出临时网络分区:隔离区可以独立分到相同地址,恢复连接后必须发现冲突,把相冲突的流迁移到唯一地址。

这里没有天然的“最早者”。两个时钟可能不可比较,双方在分区期间也不可能观察对方。先出现的流未必更关键,晚出现的流也未必应承担中断。RFC 10019 不指定最老租约、最低地址、最高优先级或任何其他裁决方式。

因此,分配记录至少应保存地址族、完整组地址、作用域、推导出的链路地址、SSM 场景下的源、分配器与规则版本、本地实例、应用或流标识、声明时代、观察域,以及分配交互的摘要。若账本只有地址和时间,它无法解释两个局部成功为什么在今天互相排斥。

恢复链路、新增桥接、合并 VLAN、移动接口或改变发现域,都是观察域合并事件。系统要同时搜索完全相同的 IP 声明和不同 IP/相同 MAC 的组合。暂时没有冲突回应不代表安全:节点可能休眠,snooping 尚未收敛,网卡也可能已经转入广收模式。

真正的结束必须有清晰状态。政策先选择保留方;迁移方获得在两层都不冲突的新组;发现机制发布新绑定;接收者切换;交换机和网卡收敛;应用验证内容;旧发送者停止;过期成员关系退出。迁移期并行公布新旧组可以减少中断,但这是运营设计,不是 RFC 10019 给出的规范算法。

去中心化不等于无人负责

需求要求尽量消除单点故障,无需用户配置,在单一子网、无互联网连接时运行,并支持同一主机上的多个应用。若可行,还要与手工或其他动态分配共存。低开销、跨平台、发现广告和拓扑独立性属于推荐能力。

RFC 2730 的 MADCAP 是客户端/服务器租约协议,可用于有服务器的环境,却不能单独满足无基础设施目标。把唯一权力藏进一台本地控制器,只是把单点从远端搬到现场。

但没有中央服务器,不代表冲突可以匿名裁决。部署仍需选择本地政策:以可观察的旧声明优先、以应用等级优先、以确定性标识决定,或由操作员介入。这些都不是 RFC 10019 的规定。政策必须公开、有限并可回放。

安全部分指出,意外或恶意冲突可能造成拒绝服务或流量误导。检测与解决是强制要求,防止未授权使用是建议,具体安全机制在范围之外。因此,冲突消息不会因长得像协议报文就自动可信。系统应绑定本地声明者、限制驱逐频率、保留触发证据,并识别反复强迫改号的行为。

IPv6 减少挤压,但不替你完成验收

RFC 10019 建议新动态设计优先采用 IPv6。IPv4 的低 23 位映射和有限组播空间让避碰更困难。必须使用 IPv4 时,文档建议谨慎选择 RFC 5771 所述的 239.0.0.0/8 管理范围。若多种方案无法共存,限制机制或人工配置可能比虚假的“自动兼容”更可靠。

RFC 4291 定义 IPv6 组播格式和作用域。作用域说明预期传播边界,不是租约、身份或授权。33:33 映射仍会丢失高位信息。

RFC 3307 曾规定 IPv6 组 ID 分配结构。RFC 10028 后来把 MADCAP、主机分配 SSM、私用、实验和 Solicited-Node 的动态范围分开,减少一种规则重叠。它没有提供 RFC 10019 所等待的去中心化发现、冲突裁决和分区恢复协议,也不能证明现场链路层唯一。

SSM 把通道写成源与组的组合。RFC 8815 说明采用 SSM 的运营理由及 ASM 仍适用的有限场景。保留源有助于区分生产者,却不会扩展 MAC 过滤器看到的位数,也不证明交换设备真的按源执行。

分配结束的地方,恰是服务证明开始的地方

RFC 10019 明确把地址分配后的使用排除在范围之外。IGMP 或 MLD 报告只能说明某处观察到组兴趣,不能认证接收者或证明全路径已编程。转发表项说明配置状态,不说明哪一个包实际通过。计数器说明流量,不说明来源与含义。

最低闭环应连接:分配意图、观察域、IP 唯一性、链路唯一性、接收成员关系、交换机与网卡状态、报文指纹、应用结果、旧时代撤回。每一项都有自己的空间与时间边界。把它们压成 allocated=true,等于把决定权交给视野最窄的组件。

Heng Lu 的运行代码优先原则要求,地址记录不能压过展示真实转发和接收的执行证据;同时,记录仍是不可缺少的来源证明。最小初始规范允许共同要求保持薄而明确,把具体租期、裁决与迁移留给本地。现实分层则提醒管理者:形式上唯一的 IP 仍可能在有限硬件中成为同一个物理目的地。