How IPv6 Addresses Work on Windows
How to read an IPv6 address: :: compression, fe80 link-local, fd00 unique local and temporary addresses, SLAAC, and why /64 is the standard subnet.
An IPv6 address is 128 bits written as eight groups of four hexadecimal digits. Windows shows several of them at once because a single interface holds more than one address at a time: a link-local address that works only on the local segment, a global address learned from the router, and often a temporary address used for outbound connections. Reading them correctly means knowing which group belongs to which type and what the prefix length after the slash controls.
Reading the notation
Each group is four hex digits, separated by colons. A group of all zeros can be compressed once with ::, and leading zeros inside a group can be dropped. The address 2001:0db8:0000:0000:0000:0000:0000:0001 is written 2001:db8::1. The :: may appear only once in a valid address, because two occurrences would make the expansion ambiguous.
The part after the slash is the prefix length, counted in bits from the left. 2001:db8:1234:5678::/64 means the first 64 bits identify the subnet and the remaining 64 bits identify the interface. In the normal case the first four groups are the network part and the last four groups are the interface identifier.
The address types ipconfig shows
Run ipconfig /all and the IPv6 section lists several addresses. Each has a different scope and a different source.
| Address range | Type | Scope | Assigned by | When it does not apply |
|---|---|---|---|---|
fe80::/10 | Link-local | One segment | The interface itself, automatically | Never absent on an enabled interface; if missing, IPv6 is disabled or the driver is not bound |
2000::/3 (addresses beginning with 2 or 3) | Global unicast | Routable | SLAAC from router advertisements, or DHCPv6 | No IPv6 route to the internet, or the router advertises no prefix |
fd00::/8 | Unique local | Site | SLAAC or DHCPv6 from a local router | Networks that use only global addressing or only link-local |
| Temporary (same prefix as global) | Privacy address | Routable | Windows, derived from the global prefix | Privacy extensions disabled, or the address has expired |
Link-local (fe80::/10). Every IPv6 interface generates one from its own MAC address or a random value, before any router is contacted. It is used for Neighbor Discovery, router solicitation, and any traffic that stays on the local segment. The % suffix in fe80::1%12 is the interface index, not part of the address; it tells Windows which interface to send on, because the same link-local address can exist on several interfaces.
Global unicast. A routable address built from a prefix the router advertises plus an interface identifier. This is the address a remote host sees.
Temporary addresses. Windows generates a random interface identifier that changes over time and uses it for outbound connections, keeping the stable address for incoming traffic. The privacy extension is on by default in current Windows versions. The temporary address appears in ipconfig alongside the stable one, and both share the same /64 prefix.
Unique local (fd00::/8). The IPv6 equivalent of private addressing, but without NAT. A router can hand out a unique-local prefix for internal traffic while global addresses handle the internet. The range is not routed on the public internet.
Why /64 is the normal subnet size
SLAAC builds the interface identifier from 64 bits. If the subnet prefix were shorter, the host would have fewer than 64 bits for the identifier, and the standard method of forming it no longer applies cleanly. A /64 gives every subnet more addresses than the entire IPv4 internet, so there is no pressure to conserve. Subnets smaller than /64 exist for point-to-point links and some special cases, but a LAN that expects SLAAC uses /64. A Windows machine that receives a router advertisement with a different prefix length may still form an address, but the behaviour depends on the router’s flags and is not the normal configuration.
SLAAC and router advertisements
When an interface comes up, Windows sends a router solicitation to the all-routers multicast address ff02::2. The router replies with a router advertisement containing the prefix, the prefix length, the default route, and flags. Windows combines the advertised prefix with its own interface identifier and configures a global address. No DHCP server is involved.
The advertisement also carries a lifetime. When it expires, the address is deprecated and eventually removed. A router that stops advertising causes addresses to age out, which is why a machine can lose its global address while the link-local address remains.
Where DHCPv6 fits
DHCPv6 can supply addresses, but in most networks it supplies only information the router advertisement does not carry, such as DNS servers. The router advertisement has two flags that control this: the managed flag tells hosts to use DHCPv6 for addresses, and the other-config flag tells them to use it for other settings. A network can run SLAAC for addresses and DHCPv6 for DNS, which is common. A network can also run stateful DHCPv6 for addresses, which is closer to the IPv4 model but not the default.
To see what a Windows machine received, run:
netsh interface ipv6 show interface
The output lists each interface with its index, metric, MTU and state. An interface in Disconnected state will not process advertisements. The index is the number used in the % suffix of a link-local address.
netsh interface ipv6 show route
The output shows the routing table. A default route (::/0) via a link-local next hop means the machine has a router. The absence of that route means the machine has an address but no path off the segment.
No NAT, so the firewall does the work
IPv4 networks commonly hide hosts behind one public address using NAT. IPv6 gives each host a globally routable address, so there is no address translation in the normal design. The protection that NAT incidentally provided against unsolicited inbound connections is not present. Windows Firewall, on by default, blocks inbound connections that do not match a rule. A host with a global address and the firewall disabled is reachable from the internet if the router forwards the traffic, which is a different posture from IPv4 behind NAT.
Neighbor Discovery replaces ARP
IPv4 uses ARP to map an IP address to a MAC address. IPv6 uses Neighbor Discovery, carried over ICMPv6. A host that needs a MAC address sends a neighbor solicitation to the solicited-node multicast address derived from the target address, and the target replies with a neighbor advertisement. The mapping is cached. The command to inspect the cache is:
netsh interface ipv6 show neighbors
The output lists each known neighbor with its link-layer address and state. A state of Reachable means the entry is current; Stale means it has not been confirmed recently but is still used. An empty cache on an active segment usually means no recent traffic to those hosts.
Neighbor Discovery also handles duplicate address detection. Before using an address, a host sends a solicitation for it and waits; a reply means another host already holds it. This is why a newly configured address can take a moment to become usable.
What people get wrong
The common misreading is to treat the link-local address as the machine’s address and conclude that IPv6 is not working because the fe80:: address cannot be reached from another subnet. That is a natural mistake: ipconfig lists the link-local address first, it looks like a complete address, and in IPv4 the first address listed is usually the one that matters. The link-local address is by design confined to one segment. The address that matters for off-segment traffic is the global one, and its absence points to the router advertisement, not to the host.
A second misreading is to assume that a missing DHCP server means no address. SLAAC needs no server. A machine with a global address and no DHCP lease is behaving correctly.
A third is to look for NAT and conclude that the absence of it is a security hole. The firewall is the control, and its state is visible with:
netsh advfirewall show allprofiles state
The output reports ON or OFF for the domain, private, and public profiles. A profile that is off is the condition to correct; the presence or absence of NAT is not the relevant variable.
Predicting behaviour
A machine on a segment whose router advertises a /64 prefix will form a global address, a temporary address, and keep its link-local address. A machine on a segment with no router will keep only the link-local address and will not reach anything off the segment. A machine whose router advertisement carries the other-config flag will query DHCPv6 for DNS but still form its address by SLAAC. A machine with the firewall off and a global address is reachable from outside if the path exists. Each of these follows from the mechanism, not from a setting specific to one machine.
Common questions
What does the fe80 address mean in ipconfig?
It is the link-local address, generated automatically on every IPv6-enabled interface. It is used only on the local segment for Neighbor Discovery and router communication. The %number after it is the interface index, not part of the address.
Why does my PC have multiple IPv6 addresses?
Windows configures a link-local address, a global address from the router, and a temporary privacy address for outbound traffic. They serve different purposes and all appear in ipconfig. The temporary address changes over time; the link-local address stays the same.
Do I need DHCPv6 for IPv6 to work?
No. SLAAC builds an address from the router advertisement without any server. DHCPv6 is used when the network wants to supply addresses or settings that the advertisement does not carry, such as DNS servers.
Why is IPv6 always /64?
SLAAC uses 64 bits for the interface identifier, so the subnet prefix is 64 bits in the normal case. A /64 also provides more addresses per subnet than needed, so there is no reason to use a smaller one on a LAN.
Is IPv6 less secure because there is no NAT?
NAT was not a security feature, though it incidentally blocked unsolicited inbound connections. IPv6 relies on the host firewall, which is on by default in Windows. The relevant check is the firewall profile state, not the presence of NAT.
Read next
- ARP and MAC Addresses: Finding the Hardware How a host finds the MAC behind an IP, why ARP never leaves the local network, and how a stale cache entry produces a confusing partial outage.
- Types of NAT Explained: Full Cone, Restricted, Symmetric Understand full cone, restricted cone, port restricted, and symmetric NAT. How each handles packets, and why NAT type matters for peer-to-peer connections.
- What Is NAT? Network Address Translation Explained Learn what NAT does, why it breaks inbound connections, and what it does and doesn't do for security. Understand the NAT table and common misconceptions.
- 169.254 IP Address: What APIPA Means and How to Fix It A 169.254.x.x address means DHCP failed and Windows self-assigned a link-local address. Learn the causes and the built-in repairs, in order.
- Access Denied on a Folder You Own: Fixes That Work Fix 'Access Denied' on folders you own. Understand permissions, UAC, and the correct fixes without taking ownership of system folders.