摘要

  • 应用从拟议的 28 位号段随机选值,生成 IPv6 与以太网组播地址,再把以太网地址反向编码成 .eth-addr.arpa 下的 mDNS PTR 声明。
  • 网络设备可在应用标识首标签后加上 -veto;更长的标签在 mDNS 冲突比较中必胜,迫使应用停发并重新选号。
  • 该机制仍是 Internet-Draft,所申请的号段和域名尚未获批;它依赖参与者合作,也没有验证冲突响应或否决记录的发布者。

真正决定权力结构的,是五个字节:-veto。

draft-ietf-pim-ipv6-zeroconf-assignment-12 想解决一个很具体的问题:在没有管理员和中央分配服务器的本地网络里,应用怎样为组播流找到一个 IPv6 地址,又不在以太网层撞上别人。草案于 9 月 22 日发布,IETF 最后征求意见截至 2026 年 10 月 6 日。

它尚不是 RFC。0x90000000-0x9FFFFFFF 组 ID 范围、eth-addr.arpa 以及 9.3.3.3.3.eth-addr.arpa. 都只是向 IANA 提出的申请。Datatracker 仍标为需要 IANA 审查。DNS 领域评审认为第 12 版已经解决先前意见,但“Ready”是评审结论,不是标准批准书。

地址不是从 DNS 里分出来的

一个新组播流先从拟议号段随机选择 28 位 group ID。应用按照 RFC 4489,把它与预定源地址的接口标识组合成链路范围 IPv6 组播地址,再按照 RFC 2464 得到以太网目的地址。

协调的关键对象不是好看的 IPv6 字符串,而是网卡和交换设备实际过滤的以太网地址。不同 IPv6 组播地址可能压缩到同一个 32 位以太网后缀。草案因此把以太网地址逐半字节倒序,组成一个名称。例如 33:33:9A:BC:DE:F0 变成 0.f.e.d.c.b.a.9.3.3.3.3.eth-addr.arpa。

应用在这个名称下建立唯一 PTR 记录,RDATA 指向“应用标识加主机名”。同一台主机上的多个应用因此可以分别声明。随后,它按 mDNS 规则探测同名记录;同时起步的竞争者由 RFC 6762 的比较规则决胜,失败者回去重新随机选号。

探测无冲突后,应用公告记录、回答查询,并启动持续查询。只有完成这些步骤,主机才可以开始发送组播数据。

这里的可用性来自沉默:没有收到“已被占用”的信号,就假定可以使用。沉默只能说明当前观察域里没有听见异议,不能说明所有相关节点都听见了探测。

保存下来的号码不是租约

草案要求应用把 group ID 写入持久存储。稳定网络可以因此反复使用同一个值,降低未来碰撞概率。但重启后不能跳过探测、公告和持续查询。

这个限制很重要。旧值只证明“它曾在旧观察域里可用”。离线期间,交换机可能更换,网络分区可能合并,另一个应用也可能选中同一值。没有新的探测记录,持久化号码只是历史偏好,不是产权。

如果后来发现冲突,失败应用必须先停止该组播流,再选择新值并覆盖旧存储。主机网络栈还可以监测“IPv6 目的不同、以太网目的相同”的情况。发现后也必须重选,但草案没有规定多台主机之间由谁先让路。

网络设备怎样获得必胜权

交换机的地址表或其他基础设施可能发现一个应用无法自行解释的冲突。此时,设备可为同一个 owner name 发布 PTR 否决记录,并在原应用标识的第一个标签后加上 -veto。

mDNS 比较 RDATA 时,会先读到标签长度。多出的五个字节令否决标签在字典序中更靠后,因此总能赢得冲突。草案还把应用首标签限制在 58 个八位组以内,特意给这个后缀留下空间。

基础设施发布否决记录时不用先探测。应用一旦落败,就停发并重新选号。原 PTR 因 goodbye 或过期而失效后,否决者再查询五秒;无人回应,它等待随机的 20 至 120 毫秒,然后用自己的 goodbye 撤销否决。

这不是“没有管理”,而是把管理分散到不同阶段:应用拥有发起权,同伴拥有争议权,基础设施拥有确定性覆盖权,接收端仍保留对结果的判断权。

必胜不等于可信

草案明确继承 mDNS 的合作参与者假设。恶意节点可以不断回答探测,让应用永远找不到空闲值;也可以伪造否决记录,反复迫使正常组播流停发和重选。相反,若有人过滤 mDNS,两个应用都可能因听见沉默而认为自己获准。

协议没有证明否决者真是一台看见硬件冲突的交换机。公告成功也不验证流的发送者身份,不授权内容,更不证明接收者已加入或应用已完成动作。

因此,运营证据至少要保留:流标识、group ID、源接口标识、IPv6 与以太网目的地址、PTR owner 与 RDATA、探测和公告时间、持续查询代次、冲突或否决发布者、停发回执、新地址、接收端迁移和旧记录退出。若否决频繁出现却找不到对应硬件条件,应按故障或攻击调查。

修复分区后,真相不会立即合并

持续查询有助于在网络分区恢复后发现重复声明,但 mDNS 为降低带宽而设计,发现可能需要相当长时间。若隔离期间仍会创建新组播流,草案把额外检测和解决机制留给未来工作。

28 位随机空间可以降低同一健康观察域里的偶然碰撞,却不能让被过滤的报文重新可见,也不能自动合并两个隔离时期各自合法的历史。概率改善的是频率,不是证据完整性。

跨子网运行还需要传播 PTR 记录,例如使用 mDNS reflector;转发出去的流则必须换成基于单播前缀的 IPv6 组播地址,不能沿用本地链路范围地址。草案也明确认为这种合作模型不适合全球互联网。

从需求到可见的权力事件

RFC 10019 提出了双层唯一性、无中央服务器和分区重连等要求,却没有定义完整线协议或胜负规则。第 12 版草案给出了具体答案:在 mDNS 中表达声明,以反向以太网名称表示争用对象,用持续查询监测变化,并让基础设施的否决成为一个可观察事件。

按照“运行代码优先”的原则,PTR 与 veto 都不能越级代表结果。DNS 记录说明符号声明,比较规则执行控制,交换机与网卡体现物理行为,接收应用才说明业务结果。零配置的价值,不是把权力藏起来,而是把一次关键的权力行使变成可以记录、限制和追责的协议动作。

来源