LFCE 12 ๐ง IPv6 โ Address Types and Structure
IPv6 addresses are 128-bit identifiers, four times the length of their IPv4 counterparts. That length is not merely a larger number; it is the space in which the protocol’s addressing architecture is carved. Every IPv6 address belongs to one of three typesโunicast, anycast, or multicastโand within those types, specific prefixes define scope and purpose. Unlike IPv4, there is no broadcast address in IPv6; its function is superseded by multicast . For the LFCE candidate configuring routing on Linux, understanding the address structure is not optional. The kernel assigns link-local addresses automatically, routers advertise prefixes via SLAAC, and the routing table distinguishes between global and link-local destinations. Misidentifying an address type leads to routes that appear correct but silently drop packets.
Key point: The three IPv6 address types are unicast (one interface), anycast (nearest of a group), and multicast (all of a group). Broadcast does not exist. The address structure is a 128-bit value conventionally divided into a 64-bit network prefix and a 64-bit interface identifier, though the boundary is defined by the prefix length, not the address itself. Link-local addresses (fe80::/10) are mandatory on every interface and are never forwarded by routers.
Why IPv6 addresses are structured this way
The interface-scope problem.
IPv6 addresses are assigned to interfaces, not to nodes . A single interface may carry multiple addresses of different types and scopes simultaneously: a link-local address for neighbor discovery, a global unicast address for internet reachability, and membership in several multicast groups. This model differs from the IPv4 habit of thinking in terms of “the host’s address.” A Linux router with three interfaces has at least three link-local addresses, one per interface, plus any global addresses configured. The structure reflects this: each address identifies a specific interface’s presence on a specific link or in a specific global scope.
The autoconfiguration problem.
IPv6 was designed for networks that could not rely on a DHCP server for every device. Stateless Address Autoconfiguration requires that a host be able to construct a complete address from two pieces: a network prefix learned from a router advertisement, and an interface identifier generated locally . The conventional split at 64 bits exists because the interface identifier was historically derived from the 48-bit MAC address expanded to 64 bits via EUI-64, and the prefix length was standardized at /64 to accommodate it. While privacy extensions now generate random interface identifiers rather than MAC-derived ones, the /64 boundary remains the operational convention for SLAAC networks .
The hierarchy problem.
IPv6’s 128-bit space allows for aggregation that IPv4 could not achieve. The global unicast space is 2000::/3, and within it, the five Regional Internet Registries receive /12 allocations: APNIC 2400::/12, ARIN 2600::/12, AfriNIC 2C00::/12, LACNIC 2800::/12, and RIPE NCC 2A00::/12 . A service provider receives a /32 from its RIR, allocates /48s to customers, and each customer uses /64s for subnets. This hierarchy allows the global routing table to carry aggregates rather than individual customer prefixes.
a. Unicast addresses โ global, link-local, and unique local
Unicast addresses identify a single interface. A packet sent to a unicast address is delivered to the interface identified by that address . IPv6 defines several unicast scopes, each with a distinct prefix.
Global unicast addresses are the publicly routable addresses. The prefix is 2000::/3, covering the range from 2000:: through 3fff:ffff:... . These addresses are allocated hierarchically from IANA through the RIRs to ISPs and end sites. A global unicast address is globally unique and can be routed across the internet.
# Assign a global unicast address to an interface
# The /64 prefix is the standard subnet size for SLAAC compatibility
ip -6 addr add 2001:db8:1::1/64 dev eth0
# The address is globally scoped
# Routers forward packets to and from this address
Link-local addresses are confined to a single link. The prefix is fe80::/10, and every interface is required to have at least one . A router must not forward packets with link-local source or destination addresses. These addresses are used for neighbor discovery, router advertisement processing, and communication between devices on the same segment when no global address is configured.
# Link-local addresses are generated automatically when IPv6 is enabled
# They are not configured manually in normal operation
ip -6 addr show dev eth0 | grep fe80
# Output: inet6 fe80::a00:27ff:fe4e:66a1/64 scope link
# The scope link designation confirms this address is link-local
# A ping to a link-local address must specify the interface
ping -6 -I eth0 fe80::a00:27ff:fe4e:66a1
Unique local addresses occupy fc00::/7 and serve as the IPv6 equivalent of IPv4 private addressing . They are not routable on the global internet, but they are unique within an organization or set of organizations. Unlike the deprecated site-local addresses (fec0::/10), unique local addresses are not intended to be automatically configured; they are assigned administratively for internal networks that need stable addressing without global reachability.
b. Multicast and anycast addresses
Multicast addresses identify a group of interfaces. A packet sent to a multicast address is delivered to all interfaces that have joined that group . The prefix is ff00::/8. Multicast replaces broadcast entirely: there is no address that reaches every device on a link by default. Instead, specific multicast groups serve specific purposes.
# The all-nodes multicast address ff02::1 reaches every IPv6 device on the link
ping -6 -c 2 ff02::1%eth0
# The %eth0 is required because multicast addresses have link scope
# The all-routers multicast address ff02::2 reaches every router on the link
# Routers join this group automatically when IPv6 forwarding is enabled
Every interface joins the solicited-node multicast group for each unicast address it possesses. The solicited-node address is formed from the prefix ff02::1:ff00:0/104 and the last 24 bits of the unicast address . Neighbor Discovery uses this group to reach a specific device without disturbing every device on the link.
Anycast addresses identify a group of interfaces, but a packet sent to an anycast address is delivered to only one member: the nearest according to the routing protocol’s metric . Anycast is not a separate address format; it is a use of a unicast address assigned to multiple interfaces. The Linux kernel does not implement anycast address configuration directly, though anycast routing can be achieved through other mechanisms . The root DNS servers are the most prominent example of anycast deployment.
c. The address structure and notation
An IPv6 address is written as eight groups of four hexadecimal digits, separated by colons. Each group represents 16 bits.
# Full notation: eight groups of four hex digits
2001:0db8:0000:0000:0000:0000:0000:0001
# Leading zeros within each group are optional
2001:db8:0:0:0:0:0:1
# A single run of zero groups is compressed with ::
2001:db8::1
# The loopback address is ::1
# The unspecified address is ::
The :: compression can appear only once in an address because its position would otherwise be ambiguous . The loopback address ::1/128 is assigned to the loopback interface and is never forwarded. The unspecified address ::/128 indicates the absence of an address and is used only as a source address during autoconfiguration before the host has learned its own address .
The structure within a global unicast address is conventionally divided at the /64 boundary:
# A global unicast address with /64 prefix
# 2001:db8:1::1/64
# โโ Global routing prefix: 2001:db8:1::/48 (assigned by ISP)
# โโ Subnet ID: 0 (the 16 bits between /48 and /64)
# โโ Interface ID: ::1 (the low 64 bits)
# The /64 boundary is the standard for SLAAC
# The interface ID can be MAC-derived, random, or manually assigned
The subnet ID occupies up to 16 bits between the /48 site prefix and the /64 interface identifier. This gives each site 65,536 possible subnets, each with 2^64 possible interface identifiers . The interface ID identifies a specific interface within the subnet and must be unique within that subnet.
Complete Example Session
# ============================================
# PART 1: EXAMINE ALL ADDRESSES ON AN INTERFACE
# ============================================
# Every interface has at least one link-local address
# It may also have a global address and multicast memberships
ip -6 addr show dev eth0
# Output includes:
# inet6 2001:db8:1::1/64 scope global
# inet6 fe80::a00:27ff:fe4e:66a1/64 scope link
# inet6 ff02::1:ff4e:66a1/128 scope link (solicited-node multicast)
# ============================================
# PART 2: IDENTIFY ADDRESS TYPES BY PREFIX
# ============================================
# 2001:db8:1::1/64 โ global unicast (2000::/3)
# fe80::.../64 โ link-local (fe80::/10)
# ff02::.../128 โ multicast (ff00::/8)
# ::1/128 โ loopback
# ::/128 โ unspecified
# ============================================
# PART 3: TEST LINK-LOCAL CONNECTIVITY
# ============================================
# Link-local addresses require an interface specifier
# The %eth0 tells the kernel which link to use
ping -6 -c 2 fe80::a00:27ff:fe4e:66a1%eth0
# ============================================
# PART 4: TEST GLOBAL CONNECTIVITY
# ============================================
# Global addresses do not require an interface specifier
ping -6 -c 2 2001:db8:1::2
# ============================================
# PART 5: EXAMINE MULTICAST GROUP MEMBERSHIP
# ============================================
# The kernel joins multicast groups automatically
ip -6 maddr show dev eth0
# Output includes ff02::1 (all-nodes) and ff02::1:ff4e:66a1
# (solicited-node for the link-local address)
# ============================================
# PART 6: CALCULATE THE SOLICITED-NODE ADDRESS
# ============================================
# The solicited-node address is ff02::1:ff00:0/104
# plus the last 24 bits of the unicast address
# Link-local: fe80::a00:27ff:fe4e:66a1
# Last 24 bits: 4e:66a1 โ 4e66a1
# Solicited-node: ff02::1:ff4e:66a1
# This matches the kernel's multicast membership
# ============================================
# PART 7: CONFIGURE A UNIQUE LOCAL ADDRESS
# ============================================
# Unique local addresses use fc00::/7
# They are not globally routable but are unique within an organization
ip -6 addr add fd00:1::1/64 dev eth1
# fd00::/8 is the locally assigned portion of fc00::/7
# ============================================
# PART 8: VERIFY ADDRESS SCOPES
# ============================================
# The scope of an address determines where it can be used
# link scope: confined to the local link
# global scope: routable across the internet
ip -6 addr show | grep -E "scope (link|global)"
# ============================================
# PART 9: CHECK ROUTING FOR DIFFERENT SCOPES
# ============================================
# A route to a link-local address uses the interface directly
ip -6 route get fe80::1%eth0
# Output: fe80::1 dev eth0 (no gateway; on-link)
# A route to a global address uses the default gateway
ip -6 route get 2001:db8:2::1
# Output: 2001:db8:2::1 via 2001:db8:1::ffff dev eth0
# ============================================
# PART 10: DISABLE IPv6 ON A SINGLE INTERFACE
# ============================================
# The kernel parameter controls IPv6 per interface
sysctl -w net.ipv6.conf.eth1.disable_ipv6=1
# This removes all IPv6 addresses from eth1, including link-local
# The interface still functions for IPv4
The ten parts demonstrate the address types in practice: link-local addresses generated automatically, global addresses configured explicitly, multicast memberships joined by the kernel, and scopes that determine routing behavior. The solicited-node calculation in Part 6 shows how multicast addresses are derived from unicast addresses.
Quick Reference
IPv6 Address Types and Prefixes
| Type | Prefix | Scope | Purpose |
|---|---|---|---|
| Global unicast | 2000::/3 | Global | Publicly routable addressing |
| Link-local | fe80::/10 | Link | Neighbor discovery, on-link communication |
| Unique local | fc00::/7 | Site/Organization | Private addressing (analogous to RFC 1918) |
| Multicast | ff00::/8 | Various | Group communication |
| Loopback | ::1/128 | Local host | Local testing |
| Unspecified | ::/128 | None | Source address before autoconfiguration |
| IPv4-mapped | ::ffff:0:0/96 | โ | Represent IPv4 addresses in IPv6 format |
Special Multicast Addresses
| Address | Group | Purpose |
|---|---|---|
ff02::1 | All-nodes | Every IPv6 device on the link |
ff02::2 | All-routers | Every IPv6 router on the link |
ff02::1:ff00:0/104 | Solicited-node | Neighbor Discovery reachability |
Address Structure at /64
| Field | Bits | Purpose |
|---|---|---|
| Global routing prefix | 48 | Assigned by ISP/RIR |
| Subnet ID | 16 | Local subnet allocation |
| Interface ID | 64 | Unique identifier within subnet |
Best Practices
โ Do This:
# Verify link-local addresses exist before troubleshooting
ip -6 addr show | grep fe80 # โ
# Use /64 for all LAN subnets to preserve SLAAC compatibility
ip -6 addr add 2001:db8:1::1/64 dev eth0 # โ
# Specify the interface when pinging link-local addresses
ping -6 -I eth0 fe80::1 # โ
# Check multicast membership to verify kernel behavior
ip -6 maddr show dev eth0 # โ
# Use unique local addresses for internal-only networks
ip -6 addr add fd00:1::1/64 dev eth1 # โ
# Understand that anycast is a routing concept, not a format
# The Linux kernel does not configure anycast addresses directly # โ
โ Don’t Do This:
# Assume an interface has no IPv6 because it was not configured
# Link-local addresses are automatic # โ
# Use a prefix shorter than /64 on a SLAAC network
# SLAAC requires 64-bit interface identifiers # โ
# Ping a link-local address without an interface specifier
ping6 fe80::1 # Fails: kernel does not know which link # โ
# Expect broadcast to work
# IPv6 has no broadcast; use multicast instead # โ
# Configure anycast addresses on Linux
# The kernel does not support direct anycast configuration # โ
# Ignore the scope of an address
# A link-local address in a route table entry is a special case # โ
Common Pitfalls
| Pitfall | Why It Happens | Fix |
|---|---|---|
| Cannot ping link-local address | No interface specifier (%eth0) | Add -I eth0 or %eth0 |
| SLAAC fails to configure address | Prefix not /64 | Use /64 for LAN subnets |
| Route to global address fails | No default route or gateway unreachable | Verify ip -6 route |
| Multicast ping reaches all devices | ff02::1 is all-nodes | Use unicast for specific hosts |
| Unique local address not routable | fc00::/7 is not globally advertised | Use global unicast for internet |
| Anycast not working | Linux does not configure anycast addresses directly | Use routing protocols for anycast |
Real-World Examples
1. Global unicast address
ip -6 addr add 2001:db8:1::1/64 dev eth0
2. Link-local address (automatic)
ip -6 addr show dev eth0 | grep fe80
# Output: inet6 fe80::a00:27ff:fe4e:66a1/64 scope link
3. Unique local address
ip -6 addr add fd00:1::1/64 dev eth1
4. Loopback address
ip -6 addr show dev lo
# Output: inet6 ::1/128 scope host
5. All-nodes multicast ping
ping -6 -c 2 ff02::1%eth0
6. Solicited-node multicast membership
ip -6 maddr show dev eth0 | grep ff02::1:ff
7. Check address scope
ip -6 addr show | grep "scope link"
8. Route to link-local destination
ip -6 route get fe80::1%eth0
9. IPv4-mapped address
# ::ffff:192.168.1.1 represents an IPv4 address
# Used by dual-stack sockets
10. Unspecified address as source
# ::/128 is used before autoconfiguration completes
# Not assignable to an interface
Visual
IPv6 Address Type Prefixes
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PREFIX DETERMINES TYPE AND SCOPE โ
โ โ
โ 2000::/3 Global unicast โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ
โ โ 0010 ... โ โ
โ โ Publicly routable; allocated by RIRs to ISPs โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ fe80::/10 Link-local โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ
โ โ 1111 1110 10 ... โ โ
โ โ Automatically configured; never forwarded by routers โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ fc00::/7 Unique local โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ
โ โ 1111 110 ... โ โ
โ โ Private addressing; not globally routable โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ff00::/8 Multicast โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ
โ โ 1111 1111 ... โ โ
โ โ Group communication; replaces broadcast โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Global Unicast Address Structure
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ A /64 GLOBAL UNICAST ADDRESS โ
โ โ
โ 2001:0db8:0001:0000:0000:0000:0000:0001/64 โ
โ โโโโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ
โ โ Global โ Subnet โ Interface ID โ โ
โ โ Routing โ ID โ โ โ
โ โ Prefix โ (16 bits)โ (64 bits) โ โ
โ โ (48 bits) โ โ โ โ
โ โโโโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ Global routing prefix: assigned by ISP (typically /48) โ
โ Subnet ID: local allocation within the site โ
โ Interface ID: unique within the subnet โ
โ โ
โ The /64 boundary is the SLAAC convention. โ
โ A host combines the router-advertised /64 prefix with its โ
โ locally generated 64-bit interface ID. โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Link-Local and Multicast Relationship
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ EVERY INTERFACE HAS LINK-LOCAL AND MULTICAST MEMBERSHIPS โ
โ โ
โ Interface eth0: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Unicast addresses: โ โ
โ โ fe80::a00:27ff:fe4e:66a1/64 (link-local) โ โ
โ โ 2001:db8:1::1/64 (global) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ Multicast memberships (automatic): โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ff02::1 (all-nodes) โ โ
โ โ ff02::1:ff4e:66a1 (solicited-node for fe80) โ โ
โ โ ff02::1:ff00:1 (solicited-node for 2001) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ Solicited-node = ff02::1:ff00:0/104 + last 24 bits โ
โ of the unicast address. โ
โ โ
โ Neighbor Discovery uses this group to reach one device โ
โ without disturbing every device on the link. โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Summary
| Item | Value |
|---|---|
| Address size | 128 bits |
| Address types | Unicast, anycast, multicast (no broadcast) |
| Global unicast prefix | 2000::/3 |
| Link-local prefix | fe80::/10; mandatory on every interface |
| Unique local prefix | fc00::/7; private addressing |
| Multicast prefix | ff00::/8 |
| Loopback | ::1/128 |
| Unspecified | ::/128 |
| All-nodes multicast | ff02::1 |
| All-routers multicast | ff02::2 |
| Solicited-node multicast | ff02::1:ff00:0/104 |
| Address structure convention | /64 network prefix + /64 interface ID |
| Anycast on Linux | Not directly configurable; routing concept |
Key takeaways:
- Three types, no broadcast. Unicast identifies one interface, anycast identifies the nearest of a group, and multicast identifies all members of a group. Broadcast does not exist in IPv6; multicast serves its function .
- Link-local is automatic and mandatory. Every interface requires at least one
fe80::/10address. It is generated by the kernel and used for neighbor discovery and router communication. Routers never forward link-local traffic . - The /64 boundary is the SLAAC convention. A global unicast address is conventionally divided into a 64-bit network prefix and a 64-bit interface identifier. SLAAC requires this split to function .
- Multicast memberships are joined automatically. The kernel joins the all-nodes group (
ff02::1) and the solicited-node group for each unicast address. Neighbor Discovery uses these groups to reach specific devices without broadcasting . - Unique local addresses are not site-local. The deprecated
fec0::/10prefix was replaced byfc00::/7. Unique local addresses are administratively assigned and not globally routable . - Anycast is a routing concept, not an address format. An anycast address is a unicast address assigned to multiple interfaces. The Linux kernel does not configure anycast addresses directly; anycast routing is achieved through other mechanisms .
Remember: IPv6 addresses are not just longer IPv4 addresses. The type and scope are encoded in the prefix, and the structure reflects the protocol’s design for autoconfiguration and hierarchical routing. Link-local addresses are the foundation of neighbor discovery and are present on every interface whether you configure them or not. Global unicast addresses provide reachability and are allocated in a hierarchy that keeps the routing table manageable. Multicast replaces broadcast and is joined automatically by the kernel. When you read an IPv6 address, the first bits tell you what kind of address it is and where it can be used.
Stop using slow, ad-bloated tool sites! ๐คฎ
๐ Search “KandZ Tools” on Google to use many professional utilities for free.
KandZ.me is the ultimate minimalist hub for:
โ
Finance (Mortgage, Interest, Inflation)
โ
Tech (Base64, JSON, Dev Suite, IP)
โ
Health (BMI, BMR, TDEE)
โ
Productivity (Timer, Workspace, QR)
โก๏ธ Fast & Private
๐ No data leaves your device
๐ 100% Free
๐ Use it now: https://tools.kandz.me
๐ Bookmark itโyouโll need it later!