DAD

What

Detect if a certain address is already in use
Only need to check within subnet, since it either concerns a link-local address, or a global scope address, but only your subnet uses the prefix provided to/by your router

Why

To prevent duplicate addresses caused by:

Even with a DHCPv6 server, IPv6 still mandates the use of DAD as a backup

Concepts

How

  1. Generate address, as specified in SLAAC
  2. Based on the last 24 bits (last 1.5 segments), join the appropriate solicited-node multicast group
    1. E.g. 2001:db8:1::a4b3:8f21:c9d2:1e5f -> d2:1e5f, join multicast group ff02::1:ffd2:1e5f (all nodes group + last bits)
  3. In said group send a Neighbour Solicitation with
    1. Source address: ::, since there is no usable address yet
    2. Destination: multicast group address, e.g. ff02::1:ffd2:1e5f
    3. Target address: the address being tested, e.g. 2001:db8:1::a4b3:8f21:c9d2:1e5f
  4. Wait for response
    1. Duration set by RetransTimer
  5. No response received: address is free and can be used
    1. Transition from tentative to preferred
  6. Response received: address is in use
    1. If using SLAAC, the device can try again
    2. If manually configured, manual steps are needed