What is IPv6?

Deeper water, and enough of it that we will not need to find more.

Overview

IPv6 is the successor to IPv4, published as a draft standard in 1998 and finalized as RFC 8200 in 2017. It was designed with one non-negotiable requirement: never run out of addresses again.

An IPv6 address is 128 bits, four times the length of an IPv4 address. That does not make the pool four times bigger.

IPv4 and IPv6 address space compared IPv4 holds about 4.3 billion addresses. IPv6 holds about 340 undecillion, a number so much larger that the IPv4 pool is not visible at the same scale. IPv4 32 bits 4,294,967,296 addresses. At this scale that bar is 4 pixels wide. IPv6 128 bits 340,282,366,920,938,463,463,374,607,431,768,211,456 addresses. To draw this bar to the same scale as the one above, it would need to stretch far past the moon. The teal sliver at its left edge is all of IPv4. Put another way IPv6 could give every grain of sand on Earth its own address and barely notice the dent.
Each added bit doubles the space. Ninety-six extra bits multiply it by about 79 octillion, which is why the two bars cannot honestly be drawn to the same scale.

The usual comparison is that you could assign an address to every grain of sand on Earth and barely make a dent. That is true and it undersells it. A more useful framing: every person alive could be given more addresses than the entire IPv4 internet has ever contained, and the pool would still be effectively untouched.

How the notation works

IPv6 is written as eight groups of four hexadecimal digits, separated by colons. Written in full it is long and unpleasant, so two shortening rules apply.

How an IPv6 address gets shortened A full IPv6 address is eight groups of four hexadecimal digits. Leading zeros in each group may be dropped, and one run of all-zero groups may be replaced with a double colon. Step 1. The full address, all 32 hex digits 2001:0db8:0000:0000:0000:ff00:0042:8329 Step 2. Drop the leading zeros inside each group 2001:db8:0:0:0:ff00:42:8329 Only zeros at the FRONT of a group go. The group 8329 keeps every digit. Step 3. Collapse one run of zero groups into a double colon 2001:db8::ff00:42:8329 You may do this only once per address. Two double colons would be ambiguous, because nothing would say how many zero groups belong to each one. All three forms above are the same address.
All three lines are the same address. The double colon can appear only once, because two of them would leave no way to work out how many zero groups belonged to each.

A few consequences of those rules are worth knowing, because they show up in real configuration files.

Why adoption took so long

IPv6 was ready years before IPv4 ran out, and it still took decades to reach real deployment. The reason is not laziness or inertia. It is that the two protocols cannot talk to each other.

An IPv6-only host cannot open a connection to an IPv4-only host. There is no clever header trick that makes it work, because the address fields are different sizes and the packet formats differ. So the first network to go IPv6-only would have been unable to reach most of the internet, and the first website to go IPv6-only would have been unreachable by most of its visitors. Nobody had an incentive to move first, and everybody had an incentive to wait.

The way out is dual stack: run both protocols side by side on the same network, the same router, and the same machine. A dual-stack device gets an address of each kind and uses whichever the far end supports. That is what most connections do today, and it is why our front page tests each protocol independently instead of asking once and assuming.

Why we run two separate checks

A single request would tell you only which protocol your browser happened to prefer at that moment. Forcing each one separately is the only way to answer the two distinct questions: does IPv4 work, and does IPv6 work. This also makes it visible when a VPN carries one and leaks the other.

What else changed

Larger addresses are the headline, and they are not the only difference.

AreaIPv4IPv6
Address configurationDHCP, or set by handDevices can configure themselves from a router advertisement
NATNearly universalUsually unnecessary, since there is no shortage to work around
HeaderVariable length, with optionsFixed 40 bytes, with extensions chained after it
BroadcastYesReplaced by multicast, which is less noisy
FragmentationRouters may fragment packetsOnly the sender may, which keeps routers simpler and faster

The absence of NAT is the change with the largest practical effect. Under IPv4, every device in your home hides behind one address. Under IPv6, each device can hold its own globally routable address, which makes some things dramatically easier and means your firewall is now doing the job NAT was accidentally doing before.

Ranges worth recognizing

RangeNameWhat it tells you
::1LoopbackThis machine. The IPv6 equivalent of 127.0.0.1
fe80::/10Link-localValid only on the local link. Every IPv6 interface has one
fc00::/7Unique localThe rough equivalent of a private IPv4 range
2000::/3Global unicastA normal routable address, the kind you would be given
2001:db8::/32DocumentationReserved for examples, which is why it appears throughout this site
ff00::/8MulticastOne-to-many delivery

If our front page shows no IPv6 address

This is common and rarely a problem. It means one of a few things.

The IPv4 internet still reaches everything, so nothing breaks. It does mean you are relying on your provider's NAT, and if that is carrier-grade NAT, some things like hosting a server from home become harder.

Where to swim next