<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-v6ops-ipv6-app-testing-00" category="bcp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="ipv6-app-testing">Testing Applications' IPv6 Support</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-ipv6-app-testing-00"/>
    <author fullname="Philipp S. Tiesel">
      <organization>SAP SE</organization>
      <address>
        <email>philipp@tiesel.net</email>
        <email>philipp.tiesel@sap.com</email>
      </address>
    </author>
    <author fullname="Jen Linkova">
      <organization>Google</organization>
      <address>
        <email>furry13@gmail.com</email>
        <email>furry@google.com</email>
      </address>
    </author>
    <author fullname="Kyle Ouellette">
      <organization abbrev="UNH-IOL">University of New Hampshire Interoperability Labs</organization>
      <address>
        <email>kouellette@iol.unh.edu</email>
      </address>
    </author>
    <author fullname="Ben Patton">
      <organization abbrev="UNH-IOL">University of New Hampshire Interoperability Labs</organization>
      <address>
        <email>bpatton@iol.unh.edu</email>
      </address>
    </author>
    <date year="2025" month="December" day="16"/>
    <area>Operations and Management</area>
    <workgroup>v6ops</workgroup>
    <keyword>IPv6</keyword>
    <keyword>Applications</keyword>
    <keyword>Testing</keyword>
    <abstract>
      <?line 98?>

<t>This document provides guidance for application developers and software as a service providers on how to approach IPv6 testing in Dual-Stack (IPv4+IPv6), and IPv6-only scenarios, including "true IPv6-only" scenarios.
It discusses common misconceptions about the degree to which operating systems and libraries can abstract IPv6 issues away
and explains common regressions to avoid when deploying IPv6 support.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-v6ops-ipv6-app-testing/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-v6ops/draft-itef-v6ops-ipv6-app-testing"/>.</t>
    </note>
  </front>
  <middle>
    <?line 105?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>For the last 20 years, enabling applications for IPv6 has focused on coexistence with IPv4 and allowing traffic to shift towards IPv6 without breaking IPv4 operation.
This target has changed in part due to a series of national regulations mandating state entities to proceed in the migration to IPv6, e.g., in
China <xref target="CAC-2023"/>, the United States of America <xref target="US-OMB-M-21-07"/>, Germany <xref target="DE-BIT-2020-14"/>, and the Czech Republic <xref target="CZ-ENDv4"/>.
IPv6 support today means being fully functional in the absence of IPv4 and transition technologies providing connectivity to the IPv4 Internet.
Therefore, today's applications are expected to function regardless of whether they are used in an IPv4-only environment, a Dual-Stack environment, or an IPv6-only environment, with or without connectivity to the IPv4 Internet. To achieve this, applications need to be verified against all these scenarios.</t>
      <t>While the availability of IPv6 support in applications has a considerable impact on the success of IPv6,
there exists no documented best current practices how to do so.
Testing IPv6 compliance of network gear and operating systems has been documented extensively.
While the IETF does not define compliance tests, best current practice exists for the behavior of general IPv6 nodes <xref target="RFC8504"/> and Customer Edge (CE) routers <xref target="I-D.draft-ietf-v6ops-rfc7084bis"/>.</t>
      <t>To fill that gap, this document provides guidance for application developers and cloud application providers on how to approach IPv6 testing.
It describes which scenarios they should consider validating against, and which common regressions to avoid when adding IPv6 support.
While many application developers assume that the network abstractions of the operating system (OS), communication libraries, and application frameworks will handle the transition towards IPv6 transparently, leaky abstractions within these frameworks will make it difficult for an application developer to write address family-independent code for features such as allow/deny lists and logging.
In addition to that challenge, modern cloud applications are typically composed of hundreds to thousands of micro- and macro-services, forming a complex distributed system that requires intricate communication and orchestration infrastructure to operate.
Enabling these applications to communicate over IPv6 requires careful analysis of data flows within all services and proper IPv6 support in all components that may require IPv6 traffic, as well as IPv6 addresses as metadata.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="base-connectivity-scenarios">
        <name>Base Connectivity Scenarios</name>
        <t>Within this document, we define the following four "base connectivity scenarios"
in which applications ought to be verified for availability and functional correctness.</t>
        <dl>
          <dt>IPv4-only:</dt>
          <dd>
            <t>A node or application that has native connectivity towards all endpoints relevant for the test scenario using IPv4 and no connectivity towards any relevant IPv6 endpoints.</t>
          </dd>
          <dt>Dual-Stack:</dt>
          <dd>
            <t>A node or application that has native connectivity towards all endpoints relevant for the test scenario using IPv4 as well as using IPv6.</t>
          </dd>
          <dt>IPv6-only with NAT64:</dt>
          <dd>
            <t>A node or application that has native connectivity towards all endpoints relevant for the test scenario using IPv6 and connectivity towards IPv4 endpoints using a transition technology like NAT64, e.g., NAT64 in combination with CLAT, DNS64, or local address synthesis.</t>
          </dd>
          <dt>True IPv6-only:</dt>
          <dd>
            <t>A node or application that has native connectivity towards all endpoints relevant for the test scenario using IPv6 and no connectivity towards any relevant IPv4 endpoints.</t>
          </dd>
        </dl>
      </section>
      <section anchor="lifecycle-functions">
        <name>Lifecycle Functions</name>
        <t>Orthogonal to the Base Scenarios, we define lifecycle functions, i.e., the phases in which an application is approached during a simplified lifecycle of the application, in accordance to <xref target="NIST.SP.500-267Ar1"/> as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Installation: The installation of the application including any initial configuration required for
getting the application in a state where remote services are operational.</t>
          </li>
          <li>
            <t>User Interface: All forms of interactive access to the application (e.g., Web UI, API).</t>
          </li>
          <li>
            <t>Management: All forms of remote management and monitoring functions.</t>
          </li>
          <li>
            <t>Update: All forms of update functions, including both automatic and manual update mechanisms.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="objectives">
      <name>Testing Objectives</name>
      <t>As a basic principle, IPv6 application testing should always be derived from functional and integration testing.
Therefore, the goal is to verify that the expected behavior is consistent across all connectivity scenarios,
i.e., the application functions correctly in IPv4-only, Dual-Stack, IPv6-only with NAT64 and True IPv6-only settings.
The following sections provide guidance on which connectivity scenarios to include in a testing campaign and how to approach testing complex cloud applications.</t>
      <section anchor="scenarios">
        <name>Connectivity Scenarios</name>
        <t><xref target="scn_combinations"/> lists the combinations of connectivity scenarios that application testing should generally consider.
Note, while the involved parties are listed here as "client" and "server" to reflect the most common case, the combinations can be used the same way when considering peer-to-peer applications – with "client" representing the initiating or first acting party.</t>
        <t>The first five scenarios marked as <em>base</em> should cover all major code paths and fallback conditions.
These include Dual-Stack clients combined with IPv4-only and a True IPv6-only server, to test whether the additional address family confused the client.
We also include the cases with Dual-Stack Server and Single-Stack clients, to test whether a single address family at client side works as anticipated and look at the transition case using NAT64.
We have no special scenarios for 464XLAT <xref target="RFC6877"/> and IPv6-Mostly <xref target="I-D.draft-ietf-v6ops-6mops"/>, as these architectures are from the client side indistinguishable from the Dual-Stack (464XLAT or IPv6-Mostly with CLAT) or IPv6-only with NAT64 (IPv6-Mostly without CLAT).</t>
        <t>For the IPv6-only datacenter case, where servers may be exposed to the IPv4-only Internet using NAT64, it is also advisable to consider the case marked as IPv6-only-DC in <xref target="scn_combinations"/>.</t>
        <t>The other combinations are unlikely to exhibit additional problems for client-server-based applications and therefore are marked as extended in <xref target="scn_combinations"/>.
For peer-to-peer applications and applications with complex connection handling like using STUN <xref target="RFC8489"/> or TURN <xref target="RFC8656"/>, skipping these scenarios is strongly discouraged.</t>
        <table anchor="scn_combinations">
          <name>Connectivity scenario combinations to consider</name>
          <thead>
            <tr>
              <th align="left">Client</th>
              <th align="left">Server</th>
              <th align="center">Classification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">IPv4-only</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">True IPv6-only</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">IPv6-only with NAT64</td>
              <td align="left">IPv4-only</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">True IPv6-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">IPv6-only with NAT64</td>
              <td align="center">IPv6-only-DC</td>
            </tr>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">Dual-Stack</td>
              <td align="center">extended</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">IPv4-only</td>
              <td align="center">extended</td>
            </tr>
            <tr>
              <td align="left">IPv6-only with NAT64</td>
              <td align="left">True IPv6-only</td>
              <td align="center">extended</td>
            </tr>
            <tr>
              <td align="left">True IPv6-only</td>
              <td align="left">True IPv6-only</td>
              <td align="center">extended</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="intermediaries">
        <name>Testing with Intermediaries (e.g., Proxies)</name>
        <t>Many application protocols support communicating across intermediates, most commonly HTTP, HTTP-Connect, SOCKS, or MASQUE proxies.
Peer-to-peer applications often support TURN <xref target="RFC5766"/> as an intermediary to traverse NAT and provide connectivity between IPv4-only and IPv6-only hosts.
When testing connectivity scenarios for an application, additional test cases including a proxy are recommended.
As a proxy can convert between address families, all combinations shown in <xref target="scn_proxy"/>,
consisting of base scenarios towards the proxy and (assuming the same scenarios on both sides of the proxy) the respective base scenarios from the proxy to the server,
should be considered for testing.</t>
        <table anchor="scn_proxy">
          <name>Base scenario combinations including a proxy to consider for IPv6 testing</name>
          <thead>
            <tr>
              <th align="left">Client</th>
              <th align="left">Proxy</th>
              <th align="center">Server</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">IPv4-only</td>
              <td align="center">Dual-Stack</td>
            </tr>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">True IPv6-only</td>
              <td align="center">Dual-Stack</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">IPv4-only</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">True IPv6-only</td>
            </tr>
            <tr>
              <td align="left">IPv6-only with NAT64</td>
              <td align="left">IPv4-only</td>
              <td align="center">Dual-Stack</td>
            </tr>
            <tr>
              <td align="left">True IPv6-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">IPv4-only</td>
            </tr>
            <tr>
              <td align="left">True IPv6-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">True IPv6-only</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="testing-with-partially-broken-connectivity">
        <name>Testing with Partially Broken Connectivity</name>
        <t>In Dual-Stack deployments, situations may arise where communication is partially broken for one or more address families:
From the communication endpoints that are expected to be reachable using both address families,
some may only be reachable by one address family, while others may only be reachable by the other.
Testing applications against these scenarios can become a key enabler for users' acceptance of IPv6,
especially during a transition phase where partially broken connectivity is expected more frequently.
This section provides a brief overview of several common scenarios.</t>
        <section anchor="missing-dns-records">
          <name>Missing DNS Records</name>
          <t>While a server endpoint is intended to support dual-stack connectivity,
the A or AAAA DNS records for the endpoint may be missing, e.g., due to misconfiguration or broken tooling,
or does not reach the client endpoint, e.g., because it got filtered out by a middle box or local resolver.</t>
          <t>While deployment and integration testing should try to test for this kind of broken connectivity,
this scenario is usually indistinguishable from an IPv4-only or an IPv6-only server endpoint,
and therefore already addressed by testing the base scenarios above.</t>
        </section>
        <section anchor="partial-blackholing-mtu-and-fragmentation-issues">
          <name>Partial Blackholing, MTU, and Fragmentation Issues</name>
          <t>When multiple address families are available, network packets may traverse different paths depending on the address family.
Even when the same path is traversed, the path can exhibit distinct behaviors, e.g., dropping all or particular packets, especially in the presence of middle-boxes.
In some cases, connectivity issues may only become apparent late in the communication process, for example, after a successful TCP handshake but before a TLS handshake succeeds.
In such scenarios, clients restricted to a single address family — such as True IPv6-only clients — may experience complete loss of connectivity in these scenarios,
while dual-stack clients often mask such failures by automatically falling back to another address family.</t>
          <t>In addition to partial blackholing, MTU issues may be limited to one address family or behave differently with respect to aspects like
MTU available, dropping of fragmented packets, and ICMP messages generated.
As only IPv4 supports on-path fragmentation, IPv6 is more dependent on working ICMP <em>packet too big</em> reporting.</t>
          <t>It is advisable to test for partial blackholing and MTU issues during deployment and integration testing by testing with IPv4-only and True IPv6-only clients to detect such blackholes.
In case these issues can occur outside the testers' circle of control, it is advisable to simulate this type of failure and ensure that the application's behavior supports the detection and analysis of these errors.</t>
        </section>
      </section>
      <section anchor="testing-lifecycle-function-considerations">
        <name>Testing Lifecycle Function Considerations</name>
        <t>To cover the whole lifecycle of an application including installation, user interface,
management, and update, it is recommended to test that the lifecycle functions defined in <xref target="lifecycle-functions"/> are operational within the connectivity scenarios defined in <xref target="scn_combinations"/>.</t>
        <t>In particular, keep the following considerations in mind:</t>
        <ul spacing="normal">
          <li>
            <t>Installation: Installation may require communications with remote first-party services (e.g., activation/license server)
or remote third-party services (e.g., package repositories). In these scenarios, the installer acts as
the client, and the remote service acts as the server. In cases of remote third-party services, testing
all server scenarios in <xref target="scn_combinations"/> may not be feasible, and impact the client scenarios that
can be supported. For example, if a third-party service is IPv4-only, then supporting a True IPv6-only
client is not feasible.</t>
          </li>
          <li>
            <t>User Interface: User interfaces can be incredibly complex with numerous contexts, views, API endpoints,
CLI commands, etc. When testing non-web-based user interfaces, it is recommended to focus on components
of the interface that involve communications with remote services, and those that handle network configuration parameters.
For example, a network configuration interface may only accept IPv4 address literals for certain parameters.
For testing web-based user interfaces, see <xref target="web-app-considerations"/>.</t>
          </li>
          <li>
            <t>Management: Depending on the application, management functions may be provided via the user interface.
However, the application may have additional management functions (e.g., SNMP, syslog, etc.) that should be tested.</t>
          </li>
          <li>
            <t>Update: Depending on the application, update functions may be exercised during installation. However, the application
may have additional update functions (e.g., automatic updates, manual update mechanisms, etc.) that should be tested.</t>
          </li>
        </ul>
      </section>
      <section anchor="testing-complex-cloud-applications-and-applying-test-cases">
        <name>Testing Complex Cloud Applications and Applying Test Cases</name>
        <t>When testing complex applications, especially cloud applications, they typically involve many data flows.
An application or component may be considered as a server for some of these, while being a client in others.
Therefore, test cases need to cover each data flow in all relevant scenarios.</t>
        <t>As functional and integration tests are often defined as end-to-end test cases,
they often involve several components, e.g., micro-services, load-balancers, application gateways, logging, authentication, and authorization services, which use IP-based protocols between the components.
Therefore, an end-to-end test case breaks down to a series of flows between components, and for each of these flows,
we need to determine whether we need to apply the connectivity scenarios from <xref target="scn_combinations"/> to it,
or whether the connectivity scenarios are only controlled by the deployment of the application.</t>
        <t>For external flows, i.e., flows outside the developers' control, usually all base scenarios from <xref target="scenarios"/> need to be accounted for.
If one side of the flow is under administrative control, the number of scenario combinations can still be limited:
For example, a cloud software provider choosing to deploy Dual-Stack endpoints can skip all non-Dual-Stack cases on the respective side of the communication.
For internal flows, the relevant scenarios only depend on the applications' architecture, and only scenarios planned in the deployment need to be considered.
From a networking perspective, flows between components are typically independent. There is no need to run the Cartesian product of scenarios x communications as long as all relevant scenarios for a given flow are tested.</t>
        <t>In addition to the data flows, an implementation may include metadata about the data flow when communicating with backend systems, e.g., for logging or authorization purposes.
While the flows towards these backend systems themselves may be safe to ignore as outlined above,
the functional correctness of the backend systems for all kinds of IP address need to be verified as part of the test series.
Ignoring IP addresses as data in the testing may result in malfunctions, like always denying access over IPv6, or security issues, like not logging access from IPv6 clients.</t>
      </section>
      <section anchor="web-app-considerations">
        <name>Special considerations for Web-based Applications</name>
        <t>Web-based applications usually load resources from multiple parties, including CDNs and analytic tools, involving data flows to all these parties.
When facing the requirement to support True IPv6-only users, being unable to load some resources due to missing/defective IPv6 support at the respective parties can have effects from missing analytics insights or ad revenue to severe functional defects rendering the application unusable.
When testing such applications, it is not sufficient to only focus on the initial/main interactions,
but it is necessary to consider all resources and parties providing them.
As Web browsers load these resources dynamically and third-party resources may themselves may request resources from more parties, this kind of testing usually requires an instrumented Web browser,
e.g., using <xref target="Selenium"/>.</t>
      </section>
    </section>
    <section anchor="testing-strategies">
      <name>Testing Strategies</name>
      <t>Naïve IPv6 testing, based on end-to-end functional tests as outlined in <xref target="objectives"/>, would require running a set of functional tests in various connectivity scenarios.
In certain environments, setting up test cases for all scenarios can become forbiddingly expensive,
especially for complex cloud applications, application platforms, or when dealing with corporate IT environments.</t>
      <t>In this section, we give recommendations how to set up scenarios defined in <xref target="scenarios"/> and
present strategies to meet the relevant testing objective by modifying Dual-Stack clients and servers to conclude the results for other scenario combinations,
e.g., by tracing whether the right address family is used.</t>
      <section anchor="true-ipv6-only-clients">
        <name>True IPv6-only Clients</name>
        <t>This is the most natural way to test whether True IPv6-only clients behave correctly.
The client device is either placed in a network without IPv4 connectivity or the IPv4 stack is disabled on the device while it is in a Dual-Stack network.
While most desktop operating systems allow disabling IPv4, mobile operating systems, such as Android and iOS, do not.
For mobiles operating systems, a True IPv6-only environment is needed.</t>
        <t>In both cases, it has to be ensured that there is no way to access IPv4-only resources.
In particular, fallback to NAT64 must be prevented by disabling CLAT <xref target="CLAT"/>,
making sure DNS resolution does not perform DNS64 address synthesis <xref target="RFC6147"/>
and blocking the well-known NAT64 prefix <xref target="RFC6052"/> for these clients.
In addition, VPN services including privacy services like <xref target="iCloud-Private-Relay"/> need to be disabled as they can provide connectivity towards the IPv4 Internet.</t>
        <t>A note on the applicability of disabling IPv4:
Before disabling IPv4 make sure the environment supports IPv6-only operation.
Many desktop virtualization environments become unusable because IPv4 is needed to access and manage the virtual machines.
Some corporate environments may render the machines unusable as they require IPv4 connectivity for sign-on.</t>
      </section>
      <section anchor="ipv6-only-servers">
        <name>IPv6-only Servers</name>
        <t>IPv6-only servers are a good option when setting up a True IPv6-only client environment is infeasible and
clients are know to only contact a single server or a small number of servers under the testers' control.
Even if setting up a True IPv6-only server environment is infeasible,
most testing is also achievable by setting up a dedicated DNS name only containing an AAAA record pointing to the IPv6 addresses of an otherwise Dual-Stack server.</t>
      </section>
      <section anchor="client-based-tracing">
        <name>Client-based tracing</name>
        <t>If we can't limit the available address families, we can still trace and verify whether the address family desired for the scenario is used.</t>
        <t>Client-based tracing is especially useful when Dual-Stack servers and clients are available and a conclusion for the True IPv6-only case is desired.
By using the clients' logging/tracing/debugging functionality, the tester can verify that the actual data flows happen over IPv6, which is preferred by most network abstractions. If the client allows changing the preference between IPv6 and IPv4, IPv4-only testing is also possible.</t>
        <t>The most relevant case for this strategy is testing Web applications.
By examining the Web browsers' performance log or using a plugin like <xref target="IPvFoo"/> that visualizes connectivity information, the tester can determine whether all resources are available using IPv6.</t>
      </section>
      <section anchor="server-based-tracing">
        <name>Server-based tracing</name>
        <t>Analogue to tracing on the client side, it is also possible to look at the protocols used on the server side.
While this is functionally equivalent for protocols where clients only communicate to a single server,
this approach is not feasible for Web-based applications where a client usually needs flows towards many servers, where client or network based tracing are the only feasible alternatives to testing with an True IPv6-only client.</t>
      </section>
      <section anchor="network-based-tracing">
        <name>Network-based tracing</name>
        <t>If the communication pattern of an application is known well enough, a packet tracer as <xref target="Wireshark"/> allows to verify that an application in a Dual-Stack environment uses IPv6 for all of its flows.
If this can be verified, failures in True IPv6-only environments are unlikely.</t>
        <t>While this is the least invasive method of testing True IPv6 scenarios in a Dual-Stack setup, it is the most error-prone as it requires the tester to fully understand the network flows of the application and requires the skills to interpret the output of a packet tracer.</t>
      </section>
    </section>
    <section anchor="failures">
      <name>Common Sources of IPv6 Related Failures and Misbehavior</name>
      <t>In this section, we discuss special failure modes that can cause unexpected application behavior that is hard to debug.
While some of these cases can be automatically mitigated, especially through generalizing the concept of Happy Eyeballs <xref target="RFC8305"/>, others may not.
In cases that developers choose not to mitigate erroneous application behavior, users and operators should be supported in the resolution by exposing specific and detailed error or debug messages.</t>
      <section anchor="enable-ipv6-feature-gates">
        <name>Enable IPv6 Feature Gates</name>
        <t>Some applications completely ignore IPv6 unless explicitly configured to enable IPv6.
This adds another class of user or configuration errors, like deploying an application without enabled IPv6 support in an IPv6-only environment.
As these feature gates are often buried deeply in the documentation and are often vendor, product, or component specific, every component needs to be checked to determine whether IPv6 support needs extra configuration.</t>
      </section>
      <section anchor="destination-address-selection-preference-and-address-filtering">
        <name>Destination Address Selection Preference and Address Filtering</name>
        <t>The destination address selection algorithm in <xref target="RFC6724"/> filters unavailable address families (Rule 1) and de-prioritizes non-matching address families (Rule 2)
and clearly prioritizes IPv6 GUA addresses over IPv4 addresses.
While most operating systems and some alternative resolver libraries, such as <xref target="C-ARES"/>, implement <xref target="RFC6724"/> or its predecessor <xref target="RFC3484"/> correctly,
there are a number of notable and widely used implementations that implement something else, causing anything from unexpected behavior to hard-to-debug errors.</t>
        <ul spacing="normal">
          <li>
            <t>Most JAVA runtimes do the opposite and prefer IPv4 destinations over IPv6.
To prefer IPv6 addresses over IPv4, one needs to set the system property <tt>java.net.preferIPv6Addresses=true</tt>.</t>
          </li>
          <li>
            <t>Some applications only use the first address candidate from the <tt>getaddrinfo()</tt> and fail if the connection attempt to that one fails.</t>
          </li>
          <li>
            <t>Applications composed of services built on different programming languages or runtimes may behave inconsistently with regard to choosing destination addresses.</t>
          </li>
          <li>
            <t>NGINX has its own user DNS resolver without address filtering; thus, adding a <em>AAAA</em> record to a backend can render that backend unusable.
After having resolved a <em>AAAA</em> record, it is trying to open an IPv6 socket, even when the IPv6 stack is disabled.
As socket creation failure is not expected, an internal server error is sent back to the client.</t>
          </li>
          <li>
            <t>Some resolvers ignore address families for which no default route exists or where the default-route is pointing to an unsupported/ignored device.
This becomes cumbersome especially in split-VPN use cases, e.g. when trying to contact IPv6-only endpoints via the VPN while having IPv4-only Internet connectivity.</t>
          </li>
        </ul>
      </section>
      <section anchor="input-validation-and-output-rendering">
        <name>Input Validation and Output Rendering</name>
        <t>While most libraries and application frameworks have decent IPv6 support,
there often is still application logic that prevents taking advantage of the IPv6 support by the underlying components.
Checking whether user input is a valid IPv4 address or rendering output under the assumption that an address is always an IPv4 address are typical examples for this class of limitations.</t>
      </section>
      <section anchor="misbehaving-middle-boxes">
        <name>Misbehaving Middle-Boxes</name>
        <t>In practice, many IPv6-related regressions uncovered during testing turn out to be caused by hidden components outside of the application developers' control.
Middle-Boxes, e.g., firewalls, virus scanners, and intrusion detection systems, can break end-to-end tests in surprising ways, like terminating TLS sessions over IPv6 with certain extensions in the <em>TLS client hello</em> while correctly passing the same flow over IPv4.</t>
      </section>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <t>Lab testing of applications for IPv6 compliance should always have the next step in mind: Deploying the application and providing the users with decent IPv6 support.
Therefore, end-to-end tests, especially of cloud applications, should also keep deployment steps, prerequisites, and risks in mind.
This section discusses some issues to keep in mind when planning and executing IPv6 testing.</t>
      <section anchor="operational-scope-software-lifecycle">
        <name>Operational Scope &amp; Software Lifecycle</name>
        <t>Depending on the application and deployment model, the timing of deploying IPv6 support may be in control of the users' organization, the developers' organization, or neither of them.
Based on this setup, certain combinations of IPv6-enabled clients, servers, and infrastructure in between may or may not be excluded from consideration.
Therefore, it may be necessary to add test cases for old software versions with known and already fixed bugs against newly IPv6-enabled servers.
If regressions and service disruptions cannot be ruled out by the tests, a per-user or per-customer tenant opt-in/opt-out/roll-back scheme for the IPv6 enablement should be considered.</t>
      </section>
      <section anchor="allow-deny-lists">
        <name>Allow &amp; Deny Lists</name>
        <t>Application-level IP allow and deny lists pose a special challenge for deploying IPv6 in a cloud application.
As users may already have IPv6 connectivity, adding IPv6 support to the server may cause clients to use IPv6 immediately.
Having no allow list entry for the users' IPv6 addresses results in service disruptions.
Happy Eyeballs as defined in <xref target="RFC8305"/> does not solve the problem as allow list checks usually take place after the transport connection has already been established.</t>
        <t>To mitigate allow or deny lists causing service disruptions when enabling IPv6, support to include IPv6 addresses in allow and deny lists needs to be enabled way before rolling out IPv6 on the transport and communicated towards the users.
To further limit the probability of service disruptions, generalizing Happy Eyeballs to re-try using IPv4 after certain error conditions should be evaluated.</t>
      </section>
      <section anchor="component-and-service-reuse">
        <name>Component and Service Reuse</name>
        <t>If components or cloud services can be reused in other products, special care needs to be taken when planning IPv6 deployment.
The interaction contracts between the reusing parties and the service need to be checked
whether IPv6 enablement of the services also affects the flows of these.
Additional end-to-end tests, including the reusing parties, are recommended.
This is often a recursive process.</t>
      </section>
      <section anchor="ownership-of-software-components">
        <name>Ownership of Software Components</name>
        <t>Sometimes IPv6 enablement requires touching components that are not actively maintained anymore.
Be prepared for this and plan extra time or budget for updating or replacing these components.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The document itself has no specific security implications; thus, some of the issues discussed in <xref target="failures"/> have.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC6724">
          <front>
            <title>Default Address Selection for Internet Protocol Version 6 (IPv6)</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="R. Draves" initials="R." surname="Draves"/>
            <author fullname="A. Matsumoto" initials="A." surname="Matsumoto"/>
            <author fullname="T. Chown" initials="T." surname="Chown"/>
            <date month="September" year="2012"/>
            <abstract>
              <t>This document describes two algorithms, one for source address selection and one for destination address selection. The algorithms specify default behavior for all Internet Protocol version 6 (IPv6) implementations. They do not override choices made by applications or upper-layer protocols, nor do they preclude the development of more advanced mechanisms for address selection. The two algorithms share a common context, including an optional mechanism for allowing administrators to provide policy that can override the default behavior. In dual-stack implementations, the destination address selection algorithm can consider both IPv4 and IPv6 addresses -- depending on the available source addresses, the algorithm might prefer IPv6 addresses over IPv4 addresses, or vice versa.</t>
              <t>Default address selection as defined in this specification applies to all IPv6 nodes, including both hosts and routers. This document obsoletes RFC 3484. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6724"/>
          <seriesInfo name="DOI" value="10.17487/RFC6724"/>
        </reference>
        <reference anchor="RFC3484">
          <front>
            <title>Default Address Selection for Internet Protocol version 6 (IPv6)</title>
            <author fullname="R. Draves" initials="R." surname="Draves"/>
            <date month="February" year="2003"/>
            <abstract>
              <t>This document describes two algorithms, for source address selection and for destination address selection. The algorithms specify default behavior for all Internet Protocol version 6 (IPv6) implementations. They do not override choices made by applications or upper-layer protocols, nor do they preclude the development of more advanced mechanisms for address selection. The two algorithms share a common context, including an optional mechanism for allowing administrators to provide policy that can override the default behavior. In dual stack implementations, the destination address selection algorithm can consider both IPv4 and IPv6 addresses - depending on the available source addresses, the algorithm might prefer IPv6 addresses over IPv4 addresses, or vice-versa. All IPv6 nodes, including both hosts and routers, must implement default address selection as defined in this specification. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3484"/>
          <seriesInfo name="DOI" value="10.17487/RFC3484"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.draft-ietf-v6ops-rfc7084bis">
          <front>
            <title>Basic Requirements for IPv6 Customer Edge Routers</title>
            <author fullname="Gábor Lencse" initials="G." surname="Lencse">
              <organization>Széchenyi István University</organization>
            </author>
            <author fullname="Jordi Palet Martinez" initials="J. P." surname="Martinez">
              <organization>The IPv6 Company</organization>
            </author>
            <author fullname="Ben Patton" initials="B." surname="Patton">
              <organization>University of New Hampshire, Interoperability Lab (UNH-IOL)</organization>
            </author>
            <author fullname="Timothy Winters" initials="T." surname="Winters">
              <organization>QA Cafe</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document specifies requirements for an IPv6 Customer Edge (CE)
   router.  Specifically, the current version of this document focuses
   on the basic provisioning of an IPv6 CE router and the provisioning
   of IPv6 hosts attached to it.  The document obsoletes RFC 7084.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-rfc7084bis-04"/>
        </reference>
        <reference anchor="I-D.draft-ietf-v6ops-6mops">
          <front>
            <title>IPv6-Mostly Networks: Deployment and Operations Considerations</title>
            <author fullname="Nick Buraglio" initials="N." surname="Buraglio">
              <organization>Energy Sciences Network</organization>
            </author>
            <author fullname="Ondřej Caletka" initials="O." surname="Caletka">
              <organization>RIPE NCC</organization>
            </author>
            <author fullname="Jen Linkova" initials="J." surname="Linkova">
              <organization>Google</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document discusses a deployment scenario called "an IPv6-Mostly
   network", when IPv6-only and IPv4-enabled endpoints coexist on the
   same network (network segment, VLAN, SSID etc).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-6mops-04"/>
        </reference>
        <reference anchor="CLAT">
          <front>
            <title>464XLAT Customer-side Translator (CLAT): Node Behavior and Recommendations</title>
            <author fullname="Lorenzo Colitti" initials="L." surname="Colitti">
              <organization>Google</organization>
            </author>
            <author fullname="Jen Linkova" initials="J." surname="Linkova">
              <organization>Google</organization>
            </author>
            <author fullname="Tommy Jensen" initials="T." surname="Jensen">
              <organization>Cloudflare</organization>
            </author>
            <date day="25" month="November" year="2025"/>
            <abstract>
              <t>   464XLAT defines an architecture for providing IPv4 connectivity
   across an IPv6-only network.  The solution involves two functional
   elements: a provider-side translator (PLAT) and a customer-side
   translator (CLAT).  This document updates the 464XLAT specification
   (RFC6877) and Requirements for IPv6 Customer Edge Routers (RFC8585)
   by further defining CLAT node behavior and IPv6 Customer Edge Routers
   to support IPv4-as-a-Service by providing recommendations for node
   developers on enabling and disabling CLAT.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-claton-13"/>
        </reference>
        <reference anchor="RFC8504">
          <front>
            <title>IPv6 Node Requirements</title>
            <author fullname="T. Chown" initials="T." surname="Chown"/>
            <author fullname="J. Loughney" initials="J." surname="Loughney"/>
            <author fullname="T. Winters" initials="T." surname="Winters"/>
            <date month="January" year="2019"/>
            <abstract>
              <t>This document defines requirements for IPv6 nodes. It is expected that IPv6 will be deployed in a wide range of devices and situations. Specifying the requirements for IPv6 nodes allows IPv6 to function well and interoperate in a large number of situations and deployments.</t>
              <t>This document obsoletes RFC 6434, and in turn RFC 4294.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="220"/>
          <seriesInfo name="RFC" value="8504"/>
          <seriesInfo name="DOI" value="10.17487/RFC8504"/>
        </reference>
        <reference anchor="CAC-2023" target="http://www.cac.gov.cn/2023-04/27/c_1684239012351367.htm">
          <front>
            <title>2023 Work Arrangement for Further Promoting Large-scale IPv6 Deployment and Application</title>
            <author>
              <organization/>
            </author>
            <date year="2023" month="April" day="27"/>
          </front>
        </reference>
        <reference anchor="US-OMB-M-21-07" target="https://www.whitehouse.gov/wp-content/uploads/2020/11/M-21-07.pdf">
          <front>
            <title>M-21-07 – Completing the Transition to Internet Protocol Version 6 (IPv6)</title>
            <author>
              <organization/>
            </author>
            <date year="2020" month="November" day="19"/>
          </front>
          <seriesInfo name="United States of America Office of Management and Budget" value="Memorandum for Heads of Executive Departments and Agencies"/>
        </reference>
        <reference anchor="DE-BIT-2020-14" target="https://www.cio.bund.de/SharedDocs/downloads/Webs/CIO/DE/it-beirat/beschluesse/2020_14_Beschluss_Konferenz_IT-Beauftragte.pdf">
          <front>
            <title>Zukunftsfähige Netzinfrastrukturen auf Basis von funktionsfähigem IPv6</title>
            <author>
              <organization/>
            </author>
            <date year="2020" month="November" day="11"/>
          </front>
          <seriesInfo name="IT-Steuerung Bund" value="Beschluss 2020/14"/>
        </reference>
        <reference anchor="CZ-ENDv4" target="https://konecipv4.cz/">
          <front>
            <title>Czech Republic sets IPv4 end date</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="January" day="17"/>
          </front>
        </reference>
        <reference anchor="NIST.SP.500-267Ar1" target="https://nvlpubs.nist.gov/nistpubs/specialpublications/NIST.SP.500-267Ar1.pdf">
          <front>
            <title>NIST Special Publication 500-267 Revision 1 - NIST IPv6 Profile</title>
            <author>
              <organization/>
            </author>
            <date year="2020" month="November" day="23"/>
          </front>
        </reference>
        <reference anchor="iCloud-Private-Relay" target="https://developer.apple.com/videos/play/wwdc2021/10096/">
          <front>
            <title>Apple iCLoud Private Relay (WWDC2021)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IPvFoo" target="https://github.com/pmarks-net/ipvfoo">
          <front>
            <title>IPvFoo - a Chrome/Firefox extension that adds an icon to indicate whether the current page was fetched using IPv4 or IPv6.</title>
            <author initials="P." surname="Marks" fullname="Paul Marks">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Wireshark" target="https://www.wireshark.org/">
          <front>
            <title>Wireshark packet tracer</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="C-ARES" target="https://c-ares.org/">
          <front>
            <title>C-ARES - a modern DNS (stub) resolver library, written in C</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Selenium" target="https://www.selenium.dev/">
          <front>
            <title>Selenium WebDriver</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC6877">
          <front>
            <title>464XLAT: Combination of Stateful and Stateless Translation</title>
            <author fullname="M. Mawatari" initials="M." surname="Mawatari"/>
            <author fullname="M. Kawashima" initials="M." surname="Kawashima"/>
            <author fullname="C. Byrne" initials="C." surname="Byrne"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document describes an architecture (464XLAT) for providing limited IPv4 connectivity across an IPv6-only network by combining existing and well-known stateful protocol translation (as described in RFC 6146) in the core and stateless protocol translation (as described in RFC 6145) at the edge. 464XLAT is a simple and scalable technique to quickly deploy limited IPv4 access service to IPv6-only edge networks without encapsulation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6877"/>
          <seriesInfo name="DOI" value="10.17487/RFC6877"/>
        </reference>
        <reference anchor="RFC8489">
          <front>
            <title>Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
            <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with NAT traversal. It can be used by an endpoint to determine the IP address and port allocated to it by a NAT. It can also be used to check connectivity between two endpoints and as a keep-alive protocol to maintain NAT bindings. STUN works with many existing NATs and does not require any special behavior from them.</t>
              <t>STUN is not a NAT traversal solution by itself. Rather, it is a tool to be used in the context of a NAT traversal solution.</t>
              <t>This document obsoletes RFC 5389.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8489"/>
          <seriesInfo name="DOI" value="10.17487/RFC8489"/>
        </reference>
        <reference anchor="RFC8656">
          <front>
            <title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="T. Reddy" initials="T." role="editor" surname="Reddy"/>
            <author fullname="A. Johnston" initials="A." role="editor" surname="Johnston"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>If a host is located behind a NAT, it can be impossible for that host to communicate directly with other hosts (peers) in certain situations. In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay. This specification defines a protocol, called "Traversal Using Relays around NAT" (TURN), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay. TURN differs from other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address.</t>
              <t>The TURN protocol was designed to be used as part of the Interactive Connectivity Establishment (ICE) approach to NAT traversal, though it can also be used without ICE.</t>
              <t>This document obsoletes RFCs 5766 and 6156.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8656"/>
          <seriesInfo name="DOI" value="10.17487/RFC8656"/>
        </reference>
        <reference anchor="RFC5766">
          <front>
            <title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="April" year="2010"/>
            <abstract>
              <t>If a host is located behind a NAT, then in certain situations it can be impossible for that host to communicate directly with other hosts (peers). In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay. This specification defines a protocol, called TURN (Traversal Using Relays around NAT), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay. TURN differs from some other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5766"/>
          <seriesInfo name="DOI" value="10.17487/RFC5766"/>
        </reference>
        <reference anchor="RFC6147">
          <front>
            <title>DNS64: DNS Extensions for Network Address Translation from IPv6 Clients to IPv4 Servers</title>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="A. Sullivan" initials="A." surname="Sullivan"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="I. van Beijnum" initials="I." surname="van Beijnum"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>DNS64 is a mechanism for synthesizing AAAA records from A records. DNS64 is used with an IPv6/IPv4 translator to enable client-server communication between an IPv6-only client and an IPv4-only server, without requiring any changes to either the IPv6 or the IPv4 node, for the class of applications that work through NATs. This document specifies DNS64, and provides suggestions on how it should be deployed in conjunction with IPv6/IPv4 translators. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6147"/>
          <seriesInfo name="DOI" value="10.17487/RFC6147"/>
        </reference>
        <reference anchor="RFC6052">
          <front>
            <title>IPv6 Addressing of IPv4/IPv6 Translators</title>
            <author fullname="C. Bao" initials="C." surname="Bao"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="X. Li" initials="X." surname="Li"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>This document discusses the algorithmic translation of an IPv6 address to a corresponding IPv4 address, and vice versa, using only statically configured information. It defines a well-known prefix for use in algorithmic translations, while allowing organizations to also use network-specific prefixes when appropriate. Algorithmic translation is used in IPv4/IPv6 translators, as well as other types of proxies and gateways (e.g., for DNS) used in IPv4/IPv6 scenarios. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6052"/>
          <seriesInfo name="DOI" value="10.17487/RFC6052"/>
        </reference>
        <reference anchor="RFC8305">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames. These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics. Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly. This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs". This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
      </references>
    </references>
    <?line 478?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to
Holger Füßler,
Michael Richardson,
Tommy Jensen,
Nathan Sherrard,
for the discussions, the input, and all contribution.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAH9BQWkAA8V93ZLbRpbmPZ4CK0eMrV6SpZLLJXft9LRLJald0/qpUZXa
M+NwqEEwSaILBDhIoEq0WhHzDrv3uxd7vy+wV9tvMk+y5zvn5A9A0G3HRmz7
wiqCyMyTJ8//T3I6nSZ3Z+mXiW2zavE+K+vKnKU7YxO7yZr2/b91dWvsWVrV
ybY4S79v63yS2rppG7O09Ndugz9+SNqiLWnggxtj26JapefbbVnkWVvUlf08
vby6O02vu+2WBj5Isvm8MbTog2J7dzrNtttpK6MeJIs6r7INTbRosmU7LUy7
nN6d1ls7Hb47ffQosd18U1hLa7S7LQ26fH7zIqFFzapudmfpPN8mxbY5S9um
s+3jR49+/ehxkjUmo6XfbE0j0KW07/RVVmUrszEVgXe/Okt5zeTW7O7rZnGW
pOmU98B/xFvjB7rnJLkzVWfw9qpo1938LGX471eyhSPdU2sO7Qkjm7rbEnyM
sQDkgyTJunZdNzT7lF5L02VXloKqq3VRFtttej1LbwpjTcnf180qq4ofefhZ
en1+lV4/5y/MJivKM/4TwG9l9DctD51Vph1+NZOvvrHZdpbXm30A/tFU6cui
uq3vspGlf1fXq9KMLb3smmZ3/OU3KzyWqeNvvlnxyPE1f78rTfqmM2Vp2taM
LPuuKu5MY4t2l9bL9LW5T7/NNlu7LhqTXlataWogd047pDdeZnPLczjSfPf6
2+nlm5cR1Olt7Vb7pqjLWVetZ2bR7UP2lLBxlbVtXf3/gGq+5aV6ICVV3Wxo
wTuixaSoluFTml5On832eKtZ5k8efX0yL+zBV0439H98e/Hy/OZs/J28zGTX
b19cfP3VoxN+/fxi+vjR4y/l1NusWZn2LF237fbs6Oj+/n6WZ/lsVd/N8uoI
700fnRw9fnKUvz8+/frk8Ze/fnT8+Muvjr88fTJbt0IfKmnwcvpd3dym502T
VcK8Ke01fdE17do06VVTb2oWRi+x7NTmGdEMM9Yzsy3rHY8A90cczUssSITI
CgTO9PETevjuevrm1dPpq+nj4+mjJ/u7sbqd+zXx97rurMGuju6305ykEy10
1NGS2cJil4+Ojo+PdKrZdrGM96WP0//49/+aXtSbLVEctkA7Sm9on0Q6BGXa
1kIuxK7YJ0nlukz/AMqiL0/TL7DLhzytNQ2xL6jAMR7RYGsW6XVLu7Qgw/MN
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

-->

</rfc>
