<?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.7 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pauly-v6ops-happy-eyeballs-v3-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title abbrev="Happy Eyeballs v3">Happy Eyeballs Version 3: Better Connectivity Using Concurrency</title>
    <seriesInfo name="Internet-Draft" value="draft-pauly-v6ops-happy-eyeballs-v3-01"/>
    <author fullname="Tommy Pauly">
      <organization>Apple Inc</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Nidhi Jaju">
      <organization>Google LLC</organization>
      <address>
        <email>nidhijaju@google.com</email>
      </address>
    </author>
    <author fullname="Kenichi Ishibashi">
      <organization>Google LLC</organization>
      <address>
        <email>bashi@google.com</email>
      </address>
    </author>
    <date year="2024" month="March" day="04"/>
    <keyword>ipv6</keyword>
    <keyword>ipv4</keyword>
    <keyword>racing</keyword>
    <keyword>tcp</keyword>
    <keyword>quic</keyword>
    <keyword>svcb</keyword>
    <keyword>ech</keyword>
    <abstract>
      <?line 53?>

<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 updates the algorithm description in RFC 8305.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://tfpauly.github.io/draft-happy-eyeballs-v3/draft-pauly-v6ops-happy-eyeballs-v3.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-pauly-v6ops-happy-eyeballs-v3/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/tfpauly/draft-happy-eyeballs-v3"/>.</t>
    </note>
  </front>
  <middle>
    <?line 66?>

<section anchor="introduction">
      <name>Introduction</name>
      <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.</t>
      <t>This document defines the algorithm for "Happy Eyeballs", a technique
for reducing user-visible delays on dual-stack hosts. This
definition updates the description in <xref target="HEV2"/>, which
itself obsoleted <xref target="RFC6555"/>.</t>
      <t>The Happy Eyeballs algorithm of racing connections to resolved
addresses has several stages to avoid delays to the user whenever
possible, while preferring the use of IPv6. This document discusses
how to handle DNS queries when starting a connection on a dual-stack
client, how to create an ordered list of destination addresses to
which to attempt connections, and how to race the connection
attempts.</t>
      <t>As compared to <xref target="HEV2"/>, this document adds support for incorporating
SVCB / HTTPS resource records (RRs)
<xref target="SVCB"/>. SVCB RRs provide alternative
endpoints and associated information about protocol support, Encrypted
ClientHello <xref target="ECH"/> keys, address hints, among
other relevant hints which may help speed up connection establishment
and improve user privacy. Discovering protocol support during
resolution, such as for HTTP/3 over QUIC <xref target="RFC9114"/>, allows
upgrading between protocols on the current connection attempts,
instead of waiting for subsequent attempts to use information from
other discovery mechanisms such as HTTP Alternative Services
<xref target="AltSvc"/>. These records can be queried along with A and
AAAA records, and the updated algorithm defines how to handle SVCB
responses to improve address and protocol selection.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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="overview">
      <name>Overview</name>
      <t>This document defines a method of connection establishment, named the
"Happy Eyeballs Connection Setup". This approach has several
distinct phases:</t>
      <ol spacing="normal" type="1"><li>
          <t>Initiation of asynchronous DNS queries (<xref target="query"/>)</t>
        </li>
        <li>
          <t>Sorting of resolved destination addresses (<xref target="sorting"/>)</t>
        </li>
        <li>
          <t>Initiation of asynchronous connection attempts (<xref target="connections"/>)</t>
        </li>
        <li>
          <t>Establishment of one connection, which cancels all other attempts
(<xref target="connections"/>)</t>
        </li>
      </ol>
      <t>Note that this document assumes that the preference policy for the
host destination address favors IPv6 over IPv4. IPv6 has many
desirable properties designed to be improvements over IPv4
<xref target="IPV6"/>.</t>
      <t>This document also assumes that the preference policy favors QUIC over
TCP. QUIC only requires one packet to establish a secure connection,
making it quicker compared to TCP <xref target="QUIC"/>.</t>
      <t>If the host is configured to have different preferences, the
recommendations in this document can be easily adapted.</t>
    </section>
    <section anchor="query">
      <name>Hostname Resolution Query Handling</name>
      <t>When a client has both IPv4 and IPv6 connectivity and is trying to
establish a connection with a named host, it needs to send out both
AAAA and A DNS queries. Both queries <bcp14>SHOULD</bcp14> be made as soon after
one another as possible, with the AAAA query made first and
immediately followed by the A query.</t>
      <t>Additionally, if the client also wants to receive SVCB / HTTPS
resource records (RRs) <xref target="SVCB"/>, it <bcp14>SHOULD</bcp14> issue the SVCB query
immediately before the AAAA and A queries (prioritizing the SVCB query
since it can also include address hints). If the client has only one
of IPv4 or IPv6 connectivity, it still issues the SVCB query prior to
whichever AAAA or A query is appropriate. Note that upon
receiving a SVCB answer, the client might need to issue futher
AAAA and/or A queries to resolve the service name included in
the RR.</t>
      <t>Implementations <bcp14>SHOULD NOT</bcp14> wait for all answers to
return before attempting connection establishment. If one query
fails to return or takes significantly longer to return, waiting for
the other answers can significantly delay the connection
establishment of the first one. Therefore, the client <bcp14>SHOULD</bcp14> treat
DNS resolution as asynchronous. Note that if the platform does not
offer an asynchronous DNS API, this behavior can be simulated by
making separate synchronous queries, each on a different thread.</t>
      <t>The algorithm for acting upon received answers depends on whether the
client sent out queries for SVCB RRs.</t>
      <t>If the client did not request SVCB RRs:</t>
      <ul spacing="normal">
        <li>
          <t>If a positive AAAA response (a response containing at least one
valid AAAA RR) is received first, the first IPv6 connection
attempt is immediately started.</t>
        </li>
        <li>
          <t>If a positive A response is received first (which might be due
to reordering), the client <bcp14>SHOULD</bcp14> wait a short time for the
AAAA response to ensure that preference is given to IPv6, since
it is common for the AAAA response to follow the A response by
a few milliseconds. This delay is referred to as
the "Resolution Delay". If a negative AAAA response (no error, no
data) is received within the Resolution Delay period or the AAAA
response has not been received by the end of the Resolution Delay
period, the client <bcp14>SHOULD</bcp14> proceed to sorting addresses (see
<xref target="sorting"/>) and staggered connection attempts (see <xref target="connections"/>) using
any IPv4 addresses received so far.</t>
        </li>
      </ul>
      <t>If the client did request SVCB RRs:</t>
      <ul spacing="normal">
        <li>
          <t>If the client receives any positive response back (containing a valid
AAAA, A, or SVCB ServiceMode RR), it starts the Resolution Delay timer, which
is run until both the AAAA and SVCB ServiceMode responses are received,
or a SVCB response is received that also includes at least one
address in the <tt>ipv6hint</tt> parameter.
Once a SVCB response and at least one IPv6 address have been received,
or the timer expires, the client proceeds with the process of sorting
addresses and staggered connection attempts.</t>
        </li>
      </ul>
      <t>For both variations of the algorithm, the <bcp14>RECOMMENDED</bcp14> value for
the Resolution Delay is 50 milliseconds.</t>
      <t>If new positive responses arrive while connection attempts are in progress,
but before any connection has been established, then the newly
received addresses are incorporated into the list of available candidate
addresses (see <xref target="changes"/>) and the process of connection attempts will
continue with the new addresses added, until one connection is
established.</t>
      <section anchor="handling-multiple-dns-server-addresses">
        <name>Handling Multiple DNS Server Addresses</name>
        <t>If multiple DNS server addresses are configured for the current
network, the client may have the option of sending its DNS queries
over IPv4 or IPv6. In keeping with the Happy Eyeballs approach,
queries <bcp14>SHOULD</bcp14> be sent over IPv6 first (note that this is not
referring to the sending of AAAA or A queries, but rather the address
of the DNS server itself and IP version used to transport DNS
messages). If DNS queries sent to the IPv6 address do not receive
responses, that address may be marked as penalized and queries can be
sent to other DNS server addresses.</t>
        <t>As native IPv6 deployments become more prevalent and IPv4 addresses
are exhausted, it is expected that IPv6 connectivity will have
preferential treatment within networks. If a DNS server is
configured to be accessible over IPv6, IPv6 should be assumed to be
the preferred address family.</t>
        <t>Client systems <bcp14>SHOULD NOT</bcp14> have an explicit limit to the number of DNS
servers that can be configured, either manually or by the network.
If such a limit is required by hardware limitations, the client
<bcp14>SHOULD</bcp14> use at least one address from each address family from the
available list.</t>
      </section>
    </section>
    <section anchor="sorting">
      <name>Sorting Addresses</name>
      <t>Before attempting to connect to any of the resolved destination
addresses, the client should define the order in which to start the
attempts. Once the order has been defined, the client can use a
simple algorithm for racing each option after a short delay (see
<xref target="connections"/>). It is important that the ordered list involve all
addresses from both families and all protocols that have been received
by this point, as this allows the client to get the racing effect of
Happy Eyeballs for the entire list, not just the first IPv4 and first
IPv6 addresses.</t>
      <t>Note that the following sorting steps are an incremental sort, meaning
that the client <bcp14>SHOULD</bcp14> sort within each sorted group for each
incremental step.</t>
      <t>If any of the answers were from SVCB RRs, they <bcp14>SHOULD</bcp14> be sorted ahead
of any answers that were not associated with a SVCB record.</t>
      <t>If the client supports TLS Encrypted Client Hello (ECH) discovery through
SVCB records <xref target="SVCB-ECH"/>, depending on the
client's preference to handle ECH, the client <bcp14>SHOULD</bcp14> sort addresses with
ECH keys taking priority to maintain privacy when attempting connection
establishment.</t>
      <t>The client then sorts the addresses received up to this point, within
each group, by service priority if the set of addresses contain any
answers from SVCB records. See <xref target="priority"/> for details.</t>
      <t>The client <bcp14>SHOULD</bcp14> also sort the addresses in protocol order, such that
QUIC is prioritized over TCP, as it connects faster and generally
results in a better experience once connected. For example, QUIC
provides improved delivery and congestion control, supports connection
migration, and provides other benefits <xref target="QUIC"/>.</t>
      <t>Then, within each group at equal priority, the client <bcp14>MUST</bcp14> sort the
addresses using Destination Address Selection (<xref section="6" sectionFormat="comma" target="RFC6724"/>).</t>
      <t>If the client is stateful and has a history of expected round-trip
times (RTTs) for the routes to access each address, it <bcp14>SHOULD</bcp14> add a
Destination Address Selection rule between rules 8 and 9 that prefers
addresses with lower RTTs. If the client keeps track of which
addresses it used in the past, it <bcp14>SHOULD</bcp14> add another Destination
Address Selection rule between the RTT rule and rule 9, which prefers
used addresses over unused ones. This helps servers that use the
client's IP address during authentication, as is the case for TCP
Fast Open <xref target="RFC7413"/> and some Hypertext Transport Protocol (HTTP)
cookies. This historical data <bcp14>MUST NOT</bcp14> be used across different
network interfaces and <bcp14>SHOULD</bcp14> be flushed whenever a device changes
the network to which it is attached.</t>
      <t>Next, the client <bcp14>SHOULD</bcp14> modify the ordered list to interleave
protocols and address families. Whichever combination of protocol
and address family is first in the list should be followed by an
endpoint of the other protocol type and same address family, then an
endpoint from the same protocol and other address family, and then an
endpoint from the other protocol and other address family. For example,
if the first address in the sorted list is a QUIC IPv6 address, then
the first TCP IPv6 address should be moved up in the list to be second
in the list, then the first QUIC IPv4 address should be moved up to be
third in the list, and then the first TCP IPv4 address should be moved
up to be fourth in the list. An implementation <bcp14>MAY</bcp14> choose to favor one
protocol or address family more by allowing multiple addresses of that
protocol or family to be attempted before trying the other combinations.
The number of contiguous addresses of the first combination of
properties will be referred to as the "Preferred Protocol Combination
Count" and can be a configurable value. This avoids waiting through a
long list of addresses from a given address family using a given
protocol if connectivity over a protocol or an address family is
impaired.</t>
      <t>Note that the address selection described in this section only
applies to destination addresses; Source Address Selection
(<xref section="5" sectionFormat="comma" target="RFC6724"/>) is performed once per destination address and
is out of scope of this document.</t>
      <section anchor="priority">
        <name>Sorting Based on Priority</name>
        <t>SVCB <xref target="SVCB"/> RRs indicate a priority for each ServiceMode response.
This priority applies to any IPv4 or IPv6 address hints in the RR
itself, as well as any addresses received on A or AAAA queries for the
name in the ServiceMode RR. The priority in a ServiceMode SVCB RR is
always greater than 0.</t>
        <t>SVCB answers with the lowest numerical value (such as 1) are sorted
first, and answers with higher numerical values are sorted later.</t>
        <t>Note that a SVCB RR with the TargetName "." applies to the owner
name in the RR, and the priority of that SVCB RR applies to
any A or AAAA RRs for the same owner name. These answers are
sorted according to that SVCB RR's priority.</t>
      </section>
    </section>
    <section anchor="connections">
      <name>Connection Attempts</name>
      <t>Once the list of addresses received up to this point has been
constructed, the client will attempt to make connections. In order to
avoid unreasonable network load, connection attempts <bcp14>SHOULD NOT</bcp14> be
made simultaneously. Instead, one connection attempt to a single
address is started first, followed by the others in the list, one at a
time. Starting a new connection attempt does not affect previous
attempts, as multiple connection attempts may occur in parallel.  Once
one of the connection attempts succeeds (<xref target="success"/>), all other
connections attempts that have not yet succeeded <bcp14>SHOULD</bcp14> be canceled.
Any address that was not yet attempted as a connection <bcp14>SHOULD</bcp14> be
ignored.  At that time, the asynchronous DNS query <bcp14>MAY</bcp14> be canceled as
new addresses will not be used for this connection. However, the DNS
client resolver <bcp14>SHOULD</bcp14> still process DNS replies from the network for
a short period of time (recommended to be 1 second), as they will
populate the DNS cache and can be used for subsequent connections.</t>
      <t>A simple implementation can have a fixed delay for how long to wait
before starting the next connection attempt. This delay is referred to
as the "Connection Attempt Delay". One recommended value for a default
delay is 250 milliseconds. A more nuanced implementation's delay
should correspond to the time when the previous attempt is retrying
its handshake (such as sending a second TCP SYN or a second QUIC
Initial), based on the retransmission timer (<xref target="RFC6298"/>,
<xref target="RFC9002"/>). If the client has historical RTT data gathered from
other connections to the same host or prefix, it can use this
information to influence its delay. Note that this algorithm should
only try to approximate the time of the first handshake packet
retransmission, and not any further retransmissions that may be
influenced by exponential timer back off.</t>
      <t>The Connection Attempt Delay <bcp14>MUST</bcp14> have a lower bound, especially if it
is computed using historical data. More specifically, a subsequent
connection <bcp14>MUST NOT</bcp14> be started within 10 milliseconds of the previous
attempt. The recommended minimum value is 100 milliseconds, which is
referred to as the "Minimum Connection Attempt Delay". This minimum
value is required to avoid congestion collapse in the presence of high
packet-loss rates. The Connection Attempt Delay <bcp14>SHOULD</bcp14> have an upper
bound, referred to as the "Maximum Connection Attempt Delay". The
current recommended value is 2 seconds.</t>
      <section anchor="success">
        <name>Determining successful connection establishment</name>
        <t>The determination of when a connection attempt has successfully
completed (and other attempts can be cancelled) depends on the
protocols being used to establish a connection. This can involve one
or more protocol handshakes.</t>
        <t>Client connections that use TCP only (without TLS or another protocol
on top, such as for unencrypted HTTP connections) will determine
successful establishment based on completing the TCP handshake
only. When TLS is used on top of of TCP (such as for encrypted HTTP
connections), clients <bcp14>MAY</bcp14> choose to wait for the TLS handshake to
successfully complete before cancelling other connection
attempts. This is particularly useful for networks in which a
TCP-terminating proxy might be causing TCP handshakes to succeed
quickly, even though end-to-end connectivity with the TLS-terminating
server will fail. QUIC connections inherently include a secure
handshake in their main handshakes, and thus only need to wait for a
single handshake to complete.</t>
        <t>While transport layer handshakes generally do not have restrictions on
attempts to establish a connection, some cryptographic handshakes may
be dependent on ServiceMode SVCB RRs and could impose limitations on
establishing a connection.  For instance, ECH-capable clients may
become SVCB-reliant clients (<xref section="3" sectionFormat="of" target="SVCB"/>) when SVCB RRs
contain the "ech" SvcParamKey <xref target="SVCB-ECH"/>. If the
client is either an SVCB-reliant client or a SVCB-optional client that
might switch to SVCB-reliant connection establishment during the
process, the client <bcp14>MUST</bcp14> wait for SVCB RRs before proceeding with the
cryptographic handshake.</t>
      </section>
      <section anchor="handling-application-layer-protocol-negotiation-alpn">
        <name>Handling Application Layer Protocol Negotiation (ALPN)</name>
        <t>The <tt>alpn</tt> and <tt>no-default-alpn</tt> SvcParamKeys in SVCB RRs indicate the
"SVCB ALPN set," which specifies the underlying transport protocols
supported by the associated service endpoint. When the client requests
SVCB RRs, it <bcp14>SHOULD</bcp14> perform the procedure specified in <xref section="7.1.2" sectionFormat="of" target="SVCB"/> to determine the underlying transport protocols that both
the client and the service endpoint support. The client <bcp14>SHOULD NOT</bcp14>
attempt to make a connection to a service endpoint whose SVCB ALPN set
does not contain any protocols that the client supports. For example,
suppose the client is an HTTP client that only supports TCP-based
versions such as HTTP/1.1 and HTTP/2, and it receives the following
HTTPS RR:</t>
        <artwork><![CDATA[
 example.com. 60 IN HTTPS 1 svc1.example.com. (
     alpn="h3" no-default-alpn ipv6hint=2001:db8::2 )
]]></artwork>
        <t>In this case, attempting a connection to 2001:db8::2 or any other
address resolved for <tt>svc1.example.com</tt> would be incorrect because the
RR indicates that <tt>svc1.example.com</tt> only supports HTTP/3, based on
the ALPN value of "h3".</t>
        <t>If the client is an HTTP client that supports both Alt-Svc
<xref target="AltSvc"/> and SVCB (HTTPS) RRs, the client <bcp14>SHOULD</bcp14> ensure
that connection attempts are consistent with both the Alt-Svc
parameters and the SVCB ALPN set, as specified in <xref section="9.3" sectionFormat="of" target="SVCB"/>.</t>
      </section>
    </section>
    <section anchor="changes">
      <name>DNS Answer Changes During Happy Eyeballs Connection Setup</name>
      <t>If, during the course of connection establishment, the DNS answers
change by either adding resolved addresses (for example due to DNS
push notifications <xref target="RFC8765"/>) or removing previously resolved
addresses (for example, due to expiry of the TTL on that DNS record),
the client should react based on its current progress. Additionally,
once A and AAAA records are received, addresses received via SVCB
hints that are not included in the A and AAAA records for the
corresponding address family <bcp14>SHOULD</bcp14> be removed from the list, as
specified in <xref section="7.3" sectionFormat="of" target="SVCB"/>.</t>
      <t>If an address is removed from the list that already had a connection
attempt started, the connection attempt <bcp14>SHOULD NOT</bcp14> be canceled, but
rather be allowed to continue. If the removed address had not yet
had a connection attempt started, it <bcp14>SHOULD</bcp14> be removed from the list
of addresses to try.</t>
      <t>If an address is added to the list, it should be sorted into the list
of addresses not yet attempted according to the rules above (see
<xref target="sorting"/>).</t>
    </section>
    <section anchor="supporting-ipv6-only-networks-with-nat64-and-dns64">
      <name>Supporting IPv6-Only Networks with NAT64 and DNS64</name>
      <t>While many IPv6 transition protocols have been standardized and
deployed, most are transparent to client devices. The combined use
of NAT64 <xref target="RFC6146"/> and DNS64 <xref target="RFC6147"/> is a popular solution that is
being deployed and requires changes in client devices. One possible
way to handle these networks is for the client device networking
stack to implement 464XLAT <xref target="RFC6877"/>. 464XLAT has the advantage of
not requiring changes to user space software; however, it requires
per-packet translation if the application is using IPv4 literals and
does not encourage client application software to support native
IPv6. On platforms that do not support 464XLAT, the Happy Eyeballs
engine <bcp14>SHOULD</bcp14> follow the recommendations in this section to properly
support IPv6-only networks with NAT64 and DNS64.</t>
      <t>The features described in this section <bcp14>SHOULD</bcp14> only be enabled when
the host detects one of these networks. A simple heuristic to
achieve that is to check if the network offers routable IPv6
addressing, does not offer routable IPv4 addressing, and offers a DNS
resolver address.</t>
      <section anchor="literals">
        <name>IPv4 Address Literals</name>
        <t>If client applications or users wish to connect to IPv4 address
literals, the Happy Eyeballs engine will need to perform NAT64
address synthesis for them. The solution is similar to "Bump-in-the-
Host" <xref target="RFC6535"/> but is implemented inside the Happy Eyeballs library.</t>
        <t>Note that some IPv4 prefixes are scoped to a given host or network, such as
0.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, and 255.255.255.255/32, and
therefore do not require NAT64 address synthesis.</t>
        <t>When an IPv4 address is passed into the library instead of a
hostname, the device queries the network for the NAT64 prefix using
"Discovery of the IPv6 Prefix Used for IPv6 Address Synthesis"
<xref target="RFC7050"/>, or uses PREF64s received from Router Advertisements <xref target="RFC8781"/>.
It then synthesizes an appropriate IPv6 address (or
several) using the encoding described in "IPv6 Addressing of IPv4/
IPv6 Translators" <xref target="RFC6052"/>. The synthesized addresses are then
inserted into the list of addresses as if they were results from DNS
queries; connection attempts follow the algorithm described above
(see <xref target="connections"/>).</t>
        <t>Such translation also applies to any IPv4 address hints received
in SVCB RRs.</t>
      </section>
      <section anchor="broken">
        <name>Hostnames with Broken AAAA Records</name>
        <t>At the time of writing, there exist a small but non-negligible number
of hostnames that resolve to valid A records and broken AAAA records,
which we define as AAAA records that contain seemingly valid IPv6
addresses but those addresses never reply when contacted on the usual
ports. These can be, for example, caused by:</t>
        <ul spacing="normal">
          <li>
            <t>Mistyping of the IPv6 address in the DNS zone configuration</t>
          </li>
          <li>
            <t>Routing black holes</t>
          </li>
          <li>
            <t>Service outages</t>
          </li>
        </ul>
        <t>While an algorithm complying with the other sections of this document
would correctly handle such hostnames on a dual-stack network, they
will not necessarily function correctly on IPv6-only networks with
NAT64 and DNS64. Since DNS64 recursive resolvers rely on the
authoritative name servers sending negative ("no error no answer")
responses for AAAA records in order to synthesize, they will not
synthesize records for these particular hostnames and will instead
pass through the broken AAAA record.</t>
        <t>In order to support these scenarios, the client device needs to query
the DNS for the A record and then perform local synthesis. Since
these types of hostnames are rare and, in order to minimize load on
DNS servers, this A query should only be performed when the client
has given up on the AAAA records it initially received. This can be
achieved by using a longer timeout, referred to as the "Last Resort
Local Synthesis Delay"; the delay is recommended to be 2 seconds.
The timer is started when the last connection attempt is fired. If
no connection attempt has succeeded when this timer fires, the device
queries the DNS for the IPv4 address and, on reception of a valid A
record, treats it as if it were provided by the application (see
<xref target="literals"/>).</t>
      </section>
      <section anchor="virtual-private-networks">
        <name>Virtual Private Networks</name>
        <t>Some Virtual Private Networks (VPNs) may be configured to handle DNS
queries from the device. The configuration could encompass all
queries or a subset such as "*.internal.example.com". These VPNs can
also be configured to only route part of the IPv4 address space, such
as 192.0.2.0/24. However, if an internal hostname resolves to an
external IPv4 address, these can cause issues if the underlying
network is IPv6-only. As an example, let's assume that
"www.internal.example.com" has exactly one A record, 198.51.100.42,
and no AAAA records. The client will send the DNS query to the
company's recursive resolver and that resolver will reply with these
records. The device now only has an IPv4 address to connect to and
no route to that address. Since the company's resolver does not know
the NAT64 prefix of the underlying network, it cannot synthesize the
address. Similarly, the underlying network's DNS64 recursive
resolver does not know the company's internal addresses, so it cannot
resolve the hostname. Because of this, the client device needs to
resolve the A record using the company's resolver and then locally
synthesize an IPv6 address, as if the resolved IPv4 address were
provided by the application (<xref target="literals"/>).</t>
      </section>
    </section>
    <section anchor="summary-of-configurable-values">
      <name>Summary of Configurable Values</name>
      <t>The values that may be configured as defaults on a client for use in
Happy Eyeballs are as follows:</t>
      <ul spacing="normal">
        <li>
          <t>Resolution Delay (<xref target="query"/>): The time to wait for a AAAA response
after receiving an A response. Recommended to be 50 milliseconds.</t>
        </li>
        <li>
          <t>Preferred Protocol Combination Count (<xref target="sorting"/>): The number of
addresses belonging to the preferred address family (such as IPv6) using
the preferred protocol (such as QUIC) that should be attempted before
attempting the next combination of address family and protocol.
Recommended to be 1; 2 may be used to more aggressively favor a
particular combination of address family and protocol.</t>
        </li>
        <li>
          <t>Connection Attempt Delay (<xref target="connections"/>): The time to wait between
connection attempts in the absence of RTT data. Recommended to be
250 milliseconds.</t>
        </li>
        <li>
          <t>Minimum Connection Attempt Delay (<xref target="connections"/>): The minimum time to
wait between connection attempts. Recommended to be 100
milliseconds. <bcp14>MUST NOT</bcp14> be less than 10 milliseconds.</t>
        </li>
        <li>
          <t>Maximum Connection Attempt Delay (<xref target="connections"/>): The maximum time to
wait between connection attempts. Recommended to be 2 seconds.</t>
        </li>
        <li>
          <t>Last Resort Local Synthesis Delay (<xref target="broken"/>): The time to wait
after starting the last IPv6 attempt and before sending the A
query. Recommended to be 2 seconds.</t>
        </li>
      </ul>
      <t>The delay values described in this section were determined
empirically by measuring the timing of connections on a very wide set
of production devices. They were picked to reduce wait times noticed
by users while minimizing load on the network. As time passes, it is
expected that the properties of networks will evolve. For that
reason, it is expected that these values will change over time.
Implementors should feel welcome to use different values without
changing this specification. Since IPv6 issues are expected to be
less common, the delays <bcp14>SHOULD</bcp14> be increased with time as client
software is updated.</t>
    </section>
    <section anchor="limitations">
      <name>Limitations</name>
      <t>Happy Eyeballs will handle initial connection failures at the transport
layer (such as TCP or QUIC); however, other failures or performance
issues may still affect the chosen connection.</t>
      <section anchor="path-maximum-transmission-unit-discovery">
        <name>Path Maximum Transmission Unit Discovery</name>
        <t>For TCP connections, since Happy Eyeballs is only active during the
initial handshake and TCP does not pass the initial handshake, issues
related to MTU can be masked and go unnoticed during Happy Eyeballs.
For QUIC connections, a minimum MTU of at least 1200 bytes
<xref section="8.1-5" sectionFormat="comma" target="RFC9000"/> is guaranteed, but there is a chance that
larger values may not be available. Solving this issue is out of scope
of this document. One solution is to use "Packetization Layer Path MTU
Discovery" <xref target="RFC4821"/>.</t>
      </section>
      <section anchor="application-layer">
        <name>Application Layer</name>
        <t>If the DNS returns multiple addresses for different application
servers, the application itself may not be operational and functional
on all of them. Common examples include Transport Layer Security
(TLS) and HTTP.</t>
      </section>
      <section anchor="hiding-operational-issues">
        <name>Hiding Operational Issues</name>
        <t>It has been observed in practice that Happy Eyeballs can hide issues
in networks. For example, if a misconfiguration causes IPv6 to
consistently fail on a given network while IPv4 is still functional,
Happy Eyeballs may impair the operator's ability to notice the issue.
It is recommended that network operators deploy external means of
monitoring to ensure functionality of all address families.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Note that applications should not rely upon a stable hostname-to-
address mapping to ensure any security properties, since DNS results
may change between queries. Happy Eyeballs may make it more likely
that subsequent connections to a single hostname use different IP
addresses.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not require any IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="SVCB">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </reference>
        <reference anchor="ECH">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Windy Hill Systems, LLC</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cryptography Consulting LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-18"/>
        </reference>
        <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="SVCB-ECH">
          <front>
            <title>Bootstrapping TLS Encrypted ClientHello with DNS Service Bindings</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Google</organization>
            </author>
            <author fullname="Mike Bishop" initials="M." surname="Bishop">
              <organization>Akamai Technologies</organization>
            </author>
            <author fullname="Erik Nygren" initials="E." surname="Nygren">
              <organization>Akamai Technologies</organization>
            </author>
            <date day="26" month="September" year="2023"/>
            <abstract>
              <t>   To use TLS Encrypted ClientHello (ECH) the client needs to learn the
   ECH configuration for a server before it attempts a connection to the
   server.  This specification provides a mechanism for conveying the
   ECH configuration information via DNS, using a SVCB or HTTPS record.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-svcb-ech-00"/>
        </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="RFC6298">
          <front>
            <title>Computing TCP's Retransmission Timer</title>
            <author fullname="V. Paxson" initials="V." surname="Paxson"/>
            <author fullname="M. Allman" initials="M." surname="Allman"/>
            <author fullname="J. Chu" initials="J." surname="Chu"/>
            <author fullname="M. Sargent" initials="M." surname="Sargent"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document defines the standard algorithm that Transmission Control Protocol (TCP) senders are required to use to compute and manage their retransmission timer. It expands on the discussion in Section 4.2.3.1 of RFC 1122 and upgrades the requirement of supporting the algorithm from a SHOULD to a MUST. This document obsoletes RFC 2988. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6298"/>
          <seriesInfo name="DOI" value="10.17487/RFC6298"/>
        </reference>
        <reference anchor="RFC6146">
          <front>
            <title>Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers</title>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="I. van Beijnum" initials="I." surname="van Beijnum"/>
            <date month="April" year="2011"/>
          </front>
          <seriesInfo name="RFC" value="6146"/>
          <seriesInfo name="DOI" value="10.17487/RFC6146"/>
        </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="RFC6535">
          <front>
            <title>Dual-Stack Hosts Using "Bump-in-the-Host" (BIH)</title>
            <author fullname="B. Huang" initials="B." surname="Huang"/>
            <author fullname="H. Deng" initials="H." surname="Deng"/>
            <author fullname="T. Savolainen" initials="T." surname="Savolainen"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>Bump-in-the-Host (BIH) is a host-based IPv4 to IPv6 protocol translation mechanism that allows a class of IPv4-only applications that work through NATs to communicate with IPv6-only peers. The host on which applications are running may be connected to IPv6-only or dual-stack access networks. BIH hides IPv6 and makes the IPv4-only applications think they are talking with IPv4 peers by local synthesis of IPv4 addresses. This document obsoletes RFC 2767 and RFC 3338. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6535"/>
          <seriesInfo name="DOI" value="10.17487/RFC6535"/>
        </reference>
        <reference anchor="RFC7050">
          <front>
            <title>Discovery of the IPv6 Prefix Used for IPv6 Address Synthesis</title>
            <author fullname="T. Savolainen" initials="T." surname="Savolainen"/>
            <author fullname="J. Korhonen" initials="J." surname="Korhonen"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <date month="November" year="2013"/>
            <abstract>
              <t>This document describes a method for detecting the presence of DNS64 and for learning the IPv6 prefix used for protocol translation on an access network. The method depends on the existence of a well-known IPv4-only fully qualified domain name "ipv4only.arpa.". The information learned enables nodes to perform local IPv6 address synthesis and to potentially avoid NAT64 on dual-stack and multi-interface deployments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7050"/>
          <seriesInfo name="DOI" value="10.17487/RFC7050"/>
        </reference>
        <reference anchor="RFC8781">
          <front>
            <title>Discovering PREF64 in Router Advertisements</title>
            <author fullname="L. Colitti" initials="L." surname="Colitti"/>
            <author fullname="J. Linkova" initials="J." surname="Linkova"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document specifies a Neighbor Discovery option to be used in Router Advertisements (RAs) to communicate prefixes of Network Address and Protocol Translation from IPv6 clients to IPv4 servers (NAT64) to hosts.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8781"/>
          <seriesInfo name="DOI" value="10.17487/RFC8781"/>
        </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="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC4821">
          <front>
            <title>Packetization Layer Path MTU Discovery</title>
            <author fullname="M. Mathis" initials="M." surname="Mathis"/>
            <author fullname="J. Heffner" initials="J." surname="Heffner"/>
            <date month="March" year="2007"/>
            <abstract>
              <t>This document describes a robust method for Path MTU Discovery (PMTUD) that relies on TCP or some other Packetization Layer to probe an Internet path with progressively larger packets. This method is described as an extension to RFC 1191 and RFC 1981, which specify ICMP-based Path MTU Discovery for IP versions 4 and 6, respectively. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4821"/>
          <seriesInfo name="DOI" value="10.17487/RFC4821"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="HEV2">
          <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>
        <reference anchor="RFC6555">
          <front>
            <title>Happy Eyeballs: Success with Dual-Stack Hosts</title>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="A. Yourtchenko" initials="A." surname="Yourtchenko"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>When a server's IPv4 path and protocol are working, but the server's IPv6 path and protocol are not working, a dual-stack client application experiences significant connection delay compared to an IPv4-only client. This is undesirable because it causes the dual- stack client to have a worse user experience. This document specifies requirements for algorithms that reduce this user-visible delay and provides an algorithm. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6555"/>
          <seriesInfo name="DOI" value="10.17487/RFC6555"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="AltSvc">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="IPV6">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC7413">
          <front>
            <title>TCP Fast Open</title>
            <author fullname="Y. Cheng" initials="Y." surname="Cheng"/>
            <author fullname="J. Chu" initials="J." surname="Chu"/>
            <author fullname="S. Radhakrishnan" initials="S." surname="Radhakrishnan"/>
            <author fullname="A. Jain" initials="A." surname="Jain"/>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document describes an experimental TCP mechanism called TCP Fast Open (TFO). TFO allows data to be carried in the SYN and SYN-ACK packets and consumed by the receiving end during the initial connection handshake, and saves up to one full round-trip time (RTT) compared to the standard TCP, which requires a three-way handshake (3WHS) to complete before data can be exchanged. However, TFO deviates from the standard TCP semantics, since the data in the SYN could be replayed to an application in some rare circumstances. Applications should not use TFO unless they can tolerate this issue, as detailed in the Applicability section.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7413"/>
          <seriesInfo name="DOI" value="10.17487/RFC7413"/>
        </reference>
        <reference anchor="RFC9002">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="RFC8765">
          <front>
            <title>DNS Push Notifications</title>
            <author fullname="T. Pusateri" initials="T." surname="Pusateri"/>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>The Domain Name System (DNS) was designed to return matching records efficiently for queries for data that are relatively static. When those records change frequently, DNS is still efficient at returning the updated results when polled, as long as the polling rate is not too high. But, there exists no mechanism for a client to be asynchronously notified when these changes occur. This document defines a mechanism for a client to be notified of such changes to DNS records, called DNS Push Notifications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8765"/>
          <seriesInfo name="DOI" value="10.17487/RFC8765"/>
        </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>
      </references>
    </references>
    <?line 658?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors thank Dan Wing, Andrew Yourtchenko, and everyone else who
worked on the original Happy Eyeballs design <xref target="RFC6555"/>, Josh
Graessley, Stuart Cheshire, and the rest of team at Apple that helped
implement and instrument this algorithm, and Jason Fesler and Paul
Saab who helped measure and refine this algorithm. The authors would
also like to thank Fred Baker, Nick Chettle, Lorenzo Colitti, Igor
Gashinsky, Geoff Huston, Jen Linkova, Paul Hoffman, Philip Homburg,
Warren Kumari, Erik Nygren, Jordi Palet Martinez, Rui Paulo, Stephen
Strowes, Jinmei Tatuya, Dave Thaler, Joe Touch, and James Woodyatt
for their input and contributions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1923IbSZLle3xFNPVQ5BgAkdRdNTXdFKUqqZuSOCSratvW
1qwCQADIViITkxdSKJn6W/Zb9svWj7tHZGQCVPXavs6MdYlIZEZGePjl+C0w
Ho9NkzW5f2kP3rrNZmvfbP3U5Xltf/FVnZWFffTSvvJN4yt7XhaFnzXZbdZs
7c91VixxadZWlS9m2wPjptPK3+6OdPvowMxc45dltX1ps2JRGjMvZ4Vb02vn
lVs0441r8+349mm5qccrPD32+vT49tH4+MTU7XSd1ZhQs93QY+/e3PxoinY9
9dVLM6fBX5pZWdS+qNv6pW2q1huaySPzwLrKu5f27OrNGX24K6tPy6psNy/t
rz/ZX+kTVvETrphPfktfz18aO7bZ5vap/vsY/1ZuRjfir2a2wT//1WYz/Fvf
zqb4189W5tYXLc3jgbXxFfggE+6/iy6vXZbjlr/4z269yf1kVq5x3VWz1Uu7
appN/fLhw+TLhzQcDZ01q3ZKRG4WTLSHQsAdoh3QvTnRpW7o3jCaPjORQSZZ
ed/TD/+FbZmsmnV+YIxrm1VZgWz0SmsXbZ7L1t6U6/XWXmIM/qaslq7IfncN
7SLtyIbWZd8VM/7OCzkOGn7lX9xGF32wO+xrd5vN7fVslRXu9yyM/NL+VJZL
GvHi4rw34rzWOyeZbxZ/WeLyPSN/yOarzP7V/aP9w1EL3PoPuvMvS77hnhH/
5ouMXm/f1ats6ug/ewhxzxv49t7opiirNT10S0xmIEbdJzMej62b1g0xamPM
e1dsLT2zbun1/Bq7qcqmnJUkjuXGV3SNeLG8JaluVt6uy7mvCtoMEvPCN7at
vVmVdYNF1BN7s/K1t+Wi8YWtfF3mt942pV23eZPxJl5aN5/TN7WvR9a72Ypu
NncrWjqx+dauHD0wzxYLT5qisfR+nnsx89YVc5pop1fMbOWwBl9ldZPN6OXX
Ge6rN36WLbJZ9yKiYvhgF26d5RldO3x3SQJL39C/T4/45VNvp3k5++TnIzut
yk++GOFRUijjctNka5dbIo+ztG5oh5Gd0UhFU5tm5RrrSPOtN0231jBZUjak
yuyGZpvnPpc1OkvTx3Rp+SR5bppntIlEaZc8R9SuPCuQTySKRNystqQO2zVo
o+v0tak83VJ5XKUFYrE5KVAS3HVteWqVn7f0qgbP04ZV49uszqY0xbnPad1E
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
zgtryAFolXH/L0CGF77geAAA

-->

</rfc>
