NetCalcLab

IPv6 address types

Global unicast, link-local, unique local, multicast, loopback, unspecified and the transition ranges — what each prefix is for and when you actually configure one.

Three top-level categories

Every IPv6 address is either unicast, multicast or anycast. Broadcast does not exist in IPv6 — its functions were folded into multicast, which is a deliberate change because multicast can be scoped and directed rather than always interrupting every host on the segment.

Top-level IPv6 address categories
CategoryIdentifiesIP support
UnicastA single interfaceAnycast and unicast are implemented the same way at the wire level
MulticastA group of interfacesMandatory several times over — it carries neighbour discovery
AnycastThe nearest interface in a groupConfigured by assigning the same unicast address to several nodes

The distinction between anycast and unicast is not visible in the address itself. An anycast address is a unicast address that happens to be configured on several nodes, with routers delivering to whichever is nearest. This is how IPv6 root DNS servers work.

The ranges you configure

Most of the space is still unassigned. These are the ranges that matter in practice, with what each one is actually for.

IPv6 address ranges in use
PrefixTypeRoutablePurpose
::/128UnspecifiedNoSource address before configuration; equivalent to 0.0.0.0
::1/128LoopbackNoThe local host; equivalent to 127.0.0.1
::ffff:0:0/96IPv4-mappedSpecialRepresents an IPv4 address inside IPv6, used by dual-stack sockets
64:ff9b::/96IPv4-IPv6 translationYesNAT64 prefix, RFC 6052
100::/64Discard-onlyNoBlackhole prefix for filtering, RFC 6666
2001::/32TeredoSpecialTunnelling IPv6 over IPv4 NAT, largely deprecated
2001:db8::/32DocumentationNeverExamples and documentation, RFC 3849
2001:20::/28ORCHIDv2SpecialCryptographic identifier, RFC 7343
2002::/166to4SpecialDeprecated transition mechanism, RFC 7526
2600::/12 and beyondGlobal unicastYesPublic addresses, allocated by the RIRs
fc00::/7Unique localNoPrivate addressing; fd00::/8 is the part in use
fe80::/10Link-localNoAutomatic per-interface address; never routed
ff00::/8MulticastScopedGroup addressing, including all the all-nodes groups

Anatomy of a global unicast address

A global unicast address is divided into three parts: a routing prefix from the provider, a subnet ID you control, and a 64-bit interface identifier. That gives you 65,536 subnets of 18 quintillion addresses each, which is why IPv6 subnet planning is about the number of /64s rather than the number of hosts.

2001:db8:abcd:12::1/64
|       2001:db8:abcd      |   12    |        0000:0000:0000:0001        |
|<--- routing prefix /48 --->|<-subnet->|<---- interface identifier /64 ---->|
       (from the provider)     (yours)          (device identifier)

Network  /48  = 2001:db8:abcd::
Subnet   /64  = 2001:db8:abcd:12::
Host           = 2001:db8:abcd:12::1
Addresses in one /64 = 2^64 = 18,446,744,073,709,551,616

The same structure applies at other sizes. An ISP holding a /32 can give each customer a /48, which is 65,536 customer allocations, and each customer then has 65,536 /64s to use internally. Nothing is sized tightly, and that is intentional — the design removes address scarcity from the planning problem.

Example: counting subnets in an allocation

A customer receives 2001:db8:abcd::/48. How many /64 subnets does that provide? The prefix lengths differ by 16 bits, and 2^16 = 65,536. So the /48 contains 65,536 /64 subnets, each with 2^64 addresses.

2001:db8:abcd:0000::/64 through 2001:db8:abcd:ffff::/64 — 65,536 subnets

Link-local addresses in depth

Every IPv6 interface has a link-local address whether or not it has a global one. It is generated from the interface's MAC address or a random value, and it is what makes IPv6 work before any global configuration exists.

  • It is the next hop in routing protocols. OSPFv3 and other protocols form adjacencies over link-local addresses, which removes the need for a globally routable transit subnet on point-to-point links.
  • It carries neighbour discovery. Router advertisements, neighbour solicitations and duplicate address detection all ride on link-local and multicast addresses.
  • It needs a zone identifier when you use it. Since the same fe80:: prefix exists on every interface, you must specify which interface you mean. On Linux that is fe80::1%eth0; on Windows it is fe80::1%12 using the interface index.
  • It is never routed. Routers drop link-local traffic at the interface boundary, which is what makes the scope meaningful.

Common mistakes

  • Forgetting the zone identifier on a link-local address. Pinging fe80::1 without %eth0 fails with an ambiguous address error, which is confusing until you remember that every interface has one.
  • Using a prefix other than /64 for a subnet with SLAAC hosts. Stateless autoconfiguration requires a 64-bit interface identifier, so a /72 or /80 subnet will not autoconfigure correctly even though it is technically valid.
  • Assuming fd00::/8 is the whole ULA range. The allocation is fc00::/7; the fd00::/8 half is the part defined for local assignment. Rules intended to cover all ULA traffic should match fc00::/7.
  • Treating 2001:db8:: like a real address. It is documentation space and no router will forward it. Seeing it in a live system means a template was applied without substitution.
  • Expecting broadcast to exist. There is no broadcast in IPv6. Code that tries to send to a subnet broadcast address has no equivalent and needs to be rewritten to use a multicast group, usually ff02::1 for all nodes on the link.
  • Planning subnets to conserve addresses. Sizing a subnet to fit the hosts is an IPv4 habit. In IPv6 every subnet is a /64; the planning effort goes into the subnet ID instead.

Multicast groups worth knowing

Well-known IPv6 multicast addresses
AddressGroupScopeUsed by
ff02::1All nodesLink-localReaches every IPv6 host on the link
ff02::2All routersLink-localRouter solicitation during autoconfiguration
ff02::5OSPFv3 all routersLink-localOSPFv3 hello packets
ff02::6OSPFv3 designated routersLink-localOSPFv3 DR and BDR
ff02::9RIPng routersLink-localRIPng updates
ff02::aEIGRP routersLink-localEIGRP IPv6 hellos
ff02::1:2All DHCP serversLink-localDHCPv6 relay agents
ff02::1:ff00:0/104Solicited-nodeLink-localNeighbour discovery, one group per address
ff05::2All routersSite-localReaches all routers in the site
ff0e::1All nodesGlobalRarely used; reaches every host in the scope

The solicited-node multicast group is the clever one: each address has a corresponding group derived from its last 24 bits, so neighbour discovery checks a much smaller set of hosts instead of interrupting every device on the link. It is how IPv6 avoids the broadcast behaviour that makes ARP on a large IPv4 subnet expensive.

Prefix sizes and their capacity

IPv6 prefix sizes
PrefixSubnets of /64AddressesTypical use
/324,294,967,2967.9 × 10^28ISP allocation
/4016,777,2161.2 × 10^27Large ISP or enterprise
/4865,5361.2 × 10^24Site allocation, standard customer block
/562564.7 × 10^21Small site or home allocation
/60162.9 × 10^20Very small site
/6411.8 × 10^19The standard subnet size
/127—2Point-to-point link, like IPv4 /31
/128—1Single host, like IPv4 /32

The jump from /64 to /128 is worth noting: /127 and /128 are for links and hosts, not subnets. A /127 has exactly two addresses and is used on router-to-router links so that neither side wastes a /64 on a point-to-point connection.

Related: IPv6 calculator, CIDR notation explained, subnetting guide, MTU/MSS calculator for IPv6 header overhead.

Frequently asked questions

How many types of IPv6 address are there?

At the top level there are three: unicast, which identifies a single interface; multicast, which identifies a group; and anycast, which identifies the nearest member of a group. Those top-level categories are then subdivided into the specific ranges you configure — global unicast, link-local, unique local, loopback, unspecified and the transition prefixes.

What is a link-local address and do I need one?

A link-local address is in fe80::/10 and is automatically generated on every IPv6-enabled interface. It is not routable beyond the local link and is used for neighbour discovery, router advertisements and the next-hop addresses in routing protocols. You do not assign one — the system always creates it, and it is why an interface has both a link-local and a global address.

What is the difference between fe80::/10 and fe80::/64?

fe80::/10 is the allocation range for all link-local addresses. fe80::/64 is the subnet size actually used on a link, since IPv6 subnetting is standardised at /64. In practice the /10 gives the range and the /64 is what the interface configures. Writing fe80::/10 in a firewall rule covers the whole range including the rarely used febf:: subset.

What are unique local addresses for?

Unique local addresses in fc00::/7 are the IPv6 equivalent of RFC 1918 private addresses. They are not routable on the public internet and are intended for internal networks. The practical range in use is fd00::/8, where the local bit is set to 1 and a 40-bit random global ID follows, which gives enough randomness to avoid collisions between organisations that merge or interconnect.

Do I need NAT with IPv6?

The design intent is no. IPv6 has enough addresses for every device to have a globally routable one, so NAT is not needed for address conservation. Most deployments use a stateful firewall that permits outbound connections and blocks unsolicited inbound instead. Unique local addresses are used for internal-only segments rather than as a NAT pool, though NAT66 exists for specific cases.

What is ::1 and how is it different from ::?

::1 is the loopback address, equivalent to 127.0.0.1, and it is assigned to the loopback interface. :: with all zeros is the unspecified address, equivalent to 0.0.0.0, and is used as a source address before an interface has one. They look similar but only differ in the last bit, which is exactly why the distinction matters.

What is a /64 and why is it always used?

A /64 is the standard IPv6 subnet: the first 64 bits are the network and the last 64 are the interface identifier. It is fixed at /64 because stateless address autoconfiguration requires 64 interface bits, and standardising the size means every subnet holds 18,446,744,073,709,551,616 addresses — far more than any network needs. The point is that address conservation stops being a constraint, so subnet sizes can be uniform.

What is the difference between a documentation range and a real one?

2001:db8::/32 is reserved by RFC 3849 for documentation and examples, exactly like RFC 5737's 192.0.2.0/24 in IPv4. It is never routed. Seeing it in a configuration guide means the address is a placeholder; seeing it in a live network means someone copied an example without changing it.