<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-dnssd-multi-qtypes-14" number="10029" updates="" obsoletes="" xml:lang="en" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">

  <front>
    <title abbrev="DNS Multiple QTYPEs">DNS Multiple QTYPEs</title>
    <seriesInfo name="RFC" value="10029"/>
    <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>
          <region>NH</region> <code>03857</code>
          <country>United States of America</country>
        </postal>
        <phone>+1 650 423 1300</phone>
        <email>ray@isc.org</email>
      </address>
    </author>
    <date year="2026" month="July"/>

    <area>INT</area>
    <workgroup>dnssd</workgroup>

    <keyword>DNS</keyword>
    <keyword>resource record</keyword>

    <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>
  <middle>

<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
RRs 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.  <xref
      target="RFC9619"/> updates RFC 1035 <xref target="STD13"/> to only
      permit a single question in a QUERY (OpCode=0) request.</t>
      <t>Sending QTYPE=ANY does not guarantee that all resource record sets (RRsets) will be returned.
<xref section="4.1" sectionFormat="of" 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, but it is applicable to DNS-Based Service
Discovery (DNS-SD) <xref target="RFC6763"/>.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</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&nbsp;14 <xref target="RFC2119"/> <xref
    target="RFC8174"/> when, and only when, they appear in all capitals, as
    shown here.
        </t>
      <t>This document makes use of DNS terminology defined in <xref target="RFC9499"/>.</t>
    </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 in <xref target="fig-edns"/>,
per <xref target="RFC6891"/>, followed by the option-specific data.</t>
        <figure anchor="fig-edns">
          <name>EDNS Option Format</name>
          <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>
        </figure>
	<dl spacing="normal" newline="false">
        <dt>OPTION-CODE:</dt><dd>MQTYPE-Query (20) in queries and MQTYPE-Response (21) in responses.</dd>
        <dt>OPTION-LENGTH:</dt><dd>Size (in octets) of OPTION-DATA.</dd>
        <dt>OPTION-DATA:</dt><dd>Option specific, as depicted in <xref target="fig-qtx"/>.</dd>
      </dl>
        <figure anchor="fig-qtx">
          <name>MQTYPE OPTION-DATA Format</name>
          <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>
        </figure>

        <t>The OPTION-DATA is a list of 2-octet values in network order, most significant bit (MSB) first, and each specifying a
DNS RRTYPE that must be for a data RRTYPE as described in
<xref section="3.1" sectionFormat="of" target="RFC6895"/>.  Individual values from the list (with unspecified index "x") are referred to as "QTx" in the following sections.</t>
      </section>
      <section anchor="client-request-generation">
        <name>Client Request Generation</name>
        <t>DNS clients implementing this specification <bcp14>MUST</bcp14> generate packets that
conform to the server request parsing rules described in <xref target="sec-server-request"/>.</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. However, careful considerations should
be taken into account when coalescing queries on behalf of an application,
if such a feature is not explicitly requested by the application. How
an application interacts with an underlying name resolution library is
internal to the implementation and is thus out of scope.</t>
      </section>
      <section anchor="sec-server-request">
        <name>Server Request Parsing</name>
        <t>In addition to the error cases discussed in <xref section="7" sectionFormat="of" target="RFC6891"/>,
the server <bcp14>MUST</bcp14> return a FORMERR response if the server receives:</t>
        <ul spacing="normal">
          <li>
            <t>An MQTYPE-Query option in any inbound DNS message with an
OpCode other than QUERY (0).</t>
          </li>
          <li>
            <t>An MQTYPE-Response option in any inbound DNS message.</t>
          </li>
          <li>
            <t>More than one MQTYPE-Query option in a query.</t>
          </li>
          <li>
            <t>An MQTYPE-Query in a query that contains no primary
question (i.e., QDCOUNT=0).</t>
          </li>
          <li>
            <t>An MQTYPE-Query option in a query where the primary question
is a non-data RRTYPE (e.g., ANY, AXFR).</t>
          </li>
          <li>
            <t>An MQTYPE-Query option with an empty QT list.</t>
          </li>
          <li>
            <t>An invalid QTx (e.g., one corresponding to a Meta RRTYPE).</t>
          </li>
          <li>
            <t>A duplicate QTx (or one duplicating the primary QTYPE field)
in a query.</t>
          </li>
        </ul>
      </section>
      <section anchor="server-response-generation">
        <name>Server Response Generation</name>
        <t>A conforming server that receives an MQTYPE-Query option in a valid 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. Refer to <xref target="sec-server-request"/> for invalid queries.</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 (such as AA or
AD) <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>MAY</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. This could also happen if the primary response has AA=0, but a
QTx response has AA=1, which 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 <xref section="4.1" sectionFormat="bare" target="RFC1035"/> of RFC 1035 <xref target="STD13"/>).</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, for example, 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 such as for the (SOA, TYPE12345)
combination at a zone apex where TYPE12345 is not present.</t>
        <t>The handling of an MQTYPE-Query option <bcp14>MUST NOT</bcp14> itself trigger a truncated
response.  If response 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> 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 must 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 (that is, 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 that are completely answered and 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 <xref section="5.4.1" sectionFormat="of" 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 nonexistence might have been
produced by different signers.</t>
        <t>Absence of QTx values that were requested by the client but are not present
in the MQTYPE-Response option indicates that:</t>
        <ul spacing="normal">
          <li>
            <t>(for responses from recursive servers) the server does not have
any records for that QTx value in cache, 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 server was unwilling to process the request (for example, because a limit
was exceeded), and/or</t>
          </li>
          <li>
            <t>the response 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>However, it should 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.  A further risk is being able to maliciously
cause recursive servers to perform large amounts of additional work.</t>
      <t>Implementors <bcp14>SHOULD</bcp14> therefore allow operators to configure limits on the
number of QTx values specified and/or the resulting response size.  The
recommended values of those limits will depend on the environment in
which this specification is used.  In public DNS, it is expected that a
limit of four QTx values would be appropriate, but when used with DNS-SD
or within private networks, higher limits would be acceptable.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA has assigned the following values in the "DNS EDNS0 Option Codes (OPT)"
registry within the "Domain Name System (DNS) Parameters" registry group:</t>
      <table>
        <name>MQTYPE 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 10029</td>
          </tr>
          <tr>
            <td align="left">21</td>
            <td align="left">MQTYPE-Response</td>
            <td align="left">Optional</td>
            <td align="left">RFC 10029</td>
          </tr>
        </tbody>
      </table>
    </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">
          <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1034.xml"/>
          <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml"/>
        </referencegroup>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9619.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6891.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6895.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2181.xml"/>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8482.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6762.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6763.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9499.xml"/>
      </references>
    </references>

    <section anchor="examples">
      <name>Examples</name>
      <t>The examples below are shown as what might be reported by the Internet Systems Consortium (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 and 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
nonexistence for the HTTPS QTYPE, and the SOA record also indicates a
"negative answer".</t>
        <figure anchor="figaaaahttps">
          <name>A, AAAA, and 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 and 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 and 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>

    <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: <contact fullname="Michael Graff"/>, <contact fullname="Olafur
Gudmundsson"/>, <contact fullname="Matthijs Mekking"/>, and <contact fullname="Paul Vixie"/>.</t>
      <t>In addition, the author wishes to thank the following for subsequent
reviews during discussion in the DNSSD Working Group: <contact fullname="Chris Box"/>, <contact fullname="Stuart
Cheshire"/>, <contact fullname="Esko Dijk"/>, <contact fullname="Ted Lemon"/>, <contact fullname="David Schinazi"/>, and <contact fullname="Petr Spacek"/>.</t>
    </section>

  </back>

</rfc>
