<?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-dnssd-multi-qtypes-11" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>DNS Multiple QTYPEs</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-dnssd-multi-qtypes-11"/>
    <author initials="R." surname="Bellis" fullname="Ray Bellis">
      <organization abbrev="ISC">Internet Systems Consortium, Inc.</organization>
      <address>
        <postal>
          <street>PO Box 360</street>
          <city>Newmarket</city>
          <code>NH 03857</code>
          <country>USA</country>
        </postal>
        <phone>+1 650 423 1300</phone>
        <email>ray@isc.org</email>
      </address>
    </author>
    <date year="2025" month="December" day="10"/>
    <area>Internet</area>
    <workgroup>DNSSD</workgroup>
    <keyword>DNS</keyword>
    <keyword>resource record</keyword>
    <abstract>
      <?line 35?>

<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>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://dnssd-wg.github.io/draft-ietf-dnssd-multi-qtypes/draft-ietf-dnssd-multi-qtypes.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-dnssd-multi-qtypes/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        DNSSD Working Group mailing list (<eref target="mailto:dnssd@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dnssd/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dnssd/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/dnssd-wg/draft-ietf-dnssd-multi-qtypes"/>.</t>
    </note>
  </front>
  <middle>
    <?line 41?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A commonly requested DNS <xref target="STD13"/> feature is the ability to receive
multiple related resource records (RRs) in a single DNS response.</t>
      <t>For example, it may be desirable to receive the A, AAAA and HTTPS
records for a domain name together, rather than having to issue
multiple queries.</t>
      <t>The DNS wire protocol in theory supported having multiple questions in a
single packet, but in practice this does not work.  In <xref target="RFC9619"/>,
<xref target="RFC1035"/> is updated to only permit a single question in a QUERY
(OpCode=0) request.</t>
      <t>Sending QTYPE=ANY does not guarantee that all RRsets will be returned.
<xref target="RFC8482"/> specifies that responders may return a single RRset of
their choosing.</t>
      <t>This document provides a solution for those cases where only the QTYPE
varies by specifying a new option for the Extension Mechanisms for DNS
(EDNS <xref target="RFC6891"/>) that contains an additional list of QTYPE values
that the client wishes to receive in addition to the single
QTYPE appearing in the question section.  A different EDNS option is
used in response packets as protection against DNS middleboxes that echo
EDNS options verbatim.</t>
      <t>The specification described herein is applicable both for queries from a
stub resolver to recursive servers, and from recursive resolvers to
authoritative servers. It does not apply to Multicast DNS queries
<xref target="RFC6762"/>, which are already designed to allow requesting multiple
records in a single query.</t>
    </section>
    <section anchor="terminology-used-in-this-document">
      <name>Terminology used in this document</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="specification">
      <name>Specification</name>
      <section anchor="multiple-qtype-edns-options-format">
        <name>Multiple QTYPE EDNS Options Format</name>
        <t>The overall format of an EDNS option is shown for reference below,
per <xref target="RFC6891"/>, followed by the option specific data:</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="552" viewBox="0 0 552 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 32,32 L 32,112" fill="none" stroke="black"/>
              <path d="M 32,144 L 32,160" fill="none" stroke="black"/>
              <path d="M 544,32 L 544,112" fill="none" stroke="black"/>
              <path d="M 544,144 L 544,160" fill="none" stroke="black"/>
              <path d="M 32,32 L 544,32" fill="none" stroke="black"/>
              <path d="M 32,64 L 544,64" fill="none" stroke="black"/>
              <path d="M 32,96 L 544,96" fill="none" stroke="black"/>
              <path d="M 32,160 L 544,160" fill="none" stroke="black"/>
              <g class="text">
                <text x="12" y="52">0:</text>
                <text x="288" y="52">OPTION-CODE</text>
                <text x="12" y="84">2:</text>
                <text x="288" y="84">OPTION-LENGTH</text>
                <text x="12" y="116">4:</text>
                <text x="32" y="132">:</text>
                <text x="288" y="132">OPTION-DATA</text>
                <text x="544" y="132">:</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    0: |                          OPTION-CODE                          |
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    2: |                         OPTION-LENGTH                         |
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    4: |                                                               |
       :                          OPTION-DATA                          :
       |                                                               |
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
]]></artwork>
        </artset>
        <t>OPTION-CODE: MQTYPE-Query (20) in queries and MQTYPE-Response (21) in responses.</t>
        <t>OPTION-LENGTH: Size (in octets) of OPTION-DATA.</t>
        <t>OPTION-DATA: Option specific, as below:</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="552" viewBox="0 0 552 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 32,32 L 32,80" fill="none" stroke="black"/>
              <path d="M 32,112 L 32,160" fill="none" stroke="black"/>
              <path d="M 544,32 L 544,80" fill="none" stroke="black"/>
              <path d="M 544,112 L 544,160" fill="none" stroke="black"/>
              <path d="M 32,32 L 544,32" fill="none" stroke="black"/>
              <path d="M 32,64 L 544,64" fill="none" stroke="black"/>
              <path d="M 32,128 L 544,128" fill="none" stroke="black"/>
              <path d="M 32,160 L 544,160" fill="none" stroke="black"/>
              <g class="text">
                <text x="12" y="52">0:</text>
                <text x="288" y="52">QT1</text>
                <text x="12" y="84">2:</text>
                <text x="32" y="100">:</text>
                <text x="288" y="100">...</text>
                <text x="544" y="100">:</text>
                <text x="288" y="148">QTn</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    0: |                              QT1                              |
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    2: |                                                               |
       :                              ...                              :
       |                                                               |
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
       |                              QTn                              |
       +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
]]></artwork>
        </artset>
        <t>A list of 2-octet fields in network order (MSB first) each specifying a
DNS RRTYPE that must be for a data RRTYPE as described in Section 3.1 of
<xref target="RFC6895"/>.</t>
      </section>
      <section anchor="client-request-processing">
        <name>Client Request Processing</name>
        <t>DNS clients implementing this specification <bcp14>MUST</bcp14> generate packets that
conform to the server request parsing rules described immediately below.</t>
        <t>The choice of when a client implementation should attempt to coalesce
queries for multiple QTYPEs using this method is implementation specific
and not discussed further herein.</t>
      </section>
      <section anchor="server-request-parsing">
        <name>Server Request Parsing</name>
        <t>If an MQTYPE-Query option is received in any inbound DNS message with an
OpCode other than QUERY (0) the server <bcp14>MUST</bcp14> return a FORMERR response.</t>
        <t>A server that receives an MQTYPE-Response option in any inbound DNS
message <bcp14>MUST</bcp14> return a FORMERR response.</t>
        <t>A server that receives more than one MQTYPE-Query option in a query <bcp14>MUST</bcp14>
return a FORMERR response.</t>
        <t>If an MQTYPE-Query option is received in a query that contains no primary
question (i.e. QDCOUNT=0) the server <bcp14>MUST</bcp14> return a FORMERR response.</t>
        <t>If an MQTYPE-Query option is received in a query where the primary question
is a non-data RRTYPE (e.g. ANY, AXFR, etc.) the server <bcp14>MUST</bcp14> return a FORMERR
response.</t>
        <t>If the QT list in an MQTYPE-Query option is empty the server <bcp14>MUST</bcp14> return
a FORMERR response.</t>
        <t>If any invalid QTx is received in the query (e.g. one corresponding to a
Meta RRTYPE) the server <bcp14>MUST</bcp14> return a FORMERR response.</t>
        <t>If any duplicate QTx (or one duplicating the primary QTYPE field) is
contained in a query the server <bcp14>MUST</bcp14> return a FORMERR response.</t>
      </section>
      <section anchor="server-response-generation">
        <name>Server Response Generation</name>
        <t>A conforming server that receives an MQTYPE-Query option in a query <bcp14>MUST</bcp14>
return an MQTYPE-Response option in its response, even if that response
is truncated (TC=1).  This is necessary to indicate that the server does
support this extension.</t>
        <t>The server <bcp14>MUST</bcp14> first start constructing a response for the primary
(QNAME, QCLASS, QTYPE) tuple specified in the Question section per
the existing DNS sections.  The RCODE and all other flags (e.g. AA,
AD, etc) <bcp14>MUST</bcp14> be determined at this time.</t>
        <t>If this initial response results in truncation (TC=1) then the
additional queries specified in the MQTYPE-Query option <bcp14>MUST NOT</bcp14> be
processed.</t>
        <t>After the initial response is prepared, the server <bcp14>MUST</bcp14> attempt to
combine the responses for individual (QNAME, QCLASS, QTx) combinations
into the response for the first query.  If a recursive server does
not yet have those responses available it <bcp14>MUST</bcp14> first make appropriate
outbound queries to populate its caches.</t>
        <t>For each individual combination the server <bcp14>MUST</bcp14> evaluate the resulting
RCODE and other flags and check that they all match the values generated
from the primary query.</t>
        <t>If any mismatch is detected the mismatching additional response <bcp14>MUST NOT</bcp14>
be included in the final combined response and its QTx value <bcp14>MUST NOT</bcp14> be
included in the MQTYPE-Response option's list.  This might happen, for
example, if the primary query resulted in a NOERROR response but a QTx
query resulted in a SERVFAIL, or if the primary response has AA=0 but a
QTx response has AA=1, such as might happen if the NS and DS records
were both requested at the parent side of a zone cut.</t>
        <t>The server <bcp14>MUST</bcp14> attempt to combine the remaining individual RRs into the
same sections in which they would have appeared in a standalone query,
i.e.  as if each combination had been "the question" per section 4.1 of
<xref target="RFC1035"/>.</t>
        <t>The server <bcp14>MUST</bcp14> detect duplicate RRs and keep only a single copy of each
RR in its respective section.  Duplicates can occur e.g. in the Answer
section if a CNAME chain is involved, or in the Authority section if
multiple QTYPEs don't exist, etc.  Note that RRs can be legitimately
duplicated in different sections, e.g. for the (SOA, TYPE12345)
combination on apex where TYPE12345 is not present.</t>
        <t>Handling of an MQTYPE-Query option <bcp14>MUST NOT</bcp14> itself trigger a truncated
response.  If message size (or other) limits do not allow all of the
data obtained by querying for an additional QTx to be included in the
final response in their entirety (i.e. as complete RRsets) then the
server <bcp14>MUST NOT</bcp14> include the respective QTx in the MQTYPE-Response
option's list and <bcp14>MAY</bcp14> stop processing further QTx combinations.</t>
        <t>If all RRs for a single QTx combination fit into the message then the
server <bcp14>MUST</bcp14> then include the respective QTx in the MQTYPE-Response
option's list to indicate that the given query type was completely
processed.</t>
        <t>Note that it is possible for the resulting MQTYPE-Response option to
contain an empty list, but as described above the option <bcp14>MUST</bcp14> still be
returned.</t>
      </section>
      <section anchor="client-response-processing">
        <name>Client Response Processing</name>
        <t>If the response to a query containing an MQTYPE-Query option does not
contain an MQTYPE-Response option, or if it erroneously contains an
MQTYPE-Query option, the client <bcp14>MUST</bcp14> treat the response as if this
option is unsupported by the server and <bcp14>MUST</bcp14> process the primary
response as if the MQTYPE-Query option had not been used.</t>
        <t>In the above case, or if the server generates a FORMERR response, the
client <bcp14>MUST</bcp14> issue additional standalone queries (e.g. without using the
MQTYPE-Query option) for all QTYPEs for which an answer is still
required.</t>
        <t>If the MQTYPE-Response option is present more than once or if a QTx
value is duplicated (or duplicates the primary QTYPE field) the client
<bcp14>MUST</bcp14> treat the answer as invalid (equivalent to FORMERR).</t>
        <t>The Question section and the list of types present in the
MQTYPE-Response option indicates the list of (QNAME, QCLASS, qtypes)
combinations which are completely contained within the received
response.  The answers to all query combinations share the same RCODE
and all other flags.</t>
        <t>All RRs required by existing DNS specifications are expected to be
present in the respective sections of the DNS message, including proofs
of nonexistence where required. The client <bcp14>MUST NOT</bcp14> rely on any
particular order of RRs in the message sections.</t>
        <t>For the purposes of Section 5.4.1 of <xref target="RFC2181"/> any authoritative
answers received <bcp14>MUST</bcp14> be ranked the same as the answer for the primary
question.</t>
        <t>Clients <bcp14>MUST</bcp14> take into account that individual RRs might originate from
different DNS zones and that proofs of non-existence might have been
produced by different signers.</t>
        <t>Absence of QTx values which were requested by client but are not present
in the MQTYPE-Response option indicates that:</t>
        <ul spacing="normal">
          <li>
            <t>the server was unwilling to process the request (e.g. because a limit
was exceeded), and/or</t>
          </li>
          <li>
            <t>the individual responses could not be combined into one message
because of RCODE or other flag mismatches, and/or</t>
          </li>
          <li>
            <t>the message size limit would be exceeded</t>
          </li>
        </ul>
        <t>The client <bcp14>MUST</bcp14> subsequently initiate separate standalone queries for
all QTx values for which an answer is still required.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The method documented here does not change any of the security
properties of the DNS protocol itself.</t>
      <t>It should however be noted that this method does increase the potential
amplification factor when the DNS protocol is used as a vector for a
denial of service attack.</t>
      <t>Implementors <bcp14>SHOULD</bcp14> allow operators to configure limits on the number of
QTx values specified and/or the resulting response size.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA has assigned the following in the "DNS EDNS0 Option Codes (OPT)"
registry:</t>
      <table>
        <name>EDNS Option Numbers</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Name</th>
            <th align="left">Status</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">20</td>
            <td align="left">MQTYPE-Query</td>
            <td align="left">Optional</td>
            <td align="left">RFC TBD</td>
          </tr>
          <tr>
            <td align="left">21</td>
            <td align="left">MQTYPE-Response</td>
            <td align="left">Optional</td>
            <td align="left">RFC TBD</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The author wishes to thank the following for their feedback and reviews
during the initial development of this document: Michael Graff, Olafur
Gudmundsson, Matthijs Mekking, and Paul Vixie.</t>
      <t>In addition the author wishes to thank the following for subsequent
review during discussion in the DNSSD Working Group: Chris Box, Stuart
Cheshire, Esko Dijk, Ted Lemon, David Schinazi and Petr Spacek.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD13" target="https://www.rfc-editor.org/info/std13">
          <reference anchor="RFC1034" target="https://www.rfc-editor.org/info/rfc1034">
            <front>
              <title>Domain names - concepts and facilities</title>
              <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
              <date month="November" year="1987"/>
              <abstract>
                <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="13"/>
            <seriesInfo name="RFC" value="1034"/>
            <seriesInfo name="DOI" value="10.17487/RFC1034"/>
          </reference>
          <reference anchor="RFC1035" target="https://www.rfc-editor.org/info/rfc1035">
            <front>
              <title>Domain names - implementation and specification</title>
              <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
              <date month="November" year="1987"/>
              <abstract>
                <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="13"/>
            <seriesInfo name="RFC" value="1035"/>
            <seriesInfo name="DOI" value="10.17487/RFC1035"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC9619">
          <front>
            <title>In the DNS, QDCOUNT Is (Usually) One</title>
            <author fullname="R. Bellis" initials="R." surname="Bellis"/>
            <author fullname="J. Abley" initials="J." surname="Abley"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>This document updates RFC 1035 by constraining the allowed value of the QDCOUNT parameter in DNS messages with OPCODE = 0 (QUERY) to a maximum of one, and it specifies the required behavior when values that are not allowed are encountered.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9619"/>
          <seriesInfo name="DOI" value="10.17487/RFC9619"/>
        </reference>
        <reference anchor="RFC6891">
          <front>
            <title>Extension Mechanisms for DNS (EDNS(0))</title>
            <author fullname="J. Damas" initials="J." surname="Damas"/>
            <author fullname="M. Graff" initials="M." surname="Graff"/>
            <author fullname="P. Vixie" initials="P." surname="Vixie"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>The Domain Name System's wire protocol includes a number of fixed fields whose range has been or soon will be exhausted and does not allow requestors to advertise their capabilities to responders. This document describes backward-compatible mechanisms for allowing the protocol to grow.</t>
              <t>This document updates the Extension Mechanisms for DNS (EDNS(0)) specification (and obsoletes RFC 2671) based on feedback from deployment experience in several implementations. It also obsoletes RFC 2673 ("Binary Labels in the Domain Name System") and adds considerations on the use of extended labels in the DNS.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="75"/>
          <seriesInfo name="RFC" value="6891"/>
          <seriesInfo name="DOI" value="10.17487/RFC6891"/>
        </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="RFC6895">
          <front>
            <title>Domain Name System (DNS) IANA Considerations</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document specifies Internet Assigned Numbers Authority (IANA) parameter assignment considerations for the allocation of Domain Name System (DNS) resource record types, CLASSes, operation codes, error codes, DNS protocol message header bits, and AFSDB resource record subtypes. It obsoletes RFC 6195 and updates RFCs 1183, 2845, 2930, and 3597.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="42"/>
          <seriesInfo name="RFC" value="6895"/>
          <seriesInfo name="DOI" value="10.17487/RFC6895"/>
        </reference>
        <reference anchor="RFC2181">
          <front>
            <title>Clarifications to the DNS Specification</title>
            <author fullname="R. Elz" initials="R." surname="Elz"/>
            <author fullname="R. Bush" initials="R." surname="Bush"/>
            <date month="July" year="1997"/>
            <abstract>
              <t>This document considers some areas that have been identified as problems with the specification of the Domain Name System, and proposes remedies for the defects identified. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2181"/>
          <seriesInfo name="DOI" value="10.17487/RFC2181"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8482">
          <front>
            <title>Providing Minimal-Sized Responses to DNS Queries That Have QTYPE=ANY</title>
            <author fullname="J. Abley" initials="J." surname="Abley"/>
            <author fullname="O. Gudmundsson" initials="O." surname="Gudmundsson"/>
            <author fullname="M. Majkowski" initials="M." surname="Majkowski"/>
            <author fullname="E. Hunt" initials="E." surname="Hunt"/>
            <date month="January" year="2019"/>
            <abstract>
              <t>The Domain Name System (DNS) specifies a query type (QTYPE) "ANY". The operator of an authoritative DNS server might choose not to respond to such queries for reasons of local policy, motivated by security, performance, or other reasons.</t>
              <t>The DNS specification does not include specific guidance for the behavior of DNS servers or clients in this situation. This document aims to provide such guidance.</t>
              <t>This document updates RFCs 1034 and 1035.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8482"/>
          <seriesInfo name="DOI" value="10.17487/RFC8482"/>
        </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>
      </references>
    </references>
    <?line 320?>

<section anchor="examples">
      <name> Examples</name>
      <t>The examples below are shown as might be reported by the ISC Dig utility.
For the purposes of brevity irrelevant content is omitted.</t>
      <section anchor="stub-query-for-a-with-mqtype-query-for-aaaa-https">
        <name>Stub query for A with MQType-Query for AAAA + HTTPS</name>
        <t>In this example a stub resolver has requested the A record for
www.example.com, along with an MQTYPE-Query option requesting AAAA and
HTTPS records.  The stub resolver has also set the DO bit, indicating
DNSSEC support.</t>
        <t>The presence of the HTTPS QTYPE in the MQTYPE-Response option of the response
coupled with its absence from the answer section indicates that the
recursive server currently holds no data for this QTYPE.  The corresponding
type fields in the NSEC3 record further provide a cryptographic proof of
non-existence for the HTTPS QTYPE and the SOA record also indicates a
"negative answer".</t>
        <figure anchor="figaaaahttps">
          <name>A + AAAA + HTTPS</name>
          <artwork><![CDATA[
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11111
;; flags: qr rd ra ad
;; QUERY: 1, ANSWER: 4, AUTHORITY: 4, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1232
; MQTYPE-Response: AAAA HTTPS

;; QUESTION SECTION:
;www.example.com.         IN  A

;; ANSWER SECTION:
www.example.com.    2849  IN  A       192.0.2.1
www.example.com.    2849  IN  RRSIG   A [...]
www.example.com.    3552  IN  AAAA    3fff::1234
www.example.com.    3552  IN  RRSIG   AAAA [...]

;; AUTHORITY SECTION:
example.com.        2830  IN  SOA     ns.example.com. [...]
example.com.        2830  IN  RRSIG   SOA 13 2 [...]
[...].example.com.  2830  IN  NSEC3   [...] A TXT AAAA RRSIG
[...].example.com.  2830  IN  RRSIG   NSEC3 [...]
]]></artwork>
        </figure>
      </section>
      <section anchor="stub-query-for-ds-with-mqtype-query-for-dnskey">
        <name>Stub query for DS with MQType-Query for DNSKEY</name>
        <t>In this similar example, the primary QTYPE is for DS and the MQTYPE-Query
field only contains DNSKEY.</t>
        <t>Both the DS and DNSKEY records are returned, along with their corresponding
RRSIG records.</t>
        <figure anchor="figdsdnskey">
          <name>Stub DS + DNSKEY</name>
          <artwork><![CDATA[
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33333
;; flags: qr rd ra ad
;; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1232
; MQTYPE-Response: DNSKEY

;; QUESTION SECTION:
;example.com.                 IN      DS

;; ANSWER SECTION:
example.com.        625   IN  DNSKEY  256 3 13 [...]
example.com.        625   IN  DNSKEY  257 3 13 [...]
example.com.        625   IN  RRSIG   DNSKEY [...] example.com. [...]
example.com.      86185   IN  DS      370 13 2 [...]
example.com.      86185   IN  RRSIG   DS [...] com. [...]
]]></artwork>
        </figure>
      </section>
      <section anchor="recursive-query-for-ds-with-mqtype-query-for-ns">
        <name>Recursive query for DS with MQType-Query for NS</name>
        <t>In this instance, a recursive resolver is sending a DS record query to the
parent zone's authoritative server and simultaneously requesting the NS
records for the zone.</t>
        <t>Since the DS record response is marked as authoritative (AA = 1) but the
NS record data on the parent side of a zone cut is not authoritative
(AA = 0) the server is unable to merge the responses, and the NS QTYPE
is omitted from the MQTYPE-Response field.</t>
        <figure anchor="figdsns">
          <name>Recursive DS + NS</name>
          <artwork><![CDATA[
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33333
;; flags: qr aa
;; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1232
; MQTYPE-Response: [empty]

;; QUESTION SECTION:
;example.com.             IN  DS

;; ANSWER SECTION:
example.com.      86185   IN  DS      370 13 2 [...]
example.com.      86185   IN  RRSIG   DS [...] com. [...]
]]></artwork>
        </figure>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
