Have you ever questioned yourself what happens when an IPv6 host wants to send a packet to a certain destination with a link-layer address unknown. In IPv4, finding a proper link-layer address for a certain IPv4 address is done by ARP. However, in IPv6, ARP is replaced by IPv6 Neighbour Discovery, ND for short. Instead of an ARP cache an IPv6 host maintains a Neighbour Cache (NC) with IP-to-link-layer address mappings. Each NC entry has a well-defined state, namely INCOMPLETE, REACHABLE, STALE, DELAY and PROBE. A host is capable of sending packets to a destination in all states except INCOMPLETE or when there is no corresponding NC entry. In INCOMPLETE state the data packets are queued pending completion of address resolution. Please, refer to RFC 4861 for more details.
An algorithm that controls transitions between the states of a NC cache entry is in my focus here. What actually impressed me was the art of the ND Reachability State Machine. Here is how it might look like:
Yes, the background of the IPv6 alternative for ARP is complex but well-defined. A piece of tech-art, I’d say. You might never come close to it in practice, but it is there and it makes IPv6 work for you🙂.