我运行ICMPv6协议,并使用wireshark进行捕获。 在捕获中,我有一些Multicast Listener Report Message v2。 一些有源ip,ipv6链路本地地址,但其中一些有::作为源地址? 请你能告诉我为什么发送带有源地址的多播监听报告消息v2吗?
谢谢!
RFC 3810第5.2.13节解释了这一点:
如果发送接口尚未获得有效的链路本地地址,MLDv2报告务必使用有效的IPv6链路本地源地址或未指定的地址(::)发送。 允许发送带有未指定地址的报告支持在邻居发现协议[RFC2461]中使用IP组播。 对于[RFC2462]中定义的无状态自动configuration,为了执行重复地址检测(DAD),需要一个节点join多个IPv6组播组。 在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)的消息根据需要被转发到所有适当的节点,从而解决了这个问题。