3.5 IPv6 Address and Prefix Formats
Key Takeaways
- IPv6 addresses are 128 bits written as eight 16-bit hex groups separated by colons.
- Shorthand: drop leading zeros in a group, and replace one consecutive all-zero run with :: (only once per address).
- Prefixes use slash notation; /64 is the standard LAN subnet size for SLAAC and neighbor discovery.
- IPv6 uses multicast and Neighbor Discovery (ICMPv6) instead of IPv4 ARP and broadcast; every interface has an fe80:: link-local.
Reading IPv6 addresses
The 100-150 objectives include identifying IPv6 addresses and prefix formats. An IPv6 address is 128 bits, written as eight groups of four hexadecimal digits separated by colons. A full address looks like 2001:0db8:0000:0000:0000:ff00:0042:8329. Each group is 16 bits. Hexadecimal uses 0–9 and a–f, so 00ff is valid but 00gg is not.
Two shorthand rules let you compress that 39-character monster:
- Drop leading zeros within any group:
0db8→db8,0042→42,0000→0. - Replace one consecutive run of all-zero groups with
::.
Applying both, the example becomes 2001:db8::ff00:42:8329. The :: may appear only once per address — a second one would make the count of omitted zero groups ambiguous. So 2001:db8::1 is valid, but 2001::db8::1 is invalid. Watch for both traps on the exam: a double :: and an illegal hex character like zzzz.
IPv6 prefixes use the same slash notation as CIDR. 2001:db8:10:20::/64 is a 64-bit network prefix; a host on it might be 2001:db8:10:20::25/64. On most LANs, /64 is the standard subnet size because SLAAC (Stateless Address Autoconfiguration) and neighbor discovery assume a 64-bit interface identifier. Do not try to compute small IPv6 host counts the way you do for IPv4 /28s — a single /64 holds 2^64 addresses, intentionally vast.
Address types, assignment, and discovery
IPv6 address types are recognizable by their leading bits:
| Type | Prefix | Role |
|---|---|---|
| Global unicast | 2000::/3 (starts 2 or 3) | Publicly routable, like a public IPv4 |
| Documentation | 2001:db8::/32 | Examples only — never production |
| Unique local (ULA) | fc00::/7 (fd... in practice) | Private internal, like RFC 1918 |
| Link-local | fe80::/10 | On-link only; on every IPv6 interface |
| Loopback | ::1 | Host talking to itself |
| Unspecified | :: | "No address yet" |
Assignment can be static, stateful DHCPv6, or automatic via SLAAC. With SLAAC, router advertisements (RAs) announce the prefix and the host builds its own address. Some networks layer DHCPv6 on top for DNS and other options. The first-level takeaway: IPv6 clients may not depend on a DHCP server the same way IPv4 clients do, so a missing DHCP server does not always mean an IPv6 host has no address.
No broadcast — multicast and NDP instead
IPv6 has no broadcast. It uses multicast plus NDP (Neighbor Discovery Protocol), which runs over ICMPv6 and performs the jobs ARP and router discovery do in IPv4. To map a neighbor's address to a MAC, a host sends neighbor solicitation and gets a neighbor advertisement; to find routers, it listens for router advertisements. A critical consequence: blanket-blocking ICMPv6 at a firewall can break IPv6 even when addressing looks correct — a frequent, exam-worthy trap, since IPv4 admins habitually filter ICMP.
Every IPv6-enabled interface usually carries multiple addresses at once: a link-local (fe80::), one or more global or unique-local addresses, and often temporary privacy addresses. That is normal, not a misconfiguration. When troubleshooting, identify which address the failing connection used, and include the prefix length and interface. Pinging a link-local address often requires an interface zone identifier — ping fe80::1%en0 on macOS or %12 on Windows — because the same fe80:: prefix exists on every interface and the OS cannot otherwise tell which link you mean.
A closing parallel keeps it grounded: 192.168.10.25/24 and 2001:db8:10:20::25/64 both pair an address with a prefix. Notation aside, the technician's questions are identical — what network is this host on, which router does it use, and should the destination be local or routed?
Compression practice and common validation errors
The exam frequently shows several IPv6 strings and asks which is valid, or asks you to expand or compress one, so drill both directions. To expand 2001:db8::8a2e:370:7334, count the groups present (six), subtract from eight, and insert that many all-zero groups where the :: sits, then pad each group to four digits: 2001:0db8:0000:0000:0000:8a2e:0370:7334. To compress the reverse, drop leading zeros in every group and collapse the single longest zero run with ::. If two zero runs are equal length, convention compresses the leftmost.
Memorize the three errors that make an IPv6 address invalid. A second :: (as in 2001::db8::1) is illegal because the omitted-group count becomes ambiguous. A non-hex character (g through z) is illegal because IPv6 groups are pure hexadecimal. And a group with more than four hex digits (2001:db8:12345::1) is illegal because each group is exactly 16 bits. A useful sanity check: you can only use :: when there is at least one all-zero group to remove — writing 2001:db8:1:2:3:4:5:6 already has eight groups and cannot be compressed at all.
Finally, connect the format to behavior so the rules are not just trivia. The /64 boundary matters because the lower 64 bits often derive from the interface in SLAAC, so changing a NIC can change the global address while the prefix stays put — the IPv6 echo of "new MAC, same subnet" from IPv4. And the always-present fe80:: link-local is why an IPv6 interface can do neighbor discovery before it ever obtains a global address, which has no clean IPv4 equivalent.
Reading the address tells you the host's role on the link; reading the prefix tells you whether a destination is local or must be routed — the same two questions you ask of every IPv4 address.
Which IPv6 address uses valid shorthand?
What does /64 usually represent on an IPv6 LAN?
Which prefix identifies IPv6 link-local addresses?