IPv6 Addressing
IPv4 Limitations
IPv4 uses 32-bit addresses, which provides roughly 4.3 billion unique addresses. That sounded enormous in 1981 when IPv4 was designed — but with billions of phones, laptops, servers, and IoT devices online today, the address space ran out years ago. The Internet has worked around the shortage with techniques like NAT and private addressing, but those are workarounds, not a long-term fix.
IPv6 was designed to solve this permanently. It uses 128-bit addresses, providing approximately 340 undecillion addresses (340 followed by 36 zeros) — enough to assign a unique address to every grain of sand on Earth many times over.
undecillion
IPv6 isn't just bigger — it removes things IPv4 needed as crutches. There is no NAT requirement (every device can have a real, globally routable address), no broadcast (replaced by efficient multicast), and built-in support for autoconfiguration (SLAAC) so devices can self-assign an address without a DHCP server.
IPv4 and IPv6 will coexist for a long time. Common transition mechanisms include dual-stack (running both protocols simultaneously on the same device — the most common and recommended approach), tunneling (encapsulating IPv6 packets inside IPv4 to cross IPv4-only infrastructure), and translation (NAT64, which converts between IPv6 and IPv4 packets at the network edge).
IPv6 Address Representation
An IPv6 address is written as eight groups of four hexadecimal digits, separated by colons. Each group represents 16 bits, for a total of 128 bits (8 × 16 = 128).
Full (unabbreviated) IPv6 address: 2001:0db8:0000:0000:0000:ff00:0042:8329 Each of the 8 groups = 16 bits (4 hex digits) Total: 8 × 16 = 128 bits
Two rules make IPv6 addresses much shorter to write in practice:
Original: 2001:0db8:0000:0000:0000:ff00:0042:8329 Step 1 — drop leading zeros in each group: 2001:db8:0:0:0:ff00:42:8329 Step 2 — compress the contiguous all-zero run with :: 2001:db8::ff00:42:8329 ! Both addresses below are valid but only one "::" is allowed per address CORRECT: 2001:db8::1:0:0:1 INVALID: 2001:db8::1::1 (two "::" — ambiguous, cannot be expanded)
IPv6 Address Types
IPv6 defines three types of communication, similar in concept to IPv4 but with one key difference: IPv6 has no broadcast. Its role is filled by multicast instead.
Within unicast, there are several important address types to know for the exam:
GUA and LLA Static Configuration
IPv6 addresses can be configured manually on a Cisco router, just like IPv4 — using ipv6 address instead of ip address. The prefix length is always specified with a slash, never as a separate dotted-decimal mask.
! Configure a static Global Unicast Address (GUA) R1(config)# interface GigabitEthernet0/0 R1(config-if)# ipv6 address 2001:db8:acad:1::1/64 R1(config-if)# no shutdown ! Configure a custom static Link-Local Address (optional — auto-generated by default) R1(config-if)# ipv6 address FE80::1 link-local ! Enable IPv6 routing globally (required for the router to forward IPv6 packets) R1(config)# ipv6 unicast-routing ! Verify R1# show ipv6 interface brief GigabitEthernet0/0 [up/up] FE80::1 2001:DB8:ACAD:1::1
ipv6 unicast-routing is enabled globally. This is a one-time global command, not per-interface — easy to forget, and a very common cause of "IPv6 configured but not working" on the exam and in real labs.Dynamic Addressing for IPv6 GUAs
IPv6 hosts can obtain a Global Unicast Address automatically, without manual configuration, through three different methods — each offering a different balance of automation and control.
The router signals which method to use through flags in its Router Advertisement (RA): the M flag (Managed) tells hosts to use stateful DHCPv6, and the O flag (Other) tells hosts to use stateless DHCPv6 for additional options.
When using SLAAC, the host needs a unique interface ID for the last 64 bits of its address. There are two ways to generate it:
EUI-64 Process — derives interface ID from the 48-bit MAC address: MAC Address: 00:1A:2B:3C:4D:5E Step 1 — split MAC in half, insert FFFE in the middle: 001A:2BFF:FE3C:4D5E Step 2 — flip the 7th bit of the first byte (Universal/Local bit): Result: 021A:2BFF:FE3C:4D5E Randomly Generated — modern OSes (Windows, macOS, Linux) default to this for privacy: a random 64-bit interface ID, changed periodically, so the device cannot be tracked across networks by a fixed MAC-derived address.
Dynamic Addressing for IPv6 LLAs
Unlike a GUA, a Link-Local Address is generated automatically the instant IPv6 is enabled on an interface — no router, no RA, no configuration required. This is what allows two devices on the same link to communicate using IPv6 even with zero manual setup.
On Windows, the dynamic LLA uses a randomly generated interface ID by default (for privacy). On Cisco routers, the dynamic LLA is generated using the EUI-64 process based on the interface's MAC address, unless manually overridden.
R1# show ipv6 interface GigabitEthernet0/0 GigabitEthernet0/0 is up, line protocol is up IPv6 is enabled, link-local address is FE80::21A:2BFF:FE3C:4D5E Global unicast address(es): 2001:DB8:ACAD:1::1, subnet is 2001:DB8:ACAD:1::/64 Joined group address(es): FF02::1 (all-nodes multicast) FF02::2 (all-routers multicast) FF02::1:FF3C:4D5E (solicited-node multicast) ! Quick brief view, same idea as "show ip interface brief" R1# show ipv6 interface brief
Subnet an IPv6 Network
IPv6 subnetting is conceptually simpler than IPv4 because address space is no longer scarce. Most organizations are assigned a /48 prefix and use the next 16 bits — bits 49 through 64 — as the Subnet ID, leaving the remaining 64 bits as the Interface ID for hosts.
2001 : 0DB8 : ACAD : 0001 : 0000 : 0000 : 0000 : 0001 └──────── Global Routing Prefix ────────┘ └ Subnet ID ┘ └──────── Interface ID ────────┘ (48 bits, assigned by ISP) (16 bits) (64 bits, host portion) Example: 2001:db8:acad:0001::/64 — this whole block is one subnet for one VLAN
With 16 bits available for the Subnet ID, an organization with a /48 can create up to 65,536 subnets (2^16), each one a full /64 — far more than any IPv4 allocation would ever allow, and with no need to calculate usable host ranges, since 2^64 addresses per subnet is effectively limitless.
Assigned prefix: 2001:db8:acad::/48 VLAN 10 (Sales): 2001:db8:acad:10::/64 VLAN 20 (Engineering): 2001:db8:acad:20::/64 VLAN 30 (Management): 2001:db8:acad:30::/64 WAN link 1: 2001:db8:acad:100::/64 ! Each /64 subnet's Subnet ID is just the hex value in the 4th group ! No subnet-mask math required — every subnet is uniformly /64
2001:0db8:0000:0000:0008:0800:200c:417aTask 2 — Expand: Write the full (uncompressed) form of
fe80::42:acff:fe11:2Task 3 — Identify: Is
2001:db8::1::1 a valid IPv6 address? Why or why not?
💡 Show answers
- Task 1:
2001:db8::8:800:200c:417a— drop leading zeros, then compress the single all-zero run - Task 2:
fe80:0000:0000:0000:0042:acff:fe11:0002— expand "::" to the correct number of zero groups, then pad each group to 4 hex digits - Task 3: Invalid — it contains two "::" occurrences, which is never allowed since the address becomes ambiguous (impossible to know how many zero groups go in each gap)