What is a solicited-node multicast address and how do you derive it? Give me an example.
Show the answer
Say this first
It is the multicast group a node joins for each of its unicast and anycast addresses, and it is where
neighbor solicitations go instead of an ARP broadcast. Take the prefix ff02::1:ff00:0/104 and append the
last 24 bits of the unicast address. For 2001:db8:acad:10:21a:2bff:fe3c:4d5e the last 24 bits are
3c:4d5e, so the group is ff02::1:ff3c:4d5e and its Ethernet MAC is 33:33:ff:3c:4d:5e.
Go deeper
Derivation step by step
Unicast: 2001:db8:acad:10:21a:2bff:fe3c:4d5e
Last 24 bits: 3c:4d5e
Prefix: ff02::1:ff00:0/104
Group: ff02::1:ff3c:4d5e
Ethernet MAC: 33:33:ff:3c:4d:5eMore examples
| Unicast | Solicited-node |
|---|---|
2001:db8:acad:10::1 | ff02::1:ff00:1 |
2001:db8:acad:10::20 | ff02::1:ff00:20 |
fe80::a8bb:ccff:fe00:100 | ff02::1:ff00:100 |
2001:db8::abcd:1234:5678 | ff02::1:ff34:5678 |
Write every hextet out to four digits before you take the last 24 bits. fe00:100 is fe00:0100, so the
last 24 bits are 00:0100.
Why it exists
- Address resolution: to find the MAC of
2001:db8:acad:10::20, a host sends an NS toff02::1:ff00:20. Only nodes whose addresses end in00:0020have joined that group. - DAD: a node checks its tentative address by sending an NS to the same group.
On a router
show ipv6 interface lists the groups under "Joined group address(es)". A router with fe80::1 and
2001:db8:acad:10::1 shows a single FF02::1:FF00:1, because both addresses share the last 24 bits.
They will ask next
How does a node tell the switches it joined the group?
It sends an MLD report for the group. With MLD snooping the switch can then forward that group only to the ports that asked for it.
What if two hosts share the last 24 bits?
Both join the same group and both receive the NS. Each checks the target address inside the NS and only the owner answers. It costs a little CPU, nothing breaks.
Traps
- Taking the last 24 bits of the MAC address. That only matches when the address was built with EUI-64.
- Dropping leading zeros before taking the bits, which shifts the result.