I'm on Linux and I want to ping fe80::1234:56ff:fe12:3456%eth0
which is connected to the same Ethernet switch as my eth0
interface. I haven't yet communicated with fe80::1234:56ff:fe12:3456
so I don't have its MAC address cached (it's not in ip neigh list
). When I run
ping fe80::1234:56ff:fe12:3456%eth0
I send
- ICMP neighbor solicitation packet inside
- IPv6 datagram with multicast destination address
ff02::1:ff12:3456
inside - Ethernet frame with multicast destination address
33:33:ff:12:34:56
.
I get that ff02::1:ff12:3456
is constructed from lower 24 bits of MAC address and nodes sharing the same bits all listen on this multicast address. But why is it specified this way? Why not just send the ICMP packet to the destination IPv6 address directly letting the multicast MAC address take care of distributing it to possible candidates? Like this:
- ICMP neighbor solicitation packet inside
- IPv6 datagram with unicast destination address
fe80::1234:56ff:fe12:3456
inside - Ethernet frame with multicast destination address
33:33:ff:12:34:56
.