Dual Stack simply means we’re running IPv4 and IPv6 protocol stacks at the same time on the same devices. IPv4 applications use the IPv4 stack, and IPv6 applications use the IPv6 stack. If an application is both IPv4 and IPv6 capable, typically it will prefer IPv6 by default.
Dual Stack runs IPv4 and IPv6 in parallel on the same existing hardware. They are both configured on the same interfaces and the protocols run independently of each other. For example, they have completely separate:
- High Availability (HA)
- Quality of Service (QoS)
- Multicast Policies
- And more
When creating packets, the lower layers pass along the value for the version field in the IP Header. A value of four for IPv4 and six for IPv6.
When sending the packets, the upper layers determine whether the address type will be IPv4 or IPv6.
DNS and Dual Stack
The address type usually comes from DNS Lookups.
If a Lookup returns only an IPv4 address type, IPv4 will be used. Likewise, if only an ipv6 address type is returned IPv6 will be used. If both IPv4 and IPv6 address types are returned, IPv6 will be preferred. RFC6555 - Happy Eyeballs: Success with Dual-Stack Hosts is concerned with reducing user-visible delay because it believes that it would harm the user’s experience. Harming the the user experience would in turn slow the acceptance of IPv6. Happy Eyeballs also describes what happens if DNS returns both IPv4 and IPv6 address types. Here is a summary:
The process starts when a host requests an IP address for the name of a web site (Name Resolution) from a DNS server. The DNS server then replies to the Dual Stack host with both an IPv4 address (A record) and an IPv6 address (AAAA record).
The host will try the IPv6 address first. If the host doesn’t connect with the web site within 300 milliseconds, it will try to connect with the IPv4 address.
The first to connect will be used to service the connection to the web site. The result is that the user either has better performance or a 300ms delay than they would have had with their legacy IPv4 only. Of course, the 300 ms delay is to fast for the user to notice.
Pro Tip: The host operating system and/or application can override the process that is used by Happy Eyeballs.
To transition to IPv6, the goal to run the entire network as Dual Stack (or Dual Stack areas with IPv6-only areas) before removing IPv4 completely. Dual Stack should be considered first, before translation and tunneling technologies. Dual Stack is scalable and offers the best performance. It doesn’t require encapsulation and lookup overhead like Translation and Tunneling technologies do. It’s the best long-term solution and has the widest support and options for both IPv4 and IPv6 address families.
While Dual Stack is preferred, transitioning to Dual Stack in one maintenance window is usually unrealistic. It takes more time to deploy as there are two sets of everything...addressing, routing protocols, Access Control Lists (ACLs), management, etc. For the same reasons, supporting Dual Stack has higher operational costs. There may also be some devices that don’t run IPv6 and need to be upgraded. Translation or Tunneling technologies can be used to ease the transition, but should be used as a temporary solution.
Pro Tip: Check to make sure all devices support IPv6 at the beginning of the project.
Other Related Material
RFC 3493: Basic Socket Interface Extensions for IPv6
RFC 3596: DNS Extensions to Support IP Version 6
RFC 4213: Basic Transition Mechanisms for IPv6 Hosts and Routers
RFC 4241: A Model of IPv6/IPv4 Dual Stack Internet Access Service
RFC 4477: Dynamic Host Configuration Protocol (DHCP): IPv4 and IPv6 Dual-Stack Issues