IPv6 Address Types Explained

If your device shows an address starting with fe80:: and another starting with 2000: at the same time, here is why that is completely normal.

Why IPv6 addresses come in several types

IPv6 was designed with a vastly larger address space than IPv4, but that scale also meant it needed a clear, built-in way to tell which addresses work across the whole internet and which only work inside a local network -- so addresses are divided into types based on their leading bit pattern (prefix).

Global unicast addresses (2000::/3)

Global unicast addresses play the same role as a public IP does in IPv4 -- reachable from anywhere on the internet. They are allocated from the 2000::/3 range, and internet providers assign them to homes and businesses so each device can, in principle, get its own globally reachable address without needing NAT.

Unique local addresses (fc00::/7)

Unique local addresses (ULAs), from the fc00::/7 range, play a role similar to IPv4's private address ranges (like 192.168.x.x) -- used internally and not routed onto the public internet. Unlike IPv4 private addresses, a ULA includes a randomly generated identifier, making it extremely unlikely that two separate private networks would collide if they were ever merged.

Multicast addresses (ff00::/8)

Multicast addresses let one sender deliver data simultaneously to every member of a specific group, using the ff00::/8 range. IPv6 dropped the broadcast concept entirely and relies on multicast (including reserved group addresses like "all nodes" or "all routers") to fill that role instead.

The loopback and unspecified addresses (::1, ::)

The loopback address ::1 plays the same role as IPv4's 127.0.0.1 -- a device talking to itself, useful for local testing. The unspecified address :: (128 zero bits) marks the absence of an assigned address and is never actually used as a real source or destination.

What you will actually see when you check your own address

Look at your network settings and it is completely normal to see a link-local address starting with fe80:: alongside a global unicast address starting with 2000:: at the same time. That is not an error -- IPv6 is designed for a single device to hold several addresses of different types simultaneously, for different purposes.

There's no real address shortage left to solve

IPv4's roughly 4.3 billion addresses forced the entire internet to lean on private IP ranges and NAT just to keep functioning. IPv6's address space is large enough that, in principle, every device on Earth could have its own globally reachable address with room to spare many times over -- which is why the address-type system exists: not to ration scarce addresses, but to organize an effectively limitless supply by purpose.

Recognizing address types speeds up troubleshooting

Once you can recognize a prefix at a glance -- fe80:: is always local-only, fc00:: or fd00:: is internal, 2000:: is globally routable -- diagnosing a connectivity problem gets much faster, since seeing only a link-local address where a global one is expected immediately tells you the device never got a proper address from the network.

Frequently Asked Questions

Do I still need a private IP address with IPv6?

Not strictly. IPv6's address space is large enough to assign a global unicast address directly without NAT, but a unique local address (ULA) is still useful for internal-only communication you don't want reachable from the internet. It just is not the mandatory building block that private IPv4 addresses are.

Can I reach the internet using a link-local address?

No. Link-local addresses are designed to be valid only within a single local network segment and are never forwarded past a router, so internet communication always uses a global unicast address instead.