<?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.18 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pauly-v6ops-happy-eyeballs-v3-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.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-02"/>
    <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="August" day="27"/>
    <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 <bcp14>SHOULD</bcp14> use PREF64s received from Router
Advertisements <xref target="RFC8781"/>. If the network does not provide PREF64s,
the device <bcp14>SHOULD</bcp14> query the network for the NAT64 prefix using
"Discovery of the IPv6 Prefix Used for IPv6 Address Synthesis"
<xref target="RFC7050"/>. 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 anchor="sec-combined-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>Independent</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="August" 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-20"/>
        </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>Meta Platforms, Inc.</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="20" month="August" year="2024"/>
            <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-04"/>
        </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="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="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="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 659?>

<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+1963LbSJbm/3yKbPlHSRMkLcm2bKumpluWXWV1y7ZGUlVt
x8ZGVBJMkmiBAAcJSGY53M+yz7JPtueWN5By9cb+nZnosggCicyT5/KdW3I8
Hquu7Cp7qvfem/V6o99t7NRUldO/2NaVTa2fneo3tutsq8+burZFV96X3Ub/
7Mp6gZeKvm1tXWz2lJlOW3u/PdL9sz1VmM4umnZzqst63ig1a4rarOC1s9bM
u/Ha9NVmfH/SrN14iU+PrTw9vn82PjxWrp+uSocT6jZreOzi3e2Pqu5XU9ue
qhkMfqqKpna2dr071V3bWwUzeaaeaNNac6rPrt+dwYeHpr1btE2/PtW//qR/
hU+4ip/wirqzG/h6dqr0WJfr+xP59zn+25oCbsS/umKN//xXXxb4r7svpviv
LZbq3tY9zOOJ1uEV+IEnnL8LLq9MWeEtf7GfzWpd2UnRrPC6aYvlqV523dqd
Pn2afPkUhoOhy27ZT4HI3ZyI9pQJuEW0Pbi3Arq4Du71o8kzEx5kUjaPPf30
X9iWybJbVXtKmb5bNi2SDV6p9byvKt7a22a12ugrHIO+adqFqcvfTQe7CDuy
hnXpi7qg7yyTY6+jV/7FrGXRe9vDvjX35UzfFMuyNr+XfuRT/VPTLGDEy8vz
bMSZkzsnpe3mf1ng5UdG/ljOlqX+q/lH/4ej1njrP+DOvyzohkdG/JutS3i9
vnDLcmrgPzsI8cgb6PZsdFU37QoeugcmUyhG8ZMaj8faTF0HjNop9cHUGw3P
rHp4Pb1Gr9uma4oGxLFZ2xauAS829yDV3dLqVTOzbQ2bAWJe2073zqpl4zpc
hJvo26V1Vjfzzta6ta6p7q3uGr3qq66kTbzSZjaDb5x1I21NsYSb1cMSlg5s
vtFLAw/MyvncgqboNLyf5l4XVpt6BhONekUVS4NrsG3purKAl9+UeJ9b26Kc
l0V8EVDRf9BzsyqrEq7tX1yBwMI38O/JAb18avW0aoo7Oxvpadvc2XqEj4JC
GTfrrlyZSgN5jIZ1o3YY6QJGqjunuqXptAHNt1p3ca1+sqBsQJXpNcy2qmzF
azQapo/TheWD5JlpVcImAqVN8hxQu7WkQO5AFIG4pdOgDvsV0kbWaZ1qLdzS
WrwKC8TFVqBAQXBXTtPUWjvr4VUdPg8b1o7vS1dOYYozW8G6gbIKNh1kBehi
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

-->

</rfc>
