<?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.43 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lenders-dns-cbor-19" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="dns+cbor">A Concise Binary Object Representation (CBOR) of DNS Messages</title>
    <seriesInfo name="Internet-Draft" value="draft-lenders-dns-cbor-19"/>
    <author fullname="Martine Sophie Lenders">
      <organization abbrev="TU Dresden">TUD Dresden University of Technology</organization>
      <address>
        <postal>
          <street>Helmholtzstr. 10</street>
          <city>Dresden</city>
          <code>D-01069</code>
          <country>Germany</country>
        </postal>
        <email>martine.lenders@tu-dresden.de</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="M." surname="Gütschow" fullname="Mikolai Gütschow">
      <organization abbrev="TU Dresden">TUD Dresden University of Technology</organization>
      <address>
        <postal>
          <street>Helmholtzstr. 10</street>
          <city>Dresden</city>
          <code>D-01069</code>
          <country>Germany</country>
        </postal>
        <email>mikolai.guetschow@tu-dresden.de</email>
      </address>
    </author>
    <author fullname="Thomas C. Schmidt">
      <organization>HAW Hamburg</organization>
      <address>
        <email>t.schmidt@haw-hamburg.de</email>
      </address>
    </author>
    <author initials="M." surname="Wählisch" fullname="Matthias Wählisch">
      <organization abbrev="TU Dresden &amp; Barkhausen Institut">TUD Dresden University of Technology &amp; Barkhausen Institut</organization>
      <address>
        <postal>
          <street>Helmholtzstr. 10</street>
          <city>Dresden</city>
          <code>D-01069</code>
          <country>Germany</country>
        </postal>
        <email>m.waehlisch@tu-dresden.de</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Applications</area>
    <workgroup>CBOR</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>CBOR</keyword>
    <keyword>DNS</keyword>
    <abstract>
      <?line 95?>

<t>This document specifies a compact data format for DNS messages using
the Concise Binary Object Representation <xref target="RFC8949"/>.
The primary purpose is to keep DNS messages small in constrained networks.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/cbor-dns/draft-lenders-dns-cbor.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-lenders-dns-cbor/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        CBOR Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/cbor-dns"/>.</t>
    </note>
  </front>
  <middle>
    <?line 102?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In constrained networks <xref target="RFC7228"/>, the link layer may restrict the payload sizes of frames to
only a few hundred bytes.  Encrypted DNS resolution, such as DNS over HTTPS (DoH) <xref target="RFC8484"/> or
DNS over CoAP (DoC) <xref target="RFC9953"/>, may lead to DNS message sizes that exceed this limit, even when
implementing header compression such as 6LoWPAN IPHC <xref target="RFC6282"/> or SCHC <xref target="RFC8724"/>,
<xref target="RFC8824"/>.</t>
      <t>Although adaptation layers such as 6LoWPAN <xref target="RFC4944"/> or SCHC <xref target="RFC8724"/> offer fragmentation to
comply with small MTUs, fragmentation should be avoided in constrained networks.
Fragmentation combined with high packet loss multiplies the likelihood of loss.
Hence, a compression format that reduces fragmentation of DNS messages is beneficial.</t>
      <t>This document specifies a compact data format for DNS messages using Concise Binary Object Representation (CBOR) <xref target="RFC8949"/> encoding. Additionally,  unnecessary or redundant information is stripped off DNS messages.  To use the outcome of this specification in DoH and DoC,
this document also specifies a Media Type header value for DoH and a Content-Format option value for DoC.</t>
      <t>Note that there is another format that expresses DNS messages in CBOR, C-DNS <xref target="RFC8618"/>.
C-DNS is primarily a file format to minimize traces of multiple DNS messages and uses the fact that there are multiple messages to do its compression.
Common values such as names or addresses are collected in separate tables which are referenced from the messages, comparable to Packed CBOR <xref target="I-D.ietf-cbor-packed"/>.
However, this may add overhead for individual DNS messages.</t>
      <t>The format described in this document is a transfer format that aims to provide conciseness and compression for individual DNS messages to be sent over the network.
This is achieved by applying the following objectives:</t>
      <t>Conciseness:</t>
      <ul spacing="normal">
        <li>
          <t>Encoding DNS messages in CBOR and</t>
        </li>
        <li>
          <t>Omitting (redundant) fields in DNS queries and responses.</t>
        </li>
      </ul>
      <t>Compression:</t>
      <ul spacing="normal">
        <li>
          <t>Providing easy-to-implement name compression that allows for on-the-fly construction of DNS queries and responses and</t>
        </li>
        <li>
          <t>Providing optional address and value compression in DNS responses using Packed CBOR <xref target="I-D.ietf-cbor-packed"/>.</t>
        </li>
      </ul>
    </section>
    <section anchor="terminology-and-conventions">
      <name>Terminology and Conventions</name>
      <t>CBOR types (unsigned integer, byte string, text string, arrays, etc.) are used as defined in
<xref target="RFC8949"/>.</t>
      <t>The terms "DNS server", "DNS client", and "(DNS) resolver" are used as defined in <xref target="BCP219"/>.</t>
      <t>A DNS query is a message that queries DNS information from an upstream DNS resolver.
The reply to that is a DNS response.</t>
      <t>The DNS message format specified in <xref target="RFC1035"/> for DNS over UDP we call "classic DNS format" throughout this document or refer to it by its media type "application/dns-message" as specified in <xref target="RFC8484"/>.</t>
      <t>The term "constrained networks" is used as defined in <xref target="RFC7228"/>.</t>
      <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?>

<t>To define the representation of binary objects we use the Concise Data Definition Language (CDDL) <xref target="RFC8610"/>.
For examples, we use the CBOR diagnostic notation <xref target="I-D.ietf-cbor-edn-literals"/> with the <tt>e''</tt> application extension for external references to values <xref target="I-D.ietf-cbor-edn-e-ref"/>.</t>
    </section>
    <section anchor="cbor-representations-applicationdnscbor">
      <name>CBOR Representations (application/dns+cbor)</name>
      <t>DNS messages in "application/dns+cbor" are represented as CBOR arrays to minimize overhead compared
to, e.g., maps.
All CBOR items used in this specification are of definite length.
CBOR arrays that do not follow the length definitions of this or of follow-up specifications <bcp14>MUST</bcp14> be silently ignored.
CBOR arrays that exceed the message size provided by the transport <bcp14>MUST</bcp14> be silently ignored.
It is assumed that DNS query and DNS response are distinguished message types and that the query can be mapped to the response by the transfer protocol of choice.</t>
      <figure anchor="fig_dns-msg">
        <name>This document defines both DNS Queries and Responses in CDDL</name>
        <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
dns-message = dns-query / dns-response
]]></sourcecode>
      </figure>
      <t>If, for any reason, a DNS message cannot be represented in the CBOR format specified in this document, or if unreasonable overhead is introduced, a fallback to another DNS message format, e.g., the classic DNS format specified in <xref target="RFC1035"/>, <bcp14>MUST</bcp14> always be possible.
The DNS transport <bcp14>MUST</bcp14> support a mechanism to distinguish different formats, e.g., the Media Type header with DoH.</t>
      <section anchor="sec_domain-names">
        <name>Domain Name Representation</name>
        <t>Domain names are represented by a sequence of one or more (Unicode) text strings, using one string per label.
For instance, "example.org" would be represented as <tt>"example","org"</tt> in CBOR diagnostic notation.
The root domain "." is represented as an empty string <tt>""</tt>.
The absence of any label means the name is elided.
For the purpose of this document, domain names remain case-insensitive as specified in <xref target="RFC1035"/>.</t>
        <t>The representation of a domain name is defined in <xref target="fig_domain-name"/>.
A label may either be encoded in ASCII-compatible encoding (ACE) <xref target="RFC5891"/> embedded within UTF-8 encoding of the text strings or plain UTF-8.
It is <bcp14>RECOMMENDED</bcp14> to use the encoding with the shorter length in bytes, otherwise message sizes may
increase.
A decoder identifies the ACE encoding by identifying the label as a valid A-label (see <xref target="RFC5891"/>) and <bcp14>MUST</bcp14> assume the label to be encoded in UTF-8 otherwise.</t>
        <t>This sequence of text strings is supposed to be embedded into a surrounding array, usually the query
or resource record.</t>
        <t>Name compression is implemented using an extension to Packed CBOR, see <xref target="sec_name-compression"/>.
For readers unfamiliar with Packed CBOR this name compression can be abstracted to a name
compression similar to that described in <xref section="4.1.4" sectionFormat="of" target="RFC1035"/>.
However, instead of using the byte index as reference within the message, text strings are counted,
starting at 0, depth-first within the message.
That number is used as index for the reference.
Since names are the only text strings in a CBOR-based DNS message, the end of a name can be identified when the decoder cursor
does not point to a text string or reference to another text string anymore.
For the reference itself, either simple values or tag TBD6 are used (see <xref section="2.2" sectionFormat="of" target="I-D.ietf-cbor-packed"/>).</t>
        <figure anchor="fig_domain-name">
          <name>Domain Name Definition</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
domain-name = ( *label )
label = tstr
]]></sourcecode>
        </figure>
      </section>
      <section anchor="sec_rr">
        <name>DNS Resource Records</name>
        <t>This document specifies the representation of both standard DNS resource records (RRs, see <xref target="RFC1035"/>)
and EDNS option pseudo-RRs (see <xref target="RFC6891"/>).
If for any reason, resource records cannot be represented in the given formats, they can be
represented in their binary wire-format form as byte strings.</t>
        <t>Further dedicated representations of standard resource records, e.g., for TSIG <xref target="RFC8945"/>, can be defined in follow-up specifications using the <tt>$$structured-ts-rd</tt>
extension point (see <xref target="fig_dns-standard-rr"/>) and are out of scope of this document.</t>
        <t>The representation of a DNS resource record is defined in <xref target="fig_dns-rr"/>.</t>
        <figure anchor="fig_dns-rr">
          <name>DNS Resource Record Definition</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
$$dns-rr = rr / #6.141(opt-rr) / bstr
]]></sourcecode>
        </figure>
        <section anchor="standard-rrs">
          <name>Standard RRs</name>
          <t>Standard DNS resource records are encoded as CBOR arrays containing 2 or more entries in the following order:</t>
          <ol spacing="normal" type="1"><li>
              <t>An optional name (as domain name, see <xref target="sec_domain-names"/>),</t>
            </li>
            <li>
              <t>A TTL (as unsigned integer),</t>
            </li>
            <li>
              <t>An optional record type (as unsigned integer),</t>
            </li>
            <li>
              <t>An optional record class (as unsigned integer), and lastly</t>
            </li>
            <li>
              <t>A record data entry (as byte string, domain name, or array for dedicated record data representation) or
a boolean (true) that indicates that the resource record is actually a resource record set with
an array of one or more record data entries following. In the latter case, individual domain
names need to be put into their own array.</t>
            </li>
          </ol>
          <t>If the first item of the resource record is a text string, it is the first label of a domain name (see <xref target="sec_domain-names"/>).
If the name is elided, the name is derived from the question section of the message.
For responses, the question section is either taken from the query (see <xref target="sec_queries"/>) or provided with the response, see <xref target="sec_responses"/>.
The query may be derived from the context of the transfer protocol.</t>
          <t>If the record type is elided, the record type from the question is assumed.
If record class is elided, the record class from the question is assumed.
When a record class is required to be expressed, the record type <bcp14>MUST</bcp14> also be provided.</t>
          <t>The byte string format of the record data follows the classic DNS format as specified in <xref section="3.3" sectionFormat="of" target="RFC1035"/> (or other specifications of the respective record type).
Note that the CBOR format does not include the RDLENGTH field from the classic format as this value is encoded in the length field of the CBOR header of the byte string.
A parser of the format specified in this document <bcp14>MUST</bcp14> ensure that encoded lengths within this binary record do not overflow the bounds of the byte string or fail otherwise.</t>
          <t>If the record data represents a domain name (e.g., for CNAME or PTR records), the record data <bcp14>MAY</bcp14> be represented as domain name as specified in <xref target="sec_domain-names"/>.
This way of representing the record data means that name compression (see <xref target="sec_name-compression"/>) can also be used on it.</t>
          <t>Depending on the record type, the record data may also be expressed as an array.
Some initial array types are specified below.
Future specifications can extend the definition for <tt>$$structured-ts-rd</tt> in <xref target="fig_dns-standard-rr"/>.
Extensions to that in this document mainly serve to expose names to name compression (see <xref target="sec_name-compression"/>).
There is an argument to be made for CBOR-structured formats of other record data representations (e.g., DNSKEY or RRSIG), but structuring such records as an array usually adds more overhead than just transferring the byte representation.
As such, structured record data that do not contain names are to be represented as a byte string in this specification.</t>
          <t>Multiple resource records of the same type, class, and TTL can be summarized into a resource record set.
A decoder can be notified about this by including the boolean true value before an array of multiple record data entries of the same type.
Note that this adds more overhead to the message and should only really be considered when there is
more than one resource record of the same type, class, and TTL in the message.</t>
          <figure anchor="fig_dns-standard-rr">
            <name>DNS Standard Resource Record Definition</name>
            <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
max-uint8 = 0..255
max-uint16 = 0..65535
max-uint32 = 0..4294967295
ttl = max-uint32
ipv4-addr = bstr .size 4
ipv6-addr = bstr .size 16
$ip-addr = ipv4-addr / ipv6-addr

rr = [
  ? domain-name,
  ttl: ttl,
  type-spec-rdata,
]
type-spec-rdata = (
  ? type-spec,
  rdata: bstr // ( $ip-addr ) // ( domain-name ) // ( rdata-set ),
)
rdata-set = ((
  is-rrset: true,
  rdata-set: [ +bstr ]
) // (
  is-rrset: true,
  rdata-set: [ +[ domain-name ] ],
))
type-spec-rdata //= ( $$structured-ts-rd )
type-spec = (
  record-type: max-uint16,
  ? record-class: max-uint16,
)
]]></sourcecode>
          </figure>
          <section anchor="soa-record-data">
            <name>SOA Record Data</name>
            <t>The record data of RRs with <tt>record-type</tt> = 6 (SOA) <bcp14>MAY</bcp14> be expressed as an array with at least 7 entries representing the 7 parts of the SOA resource record defined in <xref target="RFC1035"/> in the following order:</t>
            <ul spacing="normal">
              <li>
                <t>MNAME as a domain name (see <xref target="sec_domain-names"/>),</t>
              </li>
              <li>
                <t>SERIAL as an unsigned integer,</t>
              </li>
              <li>
                <t>REFRESH as an unsigned integer,</t>
              </li>
              <li>
                <t>RETRY as an unsigned integer,</t>
              </li>
              <li>
                <t>EXPIRE as an unsigned integer,</t>
              </li>
              <li>
                <t>MINIMUM as an unsigned integer, and</t>
              </li>
              <li>
                <t>RNAME as a domain name (see <xref target="sec_domain-names"/>).</t>
              </li>
            </ul>
            <t>MNAME and RNAME are put to the beginning and end of the array, respectively, to keep their labels apart.</t>
            <t>The definition for SOA record data can be seen in <xref target="fig_dns-rdata-soa"/>.</t>
            <figure anchor="fig_dns-rdata-soa">
              <name>SOA Resource Record Data Definition</name>
              <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
$$structured-ts-rd //= (
  6,    ; record-type = SOA
  ? 1,  ; record-class = IN
  ( soa // ( is-rrset: true, rdata-set: [ +soa ] ) ),
)

soa = [
  domain-name,  ; mname
  serial: max-uint32,
  refresh: max-uint32,
  retry: max-uint32,
  expire: max-uint32,
  minimum: max-uint32,
  domain-name,  ; rname
]
]]></sourcecode>
            </figure>
          </section>
          <section anchor="mx-record-data">
            <name>MX Record Data</name>
            <t>The record data of RRs with <tt>record-type</tt> = 15 (MX) <bcp14>MAY</bcp14> be expressed as an array with at least 2 entries representing the 2 parts of the MX resource record defined in <xref target="RFC1035"/> in the following order:</t>
            <ul spacing="normal">
              <li>
                <t>PREFERENCE as an unsigned integer and</t>
              </li>
              <li>
                <t>EXCHANGE as a domain name (see <xref target="sec_domain-names"/>).</t>
              </li>
            </ul>
            <t>The definition for MX record data can be seen in <xref target="fig_dns-rdata-mx"/>.</t>
            <figure anchor="fig_dns-rdata-mx">
              <name>MX Resource Record Data Definition</name>
              <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
$$structured-ts-rd //= (
  15,   ; record-type = MX
  ? 1,  ; record-class = IN
  ( mx // ( is-rrset: true, rdata-set: [ +mx ] ) ),
)

mx = [
  preference: max-uint16,
  domain-name,  ; exchange
]
]]></sourcecode>
            </figure>
          </section>
          <section anchor="srv-record-data">
            <name>SRV Record Data</name>
            <t>The record data of RRs with <tt>record-type</tt> = 33 (SRV) <bcp14>MAY</bcp14> be expressed as an array with at least 3 entries representing the parts of the SRV resource record defined in <xref target="RFC2782"/> in the following order:</t>
            <ul spacing="normal">
              <li>
                <t>Priority as an unsigned integer,</t>
              </li>
              <li>
                <t>an optional Weight as an unsigned integer,</t>
              </li>
              <li>
                <t>Port as an unsigned integer,</t>
              </li>
              <li>
                <t>Target as a domain name (see <xref target="sec_domain-names"/>).</t>
              </li>
            </ul>
            <t>If the weight is present or not can be determined by the number of unsigned integers before Target.
2 unsigned integers before the Target mean the weight was elided and defaults to 0.
3 unsigned integers before the Target mean the weight is in the second position of the record data array.
The default of 0 was picked, as this is the value domain administrators should pick when there is no server selection to do <xref target="RFC2782"/>.</t>
            <t>The definition for SRV record data can be seen in <xref target="fig_dns-rdata-srv"/>.</t>
            <figure anchor="fig_dns-rdata-srv">
              <name>SRV Resource Record Data Definition</name>
              <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
$$structured-ts-rd //= (
  33,   ; record-type = SRV
  ? 1,  ; record-class = IN
  ( srv // ( is-rrset: true, rdata-set: [ +srv ] ) ),
)

srv = [
  priority: max-uint16,
  ? weight: max-uint16 .default 0,
  port: max-uint16,
  domain-name,  ; target
]
]]></sourcecode>
            </figure>
          </section>
          <section anchor="svcb-and-https-record-data">
            <name>SVCB and HTTPS Record Data</name>
            <t>The record data of RRs with <tt>record-type</tt> = 64 (SVCB) and <tt>record-type</tt> = 65 (HTTPS) <bcp14>MAY</bcp14> be expressed as an array with at least 3 entries representing the 3 parts of the SVCB/HTTPS resource record defined in <xref target="RFC9460"/> in the following order:</t>
            <ul spacing="normal">
              <li>
                <t>An optional SvcPriority as an unsigned integer,</t>
              </li>
              <li>
                <t>An optional TargetName as a domain name (see <xref target="sec_domain-names"/>), and</t>
              </li>
              <li>
                <t>SvcParams as an array of alternating pairs of SvcParamKey (as unsigned integer) and SvcParamValue
(as byte string).
The type of SvcParamValue may be extended in future specifications.</t>
              </li>
            </ul>
            <t>It can be determined if the SvcPriority is present by checking if the record data array starts with an unsigned integer or not.
If the array does not start with an unsigned integer, the SvcPriority is elided and defaults to 0, i.e., the record is in AliasMode (see <xref section="2.4.2" sectionFormat="of" target="RFC9460"/>).
If the array starts with an unsigned integer, it is the SvcPriority.</t>
            <t>It can be determined if the TargetName is present by checking if the record data array has a domain name after the SvcPriority, i.e., if the SvcPriority is elided the array would start with a domain name.
If there is no domain name after the SvcPriority, the TargetName is elided and defaults to the sequence of text strings <tt>""</tt> (i.e., the root domain "." in the common name representation defined in <xref section="2.3.1" sectionFormat="of" target="RFC1035"/>, see <xref target="sec_domain-names"/> and <xref section="2.5" sectionFormat="of" target="RFC9460"/>).
If there is a domain name after the SvcPriority, the TargetName is not elided and in the domain name form specified in <xref target="sec_domain-names"/>.</t>
            <t>The definition for SVCB and HTTPS record data can be seen in <xref target="fig_dns-rdata-svcb"/>.</t>
            <figure anchor="fig_dns-rdata-svcb">
              <name>SVCB and HTTPS Resource Record Data Definition</name>
              <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
$$structured-ts-rd //= (
  64 / 65,  ; record-type = SVCB or HTTPS
  ? 1,      ; record-class = IN
  ( svcb // ( is-rrset: true, rdata-set: [ +svcb ] ) ),
)

svcb = [
  ? svc-priority: max-uint16 .default 0,
  ? domain-name,  ; target name
  svc-params: [ *svc-param-pair ],
]

svc-param-pair = (
  svc-param-key: max-uint16,
  svc-param-value: $$svc-param-value,
)
$$svc-param-value = bstr / $ip-addr
]]></sourcecode>
            </figure>
            <t>The SvcParams are provided as an array rather than a map, as their order needs to be preserved <xref target="RFC9460"/> which cannot be guaranteed for maps.</t>
          </section>
        </section>
        <section anchor="sec_edns">
          <name>EDNS OPT Pseudo-RRs</name>
          <t>EDNS OPT Pseudo-RRs are represented as a CBOR array.
To distinguish them from normal standard RRs, they are marked with tag TBD141.</t>
          <t>Name and record type can be elided as they are always "." and OPT (41), respectively <xref target="RFC6891"/>.</t>
          <t>The UDP payload size may be the first element as an unsigned integer in the array.
It <bcp14>MUST</bcp14> be elided if its value is the default value of 512, the maximum allowable size for unextended DNS over UDP (see Sections <xref target="RFC1035" section="2.3.4" sectionFormat="bare"/> and <xref target="RFC1035" section="4.2.1" sectionFormat="bare"/> of <xref target="RFC1035"/>).</t>
          <t>The next element is an array of the options as alternating pairs of option code (as unsigned integer) and option data (as byte string).
The type of the option data may be extended in future specifications.
As per <xref section="6.1.2" sectionFormat="of" target="RFC6891"/>, the order of options is not defined in this specification, but the considerations to order provided in <xref section="6.1.2" sectionFormat="of" target="RFC6891"/> also apply here.</t>
          <t>After that, up to three unsigned integers follow.
The first is the extended flags field as an unsigned integer (implied to be 0 if elided),
the second is the extended RCODE as an unsigned integer (implied to be 0 if elided), and
the third is the EDNS version (implied to be 0 if elided).
They are dependent on each of their previous elements.
If the EDNS version is not elided, both extended flags and extended RCODE <bcp14>MUST NOT</bcp14> be elided.
If the RCODE is not elided the extended flags <bcp14>MUST NOT</bcp14> be elided.</t>
          <t>Note that future EDNS versions may require a different format than the one described above.</t>
          <figure anchor="fig_dns-opt-rr">
            <name>DNS OPT Resource Record Definition</name>
            <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
opt-rr = [
  ? udp-payload-size: max-uint16 .default 512,
  options: [* opt-pair ],
  ? opt-rcode-v-flags,
]
opt-pair = (
  ocode: max-uint16,
  odata: $$odata,
)
opt-rcode-v-flags = (
  flags: max-uint16 .default 0,
  ? opt-rcode-v,
)
rcode = 0..4095
opt-rcode-v = (
  rcode: rcode .default 0,
  ? version: max-uint8 .default 0,
)
$$odata = bstr
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="sec_queries">
        <name>DNS Queries</name>
        <t>DNS queries are encoded as CBOR arrays containing up to 6 entries in the following order:</t>
        <ol spacing="normal" type="1"><li>
            <t>An optional boolean field,</t>
          </li>
          <li>
            <t>An optional flag field (as unsigned integer),</t>
          </li>
          <li>
            <t>The question section (as array),</t>
          </li>
          <li>
            <t>An optional answer section (as array),</t>
          </li>
          <li>
            <t>An optional authority section (as array), and</t>
          </li>
          <li>
            <t>An optional additional section (as array)</t>
          </li>
        </ol>
        <t>If the first item is a boolean and its value is true, it tells the responding resolver that it <bcp14>MUST</bcp14> include the question section in its response. If that boolean is not present, it is assumed to be false.</t>
        <t>If the first item of the query is an array, it is the question section.
If it is an unsigned integer, it is a flag field and maps to the header flags in <xref target="RFC1035"/> and the "DNS Header Flags" IANA registry including the QR flag and the OPCODE.</t>
        <t>If the flags are elided, the value 0 is assumed.</t>
        <t>This specification assumes that the DNS messages are sent over a transfer protocol that can map the queries to their responses, e.g., DNS over HTTPS <xref target="RFC8484"/> or DNS over CoAP <xref target="RFC9953"/>.
As a consequence, the DNS transaction ID is always elided and the value 0 is assumed.</t>
        <t>A question record within the question section is encoded as a CBOR array containing the following entries:</t>
        <ol spacing="normal" type="1"><li>
            <t>The queried name (as domain name, see <xref target="sec_domain-names"/>) which <bcp14>MUST NOT</bcp14> be elided,</t>
          </li>
          <li>
            <t>An optional record type (as unsigned integer), and</t>
          </li>
          <li>
            <t>An optional record class (as unsigned integer)</t>
          </li>
        </ol>
        <t>If the record type is elided, record type AAAA as specified in <xref target="RFC3596"/> is assumed.
If the record class is elided, record class IN as specified in <xref target="RFC1035"/> is assumed.
When a record class is required, the record type <bcp14>MUST</bcp14> also be provided.</t>
        <t>There usually is only one question record <xref target="RFC9619"/>, which is why the question section is a flat array and not nested like the other sections.
This serves to save overhead from the additional CBOR array header.
In the rare cases when there is more than one question record in the question section, the next question just follows.
In this case, for every question but the last, the record type <bcp14>MUST</bcp14> be included, i.e., it is not optional.
This way it is ensured that the parser can distinguish each question by looking up the name first.</t>
        <t>The remainder of the query <bcp14>MUST</bcp14> contain between 0 and 3 extra arrays.</t>
        <t>If one extra array is in the query, it encodes the additional section of the query as an array of DNS resource records (see <xref target="sec_rr"/>).
If two extra arrays are in the query, they encode, in that order, the authority and additional sections of the query each as an array of DNS resource records (see <xref target="sec_rr"/>).
If three extra arrays are in the query, they encode, in that order, the answer section, the authority, and additional sections of the query each as an array of DNS resource records (see <xref target="sec_rr"/>).</t>
        <t>As such, the highest precedence of elision is given to the answer section, as it only occurs with mDNS to signify Known Answers <xref target="RFC6762"/>.
The lowest precedence of elision is given to the additional section, as it may contain EDNS OPT Pseudo-RRs, which are common in queries (see <xref target="sec_edns"/>).</t>
        <t>The representation of a DNS query is defined in <xref target="fig_dns-query"/>.</t>
        <figure anchor="fig_dns-query">
          <name>DNS Query Definition</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
dns-query = [
  ? incl-question: bool .default false,
  ? flags: max-uint16 .default 0x0000,
  question-section,
  ? query-extra-sections,
]
question-section = [
  * full-question,
  ? last-question,
]
full-question = (
  domain-name,
  type-spec,
)
last-question = (
  domain-name,
  ? type-spec,
)
query-extra-sections = (
  ? answer-section,
  extra-sections,
)
answer-section = [+ $$dns-rr]
extra-sections = (
  ? authority: [+ $$dns-rr],
  additional: [+ $$dns-rr],
)
]]></sourcecode>
        </figure>
      </section>
      <section anchor="sec_responses">
        <name>DNS Responses</name>
        <t>A DNS response is encoded as a CBOR array containing up to 5 entries.</t>
        <ol spacing="normal" type="1"><li>
            <t>An optional flag field (as unsigned integer),</t>
          </li>
          <li>
            <t>An optional question section (as array, encoded as described in <xref target="sec_queries"/>)</t>
          </li>
          <li>
            <t>The answer section (as array),</t>
          </li>
          <li>
            <t>An optional authority section (as array), and</t>
          </li>
          <li>
            <t>An optional additional section (as array)</t>
          </li>
        </ol>
        <t>As for queries, the DNS transaction ID is elided and implied to be 0.</t>
        <t>If the CBOR array is a response to a query for which the flags indicate that flags are set in the
response, they <bcp14>MUST</bcp14> be set accordingly and thus included in the response.
If the flags are not included, the flags are implied to be 0x8000 (everything unset except for the
QR flag).</t>
        <t>If the response includes only one array, then the DNS answer section represents an
array of one or more DNS Resource Records (see <xref target="sec_rr"/>).</t>
        <t>If the response includes 2 or more arrays, the first entry may be the question section, identified
by just being a flat array and not an array of arrays. It <bcp14>MUST</bcp14> be included, if the client requested it using the boolean
field in the query, otherwise it is <bcp14>OPTIONAL</bcp14>. If it is present, it is followed by the answer section. The question section is
encoded as specified in <xref target="sec_queries"/>.</t>
        <t>If the answer section is followed by one extra array, this array is the additional section.
Like the answer section, the additional section is represented as an array of one or more DNS Resource Records (see <xref target="sec_rr"/>).</t>
        <t>If the answer section is followed by two extra arrays, the first is the authority section, and the second is the additional section.
The authority section is also represented as an array of one or more DNS Resource Records (see
<xref target="sec_rr"/>).</t>
        <t>The authority section is given precedence of elision over the additional section.
Due to EDNS options or, e.g., CNAME answers that also provide the A/AAAA records in the additional section, that section tends to show up more often than the authority section.</t>
        <figure anchor="fig_dns-response">
          <name>DNS Response Definition</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
dns-response = [
  ? flags: max-uint16 .default 0x8000,
  ? question-section,
  answer-section,
  ? extra-sections,
]
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="sec_cbor-packed">
      <name>Compression with Packed CBOR</name>
      <t>Packed CBOR <xref target="I-D.ietf-cbor-packed"/> is used for name compression in "application/dns+cbor".</t>
      <t>If both DNS server and client support table setup tag TBD113 as described in <xref section="3.1" sectionFormat="of" target="I-D.ietf-cbor-packed"/>, it <bcp14>MAY</bcp14> be used for further
compression in DNS responses.
Especially IPv6 addresses, e.g., in AAAA resource records, can benefit from straight referencing to
compress common address prefixes.</t>
      <section anchor="sec_name-compression">
        <name>Name Compression</name>
        <figure anchor="fig_name-compression-cddl">
          <name>CDDL for name compression based on Packed CBOR and as defined in this document.</name>
          <sourcecode type="cddl"><![CDATA[
Text-String-Suffix-Sequence-Packed-CBOR = #6.28259(rump)
]]></sourcecode>
        </figure>
        <t>For name compression, a new packing table setup tag TBD28259 ('n' and 'c' in ASCII) for Packed CBOR <xref target="I-D.ietf-cbor-packed"/> is defined.
Any "application/dns+cbor" encoder and decoder <bcp14>MUST</bcp14> support tag TBD28259 for DNS queries and responses.
It provides an implicit text string suffix sequence table for shared items <em>V</em>.
This table <em>V</em> is appended to the existing table for shared items of any table setup tag enclosing tag TBD28259 (empty by default).
This implicit (i.e., not explicitly represented) table <em>V</em> is constructed as follows:
Any coherent sequence of text strings encountered within the rump of tag TBD28259 when reading it depth-first, as well as any of its non-empty suffixes, ordered by their appearance within the rump, are added to the table as arrays marked with the splice integration tag 1115 (see <xref section="5.1" sectionFormat="comma" target="I-D.ietf-cbor-packed"/>).
If a sequence for which a tagged array is already in <em>V</em> is encountered, a shared item reference <em>i</em> is added to the rump instead, splicing the content of the array within tag 1115 into the existing array (see <xref section="5.1" sectionFormat="comma" target="I-D.ietf-cbor-packed"/>) and that sequence as well as its non-empty suffixes are not added again to <em>V</em>.
The resulting rump should look as if it references the first instance of the <em>i</em>-th complete string sequence (depth first) in the sequence.</t>
        <t>It is <bcp14>NOT RECOMMENDED</bcp14> to use any other table building tag as defined in <xref section="3" sectionFormat="of" target="I-D.ietf-cbor-packed"/> within TBD28259, as the implicit table of TBD28259 may otherwise lead to more complicated en- and decoding steps.
Particularly, a one-pass decoding with minimal state of DNS messages <bcp14>SHOULD</bcp14> be ensured to be viable on constrained devices.
If another table setup needs to be transported within TBD28259, e.g., certain RDATA or option values might elect to use Packed CBOR as well, that table setup <bcp14>SHOULD</bcp14> be encapsulated as encoded CBOR within a byte string using tag 24 <xref target="RFC8949"/>.</t>
        <t>Due to the order of strings being important, special care should be taken for the order of map (major type 5, <xref target="RFC8949"/>) elements within tag TBD28259.
The "application/dns+cbor" media type specified within this document avoids maps for this reason, in addition to enforcing orders derived from DNS specifications, e.g., <xref target="RFC9460"/> for SvcParams.
If any other CBOR object than an object defined by <tt>dns-message</tt> in <xref target="fig_dns-msg"/> is compressed using TBD28259, map elements <bcp14>MUST</bcp14> be encoded in bytewise lexicographic order of their keys, as specified in <xref section="4.2.1" sectionFormat="of" target="RFC8949"/>, unless the definition of that particular object type provides a different predetermined order.</t>
        <t>The "application/dns+cbor" media type comes with an optional parameter "packed".
If it is not provided, the value of it is assumed to be 0.
With the "application/dns+cbor;packed=0" media type (i.e., even with "application/dns+cbor"), the tag TBD28259 is implicit, i.e., it <bcp14>SHOULD NOT</bcp14> be sent.
This avoids sending the 3 bytes of overhead generated by the presence of the tag.
If the decoder encounters an object marked with "application/dns+cbor;packed=0" that is tagged TBD28259, it <bcp14>MUST NOT</bcp14> discard the object but <bcp14>MUST</bcp14> parse its content as if the tag were implicit.
Otherwise, it might incur an additional message to be sent and media type negotiation might fail unnecessarily.</t>
        <t>The splice integration tag 1115 is the only integration tag in use for "application/dns+cbor" for "packed=0" and "packed=1" (see <xref section="5" sectionFormat="of" target="I-D.ietf-cbor-packed"/>).</t>
        <t>Name compression with an example message can be found in <xref target="sec_name-compression-example"/>.</t>
      </section>
      <section anchor="packed-cbor-113">
        <name>Further DNS Representation with Tag TBD113</name>
        <t>The representation of DNS responses with packed value 1, i.e., "application/dns+cbor;packed=1", has the same semantics as for tag TBD113
(see <xref section="3.1" sectionFormat="of" target="I-D.ietf-cbor-packed"/>) compressing the name-compressed response as rump.
The difference to <xref target="I-D.ietf-cbor-packed"/> is that tag TBD113 is implicit with media type parameter "packed=1", see <xref target="fig_packed-dns-msg"/>.</t>
        <t>Take the following definition:</t>
        <figure anchor="fig_packed-dns-msg">
          <name>Definition of packed DNS message with media type "application/dns+cbor;packed=1".</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
packed-dns-message = [
  [*shared-and-argument-item],
  rump
]
]]></sourcecode>
        </figure>
        <t>When marked by the "application/dns+cbor;packed=1" media type and parameter, it <bcp14>MUST</bcp14> be implicitly understood as the definition provided in <xref target="fig_expl-packed-dns-msg"/>.</t>
        <figure anchor="fig_expl-packed-dns-msg">
          <name>The implicit definition of a packed DNS message with media type "application/dns+cbor;packed=1".</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
Packed-Text-String-Suffix-Sequence-Packed-CBOR = #6.113(
  [
    [*shared-and-argument-item],
    Text-String-Suffix-Sequence-Packed-CBOR
  ]
)
]]></sourcecode>
        </figure>
        <t>If the decoder encounters an object marked with "application/dns+cbor;packed=1" that is tagged TBD113 or with its rump tagged TBD28259, it <bcp14>MUST NOT</bcp14> discard the object but <bcp14>MUST</bcp14> parse its content as if the tag were implicit..
Any object marked with "application/dns+cbor;packed=1" that does not fit the definition of
<tt>packed-dns-message</tt> provided in <xref target="fig_packed-dns-msg"/> or variants of explicit tags TBD113 or TBD28259 <bcp14>MUST</bcp14> be interpreted as an invalid message.</t>
        <t>"packed=1" compression of queries is not specified, as apart from EDNS(0) (see <xref target="sec_edns"/>), they only
consist of one question most of the time, i.e., there is close to no redundancy that is not already
covered by "packed=0" and encoding such an object can be too complex for a potentially constrained resolver.</t>
        <t>An example of this mechanism, as well as pseudo-code for a simple decoder, can be found in
<xref target="sec_packed-cbor-example"/>.</t>
      </section>
      <section anchor="media-type-negotiation">
        <name>Media Type Negotiation</name>
        <t>To negotiate (see, e.g., <xref target="RFC9110"/> or <xref section="5.5.4" sectionFormat="comma" target="RFC7252"/>) whether the DNS server supports table setup tag TBD113, a DNS client can indicate in its request that it accepts the media type "application/dns+cbor;packed=1".
If the server indicates support of the media type (see, e.g., <xref target="RFC9110"/> or <xref section="5.5.4" sectionFormat="comma" target="RFC7252"/>), the client <bcp14>MAY</bcp14> request the response to be in packed value 1 in subsequent queries (media type "application/dns+cbor;packed=1").
The server then <bcp14>SHOULD</bcp14> reply with the response in Packed CBOR, which it also signals with media type
"application/dns+cbor;packed=1".
Otherwise, both fall back to the implicit "packed=0".</t>
      </section>
      <section anchor="sec_pack-compression">
        <name>Compression</name>
        <t>The method of the compressor to construct the packing table, i.e., how the compression is applied, is out of scope of this document.</t>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit".
<?line -20?>
      </t>
      <section anchor="python-decoderencoder">
        <name>Python decoder/encoder</name>
        <t>The authors of this document provide a <eref target="https://github.com/netd-tud/cbor4dns">decoder/encoder
implementation</eref> of both the unpacked and packed format
specified in this document in Python.</t>
        <dl>
          <dt>Level of maturity:</dt>
          <dd>
            <t>prototype</t>
          </dd>
          <dt>Version compatibility:</dt>
          <dd>
            <t>draft-lenders-dns-cbor-18</t>
          </dd>
          <dt>License:</dt>
          <dd>
            <t>MIT</t>
          </dd>
          <dt>Contact information:</dt>
          <dd>
            <t><tt>Martine Lenders &lt;martine.lenders@tu-dresden.de&gt;</tt></t>
          </dd>
          <dt>Last update of this information:</dt>
          <dd>
            <t>October 2026</t>
          </dd>
        </dl>
      </section>
      <section anchor="embedded-decoderencoder">
        <name>Embedded decoder/encoder</name>
        <t>The authors of this document provide a <eref target="https://github.com/RIOT-OS/RIOT/pull/19989">decoder/encoder
implementation</eref> of the unpacked format specified in this
document for the RIOT operating system. It can only encode queries and decode responses.</t>
        <dl>
          <dt>Level of maturity:</dt>
          <dd>
            <t>prototype</t>
          </dd>
          <dt>Version compatibility:</dt>
          <dd>
            <t>draft-lenders-dns-cbor-08</t>
          </dd>
          <dt>License:</dt>
          <dd>
            <t>MIT</t>
          </dd>
          <dt>Contact information:</dt>
          <dd>
            <t><tt>Martine Lenders &lt;martine.lenders@tu-dresden.de&gt;</tt></t>
          </dd>
          <dt>Last update of this information:</dt>
          <dd>
            <t>October 2023</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="RFC8949"/> and <xref target="I-D.ietf-cbor-packed"/> also apply for this document.
For original binary wire format DNS data encoded as byte strings, such as RRs, RDATA,
SvcParamValues, or EDNS OPT data, a parser <bcp14>MUST</bcp14> ensure that any encoded lengths within that byte
string do not overflow the bounds of the byte string or fail otherwise.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="media-type">
        <name>Media Type Registration</name>
        <t>This document registers a media type for the serialization format for DNS messages in CBOR. It
follows the procedures specified in <xref target="RFC6838"/>.</t>
        <section anchor="applicationdnscbor">
          <name>"application/dns+cbor"</name>
          <t>Type name: application</t>
          <t>Subtype name: dns+cbor</t>
          <t>Required parameters: None</t>
          <t>Optional parameters: packed</t>
          <t>Encoding considerations: Must be encoded using <xref target="RFC8949"/>. See [TBD-this-spec] for details.</t>
          <t>Security considerations: See <xref target="security-considerations"/> of this draft</t>
          <t>Interoperability considerations: TBD</t>
          <t>Published specification: [TBD-this-spec]</t>
          <t>Applications that use this media type: TBD DNS over X systems</t>
          <t>Fragment Identifier Considerations: TBD</t>
          <t>Additional information:</t>
          <t>   Deprecated alias names for this type: N/A</t>
          <t>   Magic number(s): N/A</t>
          <t>   File extension(s): dnsc</t>
          <t>   Macintosh file type code(s): none</t>
          <t>Person &amp; email address to contact for further information:
   IETF CBOR Working Group (cbor@ietf.org) or IETF Applications and Real-Time Area (art@ietf.org)</t>
          <t>Intended usage: COMMON</t>
          <t>Restrictions on Usage: None?</t>
          <t>Author: Martine S. Lenders <eref target="mailto:m.lenders@fu-berlin.de">m.lenders@fu-berlin.de</eref></t>
          <t>Change controller: IETF</t>
          <t>Provisional registrations? No</t>
        </section>
      </section>
      <section anchor="coap-content-format-registration">
        <name>CoAP Content-Format Registration</name>
        <t>IANA is requested to assign CoAP Content-Format IDs for the new DNS message media
types in the "CoAP Content-Formats"
sub-registry, within the "CoRE Parameters" registry <xref target="RFC7252"/>, corresponding to the
"application/dns+cbor" media type specified in <xref target="media-type"/>:</t>
        <section anchor="cf-app-d-c">
          <name>"application/dns+cbor"</name>
          <t>Media-Type: application/dns+cbor</t>
          <t>Encoding: -</t>
          <t>Id: TBD53</t>
          <t>Reference: [TBD-this-spec]</t>
        </section>
        <section anchor="applicationdnscborpacked1">
          <name>"application/dns+cbor;packed=1"</name>
          <t>Media-Type: application/dns+cbor;packed=1</t>
          <t>Encoding: -</t>
          <t>Id: TBD54</t>
          <t>Reference: [TBD-this-spec]</t>
        </section>
      </section>
      <section anchor="cbor-tags-registry">
        <name>CBOR Tags Registry</name>
        <t>In the registry "<xref section="CBOR Tags" relative="#cbor-tags" sectionFormat="bare" target="IANA.cbor-tags"/>" <xref target="IANA.cbor-tags"/>,
IANA is requested to allocate the tags defined in <xref target="tab-tag-values"/>.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tag Numbers</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD141</td>
              <td align="left">array</td>
              <td align="left">CBOR EDNS option record</td>
              <td align="left">draft-lenders-dns-cbor</td>
            </tr>
            <tr>
              <td align="right">TBD28259</td>
              <td align="left">any</td>
              <td align="left">Packed CBOR; implicit text string suffix sequence shared-item table</td>
              <td align="left">draft-lenders-dns-cbor</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="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>
        <reference anchor="RFC3596">
          <front>
            <title>DNS Extensions to Support IP Version 6</title>
            <author fullname="S. Thomson" initials="S." surname="Thomson"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="V. Ksinant" initials="V." surname="Ksinant"/>
            <author fullname="M. Souissi" initials="M." surname="Souissi"/>
            <date month="October" year="2003"/>
            <abstract>
              <t>This document defines the changes that need to be made to the Domain Name System (DNS) to support hosts running IP version 6 (IPv6). The changes include a resource record type to store an IPv6 address, a domain to support lookups based on an IPv6 address, and updated definitions of existing query types that return Internet addresses as part of additional section processing. The extensions are designed to be compatible with existing applications and, in particular, DNS implementations themselves. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="88"/>
          <seriesInfo name="RFC" value="3596"/>
          <seriesInfo name="DOI" value="10.17487/RFC3596"/>
        </reference>
        <reference anchor="RFC5891">
          <front>
            <title>Internationalized Domain Names in Applications (IDNA): Protocol</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document is the revised protocol definition for Internationalized Domain Names (IDNs). The rationale for changes, the relationship to the older specification, and important terminology are provided in other documents. This document specifies the protocol mechanism, called Internationalized Domain Names in Applications (IDNA), for registering and looking up IDNs in a way that does not require changes to the DNS itself. IDNA is only meant for processing domain names, not free text. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5891"/>
          <seriesInfo name="DOI" value="10.17487/RFC5891"/>
        </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="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9460">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-packed">
          <front>
            <title>Packed CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Mikolai Gütschow" initials="M." surname="Gütschow">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <date day="2" month="February" year="2026"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949 == STD 94)
   is a data format whose design goals include the possibility of
   extremely small code size, fairly small message size, and
   extensibility without the need for version negotiation.

   CBOR does not provide any forms of data compression.  CBOR data
   items, in particular when generated from legacy data models, often
   allow considerable gains in compactness when applying data
   compression.  While traditional data compression techniques such as
   DEFLATE (RFC 1951) can work well for CBOR encoded data items, their
   disadvantage is that the recipient needs to decompress the compressed
   form before it can make use of the data.

   This specification describes Packed CBOR, a set of CBOR tags and
   simple values that enable a simple transformation of an original CBOR
   data item into a Packed CBOR data item that is almost as easy to
   consume as the original CBOR data item.  A separate decompression
   step is therefore often not required at the recipient.


   // (This cref will be removed by the RFC editor:) The present
   // revision -19 is a work-in-progress release in preparation for
   // another cbor-packed side meeting.  This revision resolves the use
   // of the tunables A/B/C by setting A=16, B=8, and C=8, and choosing
   // requested simple values and tag numbers, in preparation for
   // continuing the early allocation process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-19"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-literals">
          <front>
            <title>Concise Diagnostic Notation (CDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="31" month="October" year="2026"/>
            <abstract>
              <t>   This document formalizes and consolidates the definition of the
   Concise Diagnostic Notation (CDN) of the Concise Binary Object
   Representation (CBOR), addressing implementer experience.

   Replacing CDN's previous informal descriptions, it updates RFC 8949,
   obsoleting its Section 8, and RFC 8610, obsoleting its Appendix G.

   It also specifies registry-based extension points and uses them to
   support text representations such as of epoch-based dates/times and
   of IP addresses and prefixes.


   // (This cref will be removed by the RFC editor:) This revision -29
   // attempts to implement various change requests not covered in -28
   // that have been discussed in the 2026-08-19 and 2026-09-30 WG
   // interim meetings, but does not attempt to reflect the outcome of
   // those discussions.  The text also does not have WG input yet on
   // any renaming decisions (CDN name, b1/t1 name).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-29"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-e-ref">
          <front>
            <title>External References to Values in CBOR Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="1" month="March" year="2026"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949) is a data
   format whose design goals include the possibility of extremely small
   code size, fairly small message size, and extensibility without the
   need for version negotiation.

   CBOR diagnostic notation (EDN) is widely used to represent CBOR data
   items in a way that is accessible to humans, for instance for
   examples in a specification.  At the time of writing, EDN did not
   provide mechanisms for composition of such examples from multiple
   components or sources.  This document uses EDN application extensions
   to provide two such mechanisms, both of which insert an imported data
   item into the data item being described in EDN:

   The e'' application extension provides a way to import data items,
   particularly constant values, from a CDDL model (which itself has
   ways to provide composition).

   The ref'' application extension provides a way to import data items
   that are described in EDN.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-e-ref-03"/>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </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="RFC2782">
          <front>
            <title>A DNS RR for specifying the location of services (DNS SRV)</title>
            <author fullname="A. Gulbrandsen" initials="A." surname="Gulbrandsen"/>
            <author fullname="P. Vixie" initials="P." surname="Vixie"/>
            <author fullname="L. Esibov" initials="L." surname="Esibov"/>
            <date month="February" year="2000"/>
            <abstract>
              <t>This document describes a DNS RR which specifies the location of the server(s) for a specific protocol and domain. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2782"/>
          <seriesInfo name="DOI" value="10.17487/RFC2782"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <referencegroup anchor="BCP219" target="https://www.rfc-editor.org/info/bcp219">
          <reference anchor="RFC9499" target="https://www.rfc-editor.org/info/rfc9499">
            <front>
              <title>DNS Terminology</title>
              <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
              <author fullname="K. Fujiwara" initials="K." surname="Fujiwara"/>
              <date month="March" year="2024"/>
              <abstract>
                <t>The Domain Name System (DNS) is defined in literally dozens of different RFCs. The terminology used by implementers and developers of DNS protocols, and by operators of DNS systems, has changed in the decades since the DNS was first defined. This document gives current definitions for many of the terms used in the DNS in a single document.</t>
                <t>This document updates RFC 2308 by clarifying the definitions of "forwarder" and "QNAME". It obsoletes RFC 8499 by adding multiple terms and clarifications. Comprehensive lists of changed and new definitions can be found in Appendices A and B.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="219"/>
            <seriesInfo name="RFC" value="9499"/>
            <seriesInfo name="DOI" value="10.17487/RFC9499"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC4944">
          <front>
            <title>Transmission of IPv6 Packets over IEEE 802.15.4 Networks</title>
            <author fullname="G. Montenegro" initials="G." surname="Montenegro"/>
            <author fullname="N. Kushalnagar" initials="N." surname="Kushalnagar"/>
            <author fullname="J. Hui" initials="J." surname="Hui"/>
            <author fullname="D. Culler" initials="D." surname="Culler"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document describes the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on IEEE 802.15.4 networks. Additional specifications include a simple header compression scheme using shared context and provisions for packet delivery in IEEE 802.15.4 meshes. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4944"/>
          <seriesInfo name="DOI" value="10.17487/RFC4944"/>
        </reference>
        <reference anchor="RFC6282">
          <front>
            <title>Compression Format for IPv6 Datagrams over IEEE 802.15.4-Based Networks</title>
            <author fullname="J. Hui" initials="J." role="editor" surname="Hui"/>
            <author fullname="P. Thubert" initials="P." surname="Thubert"/>
            <date month="September" year="2011"/>
            <abstract>
              <t>This document updates RFC 4944, "Transmission of IPv6 Packets over IEEE 802.15.4 Networks". This document specifies an IPv6 header compression format for IPv6 packet delivery in Low Power Wireless Personal Area Networks (6LoWPANs). The compression format relies on shared context to allow compression of arbitrary prefixes. How the information is maintained in that shared context is out of scope. This document specifies compression of multicast addresses and a framework for compressing next headers. UDP header compression is specified within this framework. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6282"/>
          <seriesInfo name="DOI" value="10.17487/RFC6282"/>
        </reference>
        <reference anchor="RFC7228">
          <front>
            <title>Terminology for Constrained-Node Networks</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Ersue" initials="M." surname="Ersue"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks. This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7228"/>
          <seriesInfo name="DOI" value="10.17487/RFC7228"/>
        </reference>
        <reference anchor="RFC8484">
          <front>
            <title>DNS Queries over HTTPS (DoH)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <date month="October" year="2018"/>
            <abstract>
              <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS. Each DNS query-response pair is mapped into an HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8484"/>
          <seriesInfo name="DOI" value="10.17487/RFC8484"/>
        </reference>
        <reference anchor="RFC8618">
          <front>
            <title>Compacted-DNS (C-DNS): A Format for DNS Packet Capture</title>
            <author fullname="J. Dickinson" initials="J." surname="Dickinson"/>
            <author fullname="J. Hague" initials="J." surname="Hague"/>
            <author fullname="S. Dickinson" initials="S." surname="Dickinson"/>
            <author fullname="T. Manderson" initials="T." surname="Manderson"/>
            <author fullname="J. Bond" initials="J." surname="Bond"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a data representation for collections of DNS messages. The format is designed for efficient storage and transmission of large packet captures of DNS traffic; it attempts to minimize the size of such packet capture files but retain the full DNS message contents along with the most useful transport metadata. It is intended to assist with the development of DNS traffic- monitoring applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8618"/>
          <seriesInfo name="DOI" value="10.17487/RFC8618"/>
        </reference>
        <reference anchor="RFC8724">
          <front>
            <title>SCHC: Generic Framework for Static Context Header Compression and Fragmentation</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="C. Gomez" initials="C." surname="Gomez"/>
            <author fullname="D. Barthel" initials="D." surname="Barthel"/>
            <author fullname="JC. Zuniga" initials="JC." surname="Zuniga"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document defines the Static Context Header Compression and fragmentation (SCHC) framework, which provides both a header compression mechanism and an optional fragmentation mechanism. SCHC has been designed with Low-Power Wide Area Networks (LPWANs) in mind.</t>
              <t>SCHC compression is based on a common static context stored both in the LPWAN device and in the network infrastructure side. This document defines a generic header compression mechanism and its application to compress IPv6/UDP headers.</t>
              <t>This document also specifies an optional fragmentation and reassembly mechanism. It can be used to support the IPv6 MTU requirement over the LPWAN technologies. Fragmentation is needed for IPv6 datagrams that, after SCHC compression or when such compression was not possible, still exceed the Layer 2 maximum payload size.</t>
              <t>The SCHC header compression and fragmentation mechanisms are independent of the specific LPWAN technology over which they are used. This document defines generic functionalities and offers flexibility with regard to parameter settings and mechanism choices. This document standardizes the exchange over the LPWAN between two SCHC entities. Settings and choices specific to a technology or a product are expected to be grouped into profiles, which are specified in other documents. Data models for the context and profiles are out of scope.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8724"/>
          <seriesInfo name="DOI" value="10.17487/RFC8724"/>
        </reference>
        <reference anchor="RFC8824">
          <front>
            <title>Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP)</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="R. Andreasen" initials="R." surname="Andreasen"/>
            <date month="June" year="2021"/>
            <abstract>
              <t>This document defines how to compress Constrained Application Protocol (CoAP) headers using the Static Context Header Compression and fragmentation (SCHC) framework. SCHC defines a header compression mechanism adapted for Constrained Devices. SCHC uses a static description of the header to reduce the header's redundancy and size. While RFC 8724 describes the SCHC compression and fragmentation framework, and its application for IPv6/UDP headers, this document applies SCHC to CoAP headers. The CoAP header structure differs from IPv6 and UDP, since CoAP uses a flexible header with a variable number of options, themselves of variable length. The CoAP message format is asymmetric: the request messages have a header format different from the format in the response messages. This specification gives guidance on applying SCHC to flexible headers and how to leverage the asymmetry for more efficient compression Rules.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8824"/>
          <seriesInfo name="DOI" value="10.17487/RFC8824"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <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="RFC9953">
          <front>
            <title>DNS over CoAP (DoC)</title>
            <author fullname="M. S. Lenders" initials="M. S." surname="Lenders"/>
            <author fullname="C. Amsüss" initials="C." surname="Amsüss"/>
            <author fullname="C. Gündoğan" initials="C." surname="Gündoğan"/>
            <author fullname="T. C. Schmidt" initials="T. C." surname="Schmidt"/>
            <author fullname="M. Wählisch" initials="M." surname="Wählisch"/>
            <date month="March" year="2026"/>
            <abstract>
              <t>This document defines a protocol for exchanging DNS queries (OPCODE 0) over the Constrained Application Protocol (CoAP). These CoAP messages can be protected by (D)TLS-Secured CoAP or Object Security for Constrained RESTful Environments (OSCORE) to provide encrypted DNS message exchange for constrained devices in the Internet of Things (IoT).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9953"/>
          <seriesInfo name="DOI" value="10.17487/RFC9953"/>
        </reference>
        <reference anchor="RFC8945">
          <front>
            <title>Secret Key Transaction Authentication for DNS (TSIG)</title>
            <author fullname="F. Dupont" initials="F." surname="Dupont"/>
            <author fullname="S. Morris" initials="S." surname="Morris"/>
            <author fullname="P. Vixie" initials="P." surname="Vixie"/>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="O. Gudmundsson" initials="O." surname="Gudmundsson"/>
            <author fullname="B. Wellington" initials="B." surname="Wellington"/>
            <date month="November" year="2020"/>
            <abstract>
              <t>This document describes a protocol for transaction-level authentication using shared secrets and one-way hashing. It can be used to authenticate dynamic updates to a DNS zone as coming from an approved client or to authenticate responses as coming from an approved name server.</t>
              <t>No recommendation is made here for distributing the shared secrets; it is expected that a network administrator will statically configure name servers and clients using some out-of-band mechanism.</t>
              <t>This document obsoletes RFCs 2845 and 4635.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="93"/>
          <seriesInfo name="RFC" value="8945"/>
          <seriesInfo name="DOI" value="10.17487/RFC8945"/>
        </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="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    </references>
    <?line 881?>

<section anchor="examples">
      <name>Examples</name>
      <section anchor="cddl-model-for-e-application-extension">
        <name>CDDL model for <tt>e''</tt> application extension</name>
        <t><xref target="fig_e-cddl-model"/> shows the CDDL model used for the <tt>e''</tt> application extension for external
references to values <xref target="I-D.ietf-cbor-edn-e-ref"/> in our examples.
<tt>C-</tt> constants define DNS classes as unsigned integers from the "DNS CLASSes" sub-registry of the
IANA "Domain Name System (DNS) Parameters" registry.
<tt>RR-</tt> constants define resource record types from the "Resource Record (RR) TYPEs" sub-registry of
the IANA "Domain Name System (DNS) Parameters" registry.</t>
        <figure anchor="fig_e-cddl-model">
          <name>CDDL model defining constants for this document for e''.</name>
          <sourcecode type="cddl"><![CDATA[
C-IN = 1
C-ANY = 255

RR-A = 1
RR-NS = 2
RR-CNAME = 5
RR-PTR = 12
RR-AAAA = 28
RR-ANY = 255
]]></sourcecode>
        </figure>
      </section>
      <section anchor="sec_query-examples">
        <name>DNS Queries</name>
        <t>A DNS query of the record AAAA in class IN for name "example.org" is
represented in CBOR diagnostic notation <xref target="I-D.ietf-cbor-edn-literals"/> with <tt>e''</tt>
application extension <xref target="I-D.ietf-cbor-edn-e-ref"/> as follows:</t>
        <sourcecode type="edn"><![CDATA[
[["example", "org"]]
]]></sourcecode>
        <t>The binary (in hexadecimal encoding) of the query looks as follows (14 bytes):</t>
        <artwork><![CDATA[
81                      # array(1)
   82                   # array(2)
      67                # text(7)
         6578616d706c65 # "example"
      63                # text(3)
         6f7267         # "org"
]]></artwork>
        <t>A query of an A record for the same name is represented as</t>
        <sourcecode type="edn"><![CDATA[
[["example", "org", e'RR-A']]
]]></sourcecode>
        <t>or in binary (15 bytes)</t>
        <artwork><![CDATA[
81                      # array(1)
   83                   # array(3)
      67                # text(7)
         6578616d706c65 # "example"
      63                # text(3)
         6f7267         # "org"
      01                # e'RR-A' (unsigned(1))
]]></artwork>
        <t>A query of an ANY record for that name is represented as</t>
        <sourcecode type="edn"><![CDATA[
[["example", "org", e'RR-ANY', e'C-ANY']]
]]></sourcecode>
        <t>or in binary (18 bytes)</t>
        <artwork><![CDATA[
81                      # array(1)
   84                   # array(4)
      67                # text(7)
         6578616d706c65 # "example"
      63                # text(3)
         6f7267         # "org"
      18 ff             # e'RR-ANY' (unsigned(255))
      18 ff             # e'C-ANY' (unsigned(255))
]]></artwork>
      </section>
      <section anchor="sec_name-compression-example">
        <name>Name Compression</name>
        <t>Take the following response <em>o</em> in CBOR diagnostic notation <xref target="I-D.ietf-cbor-edn-literals"/>.
It contains a question for the "www.example.org" AAAA record, with a "svc.www.example.org" CNAME answer and its AAAA record, as well as the "org.example.org" NS record for the "example.org" domain in the authority section, each record with TTL 3600:</t>
        <figure anchor="fig_name-compression-example-unpacked">
          <name>Unpacked example for implicit name compression.</name>
          <sourcecode type="edn"><![CDATA[
[
  ["www", "example", "org"],
  [
    [3600, "www", "example", "org", e'RR-CNAME', "svc", "www", "example", "org"],
    [3600, "svc", "www", "example", "org", ip'2001:db8::1']
  ],
  [
    [3600, "example", "org", e'RR-NS', "org", "example", "org"]
  ],
  []
]
]]></sourcecode>
        </figure>
        <t>The object <em>o</em> would be sent over the wire as the following 136 bytes of binary data, represented
here with hexadecimal encoding (type and data noted in comment).</t>
        <figure anchor="fig_name-compression-example-unpacked-binary">
          <name>Binary of the unpacked example for implicit name compression (136 bytes).</name>
          <artwork><![CDATA[
84                                      # array(4)
   83                                   # array(3)
      63                                # text(3)
         777777                         # "www"
      67                                # text(7)
         6578616D706C65                 # "example"
      63                                # text(3)
         6F7267                         # "org"
   82                                   # array(2)
      89                                # array(9)
         19 0E10                        # unsigned(3600)
         63                             # text(3)
            777777                      # "www"
         67                             # text(7)
            6578616D706C65              # "example"
         63                             # text(3)
            6F7267                      # "org"
         05                             # e'RR-CNAME' (unsigned(5))
         63                             # text(3)
            737663                      # "svc"
         63                             # text(3)
            777777                      # "www"
         67                             # text(7)
            6578616D706C65              # "example"
         63                             # text(3)
            6F7267                      # "org"
      86                                # array(6)
         19 0E10                        # unsigned(3600)
         63                             # text(3)
            737663                      # "svc"
         63                             # text(3)
            777777                      # "www"
         67                             # text(7)
            6578616D706C65              # "example"
         63                             # text(3)
            6F7267                      # "org"
         50                             # bytes(16)
            20010DB8000000000000000000000001 # ip'2001:db8::1'
   81                                   # array(1)
      87                                # array(7)
         19 0E10                        # unsigned(3600)
         67                             # text(7)
            6578616D706C65              # "example"
         63                             # text(3)
            6F7267                      # "org"
         02                             # e'RR-NS' (unsigned(2))
         63                             # text(3)
            6F7267                      # "org"
         67                             # text(7)
            6578616D706C65              # "example"
         63                             # text(3)
            6F7267                      # "org"
   80                                   # array(0)
]]></artwork>
        </figure>
        <t>With name compression, <em>o</em> would generate the following virtual table <em>V</em>.</t>
        <figure anchor="fig_name-compression-example-table">
          <name>Implicit table of shared items for the example _o_.</name>
          <sourcecode type="edn"><![CDATA[
[
    /index 0:/ 1115(["www", "example", "org"]),
    /index 1:/ 1115(["example", "org"]),
    /index 2:/ 1115(["org"]),
    /index 3:/ 1115(["svc", "www", "example", "org"]),
    /index 4:/ 1115(["org", "example", "org"])
]
]]></sourcecode>
        </figure>
        <t>An implementation <bcp14>MAY</bcp14> choose to use references here to reduce memory consumption, as represented in <xref target="fig_name-compression-example-table-comp"/>.
Circular references are not possible due to the construction algorithm of <em>V</em>.</t>
        <figure anchor="fig_name-compression-example-table-comp">
          <name>Implicit table of shared items for the example _o_ with self-references.</name>
          <sourcecode type="edn"><![CDATA[
[
    /index 0:/ 1115(["www", "example", "org"]),
    /index 1:/ 1115(["example", "org"]),
    /index 2:/ 1115(["org"]),
    /index 3:/ 1115(["svc", simple(0)]),
    /index 4:/ 1115(["org", simple(1)])
]
]]></sourcecode>
        </figure>
        <t>Note that the sequence "org", simple(0) is added at index 4 with leading "org", instead of referencing index 2 + index 1 (<tt>simple(2), simple(1)</tt>), as it is its own distinct suffix sequence.
However, its suffix "example", "org" is not added to the table again, as it is already present at index 1.</t>
        <t>Assuming media type "application/dns+cbor;packed=0" (i.e., an implicit tag TBD28259), the packed representation of <em>o</em> would thus be:</t>
        <figure anchor="fig_name-compression-example-packed">
          <name>The packed representation of the name compression example.</name>
          <sourcecode type="edn"><![CDATA[
[
  ["www", "example", "org"],
  [
    [
      3600,
      simple(0) / expands to "www", "example", "org" /,
      e'RR-CNAME',
      "svc",
      simple(0) / expands to "www", "example", "org" /
    ],
    [
      3600,
      simple(3) / expands to "svc", "www", "example", "org" /,
      ip'2001:db8::1'
    ]
  ],
  [
    [
      3600,
      simple(1) / expands to "example", "org" /,
      e'RR-NS',
      "org",
      simple(1) / expands to "example", "org" /,
    ]
  ],
  []
]
]]></sourcecode>
        </figure>
        <t>In binary the packed representation of <em>o</em> would be:</t>
        <figure anchor="fig_name-compression-example-packed-binary">
          <name>Binary of the packed representation of the example (65 bytes).</name>
          <artwork><![CDATA[
84                                   # array(4)
   83                                # array(3)
      63                             # text(3)
         777777                      # "www"
      67                             # text(7)
         6578616D706C65              # "example"
      63                             # text(3)
         6F7267                      # "org"
   82                                # array(2)
      85                             # array(5)
         19 0E10                     # unsigned(3600)
         E0                          # simple(0)
         05                          # e'RR-CNAME' (unsigned(5))
         63                          # text(3)
            737663                   # "svc"
         E0                          # simple(0)
      83                             # array(3)
         19 0E10                     # unsigned(3600)
         E3                          # simple(3)
         50                          # bytes(16)
            20010DB8000000000000000000000001 # ip'2001:db8::1'
   81                                # array(1)
      85                             # array(5)
         19 0E10                     # unsigned(3600)
         E1                          # simple(1)
         02                          # e'RR-NS' (unsigned(2))
         63                          # text(3)
            6F7267                   # "org"
         E1                          # simple(1)
   80                                # array(0)
]]></artwork>
        </figure>
      </section>
      <section anchor="sec_response-examples">
        <name>DNS Responses</name>
        <t>The responses to the examples provided in <xref target="sec_query-examples"/> are shown
below. We use the CBOR diagnostic notation (see <xref target="I-D.ietf-cbor-edn-literals"/> and <xref section="G" sectionFormat="of" target="RFC8610"/>),
most notably the "ip" extension to represent binary IP addresses as an IP address app-string literal,
with <tt>e''</tt> application extension for external references to values <xref target="I-D.ietf-cbor-edn-e-ref"/>.</t>
        <t>To represent an AAAA record with TTL 300 seconds for the IPv6 address 2001:db8::1, a minimal
response to <tt>[["example", "org"]]</tt> could be</t>
        <sourcecode type="edn"><![CDATA[
[[[300, ip'2001:db8::1']]]
]]></sourcecode>
        <t>or in binary (23 bytes)</t>
        <artwork><![CDATA[
81                                            # array(1)
   81                                         # array(1)
      82                                      # array(2)
         19 012c                              # unsigned(300)
         50                                   # bytes(16)
            20010db8000000000000000000000001  # ip'2001:db8::1'
]]></artwork>
        <t>In this case, the name is derived from the query.</t>
        <t>If the name or the context is required, the following response would also
be valid:</t>
        <sourcecode type="edn"><![CDATA[
[[["example", "org", 300, ip'2001:db8::1']]]
]]></sourcecode>
        <t>In binary that response looks like the following (35 bytes):</t>
        <artwork><![CDATA[
81                                            # array(1)
   81                                         # array(1)
      84                                      # array(4)
         67                                   # text(7)
            6578616d706c65                    # "example"
         63                                   # text(3)
            6f7267                            # "org"
         19 012c                              # unsigned(300)
         50                                   # bytes(16)
            20010db8000000000000000000000001  # ip'2001:db8::1'
]]></artwork>
        <t>If the query cannot be mapped to the response for some reason or is explicitly requested by the
client, a response would look like:</t>
        <sourcecode type="edn"><![CDATA[
[["example", "org"], [[300, ip'2001:db8::1']]]
]]></sourcecode>
        <t>In binary that response looks like the following (36 bytes):</t>
        <artwork><![CDATA[
82                                            # array(2)
   82                                         # array(2)
      67                                      # text(7)
         6578616d706c65                       # "example"
      63                                      # text(3)
         6f7267                               # "org"
   81                                         # array(1)
      82                                      # array(2)
         19 012c                              # unsigned(300)
         50                                   # bytes(16)
            20010db8000000000000000000000001  # ip'2001:db8::1'
]]></artwork>
        <t>To represent a minimal response of an A record with TTL 300 seconds for the IPv4 address
192.0.2.1, a minimal response to <tt>[["example", "org", 1]]</tt> could be</t>
        <sourcecode type="edn"><![CDATA[
[[[300, ip'192.0.2.1']]]
]]></sourcecode>
        <t>or in binary (11 bytes)</t>
        <artwork><![CDATA[
81                   # array(1)
   81                # array(1)
      82             # array(2)
         19 012c     # unsigned(300)
         44          # bytes(4)
            c0000201 # ip'192.0.2.1'
]]></artwork>
        <t>Note that the record type A can also be elided here, as this record
type is specified in the (equally elided) question section.</t>
        <t>Lastly, a response to <tt>[["example", "org", e'RR-ANY', e'C-ANY']]</tt> could be</t>
        <sourcecode type="edn"><![CDATA[
[
  # PTR (12) question for "example.org"
  [
    # appends 0 => ["example", "org"] to virtual packing table
    "example",
    # appends 1 => ["org"] to virtual packing table
    "org",
    e'RR-PTR'
  ],
  # Answer section:
  [[
    # PTR (12) for "example.org"
    # (both elided since they are the same as in question)
    # is "_coap._udp.local" with TTL 3600
    3600,
    # appends 2 => ["_coap", "_udp", "local"] to virtual packing table
    "_coap",
    # appends 3 => ["_udp", "local"] to virtual packing table
    "_udp",
    # appends 4 => ["local"] to virtual packing table
    "local"
  ]],
  # Authority section:
  [
    [
      # NS (2) for "example.org"
      # (name elided since it is the same as in question)
      # is "ns1.example.org" with TTL 3600
      3600, e'RR-NS',
      # appends 5 => ["ns1", simple(0)] to virtual packing table
      "ns1", simple(0)  # expands to ["example", "org"]
    ],
    [
      # NS (2) for "example.org"
      # (name elided since it is the same as in question)
      # is "ns2.example.org" with TTL 3600
      3600, e'RR-NS',
      # appends 6 => ["ns2", simple(0)] to virtual packing table
      "ns2", simple(0)  # expands to ["example", "org"]
    ]
  ],
  # Additional section
  [
    [
      # AAAA (28) for "_coap._udp.local"
      # is 2001:db8::1 with TTL 3600
      simple(2),    # expands to ["_coap", "_udp", "local"]
      3600, e'RR-AAAA', ip'2001:db8::1'
    ],
    [
      # AAAA (28) for "_coap._udp.local"
      # is 2001:db8::2 with TTL 3600
      simple(2),    # expands to ["_coap", "_udp", "local"]
      3600, e'RR-AAAA', ip'2001:db8::2'
    ],
    [
      # AAAA (28) for "ns1.example.org"
      # is 2001:db8::35 with TTL 3600
      simple(5),    # expands to ["ns1", ["example", "org"]]
      3600, e'RR-AAAA', ip'2001:db8::35'
    ],
    [
      # AAAA (28) for "ns2.example.org"
      # is 2001:db8::3535 with TTL 3600
      simple(6),    # expands to ["ns2", ["example", "org"]]
      3600, e'RR-AAAA', ip'2001:db8::3535'
    ]
  ]
]
]]></sourcecode>
        <t>or in binary (155 bytes)</t>
        <artwork><![CDATA[
84                                            # array(4)
   83                                         # array(3)
      67                                      # text(7)
         6578616d706c65                       # "example"
      63                                      # text(3)
         6f7267                               # "org"
      0c                                      # e'RR-PTR' (unsigned(12))
   81                                         # array(1)
      84                                      # array(4)
         19 0e10                              # unsigned(3600)
         65                                   # text(5)
            5f636f6170                        # "_coap"
         64                                   # text(4)
            5f756470                          # "_udp"
         65                                   # text(5)
            6c6f63616c                        # "local"
   82                                         # array(2)
      84                                      # array(4)
         19 0e10                              # unsigned(3600)
         02                                   # e'RR-NS' (unsigned(2))
         63                                   # text(3)
            6e7331                            # "ns1"
         e0                                   # simple(0)
      84                                      # array(4)
         19 0e10                              # unsigned(3600)
         02                                   # e'RR-NS' (unsigned(2))
         63                                   # text(3)
            6e7332                            # "ns2"
         e0                                   # simple(0)
   84                                         # array(4)
      84                                      # array(4)
         e2                                   # simple(2)
         19 0e10                              # unsigned(3600)
         18 1c                                # e'RR-AAAA' (unsigned(28))
         50                                   # bytes(16)
            20010db8000000000000000000000001  # ip'2001:db8::1'
      84                                      # array(4)
         e2                                   # simple(2)
         19 0e10                              # unsigned(3600)
         18 1c                                # e'RR-AAAA' (unsigned(28))
         50                                   # bytes(16)
            20010db8000000000000000000000002  # ip'2001:db8::2'
      84                                      # array(4)
         e5                                   # simple(5)
         19 0e10                              # unsigned(3600)
         18 1c                                # e'RR-AAAA' (unsigned(28))
         50                                   # bytes(16)
            20010db8000000000000000000000035  # ip'2001:db8::35'
      84                                      # array(4)
         e6                                   # simple(6)
         19 0e10                              # unsigned(3600)
         18 1c                                # e'RR-AAAA' (unsigned(28))
         50                                   # bytes(16)
            20010db8000000000000000000003535  # ip'2001:db8::3535'
]]></artwork>
        <t>This response advertises two local CoAP servers (identified by service name _coap._udp.local) at
2001:db8::1 and 2001:db8::2 and two nameservers for the example.org domain, ns1.example.org at
2001:db8::35 and ns2.example.org at 2001:db8::3535. Each of the transmitted records has a TTL of
3600 seconds.
Note the use of name compression (see <xref target="sec_name-compression"/>) in this example.</t>
      </section>
      <section anchor="sec_packed-cbor-example">
        <name>Name Compression and Packed CBOR</name>
        <t><xref target="fig_name-compression-example-packed-113"/> shows the example from <xref target="fig_name-compression-example-unpacked"/> with "packed=1".</t>
        <figure anchor="fig_name-compression-example-packed-113">
          <name>The packed representation of the example of a message marked with "application/dns+cbor;packed=1".</name>
          <sourcecode type="edn"><![CDATA[
[
  ["org", 3600],
  [
    ["www", "example", simple(0) / expands to "org" /],
    [
      [
        simple(1) / expands to 3600 /,
        simple(2) / expands to "www", "example", "org" /,
        e'RR-CNAME',
        "svc",
        simple(2) / expands to "www", "example", "org" /
      ],
      [
        simple(1) / expands to 3600 /,
        simple(5) / expands to "svc", "www", "example", "org" /,
        ip'2001:db8::1'
      ]
    ],
    [
      [
        simple(1) / expands to 3600 /,
        simple(3) / expands to "example", "org" /,
        e'RR-NS',
        simple(0) / expands to "org" /,
        simple(3) / expands to "example", "org" /,
      ]
    ],
    []
  ]
]
]]></sourcecode>
        </figure>
        <t>Note that the encoder needs to rewrite the references from <xref target="fig_name-compression-example-unpacked"/> as the implicit table <em>V</em> is appended to the shared argument table <tt>["org", 3600]</tt>.</t>
        <t>In binary, that example looks like the following (represented in hexadecimal):</t>
        <figure anchor="fig_name-compression-example-packed-113-binary">
          <name>The binary of the packed representation of the example marked with "application/dns+cbor;packed=1" (62 bytes).</name>
          <artwork><![CDATA[
82                                      # array(2)
   82                                   # array(2)
      63                                # text(3)
         6F7267                         # "org"
      19 0E10                           # unsigned(3600)
   84                                   # array(4)
      83                                # array(3)
         63                             # text(3)
            777777                      # "www"
         67                             # text(7)
            6578616D706C65              # "example"
         E0                             # simple(0)
      82                                # array(2)
         85                             # array(5)
            E1                          # simple(1)
            E2                          # simple(2)
            05                          # e'RR-CNAME' (unsigned(5))
            63                          # text(3)
               737663                   # "svc"
            E2                          # simple(2)
         83                             # array(3)
            E1                          # simple(1)
            E5                          # simple(5)
            50                          # bytes(16)
               20010DB8000000000000000000000001 # ip'2001:db8::1'
      81                                # array(1)
         85                             # array(5)
            E1                          # simple(1)
            E3                          # simple(3)
            02                          # e'RR-NS' (unsigned(2))
            E0                          # simple(0)
            E3                          # simple(3)
      80                                # array(0)
]]></artwork>
        </figure>
        <t>Implicitly, a decoder would interpret this in diagnostic notation as:</t>
        <figure anchor="fig_expl-name-compression-example-packed-113">
          <name>The explicit interpretation of the packed representation of the example of a message marked with "application/dns+cbor;packed=1".</name>
          <sourcecode type="edn"><![CDATA[
TBD113(
  [
    ["org", 3600],
    TBD28259(
      [
        ["www", "example", simple(0) / expands to "org" /],
        [
          [
            simple(1) / expands to 3600 /,
            simple(2) / expands to "www", "example", "org" /,
            e'RR-CNAME',
            "svc",
            simple(2) / expands to "www", "example", "org" /
          ],
          [
            simple(1) / expands to 3600 /,
            simple(5) / expands to "svc", "www", "example", "org" /,
            ip'2001:db8::1'
          ]
        ],
        [
          [
            simple(1) / expands to 3600 /,
            simple(3) / expands to "example", "org" /,
            e'RR-NS',
            simple(0) / expands to "org" /,
            simple(3) / expands to "example", "org" /,
          ]
        ],
        []
      ]
    )
  ]
)
]]></sourcecode>
        </figure>
        <section anchor="example-decoder">
          <name>Example Decoder</name>
          <t>A decoder to interpret an object like the one in <xref target="fig_name-compression-example-packed-113"/> would have the following pseudo-code:</t>
          <figure anchor="fig_28259-113-decoder">
            <name>Pseudo-code for an example decoder</name>
            <artwork><![CDATA[
function decode_cbor_dns(binary: bytes, packed: uint = 0): CBORObject {
  obj: CBORObject = cbor.decode(binary)
  unpacker: Unpacker = Unpacker()
  match (packed) {
    when 0 then {
      packing_table = []
      rump = obj
    },
    when 1 then {
      /* except explicit TBD113 */
      if (typeof(obj) is CBORTag and tag-number of obj == 113) {
        obj = tag-content of obj
      }

      assume that typeof(obj) is CBORArray and obj.length == 2
      assume that typeof(obj[0]) is CBORArray  # packing table

      /* step into tag TBD113 context for unpacker with all its references
       * (simple values and tag TBD6) and function tags */
      Tell `unpacker` that we are in rump of tag TBD113 now

      /* prepend to current packing table of unpacker */
      unpacker.packing_table = obj[0] concat unpacker.packing_table
      rump = obj[1]
    },
    when anything else then {
      throw "Not supported yet!"
    },
  }

  return unpack_names(rump, unpacker)
}

function unpack_names(rump: Any, unpacker: Unpacker): CBORObject {
  /* except explicit TBD28259 */
  if (typeof(rump) is CBORTag and tag-number of rump == 28259) {
    rump = tag-content of rump
  }

  /* step into tag TBD28259 context for unpacker with all its references
   * (simple values and tag TBD6) */
  Tell `unpacker` that we are in rump of tag TBD28259 now

  return recursive_unpack_names(rump, unpacker, unpacker.packing_table.length)
}

function is_splice_tag(obj: CBORObject): bool {
  return (typeof(obj) is CBORTag and tag-number of obj == 1115)
}

function recursive_unpack_names(
    obj: CBORObject, unpacker: Unpacker, outer_table_len: Integer
): CBORObject {
  match typeof(obj) {
    when CBORInt, CBORByteString, or CBORTextString then {
      return obj
    }
    when CBORArray then {
      result: CBORArray = []
      /* name_start_idx will point to first element of a name and its suffixes
       * in the packing table */
      name_start_idx: CBORInt or null = null
      for (elem in obj) {
        if (typeof(elem) is CBORTextString) {
          /* Create a local name reference in packing table for this name
           * and all its suffixes */
          if (name_start_idx is null) {
            unpacker.packing_table = unpacker.packing_table concat [
              CBORTag(tag-number = 1115, tag-content = [])
            ]
            name_start_idx = unpacker.packing_table.length - 1
          }
          else {
            /* create packing table entry for new suffix */
            unpacker.packing_table = unpacker.packing_table concat [
              CBORTag(tag-number = 1115, tag-content = [])
            ]
          }

          /* Append to all suffixes in local name reference */
          for (i from i == name_start_idx
                 to i < unpacker.packing_table.length) {
            append elem to tag-content of unpacker.packing_table[i]
          }
          append elem to result
        }
        elif (unpacker.is_shared_reference(elem)) {   /* is simple() or TBD6() */
          /* calculate index from simple() or TBD6() */
          ref_idx: uint = unpacker.ref_idx(elem)
          assume that (ref_idx < unpacker.packing_table.length)

          packed_obj: CBORObject = unpacker.packing_table[ref_idx]

          /* check if this reference is part of a longer name */
          if (is_splice_tag(packed_obj) or
              typeof(packed_obj) is CBORTextString) {
            if (name_start_idx is not null) {
              /* if name_start_idx is already set, append to all suffixes
               * from name_start_idx to end of packing table */
              for (i from i == name_start_idx
                     to i < unpacker.packing_table.length) {
                append elem to tag-content of unpacker.packing_table[i]
              }

              /* check if ref_idx references implicit table V */
              if (ref_idx > outer_table_len) {
                /* close name_start_idx pointing to first element of name
                 * sequence, as only CBORTextStrings (including those
                 * referenced in outer tables) continue the name */
                name_start_idx = null
              }
            }
          }
          if (is_splice_tag(packed_obj)) {
            /* name suffix is spliced in */
            assume that (
              typeof(tag-content of packed_obj) is CBORArray containing
              only CBORTextString and references to CBORTextString
            )
            result = result concat tag-content of packed_obj
          }
          else {
            append packed_obj to result
          }
        }
        else {
          /* not part of a name anymore, so close name_start_idx pointing to
           * first element of name sequence */
          name_start_idx = null
          match typeof(elem) {
            /* step into arrays and tags */
            when CBORArray then {
              result = result concat recursive_unpack_names(
                  elem, unpacker, outer_table_len
              )
            }
            when CBORTag then {
              append CBORTag(
                tag-number = tag-number of elem,
                tag-content = recursive_unpack_names(
                    tag-content of elem, unpacker, outer_table_len
                ),
              ) to result
            }
            when CBORMap then {
              throw warning "Ignore maps which are not part of this spec"
            }
            when anything else then {
              append elem to result
            }
          }
        }
      }
      return result
    }
    when anything else then {
      throw warning "Ignore other types not part of this spec"
    }
  }
}
]]></artwork>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="sec_comparison-to-classic-dns">
      <name>Comparison to Classic DNS Wire Format</name>
      <t><xref target="tab-cbor-comparison"/> shows a comparison between the classic DNS wire format and the
application/dns+cbor format. Note that the worst case results typically appear only rarely in DNS.
The classic DNS format is preferred in those cases. A key for which configuration was used in which
case can be seen in <xref target="tab-cbor-comparison-key"/>. Any name label that is longer than 23 bytes adds
a name overhead of 1 byte to its CBOR type header. <cref anchor="_10" source="—mlenders">TBD: Also add structured RRs?</cref></t>
      <table anchor="tab-cbor-comparison">
        <name>Comparison of application/dns+cbor to classic DNS format.</name>
        <thead>
          <tr>
            <th align="left" rowspan="2">Item</th>
            <th align="right" rowspan="2">Classic DNS format [bytes]</th>
            <th align="center" colspan="3">application/dns+cbor [bytes]</th>
          </tr>
          <tr>
            <th align="right">best case</th>
            <th align="right">realistic worst case</th>
            <th align="right">theoretical worst case</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Header (ID &amp; Flags)</td>
            <td align="right">4</td>
            <td align="right">1</td>
            <td align="right">4</td>
            <td align="right">4</td>
          </tr>
          <tr>
            <td align="left">Count fields</td>
            <td align="right">2</td>
            <td align="right">1</td>
            <td align="right">3</td>
            <td align="right">3</td>
          </tr>
          <tr>
            <td align="left">Question section</td>
            <td align="right">6 + name len.</td>
            <td align="right">2 + name len.</td>
            <td align="right">6 + name len. + name overhead</td>
            <td align="right">9 + name len. + name overhead</td>
          </tr>
          <tr>
            <td align="left">Standard RR</td>
            <td align="right">12 + name len. + rdata len.</td>
            <td align="right">3        <br/>
 + rdata len.</td>
            <td align="right">14 + name len. + rdata len. + name overhead</td>
            <td align="right">17 + name len. + rdata len. + name overhead</td>
          </tr>
          <tr>
            <td align="left">Standard RR with name rdata</td>
            <td align="right">12 + name len. + rdata len.</td>
            <td align="right">4</td>
            <td align="right">14 + name len. + rdata len. + name overheads</td>
            <td align="right">16 + name len. + rdata len. + name overheads</td>
          </tr>
          <tr>
            <td align="left">EDNS OPT Pseudo-RR</td>
            <td align="right">11 + options</td>
            <td align="right">2 + options</td>
            <td align="right">6 + options</td>
            <td align="right">14 + options</td>
          </tr>
          <tr>
            <td align="left">EDNS Option</td>
            <td align="right">4 + value len.</td>
            <td align="right">2 + value len.</td>
            <td align="right">4 + value len.</td>
            <td align="right">6 + value len.</td>
          </tr>
        </tbody>
      </table>
      <table anchor="tab-cbor-comparison-key">
        <name>Configuration key for     <xref target="tab-cbor-comparison"/>
.</name>
        <thead>
          <tr>
            <th align="left" rowspan="2">Item</th>
            <th align="center" colspan="3">application/dns+cbor configuration</th>
          </tr>
          <tr>
            <th align="right">best case</th>
            <th align="right">realistic worst case</th>
            <th align="right">theoretical worst case</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Header (ID &amp; Flags)</td>
            <td align="right">Flags elided</td>
            <td align="right">QR, Opcode, AA, TC, or RD are set</td>
            <td align="right">QR, Opcode, AA, TC, or RD are set</td>
          </tr>
          <tr>
            <td align="left">Count fields</td>
            <td align="right">Encoded in CBOR array header</td>
            <td align="right">Encoded in CBOR array header,        <br/>
&gt;255 records in section</td>
            <td align="right">Encoded in CBOR array header,        <br/>
&gt;255 records in section</td>
          </tr>
          <tr>
            <td align="left">Question section</td>
            <td align="right">Class, type, and name elided</td>
            <td align="right">Type &gt; 255,        <br/>
label len. &gt; 23</td>
            <td align="right">Type &gt; 255,        <br/>
Class &gt; 255,        <br/>
label len. &gt; 23</td>
          </tr>
          <tr>
            <td align="left">Standard RR</td>
            <td align="right">Class, type, and name elided,        <br/>
rdata len. &lt; 24</td>
            <td align="right">Type &gt; 255,        <br/>
label len. &gt; 23        <br/>
rdata len. &gt; 255</td>
            <td align="right">Type &gt; 255,        <br/>
Class &gt; 255,        <br/>
label len. &gt; 23        <br/>
rdata len. &gt; 255</td>
          </tr>
          <tr>
            <td align="left">Standard RR with name rdata</td>
            <td align="right">Class, type, and name elided,        <br/>
simple(i) with i &lt; 16</td>
            <td align="right">Type &gt; 255,        <br/>
label len. &gt; 23        <br/>
name uncompressed</td>
            <td align="right">Type &gt; 255,        <br/>
Class &gt; 255,        <br/>
label len. &gt; 23        <br/>
name uncompressed</td>
          </tr>
          <tr>
            <td align="left">EDNS OPT Pseudo-RR</td>
            <td align="right">All EDNS(0) fields elided</td>
            <td align="right">RCODE &lt; 24,        <br/>
DO flag set,        <br/>
            </td>
            <td align="right">UDP payload        <br/>
len. &gt; 255        <br/>
RCODE &gt; 255        <br/>
Version &gt; 255        <br/>
DO flag set</td>
          </tr>
          <tr>
            <td align="left">EDNS Option</td>
            <td align="right">Code &lt; 24        <br/>
Length &lt; 24</td>
            <td align="right">Code &lt; 24        <br/>
Length &gt; 255</td>
            <td align="right">Code &gt; 255        <br/>
Length &gt; 255</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="change-log">
      <name>Change Log</name>
      <section anchor="since-draft-lenders-dns-cbor-18">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-18">draft-lenders-dns-cbor-18</eref></name>
        <ul spacing="normal">
          <li>
            <t>Update Python implementation information</t>
          </li>
          <li>
            <t>Fix examples (pseudo-code, unified formatting, ...)</t>
          </li>
          <li>
            <t>Editorial pass (wording, spelling, grammar, ...)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-17">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-17">draft-lenders-dns-cbor-17</eref></name>
        <ul spacing="normal">
          <li>
            <t>Re-instate appendix</t>
          </li>
          <li>
            <t>Use BCP 219 for DNS terminology</t>
          </li>
          <li>
            <t>Fix broken example syntax</t>
          </li>
          <li>
            <t>Add security considerations</t>
          </li>
          <li>
            <t>Editorial updates</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-16">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-16">draft-lenders-dns-cbor-16</eref></name>
        <ul spacing="normal">
          <li>
            <t>Minor editorial updates</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-15">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-15">draft-lenders-dns-cbor-15</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add Vadim Goncharov as contributor</t>
          </li>
          <li>
            <t>Add Mikolai Gütschow as co-author</t>
          </li>
          <li>
            <t>Make options in OPT record a flat list of alternating key-value-pairs</t>
          </li>
          <li>
            <t>Use e'' application extension in examples for better readability of RR types and classes</t>
          </li>
          <li>
            <t>Pass on name compression
            </t>
            <ul spacing="normal">
              <li>
                <t>TBD28259 now appends, rather than prepends to existing packing tables to allow for single pass
decoders with minimum state.</t>
              </li>
              <li>
                <t>Consequently, disallow inner table setup tags to TBD28259, as that would increase complexity of
both decoders and encoders</t>
              </li>
              <li>
                <t>Add considerations on maps within TBD28259 (see also #15)</t>
              </li>
              <li>
                <t>Clarify implicit nature with <tt>packed</tt></t>
              </li>
              <li>
                <t>Provide actual DNS examples</t>
              </li>
              <li>
                <t>Add example decoder as pseudo-code</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-14">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-14">draft-lenders-dns-cbor-14</eref></name>
        <ul spacing="normal">
          <li>
            <t>Correction and nits</t>
          </li>
          <li>
            <t>Explicitly state which integration tags are in use</t>
          </li>
          <li>
            <t>Add binary examples in CBOR-pretty</t>
          </li>
          <li>
            <t>Unify formatting for and mention explicitly application/dns+cbor from the top</t>
          </li>
          <li>
            <t>Explicitly define behavior for query[0] = True in response text</t>
          </li>
          <li>
            <t>Clarifications around media type parameter <tt>packed=1</tt></t>
          </li>
          <li>
            <t>Remove TBD reference (it never came to be)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-13">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-13">draft-lenders-dns-cbor-13</eref></name>
        <ul spacing="normal">
          <li>
            <t>Make use of splicing integration tag 1115
            </t>
            <ul spacing="normal">
              <li>
                <t>Make domain names flat text string sequences again</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Add capability to summarize rrsets</t>
          </li>
          <li>
            <t>Provide extension point for IP addresses</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-12">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-12">draft-lenders-dns-cbor-12</eref></name>
        <ul spacing="normal">
          <li>
            <t>Fix bug in packed examples</t>
          </li>
          <li>
            <t>Improve compression examples for clarity</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-11">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-11">draft-lenders-dns-cbor-11</eref></name>
        <ul spacing="normal">
          <li>
            <t>Update repo links to cbor-wg org in draft</t>
          </li>
          <li>
            <t><tt>s/CBOR-packed/Packed CBOR/</tt></t>
          </li>
          <li>
            <t>Small pass on wording</t>
          </li>
          <li>
            <t>Remove commented-out parts</t>
          </li>
          <li>
            <t>Make name compression be based on Packed CBOR</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-10">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-10">draft-lenders-dns-cbor-10</eref></name>
        <ul spacing="normal">
          <li>
            <t>Address IANA #1392416 early review</t>
          </li>
          <li>
            <t>Fix external section references</t>
          </li>
          <li>
            <t>Update implementation status</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-09">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-09">draft-lenders-dns-cbor-09</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add recommendation on label encoding</t>
          </li>
          <li>
            <t>Provide extension points
            </t>
            <ul spacing="normal">
              <li>
                <t>Mark dns-rr specifically as extension point</t>
              </li>
              <li>
                <t>Provide extension points for parameter values (options and svc-params)</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Point out CBOR-packed needs to be unpacked when identifying names</t>
          </li>
          <li>
            <t>Distinguish from C-DNS <xref target="RFC8618"/></t>
          </li>
          <li>
            <t>State objectives in introduction</t>
          </li>
          <li>
            <t>Fix nits and typos</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-08">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-08">draft-lenders-dns-cbor-08</eref></name>
        <ul spacing="normal">
          <li>
            <t>Clarify why question section was designed the way it is</t>
          </li>
          <li>
            <t>Add answer section to queries for Known Answers in mDNS</t>
          </li>
          <li>
            <t>Express names as sequence of labels</t>
          </li>
          <li>
            <t>Provide dedicated types for more structured RDATA</t>
          </li>
          <li>
            <t>Add RFC1035-like name compression</t>
          </li>
          <li>
            <t>Add switching boolean to query message to explicitly have question present in response</t>
          </li>
          <li>
            <t>Make EDNS options a map</t>
          </li>
          <li>
            <t>Update examples and comparison table in appendices</t>
          </li>
          <li>
            <t>Update implementation section</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-07">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-07">draft-lenders-dns-cbor-07</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add <xref target="sec_comparison-to-classic-dns"/> with comparison to classic DNS wire format</t>
          </li>
          <li>
            <t>"wire format" -&gt; "classic DNS wire format"</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-06">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-06">draft-lenders-dns-cbor-06</eref></name>
        <ul spacing="normal">
          <li>
            <t>Fixes wording and spelling mistakes</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-05">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-05">draft-lenders-dns-cbor-05</eref></name>
        <ul spacing="normal">
          <li>
            <t>Fix <xref target="cf-app-d-c"/> title</t>
          </li>
          <li>
            <t>Amend for capability to carry more than one question</t>
          </li>
          <li>
            <t>Hint at future of name compression in later draft versions</t>
          </li>
          <li>
            <t>Use canonical name for CBOR-packed</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-04">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-04">draft-lenders-dns-cbor-04</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add Implementation Status section</t>
          </li>
          <li>
            <t>Remove int as representation for rdata</t>
          </li>
          <li>
            <t>Add note on representation of more structured rdata</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-03">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-03">draft-lenders-dns-cbor-03</eref></name>
        <ul spacing="normal">
          <li>
            <t>Provide format description for EDNS OPT Pseudo-RRs</t>
          </li>
          <li>
            <t>Simplify CDDL to more idiomatic style</t>
          </li>
          <li>
            <t>Remove DNS transaction IDs</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-02">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-02">draft-lenders-dns-cbor-02</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add Discussion section and note on compression</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-01">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-01">draft-lenders-dns-cbor-01</eref></name>
        <ul spacing="normal">
          <li>
            <t>Use MIME type parameter for packed instead of own MIME type</t>
          </li>
          <li>
            <t>Update definitions to accommodate for TID and flags, as well as more sections in query</t>
          </li>
          <li>
            <t>Clarify fallback to wire-format</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-00">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-00">draft-lenders-dns-cbor-00</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add support for DNS transaction IDs</t>
          </li>
          <li>
            <t>Name and Address compression utilizing CBOR-packed</t>
          </li>
          <li>
            <t>Minor fixes to CBOR EDN and CDDL</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>We want to extend special thanks to Christian Amsüss for his input in the brainstorming session that resulted in the current form of name compression.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="V." surname="Goncharov" fullname="Vadim Goncharov">
        <organization/>
        <address>
          <email>vadimnuclight@gmail.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+192XYbR5bge35FNFWnBLoAEOAmimXJRZOSzVNaWCRtl0el
kZJAgsgSkInOTJCiXeozHzEfMA/9Gf009SfzJXO32HIBQFJ2d3W3HmwCiOXG
jbvHjRudTico4mIS7au1A3WYJoM4j9TXcRJmN+r1xV+jQaFOo1kW5VFShEWc
Jqp1+PXr03WVjtTRqzP1Msrz8DLK14Lw4iKLrmCcYZL/bnCRZmvBICyiyzS7
2Vd5MQyCYTpIwilMNczCUdGZRMkwyvIOtO9g+07/cZDMpxdRth8Moed+MEgT
mDef5/uqyOZRAKNvBfn8YhrnOYBS3MxgsONn58+DMItCXMJsNokHBCdAdJ1m
Hy6zdD7bVwhz8CG6ga+G+4HqqOOkiLIkKjpHCAt+Q03g/7Cq4CpK5jC/gn/u
APiZJ/0Bho6TS/UN/krfT8N4sq9wHX+Io2LUTbNL+j7MBmOAbFwUs3x/YwOb
4VfxVdTV7Tbwi42LLL3Oow0cYWONp46L8fwCOhN2ri/pN0QX/zwBHOWFM7Y0
63K/bpyaDhv1GO+Oi+lkLQjCeTFOM8KLGs0nE96ll2FWxEmkztLZOI7UC+5M
UwPQ++r8uyN1BJQxjBL1XQILyvK4uEHCOI8G4ySdpJc3jAKhjPPvdHv6Oi+y
KAL4v40m03E6KX6CL7qq36MfBzDUvtd8kA4BqKNOr9/bfSzfzJMCqeubKJuG
CU8W8UZMGfiuLPkPxbwz5MG6w4gWyos8DLO8gAV8neIQiV2dWdHf/7VQX2fR
FBqd/49jD/KTNC9G4WCstrZ629su4NzBg3tzb2tnAdyzcZpAu99tP+5sb/Y7
m/29zu7W482+u6hBeJH+ofgpZuIya3gZf0gnYay++fu/FflgnF7/o+wRw929
nEcMd80uWXI8H6fTMFeHXXU2GE/jYaFXGSbxT8TyAObBD+rbcHoxF+aTiYpu
zl3+MA6vO2Nu4NPBy7AoxjGM/8Pf/3U8iaH97ZCofqu+DrMP43AOEgukSw5S
dV40oHZB418W4d3rMOLVlVCNorbI4ot5gXKgI0j5PhzGU/UNaIVxmKVXgRno
Cn9I5oNJfDku/nCJX3YH6TQIEmSjAlCEwvP0+WG/t7UD8j7J+SNwwO6+CuEf
f97Ze9zfV/Ewkc+79Dky7R9t7mwC2afhjD/v7fZ78Hk4nMjnx9uPWejy58fb
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
DnZ3oIVZrR5lq2GULXeU0aNNZ7oHjChG04Hd9zCxD5oaPxD3Wr956V/jWrQJ
baBAJPKHejdSKpOo96O/I3i9FVorS3WabP3HQSt/6lXW9EDjRLW0mIWVrddu
w6sf/Y3Qz/PdaRNe/fgQ/yTR1bQhe3fZkO0FTbb/o20ILHE0qt0QwIqzJSCS
19cX9jms70JoXf2GlDnirk2NMuea79J3K4lTusgjF/Bzvvyd69gNq8zr6+uu
J7SdC4ttXaZ6Lb8adCst3QuQpkqa1905/qfJoJs/xKuzsmjxNYgUhYobbjy2
ud6IU7OK3oTb2u31XG2AWUm4UGSBsl5o25Ql7NZWDQ2FbWjNwDiIkbXGxpLj
pEdc2Lat4tnDzV6vvz+82Nvf7z98izlPVbDq4Xl19tB8UYHCDPTWpMA1XJuT
nh0TIBcr4zv9Wed44DYZC718E66ryxpLXglS6bVOy7fl03ArKUYrZGHpu7+1
axOERQpxvNWRbwEdONJm16lv1TJpcxT4xVM+sj3wAiMMsN4VaVYnp2r++aKr
Vt00dbHqZ2mvGrn1iP4t6EEE1ShPG2aoka9HIF8PQb7WzLBU3q6wjt3nnvyt
mUXL41oTqdq+ZDLtPV61y2MHqv5j1XvW7zV3MXIc+c9dzmIc1CBALd5LfyPV
0r2s2Ui1eC+rG3nXdSzaS1+xwr9elaT89o5EdfSmVbR3hfLR1qPdpo4PWBz/
935yp5X3c2934fDKctnuvx+X/fe+r7iOW/HxTuP+SXtS2a3+rj8H2jS9o6+x
rkTdvz50LFk+pAManIzSlK7Hgb1WUH/c5dFnoc7/JDvbW6xwHxgb03Vr7i2e
bwXiPz6q9xazj27P5NlbUt+ibKh3xEoWe/1r/lROd1nJegd/X5vf63xvBU3s
arULa9Xrm3slK/4qzgrMATPlE7q+L6bUBpYK/ah6+xt0F63V6J2tt932fdt+
ccNN27Dm1y3762Ivzu+27Q9a135VN4sxI3t2XLm87tW90I6x3kNAP+3OQTm/
lhKyB+NULgrgwb1zJMBZmnx5YIAHntM044SB+XQmdZ38MJK5ibF4GfQLRhoO
44wv1jqz6voFsxR64uqG9oK3yWKmRMDJJXr2Y6pW/g9AMnx3Adh1GZFIw/76
LamDfrk7ibB/nEeTUcduB9HNKy+72Jyo+eD21m3pDLygwGvjQSdSmURHL7ia
BmWmOqWDBKvqd/JXX7Xey+Cb6w5a3q/rKqkxV8HAxHEuRTwoyud+3eDb9BrL
/rWpqfxa3llzIaamnglW0HAm1KVF9OtwZq19qkcLvIFrWfWGQm9N3672SuY4
V6jlBoWI5er1UitbqXziRXSHMJboKAobyd92Vzfw3lQo1cUaBlMbup8b8pKv
mP7vOC5108GxZji3yuMtFNMW3BpzUpWjac2z9suzLkYLRt40TogT7jbaHYJ0
fojufBE96ZvAnp7XEVa6x2ii/SvSpSbJ1eJntw2e3TZydsuw2a1iZrcMmN06
WnbLUNmt4mTVINmyWAy331nRO2p2jZ4tsHYfWIGxWpTo3iGiW8YJKkGC261m
CX1XiFvdGckLl2yk6Gou/K/tv1ed91+NNhfA9sAK7tX84/s5x7f0KCtu8S2W
stz/vK3zuYLruVAjaTu1tbvj+ptLqo67uSnnziVP8+CQ/r10mbwmueWTkpJR
10lwEeFLeuqHSFKdo+ZTVV3ljTNV+LbCAZUxBCv0G67KMRxO8KJsQDe6sefF
REo+xLM1J42lcOrfahV8fGJLeMpVdfsVpoB1JB1uAnZ/Fk7agc2WWSFDTK2Q
Idal29MWsjBxT3SdI9ZeT+r/WvfDrUGqHLmAtyWkQJopII4AvK9L08GsL7Yz
3CSGN1t4Blo+KK3PWtjcWilrYTErCOus3rcq1VY5zFI1qlqxeOtvDpZ1tHLO
E3NL4rW69wKpDwhulPo1Yp82wX/Uxhiecal2mUmssjWqqZ3QEFWn+FhUnymq
SYJggxTvBwUXVCsrHno5YDWpLwvJyLWFw8LOwxlg5iEiC0lra2e1TLDFO/8Z
aO1OZ9n8b/nJsVoSZtX5ObX9bh9s9WYsK8jRwrNkVaMp/yF5yU1AtA83T7GC
q61lqumTSuWm9Co7FhNEVsIaqW5RW52pLnfAuYJD230b4tpWDkVKX5xM2VZL
JPIdWGm3xEorik+9A64QvUXfFRIwmzouS1dr6nf7pApvxgWpbY0zGsfxv/XZ
yjzom0Gmwqsh5VJq7DLLaFtbRkH/8Wa3h2Ur23XD1ttFbdVfahqZcZsMo35/
uWG0TCctI4tlu9+4ydvb7iC8l9v+Vg5wwza142mXy2v149reK4x0VVs/aygv
6OB5iNQPJlsDmwf6LcfSvXDwVECCUhUkeYu65r1UujLNRYKXbmZtBm7t9gaI
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
/wexaeyxXDkBAA==

-->

</rfc>
