
序言
在多播通信中,确认接收端是否存在非常重要。如果没有接收端,发送多播消息将会造成网络流量的浪费。而确认是否有接收端,要通过MLD(Multicast Listener Discovery)实现。它是IPv4中IGMP和IPv6中ICMPv6的重要功能之一。
作用
IGMP(MLD)主要有两大作用:
1. 向路由器表明想要接收多播消息(并通知想接收多播的地址)。
2. 向交换集线器通知想要接收多播的地址。首先,路由器会根据第1个作用,了解到想要接收多播的主机,并将这个信息告知给其他的路由器,准备接收多播消息。而多播消息的发送路径则由PIM-SM、PIM-DM、DVMRP、DOSPF等多播路由协议决定。
其次,第2个作用也被称作IGMP(MLD)探听。通常交换集线器只会习得单播地址。而多播帧则跟广播帧一样不经过滤就会全部被拷贝到端口上。这会导致网络负荷加重,甚至给那些通过多播实现高质量图像传播的广播电视带来严重影响。
为了解决此类问题,可以采用作为第二个作用的IGMP(MLD)探听。支持IGMP(MLD)探听的交换集线器可以过滤多播帧,从而也能降低网络的负荷。
在IGMP(MLD)探听中,交换集线器对所通过的IGMP(MLD)包进行监控。由于从IGMP(MLD)包中可获知多播发送的地址和端口,从而不会再向毫无关系的端口发送多播帧。这也可以减轻那些不接收多播消息的端口的负荷。

报文
正如ICMP一样,IGMP也被当作IP层的一部分。IGMP报文通过IP数据报进行传输。不像我们已经见到的其他协议,IGMP有固定的报文长度,没有可选数据。

- 版本为1的IGMP。
- IGMP类型为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文。
- 检验和的计算和ICMP协议相同。
- 组地址为D类IP地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。