"Look Ma, No DHCP Server!"
In IPv4, getting an IP address automatically requires a DHCP server — a central service that maintains a database of available addresses, hands them out on lease, and tracks who has what. If the DHCP server goes down, new devices cannot get addresses. This is a single point of failure that requires operational overhead to manage.
IPv6 introduces SLAAC (Stateless Address Autoconfiguration), which allows a device to configure its own globally routable IP address without any central server. The device only needs to hear from a router, and it figures out the rest itself.
The SLAAC Process Step by Step
Step 1: Device boots, generates a Link-Local address
fe80::<interface-identifier>
(This is always available, even without a router)
Step 2: Router Solicitation (RS)
Device sends to ff02::2 (all-routers multicast):
"Is there a router on this network?"
Step 3: Router Advertisement (RA)
Router replies with:
- Network prefix (e.g., 2001:db8:cafe::/64)
- Prefix lifetime
- Default gateway (the router's own link-local address)
- Configuration flags (A, M, O — explained in DHCPv6 section)
Step 4: Interface Identifier Generation
Device generates the last 64 bits using one of:
a) EUI-64: Derived from MAC address (predictable, privacy concern)
b) Privacy Extensions (RFC 4941): Random, rotated periodically
c) Stable Privacy Addresses (RFC 7217): Random but stable per network
Step 5: Duplicate Address Detection (DAD)
Device sends a Neighbor Solicitation for its own candidate address:
"Does anyone already have 2001:db8:cafe::a1b2:c3d4?"
If no response within ~1 second → address is unique → claim it
If response received → collision detected → generate new identifier
EUI-64: How MAC Becomes IPv6
The EUI-64 method converts a 48-bit MAC address into a 64-bit interface identifier:
MAC address: AA:BB:CC:DD:EE:FF
↓ Split in half, insert FF:FE in the middle
EUI-64: AA:BB:CC:FF:FE:DD:EE:FF
↓ Flip the 7th bit (Universal/Local bit)
Final: A8:BB:CC:FF:FE:DD:EE:FF
Full IPv6: 2001:db8:cafe::a8bb:ccff:fedd:eeff
The bit-flip distinguishes globally unique MAC-derived identifiers from locally assigned ones. This method is deterministic — the same MAC always produces the same IPv6 address on the same prefix — which is useful for servers but a privacy problem for mobile devices (your phone's address would be trackable across networks).
Privacy Extensions (RFC 4941)
Modern operating systems (Linux, macOS, Windows, Android) use random interface identifiers that rotate periodically (typically every 24 hours for temporary addresses). The stable address remains for inbound connections; the temporary address is used for outbound connections. This prevents tracking a device across time or across networks.
A common interview question: "What is DAD and why does it matter?" DAD (Duplicate Address Detection) is the mechanism by which a device verifies its self-generated IPv6 address is unique before using it. It sends a Neighbor Solicitation for its own candidate address. If another device responds, there is a collision and the device must generate a new identifier. DAD is critical because SLAAC is stateless — no server is tracking assignments, so the device itself must verify uniqueness. The window between generating an address and completing DAD is called the "tentative" state, during which the address cannot be used for communication.
Key Point: SLAAC eliminates the need for centralized DHCP infrastructure by letting devices self-configure using the network prefix advertised by routers. This enables zero-touch device onboarding at scale — critical for IoT deployments with thousands of devices — but requires careful consideration of privacy (EUI-64 vs. privacy extensions) and the trade-off between stateless convenience and stateful control.