The 128-Bit Format
IPv6 (Internet Protocol version 6) was standardized in RFC 2460 in 1998 as the long-term solution to IPv4 address exhaustion. Where IPv4 uses 32-bit addresses, IPv6 uses 128-bit addresses — four times as many bits. The result is an address space of 2128, or approximately 340,282,366,920,938,463,463,374,607,431,768,211,456 unique addresses. That number — 340 undecillion — is so large it is practically inexhaustible even at the scale of the global internet of connected devices.
Beyond raw address space, IPv6 introduces several improvements over IPv4: a simplified packet header (fewer fields, fixed-length), mandatory support for IPsec, built-in stateless address autoconfiguration (SLAAC), and multicast replacing broadcast for address resolution. The removal of NAT as a necessity is also significant — every device can have a globally unique, directly reachable address.
Reading an IPv6 Address: Hex Colon Notation
IPv6 addresses are written as eight groups of four hexadecimal digits, separated by colons. A full IPv6 address looks like: 2001:0db8:85a3:0000:0000:8a2e:0370:7334. Two abbreviation rules make them shorter in practice:
First, leading zeros within any group may be omitted: 0db8 becomes db8, 0000 becomes 0. Second, one consecutive sequence of all-zero groups may be replaced with a double colon (::). The address above becomes 2001:db8:85a3::8a2e:370:7334. The :: can appear only once in an address — using it twice would make the address ambiguous. The loopback address 0000:0000:0000:0000:0000:0000:0000:0001 compresses all the way to simply ::1.
When writing an IPv6 address with a port number (in URLs, for example), the address must be enclosed in square brackets: http://[2001:db8::1]:8080/. This distinguishes the colons in the address from the colon that precedes the port number.
IPv6 Address Types
| Type | Prefix | Purpose |
|---|---|---|
| Global Unicast | 2000::/3 | Globally routable addresses assigned to devices (the IPv6 equivalent of public IPv4 addresses) |
| Link-Local | fe80::/10 | Auto-configured on every interface; only valid on the local link, never routed |
| Loopback | ::1/128 | The local machine's loopback address (equivalent to IPv4's 127.0.0.1) |
| Multicast | ff00::/8 | One-to-many communication; replaces IPv4 broadcast for address resolution |
| Unique Local | fc00::/7 | Private addresses for internal use (similar to RFC 1918 in IPv4); not globally routable |
| Unspecified | ::/128 | Used in socket bindings to mean "any address on this host" |
How IPv6 Assigns Addresses: SLAAC vs DHCPv6
IPv6 offers two main mechanisms for address assignment. SLAAC (Stateless Address Autoconfiguration), defined in RFC 4862, allows a device to configure its own global IPv6 address without any server. The device takes the network prefix advertised by the local router (via Router Advertisement messages) and combines it with an interface identifier — either derived from the MAC address using EUI-64, or generated randomly for privacy. No central server is needed to track assignments.
DHCPv6 works similarly to DHCPv4 — a server assigns addresses from a pool and maintains a lease database. It is required when the network administrator needs to control which addresses are assigned to which devices, or when additional configuration options beyond what Router Advertisements provide (like DNS server addresses in some implementations) are needed.
In practice, many networks use both: SLAAC for address assignment and DHCPv6 for additional configuration, or pure DHCPv6 in enterprise environments where auditability requires knowing exactly which device held which address at any given time.
IPv4 and IPv6 Running Together: Dual-Stack
Because IPv4 and IPv6 are not directly compatible — an IPv4-only host cannot communicate with an IPv6-only host without a translator — the transition strategy has primarily been dual-stack deployment. A dual-stack host runs both protocols simultaneously. Every interface has both an IPv4 address and one or more IPv6 addresses.
When a dual-stack application needs to connect to a hostname, it queries for both A (IPv4) and AAAA (IPv6) records. The operating system uses the Happy Eyeballs algorithm (RFC 8305) to race connection attempts on both protocols in parallel, with a slight head start given to IPv6. Whichever connection completes first is used, and the other is abandoned. This means users get the benefits of IPv6 when available without suffering if IPv6 has problems on a particular path.
Major content providers — Google, Facebook, Netflix, Cloudflare — have been dual-stack for years. ISP support for IPv6 varies widely by region and provider. As of the mid-2020s, roughly 40% of internet traffic globally uses IPv6, with that percentage growing steadily each year.
Frequently Asked Questions
How many IPv6 addresses are there?
IPv6 uses 128-bit addresses, giving 2128 possible addresses — approximately 340 undecillion (3.4 × 1038). This is enough to assign billions of addresses to every person on Earth with an enormous surplus remaining.
What is a link-local IPv6 address?
A link-local address is in the fe80::/10 range and is automatically configured on every IPv6-capable interface. It is only valid on the local network segment and is never routed beyond it. Link-local addresses are used for neighbor discovery and router discovery.
What is fe80::?
fe80:: is the link-local prefix. Every IPv6-capable interface automatically generates a link-local address starting with fe80:: by combining the prefix with an interface identifier. You will always see a fe80:: address on any interface with IPv6 enabled.
Does IPv6 eliminate the need for NAT?
In principle, yes. IPv6 provides enough addresses for every device to have a globally unique, directly routable address. Firewalls still control inbound access, but this is stateful packet filtering — not address translation. NAT is architecturally unnecessary in IPv6 networks.
What is dual-stack networking?
Dual-stack means running both IPv4 and IPv6 simultaneously. Each interface has both an IPv4 and an IPv6 address. The operating system prefers IPv6 when both are available, using the Happy Eyeballs algorithm to race both protocols and use whichever responds first.
How do I know if my connection has IPv6?
Visit test-ipv6.com from your browser — it reports whether your connection supports IPv6 and shows your IPv6 address. On your device, run ip addr (Linux), ifconfig (macOS), or ipconfig (Windows) and look for addresses starting with 2 or fe80.