![多播侦听器报告消息 v2](https://linux22.com/image/802170/%E5%A4%9A%E6%92%AD%E4%BE%A6%E5%90%AC%E5%99%A8%E6%8A%A5%E5%91%8A%E6%B6%88%E6%81%AF%20v2.png)
我运行 ICMPv6 协议并使用 wireshark 进行了捕获。在捕获中我有一些多播侦听器报告消息 v2。其中一些具有源 ip、ipv6 链接本地地址,但其中一些以 :: 作为源地址?请问您能告诉我为什么发送带有 :: 源地址的多播侦听器报告消息 v2 吗?
谢谢!
答案1
RFC 3810 第 5.2.13 节解释这一点:
如果发送接口尚未获取有效的链路本地地址,则必须使用有效的 IPv6 链路本地源地址或未指定的地址 (::) 发送 MLDv2 报告。允许使用未指定的地址发送报告以支持邻居发现协议 [RFC2461] 中的 IP 多播使用。对于无状态自动配置(如 [RFC2462] 中定义),节点需要加入多个 IPv6 多播组,才能执行重复地址检测 (DAD)。在 DAD 之前,报告节点为发送接口提供的唯一地址是临时地址,不能用于通信。因此,必须使用未指定的地址。
这与 MLDv1 的行为不同。RFC 3590 第 3 节更深入地解释这一变化的理由。
在 [RFC 2710] 中,第 3 节要求所有 MLD 消息都使用有效的链路本地 IPv6 源地址发送。但是,在对其链路本地 (LL) 地址执行重复地址检测的过程中,节点将没有可用作源地址的地址。因此,本文档允许将未指定的地址用作在重复地址检测期间使用的 MLD 消息的源地址。
[RFC 2710] 和 [RFC 2462] 中定义的规则存在差异,这导致了实施问题。由于没有有效的链路本地地址,多个 IPv6 实施在重复地址检测期间跳过发送 MLD 报告消息。当节点连接到执行 MLD 侦听的交换机时,这会导致操作问题。在这种情况下,重复地址检测 (DAD) 将成功完成,一旦地址投入使用,就会发生冲突,因为交换机可能没有按要求将 DAD 消息转发到链路上的所有节点。本文档通过指定在启动 DAD 之前使用未指定的源地址发送 MLD 报告来解决这个问题,以确保发送到 LL 多播地址的消息(例如,包括 MLD)按要求转发到所有适当的节点。