There are three types of MLD messages:
All three MLD messages share the same message structure.
An IPv6 multicast-capable router uses the Multicast Listener Query message to query a link for multicast group membership. It is equivalent to the IGMPv2 Host Membership Query message. There are two types of Multicast Listener Query messages:
The general query is used to periodically query all hosts on a subnet for the presence of multicast group members of any multicast address. The only multicast address that is not reported is the link-local scope all-nodes multicast address (FF02::1).
The multicast-address-specific query is used to query all hosts on a subnet that are members of a specific multicast group.
The two message types are distinguished by the Destination Address field in the IPv6 header and the Multicast Address field within the Multicast Listener Query message.
In the IPv6 header of a Multicast Listener Query message:
Figure 7-2 shows the structure of the Multicast Listener Query message.
Figure 7-2. The structure of the Multicast Listener Query message
The fields in the Multicast Listener Query message are:
The value of this field is 130.
The value of this field is 0.
The value of this field is the ICMPv6 checksum.
The Maximum Response Delay field indicates the maximum amount of time in milliseconds within which a multicast group member must report its membership by using an MLD Multicast Listener Report message. The size of this field is 16 bits.
When a host that is a group member of a given multicast address receives a Multicast Listener Query, the host uses the value of the Maximum Response Delay field to calculate a random response time less than or equal to the current value of the field. Each host on the subnet that could report its membership sets a different random response time. The host on the subnet whose random response time expires first sends the Multicast Listener Report message. When the other hosts that could report group membership for the multicast address receive the Multicast Listener Report message, they abandon the attempt to send their own Multicast Listener Report message. This process results typically in only one host member reporting group membership for a given multicast address on each subnet.
This is a 16-bit field reserved for future use and set to 0.
For the general query, the Multicast Address field is set to the unspecified address (::). For the multicast-address-specific query, the Multicast Address field is set to the specific multicast address that is being queried. The size of this field is 128 bits.
The Multicast Listener Report message is used by a listening node to either immediately report its interest in receiving multicast traffic at a specific multicast address or respond to a Multicast Listener Query message (either a general or multicast-address-specific query). It is equivalent to the IGMPv2 Host Membership Report message.
In the IPv6 header of a Multicast Listener Report message:
Figure 7-3 shows the structure of the Multicast Listener Report message.
Figure 7-3. The structure of the Multicast Listener Report message
The fields in the Multicast Listener Report message are:
The value of this field is 131.
The value of this field is 0.
The value of this field is the ICMPv6 checksum.
This field is not used in the Multicast Listener Report message and is set to 0.
This is a 16-bit field reserved for future use and set to 0.
The Multicast Address field is set to the specific multicast address that is being reported.
Here is an example of a Multicast Listener Report message as displayed by Network Monitor (capture 07_01 in the \NetworkMonitorCaptures folder on the companion CD-ROM):
+ Frame: Base frame properties + ETHERNET: EType = IPv6 + ETHERNET: Destination address : 3333FFB17480 + ETHERNET: Source address : 00902766C140 ETHERNET: Frame Length : 86 (0x0056) ETHERNET: Ethernet Type : 0x86DD ETHERNET: Ethernet Data: Number of data bytes remaining = 72 (0x0048) IP6: Hop Opts; Proto = ICMP6; Len = 24 IP6: Version = 6 (0x6) IP6: Traffic Class = 0 (0x0) IP6: Flow Label = 0 (0x0) IP6: Payload Length = 32 (0x20) IP6: Next Header = 0 (Hop-by-Hop Options Header) IP6: Hop Limit = 1 (0x1) IP6: Source Address = fe80::290:27ff:fe66:c140 IP6: Destination Address = ff02::1:ffb1:7480 IP6: Hop-by-Hop Options Header IP6: Next Header = 58 (ICMP6) IP6: Length = 0 (0x0) IP6: Router Alert Option IP6: Type = 5 IP6: 00...... = Skip option if not recognized IP6: ..0..... = Option data does not change enroute IP6: Length = 2 (0x2) IP6: Router Alert Value = 0 (0x0) IP6: Padding (2 bytes) IP6: Type = 1 (PadN) IP6: 00...... = Skip option if not recognized IP6: ..0..... = Option data does not change enroute IP6: Length = 0 (0x0) IP6: Payload: Number of data bytes remaining = 24 (0x0018) ICMP6: Multicast Listener Report ICMP6: Type = 131 (Multicast Listener Report) ICMP6: Code = 0 (0x0) ICMP6: Checksum = 0xAD88 ICMP6: Maximum Response Delay = 0 (0x0) ICMP6: Unused ICMP6: Multicast Address = ff02::1:ffb1:7480
Notice the mapping of the destination IPv6 multicast address (FF02:: 1:FFB1:7480) and the destination MAC multicast address (3333FFB17480) (corresponding bits underlined), and the use of the Hop-by-Hop Options header and the IPv6 Router Alert option (Option Type 5).
The Multicast Listener Done message is equivalent to the IGMPv2 Leave Group message and is used to inform the local routers that there might not be any more group members of a specific multicast address on the subnet. A local router verifies that there are no more group members on the subnet.
The Multicast Listener Done message is sent when the group member that responded to the last Multicast Listener Query message for the multicast address on the subnet leaves the multicast group. Notice that the group member sending the Multicast Listener Done message might not truly be the last group member on the subnet. This is why membership for the group is verified by a local router. This simple method of reporting what might be the last group member prevents a host from having to track the presence of other multicast group members on their subnet for each multicast group for which the host is a member.
Because IPv6 multicast routers do not track how many group members are on a subnet for a given multicast group, every subnet must be treated as if there were multiple group members present. The host that sends the Multicast Listener Done message might not be the last group member. Therefore, upon receiving a Multicast Listener Done message, the multicast querying router on the subnet immediately sends multicast-address-specific queries for the multicast address being reported in the Multicast Listener Done message. If there are additional group members, one of them will send a Multicast Listener Report message.
In the IPv6 header of a Multicast Listener Done message:
Figure 7-4 shows the structure of the Multicast Listener Done message.
Figure 7-4. The structure of the Multicast Listener Done message
The fields in the Multicast Listener Done message are:
The value of this field is 132.
The value of this field is 0.
The value of this field is the ICMPv6 checksum.
This field is not used in the Multicast Listener Done message and is set to 0.
This is a 16-bit field reserved for future use and set to 0.
The Multicast Address field is set to the specific multicast address for which there may be no more listeners on the subnet.