<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-v6ops-aaaa-filtering-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="AAAA filtering considerations">A recommendation for filtering address records in stub resolvers</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-aaaa-filtering-00"/>
    <author fullname="Ondřej Caletka">
      <organization>RIPE NCC</organization>
      <address>
        <email>ondrej@caletka.cz</email>
      </address>
    </author>
    <date year="2025" month="October" day="15"/>
    <area>OPS</area>
    <workgroup>IPv6 operations</workgroup>
    <keyword>IPv6</keyword>
    <keyword>DNS</keyword>
    <keyword>Address records</keyword>
    <abstract>
      <?line 68?>

<t>Since IPv4 and IPv6 addresses are represented by different resource records in
the Domain Name System, operating systems capable of running both IPv4 and IPv6 need to execute
two queries when resolving a host name. This document discusses the conditions under
which a stub resolver can optimize the process by not sending one of the
queries if the host is connected to a single-stack network.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://oskar456.github.io/ietf-aaaa-filtering/draft-ietf-v6ops-aaaa-filtering.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-v6ops-aaaa-filtering/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        v6ops Working Group mailing list (<eref target="mailto:v6ops@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/v6ops/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/v6ops/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/oskar456/ietf-aaaa-filtering"/>.</t>
    </note>
  </front>
  <middle>
    <?line 76?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Most operating systems support both the IPv6 and the IPv4 networking stack. When such a
host is connected to a dual-stack network, whenever a process requests
resolution of a DNS name, two DNS queries need to be issued - one for an A
record representing an IPv4 address, and one for a AAAA record representing an IPv6
address. The results of such queries are then merged and ordered based on
<xref target="RFC6724"/> or used as input for the Happy Eyeballs algorithm <xref target="RFC8305"/>.</t>
      <t>When such a host is connected to a single-stack network, only one DNS query
needs to be performed: there is no reason for querying for a AAAA record if the
host has no IPv6 connectivity. Similarly if the host does not have any IPv4
connectivity, neither native nor provided by some other mechanism like NAT64
<xref target="RFC6146"/>,
querying for an A record is useless. Such an optimization however has to consider
any possible means of obtaining connectivity for a particular address family,
including but not limited to IPv6 Transition Mechanisms or VPNs.</t>
      <t>Please note that Multicast DNS <xref target="RFC6762"/> or similar link-local name resolution
protocols are not considered in scope of this document.</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="problem-statement">
      <name>Problem statement</name>
      <t>Traditional DNS resolution uses UDP messages, capable of carrying only either A
query and response containing IPv4 addresses or AAAA query and response
containing IPv6 addresses. A simple dual-stack capable host has to wait until
both queries are finished before it can sort the results and start establishing
the connection.</t>
      <t>If the network suffers from packet loss, finishing these two DNS queries can
cause delays noticeable by users. Not resolving addresses for the address family
the host is not connected to can thus mitigate impact of slow DNS resolution
without compromising functionality.</t>
      <t>Combining A and AAAA queries into a single DNS query
<xref target="I-D.ietf-dnssd-multi-qtypes"/> mitigates the issue as well, however this depends
on particular resolver supporting this feature.</t>
    </section>
    <section anchor="connectivity-detection-algorithms">
      <name>Connectivity detection algorithms</name>
      <t>Whenever an application asks the stub resolver to resolve a domain name without
specifying the address family, the stub resolver follows one of the algorithms
specified below:</t>
      <section anchor="routing-table-based-algorithm">
        <name>Routing table based algorithm</name>
        <t>This algorithm assumes that the host has connectivity of particular address
family if there is at least one route to a destination that is not in Link-Local
address space. If there are only routes for destinations in the Link-Local
address space, the host is not able to send any packets towards any destination
address that could be possibly obtained from the DNS. Therefore, sending an
address query for that particular address family is unnecessary.</t>
        <t>For each address family supported by the operating system:</t>
        <ol spacing="normal" type="1"><li>
            <t>Read the routing table of the address family;</t>
          </li>
          <li>
            <t>Remove all the routes towards Link-Local destinations from the routing table, ie.:
            </t>
            <ul spacing="normal">
              <li>
                <t>remove routes towards addresses from Section 2.5.6 of <xref target="RFC4291"/> from the IPv6 routing table</t>
              </li>
              <li>
                <t>remove routes towards addresses from <xref target="RFC3927"/> from the IPv4 routing table</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the routing table is not empty, send the corresponding name query to the DNS:
            </t>
            <ul spacing="normal">
              <li>
                <t>AAAA query for IPv6</t>
              </li>
              <li>
                <t>A query for IPv4</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="ip-address-based-algorithm">
        <name>IP address based algorithm</name>
        <t>As an alternative to analyzing the routing tables, the stub resolver might
choose to determine the connectivity by looking at the addresses configured on
all network interfaces. This is similar to an application using the flag
<tt>AI_ADDRCONFIG</tt> when interacting with the stub resolver using <tt>getaddrinfo()</tt>
function <xref target="GAI"/>.</t>
        <t>For each address family supported by the operating system:</t>
        <ol spacing="normal" type="1"><li>
            <t>Collect all addresses configured on all interfaces</t>
          </li>
          <li>
            <t>Remove all Link-Local addresses from the list, ie.:
            </t>
            <ul spacing="normal">
              <li>
                <t>remove addresses from Section 2.5.6 of <xref target="RFC4291"/> from the list of IPv6 addresses</t>
              </li>
              <li>
                <t>remove addresses from <xref target="RFC3927"/> from the list of IPv4 addresses</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the list of addresses is not empty, send the corresponding name query to the DNS:
            </t>
            <ul spacing="normal">
              <li>
                <t>AAAA query for IPv6</t>
              </li>
              <li>
                <t>A query for IPv4</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="connectivity-detection-considerations">
      <name>Connectivity detection considerations</name>
      <t>When detecting the connectivity presence, it is necessary to consider ANY routes
towards non Link-Local address space and/or IP addresses on ALL interfaces and
not just the default route and/or just the default network interface. The
implementations <bcp14>SHOULD NOT</bcp14> try to determine connectivity by hardcoding a
particular publicly reachable IP address <xref target="CHROME"/>.</t>
      <t>Improper detection can cause issues for:</t>
      <ul spacing="normal">
        <li>
          <t>private networks without reachability to the Internet</t>
        </li>
        <li>
          <t>VPN tunnels using different address family than the native address
family of the host, providing possibly only a limited subset of routes
(split-mode VPN)</t>
        </li>
      </ul>
      <section anchor="ipv4-connectivity-provided-by-nat64">
        <name>IPv4 connectivity provided by NAT64</name>
        <t>Even if the host has no routes towards IPv4 address space and/or no IPv4
addresses on interfaces, it can still have IPv4 connectivity provided by some
transition mechanism. In case of NAT64 <xref target="RFC6146"/>, this leads to three possible
scenarios:</t>
        <ol spacing="normal" type="1"><li>
            <t>464XLAT <xref target="RFC6877"/> is used. In this case the host has a default route
towards the CLAT translator, so the A queries are not suppressed.  This
would be also the case for any other transition mechanism providing IPv4 as
a service over IPv6 bearer.</t>
          </li>
          <li>
            <t>Only DNS64 <xref target="RFC6147"/> is used. In this case, it is correct not to do A
queries because the host cannot send any native IPv4 packets.</t>
          </li>
          <li>
            <t>The host supports converting IPv4 API calls into IPv6 API calls similarly
to Bump-in-the-Host <xref target="RFC6535"/> API translator alternative. In this case,
such a translator can utilize A queries even if the host cannot send any
native IPv4 packets. Therefore such an API translator or a high level
library like <xref target="I-D.ietf-happy-happyeyeballs-v3"/> <bcp14>SHOULD NOT</bcp14> suppress A
queries if it is aware of the presence of NAT64 in the network.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="filtering-dns-results">
      <name>Filtering DNS results</name>
      <t>If the host does not have full connectivity for both address families (there
are no default gateways for both IPv4 and IPv6), it is possible that the IP(v6)
address obtained from the DNS falls into the address space not covered by a
route. This should not be problem for a properly written application, since
<xref target="RFC6724"/> requires applications to try connecting to all addresses received from
the stub resolver.</t>
      <t>However, in order to minimize the impact on poorly designed applications, the stub
resolver <bcp14>MAY</bcp14> remove addresses not covered by an entry in the routing table from
the list of DNS query results sent to the application.</t>
      <section anchor="filtering-ipv4-mapped-addresses">
        <name>Filtering IPv4-mapped addresses</name>
        <t>As an extension to the filtering of DNS results, the stub resolver <bcp14>MAY</bcp14> also
remove IPv4-mapped IPv6 addresses (Section 2.5.5.2 of <xref target="RFC4291"/>) from the list of DNS
query results sent to the application.</t>
        <t>IPv4-mapped IPv6 addresses are not valid destination addresses <xref target="IANA"/>,
therefore they should never appear in AAAA records. Sending IPv4-mapped IPv6
address to the application might cause address family confusion for applications
using IPv4 compatibility of IPv6 sockets <xref target="RFC3493"/>.</t>
      </section>
    </section>
    <section anchor="effects-of-not-doing-address-record-filtering">
      <name>Effects of not doing address record filtering</name>
      <t>The optimization described above is <bcp14>OPTIONAL</bcp14>. A stub resolver of a dual-stack
capable host can always issue both A and AAAA queries to the DNS, merge and
order the results and send them to the application even if it has only
single-stack connectivity. Sending packets to a destination not covered by an
entry in the routing table will be immediately refused, so a properly written
application will quickly iterate through the list of addresses and finally
select the one using the same address family as the connectivity of the host.</t>
      <t>However, it should be noted that such behavior is not only less robust against
DNS resolution delays but also increases load on the DNS system.  If such an
optimization is removed (for instance by a software update) on a large
single-stack network, this might overload parts of the DNS infrastructure, since
the number of queries will double.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Reducing the number of queries allows an attacker observing the DNS traffic to
figure out which address families the host uses.</t>
      <t>Suddendly disabling the optimization can overload parts of the DNS
infrastructure due to doubling the number of queries.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3493">
          <front>
            <title>Basic Socket Interface Extensions for IPv6</title>
            <author fullname="R. Gilligan" initials="R." surname="Gilligan"/>
            <author fullname="S. Thomson" initials="S." surname="Thomson"/>
            <author fullname="J. Bound" initials="J." surname="Bound"/>
            <author fullname="J. McCann" initials="J." surname="McCann"/>
            <author fullname="W. Stevens" initials="W." surname="Stevens"/>
            <date month="February" year="2003"/>
            <abstract>
              <t>The de facto standard Application Program Interface (API) for TCP/IP applications is the "sockets" interface. Although this API was developed for Unix in the early 1980s it has also been implemented on a wide variety of non-Unix systems. TCP/IP applications written using the sockets API have in the past enjoyed a high degree of portability and we would like the same portability with IPv6 applications. But changes are required to the sockets API to support IPv6 and this memo describes these changes. These include a new socket address structure to carry IPv6 addresses, new address conversion functions, and some new socket options. These extensions are designed to provide access to the basic IPv6 features required by TCP and UDP applications, including multicasting, while introducing a minimum of change into the system and providing complete compatibility for existing IPv4 applications. Additional extensions for advanced IPv6 features (raw sockets and access to the IPv6 extension headers) are defined in another document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3493"/>
          <seriesInfo name="DOI" value="10.17487/RFC3493"/>
        </reference>
        <reference anchor="RFC3927">
          <front>
            <title>Dynamic Configuration of IPv4 Link-Local Addresses</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="E. Guttman" initials="E." surname="Guttman"/>
            <date month="May" year="2005"/>
            <abstract>
              <t>To participate in wide-area IP networking, a host needs to be configured with IP addresses for its interfaces, either manually by the user or automatically from a source on the network such as a Dynamic Host Configuration Protocol (DHCP) server. Unfortunately, such address configuration information may not always be available. It is therefore beneficial for a host to be able to depend on a useful subset of IP networking functions even when no address configuration is available. This document describes how a host may automatically configure an interface with an IPv4 address within the 169.254/16 prefix that is valid for communication with other devices connected to the same physical (or logical) link.</t>
              <t>IPv4 Link-Local addresses are not suitable for communication with devices not directly connected to the same physical (or logical) link, and are only used where stable, routable addresses are not available (such as on ad hoc or isolated networks). This document does not recommend that IPv4 Link-Local addresses and routable addresses be configured simultaneously on the same interface. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3927"/>
          <seriesInfo name="DOI" value="10.17487/RFC3927"/>
        </reference>
        <reference anchor="RFC4291">
          <front>
            <title>IP Version 6 Addressing Architecture</title>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <date month="February" year="2006"/>
            <abstract>
              <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
              <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4291"/>
          <seriesInfo name="DOI" value="10.17487/RFC4291"/>
        </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="RFC6762">
          <front>
            <title>Multicast DNS</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
            <date month="February" year="2013"/>
            <abstract>
              <t>As networked devices become smaller, more portable, and more ubiquitous, the ability to operate with less configured infrastructure is increasingly important. In particular, the ability to look up DNS resource record data types (including, but not limited to, host names) in the absence of a conventional managed DNS server is useful.</t>
              <t>Multicast DNS (mDNS) provides the ability to perform DNS-like operations on the local link in the absence of any conventional Unicast DNS server. In addition, Multicast DNS designates a portion of the DNS namespace to be free for local use, without the need to pay any annual fee, and without the need to set up delegations or otherwise configure a conventional DNS server to answer for those names.</t>
              <t>The primary benefits of Multicast DNS names are that (i) they require little or no administration or configuration to set them up, (ii) they work when no infrastructure is present, and (iii) they work during infrastructure failures.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6762"/>
          <seriesInfo name="DOI" value="10.17487/RFC6762"/>
        </reference>
        <reference anchor="RFC8305">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames. These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics. Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly. This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs". This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
        <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IANA" target="https://www.iana.org/assignments/iana-ipv6-special-registry">
          <front>
            <title>IANA IPv6 Special-Purpose Address Registry</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="GAI" target="https://pubs.opengroup.org/onlinepubs/9799919799/functions/freeaddrinfo.html">
          <front>
            <title>freeaddrinfo, getaddrinfo - The Open Group Base Specifications Issue 8, IEEE Std 1003.1-2024</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CHROME" target="https://chromium.googlesource.com/chromium/src/+/0de3ceea881115dd18e79e1d9ea4e090c655996b/net/dns/README.md#IPv6-and-connectivity">
          <front>
            <title>Chrome Host Resolution - IPv6 and connectivity</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </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"/>
            <abstract>
              <t>This document describes stateful NAT64 translation, which allows IPv6-only clients to contact IPv4 servers using unicast UDP, TCP, or ICMP. One or more public IPv4 addresses assigned to a NAT64 translator are shared among several IPv6-only clients. When stateful NAT64 is used in conjunction with DNS64, no changes are usually required in the IPv6 client or the IPv4 server.</t>
            </abstract>
          </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="RFC6877">
          <front>
            <title>464XLAT: Combination of Stateful and Stateless Translation</title>
            <author fullname="M. Mawatari" initials="M." surname="Mawatari"/>
            <author fullname="M. Kawashima" initials="M." surname="Kawashima"/>
            <author fullname="C. Byrne" initials="C." surname="Byrne"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document describes an architecture (464XLAT) for providing limited IPv4 connectivity across an IPv6-only network by combining existing and well-known stateful protocol translation (as described in RFC 6146) in the core and stateless protocol translation (as described in RFC 6145) at the edge. 464XLAT is a simple and scalable technique to quickly deploy limited IPv4 access service to IPv6-only edge networks without encapsulation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6877"/>
          <seriesInfo name="DOI" value="10.17487/RFC6877"/>
        </reference>
        <reference anchor="I-D.ietf-happy-happyeyeballs-v3">
          <front>
            <title>Happy Eyeballs Version 3: Better Connectivity Using Concurrency</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Nidhi Jaju" initials="N." surname="Jaju">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Kenichi Ishibashi" initials="K." surname="Ishibashi">
              <organization>Google LLC</organization>
            </author>
            <date day="4" month="July" year="2025"/>
            <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 updates the algorithm description in RFC 8305.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-happy-happyeyeballs-v3-01"/>
        </reference>
        <reference anchor="I-D.ietf-dnssd-multi-qtypes">
          <front>
            <title>DNS Multiple QTYPEs</title>
            <author fullname="Ray Bellis" initials="R." surname="Bellis">
              <organization>Internet Systems Consortium, Inc.</organization>
            </author>
            <date day="22" month="September" year="2025"/>
            <abstract>
              <t>   This document specifies a method for a DNS client to request
   additional DNS record types to be delivered alongside the primary
   record type specified in the question section of a DNS QUERY
   (OpCode=0).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dnssd-multi-qtypes-10"/>
        </reference>
      </references>
    </references>
    <?line 272?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author would like to thank these people for feedback and comments:
Massimiliano Stucchi, Nick Buraglio, Jen Linkova, Gert Doering, Philip Homburg,
Lorenzo Colitti</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
IMq/Gqp9AR0SIf4bcqUkqc4rAAA=

-->

</rfc>
