Understanding IPv6 第7章——MLD and MLDv2

概述

MLD(multicast listener discovery) 对应于IPv4中的IGMP2,MLD2 对应于IPv4中的IGMP3。
什么是IGMP?参考我之前的文章:
https://blog.csdn.net/qq_31567335/article/details/78577979

IPv6组播地址的前缀是ff00::/8,并且可以有不同的范围。

主机对于组播的支持

发送组播包

  1. 确定目的组播地址
  2. 将组播包放到网络介质中

接收组播包

  1. 通知IPv6接收某个组播组播地址对应的流量
  2. 用网络适配器注册组播mac地址。由IPv6组播地址得到mac地址的方法在第三章。不太清楚网络适配器的概念,不太明白用网络适配器注册组播mac地址是个啥操作。
  3. 通知本地路由器

路由器对于组播的支持

  1. 接收所有组播流量
    网络适配器一般使用的是单播侦听模式,听会监听网卡对应的mac地址和mac广播地址(全1)。为了接收所有的组播流量,必须调整为组播混杂侦听模式。所有目标mac地址的I/G位为1的报文都会传输给上层协议进行进一步处理。组播混杂模式不同于混杂模式,在混杂模式中,所有的报文都会交给上层协议进行处理。
  2. 转发组播流量
  3. 接收和处理组播侦听报告和组播侦听已完成消息
  4. 发送组播侦听查询消息
  5. 与其他组播路由器交流组成员身份(这点非常重要,在tcpip详解这本书中并没有提到这一点)

MLD数据包结构

不同于IGMPv2,MLD使用了ICMPv6作为数据结构而不是单独再定义一种结构。
Understanding IPv6 第7章——MLD and MLDv2_第1张图片

有三种类型的MLD消息:
1. Multicast Listener Query (ICMPv6 Type 130)
1)General query
周期性的查询网络中的多播组,目的地址为ff02::1。网络中的主机会报告所有自己属于的多播组,除了link-local scope, all-nodes multicast address (FF02::1), and all multicast addresses with a scope of 0 (reserved) or 1 (interface-local)
2)Multicast-address-specifc query
在Multicast Listener Query的IPv6头部中包含以下信息:
hop limit被设为1(限定传输的范围)
general query的目的地址为ff02::1,Multicast-address-specifc query的目的地址为对应的多播地址
源地址为发送接口的链路本地地址
结构如下:
Understanding IPv6 第7章——MLD and MLDv2_第2张图片

2. Multicast Listener Report (ICMPv6 Type 131)
用来主动报告加入某个多播组或者响应Multicast Listener Query。
其IPv6头部中包含如下信息:
hoplimit被设为1
源地址为发送接口的链路本地地址, 不太理解后面这一段:If the Multicast Listener Report message is for a solicited-node multicast address corresponding to a unicast address for which duplicate address detection is not yet complete,the source address is set to the unspecifed address (::)
目的地址为对应的多播地址
结构如下:
Understanding IPv6 第7章——MLD and MLDv2_第3张图片

3. Multicast Listener Done (ICMPv6 Type 132)
用来通知本地路由器网络中可能没有对应多播地址的成员。路由器收到之后会发送对应多播地址对应的Multicast Listener Query进行查询。 当上一次响应了某个多播地址对应的Multicast Listener Query消息的主机离开此多播组时发送Multicast Listener Done消息。个人理解,这样设计的原因是减少不必要的MLB消息:如果某个主机不是某个网络中最后离开某个多播组的,离开时就发送一个Multicast Listener Done消息,这会触发路由器进行查询,其他主机又会进行响应。而如果上次查询某个主机进行了应答,那么此主机可能是对应多播组中的最后一个主机。

在对应IPv6头部中可以看到以下消息:
hoplimit被设置为1
源地址是发送接口的链路本地地址
目的地址是链路范围所有的路由器对应的多播地址(FF02::2)

结构如下:
Understanding IPv6 第7章——MLD and MLDv2_第4张图片

MLDv2 Messages

There are two types of MLDv2 messages:
1. A modifed version of the Multicast Listener Query message (ICMPv6 Type 130)
2. A version 2 Multicast Listener Report message (ICMPv6 Type 143)

the Modifed Multicast Listener Query

增加了一种类型:
3. Multicast-address-and-source-specifc query
The multicast-address-and-source-specifc query is used to query all hosts on a subnet that are members of a specifc multicast group and are listening for traffc from a specifed list of multicast sources

MLDv2 Multicast Listener report

修改点:
The Destination Address feld is set to FF02::16, reserved by the Internet Assigned Numbers Authority as the All MLDv2-capable Routers address。

有一个疑问,如何区分MLD和MLD2?
答:
1.Multicast Listener Query的ICMPv6的Type编号一样。但是可以通过内容进行区分(多播数据包的源地址)
2.MLDv2 Multicast Listener report的ICMPv6编号不一样。

你可能感兴趣的:(IPv6)