Initially, the address space of 4,294,967,296 possible addresses (232) seemed inexhaustible and the address space was generously segmented and assigned. Back then, such thinking seemed reasonable because nobody expected the exponential growth of the internet or such a large number of connected devices. Nowadays, we are facing the depletion of the IPv4 address space, which was predicted years ago. The need for a solution to this problem led to development of the sixth generation of the IP protocol – IPv6. The IPv4 address is 32 bits long, while IPv6 uses 128-bit long addresses. Compared to IPv4, IPv6 has a four times larger address space of 2128, or 340,282,366,920,938,463,463,374,607,431,768,211,456 addresses. This is significantly more than IPv4; however, IPv6 was not designed solely with host addressing in mind, but also to be able to accommodate newer 64-bit macOS addresses.
Configuring IPv6 addressing
Converting from binary to hexadecimal notation
IPv4 addressing uses decimal notation and IPv6 uses hexadecimal notation, where the 128-bit address is divided into 16-bit chunks.
For example, the following number is a binary form of an IPv6 address:
00111101101011110010000000001011000000000000010000111100111100100100000011111110000000000000000001010000111111101111111110101011
The 128-bit-long binary address number is divided into 16-bit-long chunks, as follows:
0011110110101111 0010000000001011 0000000000000100 0011110011110010 0100000011111110 0000000000000000 0101000011111110 1111111110101011
Each binary chunk is then converted to a hexadecimal format and the blocks are separated by colons:
3DAF:200B:0004:3CF2:40FE:0000:50FE:FFAB
The following table shows the decimal values and their corresponding hexadecimal and binary values:
Zero suppression
IPv6 addresses are quite large; therefore, when multiple contiguous blocks of zeros occur, these can be shortened or substituted with a double colon, (::), which simplifies the address notation. For example, a contiguous block of zeros in the 3DAF:200B:0004:3CF2:40FE:0000:50FE:FFAB address can be shortened to a single zero, such as 3DAF:200B:0004:3CF2:40FE:0:50FE:FFAB, or by a double colon: 3DAF:200B:0004:3CF2:40FE::50FE:FFAB.
You can suppress the leading zeros of the 16-bit block as well, for example, 3DAF:200B:4:3CF2:40FE::50FE:FFAB.
Furthermore, only 16-bit contiguous blocks can be substituted or suppressed, and not parts of the 16-bit block; for instance, the FF04:30:0:0:0:0:0:4 address cannot be compressed to FF04:3::4. The unicast FF02:0:0:0:0:0:0:3 IPv6 address, on the other hand, can be shortened to FF02::3.
Similar to IPv4 address types, IPv6 also has different address types:
- Unicast: This address type represents a single interface or a node. It is used in one-to-one communications where one interface sends packets to a single receiver.
- Multicast: This address type represents multiple interfaces. It is used in a one-to-many communication model, where one sender sends packets to multiple recipients or interfaces on a network.
- Anycast: This address type represents multiple interfaces. It is used in a one-to-many-to-one communication model, where a sender sends a packet to multiple interfaces but a single interface is the recipient of the message. The one recipient that receives the message is defined as the nearest, being the one that is closest in terms of routing distance.
There are also other types of IPv6 addresses, as follows:
- Global unicast: Similar to IPv4 public addresses, these addresses are globally routable and reachable.
- Link-local: Hosts use link-local addresses to communicate with other hosts on the same network. The first 10 bits of a link-local address are always 1111 1110 10, and the next 54 bits of a network address are always 0. The remaining 65 bits are interface ID bits that identify the host within a LAN. This creates the address prefix of fe80::/64.
- Site-local: These addresses are the same as the IPv4 private addresses. They can be used with private networks that do not have a direct IPv6 connection, and they can be used in addition to global addresses.
- Unique local: The unique local addresses are not routable on the internet, but they are routable between private network subnets.
- Special IPv6 address: These networks are reserved for special uses and purposes.
- Transition addresses: These addresses support the transition from IPv4 to IPv6:
- IPv4-compatible address: This address type uses the 0:0:0:0:0:0:w.x.y.z or ::w.x.y.z format, where w.x.y.z is the dotted decimal IPv4 address notation. This type of address uses nodes that communicate with both IPv4 and IPv6 protocols.
- IPv4-mapped address: This type of address uses IPv4-only nodes that can communicate with IPv6 nodes.
- 6to4 address: This type of address is used in communications between two nodes over the internet; the nodes use both IPv4 and IPv6.
For a better understanding of the relationship between IPv4 and IPv6, the following table compares the networking concepts and terminology of both standards:
IPv6 autoconfiguration
One of the advantages of IPv6 over IPv4 is the capability to autoconfigure the client in the absence of the DHCP server. Although there is such a thing in IPv4 as autoconfiguration or Automatic Private IP Addressing (APIPA), it provides only local connectivity with no routing support. On the other hand, IPv6 autoconfiguration enables the IPv6 host to automatically configure itself without using an addressing protocol, such as DHCP for IPv6 or DHCPv6. By using IPv6 autoconfiguration, the IPv6 host can also autoconfigure other IPv6 addressing settings such as configuration parameters and the addresses of routers. Specifically, IPv6 autoconfiguration is specified in RFC 4862.
Autoconfiguration address states
There are three possible autoconfiguration address states, as follows:
- If an IPv6 node has an address autoconfiguration state that is invalid, then it can no longer receive or send unicast traffic. When an address lifetime expires, it enters the invalid state.
- If an IPv6 node has an address autoconfiguration state that is valid, then it means that it can send and receive unicast traffic. The Router Advertisement message determines the period that an address can exist in the valid state. The valid state itself can be preferred or deprecated. The address state is always equal to or greater than the preferred lifetime.
- If a node's address has been verified and it is unique, then the address enters the valid preferred state. A node can communicate on the network and can send and receive packets for the period of validity determined by the Router Advertisement message, that is, the time an address remains in the preferred and tentative states.
- If a node has a valid but deprecated address, it can still communicate and use the deprecated address, but this address is discouraged for new communications.
Autoconfiguration types
There are three autoconfiguration types, as follows:
- Autoconfiguration is completed through an address configuration protocol, such as Dynamic Host Configuration Protocol v6 (DHCPv6). The autoconfiguration is stateful if a node gets configuration through Router Advertisement messages. This does not include the address prefixes that require the host to use and address the configuration protocol.
- Autconfiguration is stateful if a node has obtained an address through the Router Advertisement message and the address includes stateless address prefixes.
- Stateful and stateless autoconfiguration types; the host receives Router Advertisement messages that require hosts to use the address configuration protocol and includes stateless address prefixes.
The autoconfiguration process
An address autoconfiguration for an IPv6 host is performed and described in the following steps:
- A host sends a Router Solicitation message.
- If a host receives a Router Solicitation message, then it is configured using the information obtained in this message.
- If a host does not receive a Router Solicitation message, then it can use the address configuration protocol (DHCPv6) to configure itself with the address and other configuration parameters.
- The stateless address prefix and the 64-bit address identifier are both used to obtain a tentative address. The existence of a duplicate tentative address is verified during the process. If an address is not a duplicate, and, therefore, not in use, the address is initialized and a host obtains valid and preferred lifetimes in the Router Advertisement message.
Similar to DHCP for the configuration of IPv4 addresses, DHCPv6 also uses UDP messages, which DHCPv6 servers and relay agents listen for on UDP port 547. Unlike DHCP for IPv4, DHCPv6 has no broadcast addresses or messages.
The list of valid DHCPv6 messages and their comparison to DHCP IPV4 messages is shown in the following table:
DHCPv6 message | Description | DHCPv4 Equivalent |
Solicit | This is sent by a client to locate servers. | DHCPDISCOVER |
Advertise | This is sent by a server in response to a Solicit message to indicate availability. | DHCPOFFER |
Request | This is sent by a client to request addresses or configuration settings from a specific server. | DHCPREQUEST |
Confirm | This is sent by a client to all servers to determine whether a client's configuration is valid for the connected link. | DHCPREQUEST |
Renew | This is sent by a client to a specific server to extend the lifetimes of assigned addresses and obtain updated configuration settings. | DHCPREQUEST |
Rebind | This is sent by a client to any server when a response to the Renew message is not received. | DHCPREQUEST |
Reply | This is sent by a server to a specific client in response to a Solicit, Request, Renew, Rebind, Information-Request, Confirm, Release, or Decline message. | DHCPACK |
Release | This is sent by a client to indicate that the client is no longer using an assigned address. | DHCPRELEASE |
Decline | This is sent by a client to a specific server to indicate that the assigned address is already in use. | DHCPDECLINE |
Reconfigure | This is sent by a server to a client to indicate that the server has new or updated configuration settings. The client then sends either a Renew or Information-Request message. | N/A |
Information-Request | This is sent by a client to request configuration settings (but not addresses). | DHCPINFORM |
Relay-Forward | This is sent by a relay agent to forward a message to a server. The Relay-Forward message contains a client message encapsulated as the DHCPv6 Relay-Message option. | N/A |
Relay-Reply | This is sent by a server to send a message to a client through a relay agent. Relay-Reply contains a server message that is encapsulated as the DHCPv6 Relay-Message option. | N/A |
Implementing IPv6 stateless addressing
A typical DHCPv6 stateful host configuration includes the following exchange of messages in the process of obtaining an IPv6 address and configuration settings:
- A client sends a Solicit message to locate the servers.
- A server sends an Advertise message to indicate whether it is capable of providing IPv6 configuration settings and addresses.
- A client sends a Request message to a server to request configuration settings and an address.
- A server sends a Reply message that contains configuration settings and an address.
To configure a Windows Server 2016 DHCP role as a stateless DHCPv6 server, follow the following steps: