IPv6 Address Types Reference
Loopback, link-local, ULA, multicast scopes, global unicast โ the full IPv6 address taxonomy.
The IPv6 address taxonomy
IPv6 addresses are 128 bits, written as eight 16-bit groups separated by colons. Unlike IPv4, the value of the first few bits tells you what kind of address it is.
| Prefix | Type | Use |
|---|---|---|
| ::1/128 | Loopback | Localhost. IPv6 equivalent of 127.0.0.1. |
| ::/128 | Unspecified | "No address." Used as source before DHCPv6 assigns one. |
| fe80::/10 | Link-local | Auto-configured on every IPv6 interface. Only valid on the local link. |
| fc00::/7 | Unique Local (ULA) | Private internal use. IPv6 equivalent of RFC 1918. fd00::/8 in practice. |
| 2000::/3 | Global Unicast | Public, internet-routable addresses. |
| 2001:db8::/32 | Documentation | Reserved for examples and docs. Like 192.0.2.0/24 in v4. |
| ::ffff:0:0/96 | IPv4-mapped | How v6 sockets represent v4 connections (::ffff:192.0.2.1). |
| 64:ff9b::/96 | NAT64 | NAT64 prefix translation (v6-only client โ v4 server). |
| ff00::/8 | Multicast | Replaces both v4 broadcast and multicast. |
Link-local โ present on every interface
Every IPv6-enabled interface gets a link-local address (fe80:: + interface ID) automatically. DHCPv6, neighbor discovery, and router advertisements all use link-local. Because link-local isn't unique across links, you must specify the interface โ usually with a zone ID like fe80::1%eth0.
Multicast scopes
| Scope | Reach |
|---|---|
| 1 โ Interface-local | Same machine |
| 2 โ Link-local | Same network segment |
| 5 โ Site-local | Site / corporate network |
| 8 โ Organization-local | Multiple sites of one organization |
| 14 (e) โ Global | The entire internet |
Well-known multicast addresses
| Address | Used for |
|---|---|
| ff02::1 | All nodes on the link |
| ff02::2 | All routers on the link |
| ff02::5 | OSPFv3 routers |
| ff02::1:2 | DHCPv6 servers and relay agents |
| ff02::fb | mDNS / Bonjour |
ULA โ Unique Local Addresses (fc00::/7)
Private internal networks. Format: fd + 40 random bits + 16-bit subnet ID + 64-bit interface ID. The 40 random bits make collisions vanishingly unlikely if two ULAs ever meet. Always use fd00::/8, never fc00::/8 (reserved).
One of the design goals of IPv6 is end-to-end connectivity. There's enough address space that you should never need NAT. Use ULA only for things that should be unreachable from outside; for everything else, give devices real global IPv6 addresses and let the firewall control what's allowed in.
Privacy: don't leak your MAC
Older systems derived the last 64 bits from the MAC address (EUI-64). This leaked your MAC to every server. Modern systems use random "Privacy Extensions" (RFC 4941) that rotate frequently. On Windows: enabled by default. macOS/iOS: enabled by default. Linux: echo 2 > /proc/sys/net/ipv6/conf/all/use_tempaddr.
Reading IPv6 without going cross-eyed
IPv6 addresses look intimidating because they're four times longer than IPv4 addresses and written in hexadecimal. Once you internalize a few notation rules and know the address type categories, they're actually easier to reason about than IPv4 โ every address's category is visible in its prefix, and you don't have to memorize which /8 blocks belong to which registry.
An IPv6 address is 128 bits, written as eight groups of four hex digits separated by colons. So 2001:0db8:85a3:0000:0000:8a2e:0370:7334 is a complete address. There are two shortening rules that make writing addresses more manageable:
- Leading zeros in each group can be dropped.
0db8becomesdb8,0000becomes0. - One run of consecutive all-zero groups can be replaced with double-colon (::). So
2001:0db8:0000:0000:0000:0000:0000:0001can become2001:db8::1.
Only one double-colon per address (otherwise the number of collapsed groups would be ambiguous). If an address has multiple runs of zeros, most tools compress the longest run; if runs are equal, they compress the leftmost.
The address types in more detail
Global Unicast (2000::/3)
The public internet's addresses. Everything starting with 2 or 3 in the first digit is global unicast, which means it's routable on the public IPv6 internet. Your ISP allocates a block of these to you, and every device in your home gets one (or several).
Most current allocations are actually in 2000::/3 with the second nibble being 0 (like 2001:) or 4 (like 2600:), but the whole /3 is reserved for global unicast. You'll never see production addresses starting with 4-9 or A-F in the first digit because those ranges are reserved for other purposes.
Link-local (fe80::/10)
Every IPv6 interface has a link-local address automatically. These addresses work only on the local network segment โ they can't be routed anywhere else. Used for neighbor discovery, DHCPv6 client bootstrap, and various local protocols.
Link-local addresses are usually derived from the interface's MAC address using a modified EUI-64 algorithm, though modern operating systems generate random values by default for privacy reasons.
Unique Local (fc00::/7)
The IPv6 analog of RFC 1918 private addresses. Not routable on the public internet. Meant for internal use where you want stable addresses that won't accidentally overlap with anyone else's.
The typical ULA prefix is fd00::/8, with the next 40 bits randomly generated to make collisions vanishingly unlikely. This gives each organization a /48 that's essentially guaranteed unique. Similar in spirit to RFC 1918 but without the "everyone uses the same three ranges" problem.
Multicast (ff00::/8)
All multicast addresses start with ff. The next 4 bits are flags (permanent versus temporary), the following 4 bits are scope (link-local, site-local, organization-local, global), and the rest is the group identifier.
Common well-known multicast addresses: ff02::1 (all nodes on the link), ff02::2 (all routers on the link), ff02::1:2 (all DHCP relay agents), ff02::fb (mDNS).
Loopback (::1)
The IPv6 loopback address, analogous to IPv4's 127.0.0.1. Refers to the local host.
Unspecified (::)
The all-zeros address. Used as a source address before an interface has been assigned an address, and as a "any address" placeholder in bind() calls.
SLAAC and privacy addresses
Stateless Address Autoconfiguration (SLAAC) lets a host derive its own global address from a router-advertised prefix plus its interface identifier. This is how devices get IPv6 addresses without DHCP.
The traditional interface identifier is derived from the MAC address using a modified EUI-64 algorithm, which means the address contains the device's MAC. This has privacy implications โ the same device gets the same lower 64 bits everywhere it goes, allowing cross-network tracking.
Modern operating systems use privacy extensions (RFC 4941, updated in RFC 8981) that generate random interface identifiers, rotated periodically. Windows, macOS, iOS, Android, and modern Linux all do this by default. The result: the device's IPv6 address changes periodically and doesn't reveal the MAC address.
Address scoping
Link-local addresses are ambiguous if you have multiple interfaces because they use the same prefix (fe80::/10). To specify which interface, IPv6 uses "zone identifiers" โ like fe80::1234%eth0 on Linux or fe80::1234%en0 on macOS. Windows uses interface indexes: fe80::1234%12.
You'll see these zone identifiers in real IPv6 configurations. They're not part of the address itself; they're a hint to the operating system about which interface to send traffic on.
Common IPv6 questions
"Does my ISP support IPv6?"
Depends on the ISP. Comcast, T-Mobile, and most large US ISPs support IPv6 natively. Some smaller regional ISPs still don't. If you're not sure, run test-ipv6.com to check.
"Should I turn off IPv6 to fix my problem?"
Almost never. IPv6-related connectivity problems in 2026 are rare, and disabling IPv6 breaks progressively more services. If you're seeing something that seems IPv6-specific, dig into the specific issue rather than turning off the protocol.
"Why does my IPv6 address keep changing?"
Privacy extensions. Your OS is rotating the address periodically to prevent tracking. This is generally desirable behavior for client devices. Servers typically pin a stable address separately.
"Do I need NAT with IPv6?"
Not for address translation. Every device gets a globally-unique address so translation isn't necessary. But you still need firewalling. IPv6 network security comes from stateful firewalls (like the ones already built into your router), not from address translation as a side effect.
"How do I know if a service supports IPv6?"
Do a DNS lookup for AAAA records. If the service publishes AAAA records, it's IPv6-reachable. If it only has A records, it's IPv4-only. The DNS Lookup tool queries both.
Related tools
The IP Converter handles IPv6 to and from various formats. The Subnet Calculator handles IPv6 subnet math (though most IPv6 subnetting uses /48, /56, or /64, which are simpler than IPv4). The IP Lookup tool works with both IPv4 and IPv6 addresses.
