<?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.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pauly-v6ops-happy-eyeballs-v3-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <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-00"/>
    <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="2023" month="October" day="23"/>
    <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 both records are 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
address of the other protocol type and same address family, and then
an endpoint from the same 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, and then the first QUIC IPv4 address should be moved up
in the list to be third 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 prioirity 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 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="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.</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>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"/> and 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 (DNS SVCB and HTTPS RRs)</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="11" month="March" year="2023"/>
            <abstract>
              <t>   This document specifies the "SVCB" 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 [HTTP].  By
   providing more information to the client before it attempts to
   establish a connection, these records offer potential benefits to
   both performance and privacy.

   TO BE REMOVED: This document is being collaborated on in Github at:
   https://github.com/MikeBishop/dns-alt-svc
   (https://github.com/MikeBishop/dns-alt-svc).  The most recent working
   version of the document, open issues, etc. should all be available
   there.  The authors (gratefully) accept pull requests.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dnsop-svcb-https-12"/>
        </reference>
        <reference anchor="ECH">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="9" month="October" year="2023"/>
            <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-17"/>
        </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="11" month="March" 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-sbn-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="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 639?>

<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+1963IbR5Lu/3qKGuqHxQ0AInWzLO/sDHWxpRndlqTtdZw4
ES4ABaJHjW5sX0jBCs2z7LOcJzv5ZWZdugFqZmP/7kSMRYLdVVlZefnyUoXp
dGq6oiv9U3v0ym23O/ty5+euLFv7s2/aoq7sg6f2me8639jndVX5RVdcF93O
/tQW1RU+WvRN46vF7si4+bzx1/sjXT84MgvX+au62T21RbWqjVnWi8ptaNpl
41bddOv6cje9flxv2+kab0+9vj29fjA9OTFtP98ULQjqdlt67fXLyx9M1W/m
vnlqljT4U7Ooq9ZXbd8+tV3Te0OUPDB3rGu8e2rPzl+e0S83dfPxqqn77VP7
y4/2F/oNq/gRn5iPfkd/Xj41dmqL7fVj/fch/m3cgh7ET91ii3/+sy8W+Le9
Xszxr1+szbWveqLjjrVxCvwiBA/noo83rijxyJ/9J7fZln62qDf43DWL9VO7
7rpt+/TeveyP92g4Grro1v2cmNytmGn3hIF7TDuiZ0viS9vRs2E0fWcmg8yK
+ra37/0T2zJbd5vyyBjXd+u6AdtoSmtXfVnK1l7Wm83OfsAY/Je6uXJV8bvr
aBdpR7a0Lvu6WvDfvLDjqOMp/+y2uuij/WFfuOtiaS8W66Jyvxdh5Kf2x7q+
ohHfvHk+GHHZ6pOzwnerP1/h41tGflcs14X9i/tb/w9HrfDo3+jJP1/xA7eM
+FdfFTS9fd2ui7mj/xxgxC0z8OOD0U1VNxt66ZqEzECN0m9mOp1aN287EtTO
mLeu2ll6Z9PT9DyN3TZ1Vy9qUsd66xv6jGSxviat7tbebuqlbyraDFLzyne2
b71Z122HRbQze7n2rbf1qvOVbXxbl9fedrXd9GVX8CZ+sG65pL+0vp1Y7xZr
etjcrGnpJOY7u3b0wrJYrTxZis7S/Ex7tfDWVUsiNNkVs1g7rME3RdsVC5r8
osBz7dYvilWxSBMRF8MvduU2RVnQZ3dffyCFpb/Qv4+PefK5t/OyXnz0y4md
N/VHX03wKhmUab3tio0rLbHHWVo3rMPELmikqmtNt3addWT5NtsurTUQS8aG
TJndErVl6UtZo7NEPsil5ZPmuXlZ0CYSp132HnG78WxAPpIqEnOL1pI57Dfg
ja7Tt6bx9Ejj8SktEIstyYCS4m5ay6Q1ftnTVB3epw1rptdFW8yJxKUvad3E
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
dgAA

-->

</rfc>
