<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version  -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>


<rfc ipr="trust200902" docName="draft-peltan-edns-presentation-format-02" category="std" consensus="true" submissionType="IETF" updates="8427">
  <front>
    <title abbrev="edns-presentation-and-json-format">EDNS Presentation and JSON Format</title>

    <author initials="L." surname="Peltan" fullname="Libor Peltan">
      <organization>CZ.NIC</organization>
      <address>
        <email>libor.peltan@nic.cz</email>
      </address>
    </author>
    <author initials="T." surname="Carpay" fullname="Tom Carpay">
      <organization>NLnet Labs</organization>
      <address>
        <email>tomcarpay@gmail.com</email>
      </address>
    </author>

    <date />

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document describes the textual and JSON representation formats of EDNS options.
It also modifies the escaping rules of the JSON representation of DNS messages, previously defined in RFC8427.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>A DNS record<xref target="RFC1035"/> of any type can be converted between its binary Wire format and textual Presentation format. The Wire format is used in DNS messages transferred over the Internet, while the Presentation format is used not only in Zone Files (called "master files" in the referenced document), but also to display the contents of DNS messages to humans by debugging utilities and possible other use-cases.</t>

<t>The Presentation format can, however, be processed programatically and also converted back to Wire Format unambiguously.</t>

<t>The EDNS<xref target="RFC6891"/> option pseudo-record does not appear in Zone Files, but it sometimes needs to be converted to human-readable or even machine-readable textual representation.
This document describes such a Presentation Format of the OPT pseudo-record.
It is advised to use this when displaying an OPT pseudo-record to humans.
It is recommended to use this when the textual format is expected to be machine-processed further.</t>

<t>The JSON<xref target="RFC8259"/> representation<xref target="RFC8427"/> of DNS messages is also helpful as both human-readable and machine-readable format (despite the limitation in non-preservation of the order of options, which prevents reversing the conversion unambiguously), but it did not define a JSON representation of EDNS option pseudo-record.
This document defines it.</t>

<t>The aforementioned document<xref target="RFC8427"/> also defined ambiguous and possibly conflicting rules for escaping special characters when representing DNS names in JSON.
This document modifies and clarifies those rules.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>The key words "<strong>MUST</strong>", "<strong>MUST NOT</strong>", "<strong>REQUIRED</strong>",
"<strong>SHALL</strong>", "<strong>SHALL NOT</strong>", "<strong>SHOULD</strong>", "<strong>SHOULD NOT</strong>",
"<strong>RECOMMENDED</strong>", "<strong>NOT RECOMMENDED</strong>", "<strong>MAY</strong>", and
"<strong>OPTIONAL</strong>" in this document is 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>

<t><list style="symbols">
  <t>Base16 is the representation of arbitrary binary data by an even number of case-insensitive hexadecimal digits (<xref section="8" sectionFormat="comma" target="RFC4648"/>).</t>
  <t>Backslash is the character, also called Reverse Solidus, ASCII code 0x5c.</t>
  <t>ID-string is a string of characters containing only (uppercase or lowercase) letters, digits, dashes, and underscores, and its first character is a (uppercase or lowercase) letter.</t>
  <t>"Note" denotes a sentence that is not normative. Instead, it points out some non-obvious consequences of previous statements.</t>
</list></t>

</section>
<section anchor="independent"><name>Generic EDNS Presentation Format</name>

<t>A malformed EDNS record or a record of an unsupported EDNS version can be converted to Presentation format using this generic method.
OPT pseudo-record is, in this case, represented the same way as a RR of unknown type according to <xref section="5" sectionFormat="comma" target="RFC3597"/>.
In specific:</t>

<t><list style="symbols">
  <t>Owner Name is the Owner Name of the OPT record.
Note that this is usually <spanx style="verb">.</spanx> (DNS Root Domain Name) unless malformed.</t>
  <t>TTL is the 32-bit big-endian integer appearing at the TTL position of the OPT pseudo-record Wire format, see <xref section="6.1.3" sectionFormat="comma" target="RFC6891"/>.</t>
  <t>CLASS is a text representation of the 16-bit integer at the CLASS position of the OPT pseudo-record Wire format (UDP payload size happens to appear there).
This will usually result in <spanx style="verb">CLASS####</spanx> (where #### will be the integer), but it might also result, for example in <spanx style="verb">IN</spanx> or <spanx style="verb">CH</spanx> if the value is 1 or 4, respectively.</t>
  <t>TYPE is either <spanx style="verb">TYPE41</spanx> or <spanx style="verb">OPT</spanx>.</t>
  <t>RDATA is formatted by <spanx style="verb">\#</spanx>, its length as a decadic number, and data as Base16 as per <xref section="5" sectionFormat="comma" target="RFC3597"/>.</t>
</list></t>

<t>Example:</t>

<figure><artwork><![CDATA[
. 16859136 CLASS1232 TYPE41 \# 6 000F00020015
]]></artwork></figure>

</section>
<section anchor="jindependent"><name>Generic EDNS JSON representation</name>

<t>A malformed EDNS record or a record of an unsupported EDNS version can be converted to JSON using this generic method.
The OPT pseudo-record is, in this case, represented in JSON as an object with following members:</t>

<t><list style="symbols">
  <t><spanx style="verb">NAME</spanx> - String with the Owner Name of the OPT record.
Note that this is usually <spanx style="verb">.</spanx> (DNS Root Domain Name) unless malformed.
See <xref target="jsonescaping"></xref> for representing DNS names in JSON.</t>
  <t><spanx style="verb">TTL</spanx> - Integer with the 32-bit big-endian value appearing at the TTL position of the OPT pseudo-record Wire format, see <xref section="6.1.3" sectionFormat="comma" target="RFC6891"/>.</t>
  <t><spanx style="verb">CLASS</spanx> - Integer with the 16-bit value at the CLASS position of the OPT pseudo-record Wire format (UDP payload size happens to appear there).</t>
  <t><spanx style="verb">TYPE</spanx> - Integer with the value 41.</t>
  <t><spanx style="verb">RDATAHEX</spanx> - String with the pseudo-record RDATA formatted as Base16.</t>
</list></t>

<t>Example:</t>

<figure><artwork><![CDATA[
{
    "NAME": ".",
    "TTL": 16859136,
    "CLASS": 1232,
    "TYPE": 41,
    "RDATAHEX": "000f00020015"
}
]]></artwork></figure>

</section>
<section anchor="common-concept"><name>Common Concept</name>

<t>Let's first divide the information contained in the EDNS record into <em>FIELD</em>s: <spanx style="verb">Version</spanx>, <spanx style="verb">FLAGS</spanx>, <spanx style="verb">RCODE</spanx>, and <spanx style="verb">UDPSIZE</spanx> <em>FIELD</em>s are based on the OPT record header, one other <em>FIELD</em> is based on every EDNS option that appears in the OPT record RDATA.
Each <em>FIELD</em> has a defined <em>FIELD-NAME</em>, which is an ID-string, and <em>FIELD-VALUE</em> of type <em>FIELD-TYPE</em>, which is one of the following:</t>

<t><list style="symbols">
  <t><em>int</em>, a non-negative integer</t>
  <t><em>ID-NAME</em>, a mnemonic string denoting a numeric value defined by this document, other referenced RFC, and/or referenced IANA table; mnemonics that are not ID-strings MUST NOT be used</t>
  <t><em>ID-CODE</em>, a non-negative integer prefixed with a fixed ID-string</t>
  <t><em>mixed</em>, a variant type that can be any of the above-defined types</t>
  <t><em>base16</em>, an even number of hexadecimal (case-insensitive) digits representing a string of arbitrary octets</t>
  <t><em>list</em>, a variable-sized (possibly empty) list of values of homogenous type defined above (possibly <em>mixed</em>)</t>
  <t><em>dname</em>, a Fully-Qualified Domain Name</t>
  <t><em>string</em>, a string of arbitrary octets where quoting and escaping is used to represent it as ASCII string</t>
  <t><em>object</em>, a defined fixed number of <em>SUBFIELD</em>s, each having its <em>FIELD-NAME</em> and <em>FIELD-TYPE</em> defined according to the rules above (nested <em>object</em>s are forbidden)</t>
</list></t>

</section>
<section anchor="edns-presentation-format"><name>EDNS Presentation Format</name>

<t>The EDNS Presentation Format follows the RR format of the master file (<xref section="5.1" sectionFormat="comma" target="RFC1035"/>), including quotation of non-printable characters, multi-line format using round brackets, and semicolons denoting comments.
However, one difference is that &lt;character-string&gt;s are not limited in size (to 255 represented octets).</t>

<t>Depending on the use-case, implementations MAY choose to display only RDATA.
In the event that the resource-record-like Presentation format is desired, the following applies:</t>

<t><list style="symbols">
  <t>Owner Name MUST be <spanx style="verb">.</spanx> (DNS Root Domain Name).</t>
  <t>TTL MAY be omitted.
If it is present, it MUST be <spanx style="verb">0</spanx> (zero).
Note that this differs from DNS RR wire-to-text conversion as well as <xref target="independent">Generic Presentation Format</xref>.</t>
  <t>CLASS MAY be omitted.
If it is present, it MUST be <spanx style="verb">ANY</spanx>.</t>
  <t>TYPE MUST be <spanx style="verb">EDNS</spanx>.</t>
</list></t>

<t>RDATA consists of &lt;character-string&gt;s, each <em>FIELD</em> is represented by at least two of them.
First represented <em>FIELD</em>s are <spanx style="verb">Version</spanx>, <spanx style="verb">FLAGS</spanx>, <spanx style="verb">RCODE</spanx>, and <spanx style="verb">UDPSIZE</spanx> in this order; however, <spanx style="verb">Version</spanx> MAY be omitted if the EDNS Version is zero.
The rest of <em>FIELD</em>s respect the EDNS options in the same order as they appear in the OPT record, including possibly repeated options.
The following paragraph defines how a single <em>FIELD</em> is represented with &lt;character-string&gt;s.</t>

<t>The first &lt;character-string&gt; is the <em>FIELD-NAME</em> concatenated (no spaces in between) with a colon (<spanx style="verb">:</spanx>) and SHOULD NOT be enclosed in quotes.
The rest depends on the <em>FIELD-TYPE</em>:</t>

<t><list style="symbols">
  <t><em>int</em> is represented as a decadic number with no leading zeroes</t>
  <t><em>ID-NAME</em> or <em>ID-CODE</em> is represented as-is</t>
  <t><em>base16</em> is represented as-is, zero-length <em>base16</em> as an empty string enclosed in quotes (<spanx style="verb">""</spanx>)</t>
  <t><em>list</em> is represented as a comma-separated list of its items with no spaces; an empty list as an empty string enclosed in quotes (<spanx style="verb">""</spanx>)</t>
  <t><em>dname</em> is represented according to the rules of representing Domain names in the master file (<xref section="5.1" sectionFormat="comma" target="RFC1035"/>); Internationalized Domain Name (IDN) labels MAY be expressed in their U-label form, as described in <xref target="RFC5890"/>.</t>
  <t><em>string</em> is represented as &lt;character-string&gt; according to <xref section="5.1" sectionFormat="comma" target="RFC1035"/>; and SHOULD be enclosed in quotes even when not containing any spaces</t>
  <t><em>object</em> is represented by the same number of &lt;character-string&gt;s as how many <em>SUBFIELD</em>s it has; their <em>FIELD-NAME</em>s are ignored and <em>FIELD-VALUE</em>s are represented in their defined order</t>
</list></t>

<t>Note that each <em>object</em> has fixed number of &lt;character-string&gt;s, other types have one.
This is cruical for parsing, the colon plays only decorative role, strings might also end with a colon.</t>

</section>
<section anchor="edns-representation-in-json"><name>EDNS Representation in JSON</name>

<t>The EDNS OPT record can be represented in JSON as an object called <spanx style="verb">EDNS</spanx>.
Each <em>FIELD</em> is represented as one object member (name-value pair) ,where the name is <em>FIELD-NAME</em> and the value depends on <em>FIELD-TYPE</em>:</t>

<t><list style="symbols">
  <t><em>int</em> is represented as an Integer</t>
  <t><em>ID-NAME</em>, <em>ID-CODE</em> or <em>base16</em> is represented as a String</t>
  <t><em>mixed</em> is represented as a String even when it happens to be <em>int</em></t>
  <t><em>list</em> is represented as a JSON Array containing its members in specified order</t>
  <t><em>dname</em> is represented as a String with quotation rules in <xref target="jsonescaping"></xref></t>
  <t><em>string</em> is represented as a String according to <xref section="7" sectionFormat="comma" target="RFC8259"/></t>
  <t><em>object</em> is represented as a JSON object with each <em>SUBFIELD</em> represented as one of its member according to rules above (note that nested <em>object</em>s are forbidden)</t>
</list></t>

<t>Note that the order of members is not preserved in JSON. The <em>FIELD</em>s <spanx style="verb">FLAGS</spanx>, <spanx style="verb">RCODE</spanx>, and <spanx style="verb">UDPSIZE</spanx> MUST be represented, <spanx style="verb">Version</spanx> MAY be omitted if the EDNS Version is zero.</t>

</section>
<section anchor="field-definitions"><name>Field Definitions</name>

<section anchor="version"><name>Version</name>

<t>EDNS Version is represented by <em>FIELD-NAME</em> <spanx style="verb">Version</spanx>, its <em>FIELD-TYPE</em> is <em>int</em> and <em>FIELD-VALUE</em> is the EDNS Version.</t>

</section>
<section anchor="eflags"><name>Flags</name>

<t>EDNS FLAGS is represented by <em>FIELD-NAME</em> <spanx style="verb">FLAGS</spanx> and its <em>FIELD-TYPE</em> is a <em>list</em> of <em>mixed</em>:</t>

<t><list style="symbols">
  <t><em>ID-NAME</em> <spanx style="verb">DO</spanx> if the DO bit is set</t>
  <t><em>ID-CODE</em> <spanx style="verb">BITn</spanx> for each <spanx style="verb">n</spanx>-th bit (other than DO) set</t>
</list></t>

<t>Examples of Presentation format:</t>

<figure><artwork><![CDATA[
FLAGS: ""
]]></artwork></figure>

<figure><artwork><![CDATA[
FLAGS: DO,BIT1
]]></artwork></figure>

<figure><artwork><![CDATA[
FLAGS: BIT3,BIT7,BIT14
]]></artwork></figure>

</section>
<section anchor="extrcode"><name>Extended RCODE</name>

<t>Extended RCODE is represented by <em>FIELD-NAME</em> <spanx style="verb">RCODE</spanx> and its <em>FIELD-TYPE</em> is a <em>mixed</em>.</t>

<t>For the sake of readability, it is RECOMMENDED to compute the whole DNS Message Extended RCODE from both the OPT record and the DNS Message Header.
If the whole DNS Message Extended RCODE is computed and has a mnemonic in <xref target="IANA.RCODEs"/>, the <em>FIELD-VALUE</em> MAY be this mnemonic as <em>ID-NAME</em>.
If the whole DNS Message Extended RCODE is computed and no mnemonic is available (or used), the <em>FIELD-VALUE</em> is an <em>int</em> with the computed Extended RCODE.
If the whole DNS Message Extended RCODE cannot be computed, the <em>FIELD-VALUE</em> is an <em>ID-CODE</em> <spanx style="verb">EXT##</spanx>, where <spanx style="verb">##</spanx> stands for DNS Message Extended RCODE with the lower four bits set to zero (i.e. the four-bit left shift still applies).</t>

<t>Examples of Presentation format:</t>

<figure><artwork><![CDATA[
RCODE: NXDOMAIN
]]></artwork></figure>
<figure><artwork><![CDATA[
RCODE: 3841
]]></artwork></figure>
<figure><artwork><![CDATA[
RCODE: EXT3840
]]></artwork></figure>

</section>
<section anchor="udpsize"><name>UDP Payload Size</name>

<t>UDP Payload Size is represented by <em>FIELD-NAME</em> <spanx style="verb">UDPSIZE</spanx>, its <em>FIELD-TYPE</em> is <em>int</em> and <em>FIELD-VALUE</em> is the UDP Payload Size.</t>

</section>
<section anchor="unrecognized"><name>Unrecognized Option</name>

<t>EDNS options that are not part of this specification, and their own specifications do not specify their <em>FIELD-NAME</em> and <em>FIELD-VALUE</em> MUST be displayed according to this subsection.
Other options (specified below or otherwise) MAY be displayed so as well.</t>

<t>Unrecognized EDNS option is represented by <em>FIELD-NAME</em> <spanx style="verb">OPT##</spanx>, where <spanx style="verb">##</spanx> stands for its OPTION-CODE, its <em>FIELD-TYPE</em> is <em>base16</em> and <em>FIELD-VALUE</em> is its OPTION-VALUE encoded as Base16.</t>

</section>
<section anchor="llq-option"><name>LLQ Option</name>

<t>The LLQ (OPTION-CODE 1 <xref target="RFC8764"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">LLQ</spanx> and its <em>FIELD-VALUE</em> is a <em>list</em> of <em>int</em>s with LLQ-VERSION, LLQ-OPCODE, LLQ-ERROR, LLQ-ID, and LLQ-LEASE in this order.</t>

<t>Example of Presentation format:</t>

<figure><artwork><![CDATA[
LLQ=1,1,0,0,3600
]]></artwork></figure>

</section>
<section anchor="nsid-option"><name>NSID Option</name>

<t>The NSID (OPTION-CODE 3 <xref target="RFC5001"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">NSID</spanx> and its <em>FIELD-VALUE</em> is an object with two <em>SUBFIELD</em>s in the following order:</t>

<t><list style="symbols">
  <t>first <em>FIELD-NAME</em> is <spanx style="verb">HEX</spanx> and <em>FIELD-VALUE</em> is a <em>base16</em> representation of the OPTION-VALUE</t>
  <t>second <em>FIELD-NAME</em> is <spanx style="verb">TEXT</spanx> and <em>FIELD-VALUE</em> is a <em>string</em> representation of the OPTION-VALUE</t>
</list></t>

<t>The <spanx style="verb">TEXT</spanx> value MAY be substituted with an empty string (for example, if the OPTION-VALUE contains non-printable characters).
Within JSON, the <spanx style="verb">TEXT</spanx> <em>SUBFIELD</em> MAY be omitted if it is an empty string.</t>

</section>
<section anchor="dau"><name>DAU, DHU and N3U Options</name>

<t>The DAU, DHU, and N3U (OPTION-CODES 5, 6, 7, respectively <xref target="RFC6975"/>) options are represented by <em>FIELD-NAME</em>s <spanx style="verb">DAU</spanx>, <spanx style="verb">DHU</spanx>, and <spanx style="verb">N3U</spanx>, respectively, and their <spanx style="verb">FIELD-VALUES</spanx> are <em>list</em>s of <em>int</em>s with their ALG-CODEs.</t>

<t>Within Presentation format, their <em>FIELD-VALUE</em>s MAY be substituted with <em>list</em>s of <em>ID-NAME</em>s with the textual mnemonics of the ALG-CODEs found in their respective IANA registries <xref target="IANA.EDNS.DAU"/><xref target="IANA.EDNS.DHU"/><xref target="IANA.EDNS.N3U"/>.</t>

<t>Examples of Presentation format:</t>

<figure><artwork><![CDATA[
DAU: 8,10,13,14,15
DHU: 1,2,4
N3U: 1
]]></artwork></figure>
<figure><artwork><![CDATA[
DAU: RSASHA256,RSASHA512,ECDSAP256SHA256,ECDSAP384SHA384,ED25519
DHU: SHA-1,SHA-256,SHA-384
N3U: SHA-1
]]></artwork></figure>

</section>
<section anchor="edns-client-subnet-option"><name>Edns-Client-Subnet Option</name>

<t>The EDNS Client Subnet (OPTION-CODE 8 <xref target="RFC7871"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">ECS</spanx> and its <em>FIELD-TYPE</em> is a <em>string</em>.
If FAMILY is either IPv4 (<spanx style="verb">1</spanx>) or IPv6 (<spanx style="verb">2</spanx>) and the OPTION-LENGTH matches the expected length, the <em>FIELD-VALUE</em> is a slash-separated (no spaces) tuple of:</t>

<t><list style="symbols">
  <t>the textual IPv4 or IPv6 address (<xref section="3.4.1" sectionFormat="comma" target="RFC1035"/>, <xref section="2.2" sectionFormat="comma" target="RFC4291"/>), respectively</t>
  <t>SOURCE PREFIX-LENGTH as a decadic number</t>
  <t>SCOPE PREFIX-LENGTH as a decadic number, SHOULD be omitted (including the separating slash) if zero</t>
</list></t>

<t>Otherwise, the <em>FIELD-VALUE</em> is a <em>string</em> with base16-representation of the OPTION-VALUE.</t>

<t>Examples of Presentation format:</t>

<figure><artwork><![CDATA[
ECS: "1.2.3.4/24"
]]></artwork></figure>
<figure><artwork><![CDATA[
ECS: "1234::2/56/48"
]]></artwork></figure>
<figure><artwork><![CDATA[
ECS: "000520000102030405060708"
]]></artwork></figure>

</section>
<section anchor="edns-expire-option"><name>EDNS EXPIRE Option</name>

<t>The EDNS EXPIRE (OPTION-CODE 9 <xref target="RFC7314"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">EXPIRE</spanx> and its <em>FIELD-VALUE</em> is a <em>mixed</em>:</t>

<t><list style="symbols">
  <t><em>ID-NAME</em> <spanx style="verb">NONE</spanx> if OPTION-LENGTH is zero</t>
  <t><em>int</em> with EXPIRE value otherwise</t>
</list></t>

</section>
<section anchor="cookie-option"><name>Cookie Option</name>

<t>The DNS Cookie (OPTION-CODE 10 <xref target="RFC7873"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">COOKIE</spanx> and its <em>FIELD-VALUE</em> is a <em>list</em> of <em>base16</em> with the Client Cookie and, if OPTION-LENGTH is greater than 8, the Server Cookie.</t>

</section>
<section anchor="keepalive"><name>Edns-Tcp-Keepalive Option</name>

<t>The edns-tcp-keepalive (OPTION-CODE 11 <xref target="RFC7828"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">KEEPALIVE</spanx> and its <em>FIELD-VALUE</em> is an <em>int</em> with the TIMEOUT in tenths of seconds.</t>

</section>
<section anchor="padding"><name>Padding Option</name>

<t>The Padding (OPTION-CODE 12 <xref target="RFC7830"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">PADDING</spanx> and its <em>FIELD-VALUE</em> is an <em>object</em> with two <em>SUBFIELD</em>s:</t>

<t><list style="symbols">
  <t>first <em>FIELD-NAME</em> is <spanx style="verb">LENGTH</spanx> and its <em>FIELD-VALUE</em> is the OPTION-LENGTH as <em>int</em></t>
  <t>second <em>FIELD-NAME</em> is <spanx style="verb">HEX</spanx> and its <em>FIELD-VALUE</em> is a <em>string</em> with base16-representation of OPTION-DATA</t>
</list></t>

<t>If the OPTION-DATA consists only of zeroes (0x00 octets), the <spanx style="verb">HEX</spanx> <em>SUBFIELD</em> SHOULD be an empty <em>string</em>.
Within JSON, the <spanx style="verb">HEX</spanx> <em>SUBFIELD</em> MAY be omitted if it is an empty string.</t>

</section>
<section anchor="chain-option"><name>CHAIN Option</name>

<t>The CHAIN (OPTION-CODE 13 <xref target="RFC7901"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">CHAIN</spanx> and its <em>FIELD-VALUE</em> is the Closest trust point as <em>dname</em>.</t>

</section>
<section anchor="edns-key-tag-option"><name>Edns-Key-Tag Option</name>

<t>The edns-key-tag (OPTION-CODE 14 <xref section="4" sectionFormat="comma" target="RFC8145"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">KEYTAG</spanx> and its <em>FIELD-VALUE</em> is the list of Key Tag values as <em>list</em> of <em>int</em>s.</t>

</section>
<section anchor="ede"><name>Extended DNS Error Option</name>

<t>The Extended DNS Error (OPTION-CODE 15 <xref target="RFC8914"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">EDE</spanx> and its <em>FIELD-VALUE</em> is an <em>object</em> with three <em>SUBFIELD</em>s:</t>

<t><list style="symbols">
  <t>first <em>FIELD-NAME</em> is <spanx style="verb">CODE</spanx> and its <em>FIELD-VALUE</em> is the INFO-CODE as <em>int</em></t>
  <t>second <em>FIELD-NAME</em> is <spanx style="verb">Purpose</spanx> and its <em>FIELD-VALUE</em> is the Purpose (first presented in <xref section="5.2" sectionFormat="comma" target="RFC8914"/> and then governed by <xref target="IANA.EDNS.EDE"/>) as <em>string</em>, or an empty <em>string</em></t>
  <t>third <em>FIELD-NAME</em> is <spanx style="verb">TEXT</spanx> and its <em>FIELD-VALUE</em> is the EXTRA-TEXT as <em>string</em> (possibly of zero length)</t>
</list></t>

<t>Within JSON, the <spanx style="verb">Purpose</spanx> <em>SUBFIELD</em> MAY be omitted if it is an empty string.
The same applies for <spanx style="verb">TEXT</spanx> <em>SUBFIELD</em>.</t>

<t>Examples of Presentation format:</t>

<figure><artwork><![CDATA[
EDE: 18 "Prohibited" ""
]]></artwork></figure>
<figure><artwork><![CDATA[
EDE: 6 "DNSSEC Bogus" "signature too short"
]]></artwork></figure>

</section>
</section>
<section anchor="eexamples"><name>Examples of EDNS Presentation Format</name>

<t>The following examples shall illustrate the features of EDNS Presentation format described above.
They may not make much sense and should not appear in normal DNS operation.</t>

<figure><artwork><![CDATA[
. 0 IN EDNS (
    Version: 0
    FLAGS: DO
    RCODE: BADCOOKIE
    UDPSIZE: 1232
    EXPIRE: 86400
    COOKIE: 36714f2e8805a93d,4654b4ed3279001b
    EDE: 18 "Prohibited" "bad cookie\000"
    OPT1234: 000004d2
    PADDING: 113 ""
    )
]]></artwork></figure>
<figure><artwork><![CDATA[
. 0 IN EDNS ( FLAGS: 0 RCODE: BADSIG UDPSIZE: 4096 EXPIRE: NONE
              NSID: 6578616d706c652e636f6d2e "example.com."
              DAU: 8,10 KEEPALIVE: 600 CHAIN: zerobyte\000.com.
              KEYTAG: 36651,6113 PADDING: 8 "df24d08b0258c7de" )
]]></artwork></figure>

</section>
<section anchor="jexamples"><name>Examples of EDNS Representation in JSON</name>

<t>The following examples are the JSON equivalents of the examples in <xref target="eexamples"></xref>.
They may not make much sense and should not appear in normal DNS operation.</t>

<figure><artwork><![CDATA[
"EDNS": {
    "Version": 0,
    "FLAGS": [ "DO" ],
    "RCODE": "BADCOOKIE",
    "UDPSIZE": 1232,
    "EXPIRE": 86400,
    "COOKIE": [ "36714f2e8805a93d", "4654b4ed3279001b" ],
    "EDE": {
        "CODE": 18,
        "Purpose": "Prohibited",
        "TEXT": "bad cookie\u0000"
    },
    "OPT1234": "000004d2",
    "PADDING": {
        "LENGTH": 113
    }
}
]]></artwork></figure>
<figure><artwork><![CDATA[
"EDNS": { "FLAGS": [ ], "RCODE": "BADSIG", "UDPSIZE": 4096,
          "EXPIRE": "NONE", "NSID": { "HEX": "6578616d706c652e636f6d2e",
          "TXT": "example.com." }, "DAU": [ 8, 10 ], "KEEPALIVE": 600,
          "CHAIN": "zerobyte\\000.com.", "KEYTAG": [ 36651, 6113 ],
          "PADDING": { "LENGTH": 8, "HEX": "df24d08b0258c7de" } }
]]></artwork></figure>

</section>
<section anchor="guidelines"><name>Guidelines for Future EDNS Options</name>

<t>This draft describes the presentation and JSON format of those ENDS options that are known at the time of writing.
Other EDNS options fall in the category of Unrecognized Options (<xref target="unrecognized"></xref>), unless specified otherwise.
The following guidelines shall help define them.</t>

<t>When defining new EDNS options, it is recommended to specify their <em>FIELD-NAME</em>s, <em>FIELD-TYPE</em>s and the construction of <em>FIELD-VALUE</em>s so that the EDNS Presentation and JSON format comprehensibly handles them.
Those formats should follow the semantics of the options' values rather than the syntax in order to make them more human-readable.
If it is necessary to define a new <em>FIELD-TYPE</em>, care must be taken to define its representation in Presentation and JSON format in a similar fashion like in this document.</t>

</section>
<section anchor="future"><name>Forward-Compatibility Considerations</name>

<t>This specification of ENDS Presentation and JSON format prefers displaying textual mnemonics over potentially cryptic numeric values wherever possible, which is desirable for human readers.
It refers to several IANA tables collecting the definitions of those mnemonics.
Those tables may be getting updated throughout time, and for human readers, it is still beneficial that the EDNS formats reflect those updates.
However, this may cause difficulties for algorithms implementing the reverse process of converting EDNS Presentation and/or JSON format back to wire format, because they might not understand some new mnemonics.
This limitation has to be taken into consideration.</t>

<t>Similarly, new documents may define Presentation and JSON format of newly defined EDNS options according to (or not according to) the guidelines above (<xref target="guidelines"></xref>).
This is, again, beneficial for human readers, as otherwise all new EDNS options would have to be represented as Unrecognized Options (<xref target="unrecognized"></xref>).
However, this may also cause difficulties for algorithms implementing the reverse process of converting EDNS Presentation and/or JSON format back to wire format, because they might not understand some new options.</t>

</section>
<section anchor="jsonescaping"><name>Update Representing DNS Messages in JSON</name>

<t>This section is not related to EDNS.
This section updates <xref section="2.6" sectionFormat="comma" target="RFC8427"/>, including erratum 5439, which introduced contradicting MUSTs for escaping backslashes.</t>

<t>In order to solve this contradiction and correctly represent a DNS name in JSON, it MUST be first converted to textual Presentation format according to <xref section="5.1" sectionFormat="comma" target="RFC1035"/> (called master file format in the referenced document), and the resulting &lt;character-string&gt; subsequently is inserted into JSON as String (<xref section="7" sectionFormat="comma" target="RFC8259"/>).</t>

<t>Note that the previous paragraph prescribes the following escaping strategy:
In the first step, every problematic character (non-printable, backslash, dot within Label, or any octet) is either substituted with the sequence <spanx style="verb">\DDD</spanx>, where <spanx style="verb">DDD</spanx> is the three-digit decimal ASCII code, or in some cases (backslash, dot, any printable character) just prepended with a backslash.
In the second step, every quote (<spanx style="verb">"</spanx>) and backslash (<spanx style="verb">\</spanx>) in the resulting &lt;character-string&gt; is prepended with another backslash.
Note that the JSON escaping sequence <spanx style="verb">\uXXXX</spanx> (where <spanx style="verb">XXXX</spanx> is a hexadecimal Unicode code) is thus never needed.</t>

<t>Moreover, the following requirements from <xref target="RFC8427"/> still hold:
The name MUST be represented as an absolute Fully-Qualified Domain Name.
Internationalized Domain Name (IDN) labels MUST be expressed in their A-label form, as described in <xref target="RFC5890"/>.</t>

<t>Example: the name with the Wire format <spanx style="verb">04005C2E2203636F6D00</spanx> can be represented in JSON as:</t>

<figure><artwork><![CDATA[
"NAME": "\\000\\\\\\046\".com."
]]></artwork></figure>

<t>but also as (among other ways):</t>

<figure><artwork><![CDATA[
"NAME": "\\000\\092\\.\\\".c\\om."
]]></artwork></figure>

</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>This document has no IANA actions.</t>

</section>
<section anchor="security"><name>Security Considerations</name>

<t>This document only describes the textual representation of binary data and therefore has no security impact on related protocols.</t>

<t>When implementing software, care must be taken to handle possibly inconsistent or broken input data.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>TODO</t>

</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t><strong>Note to the RFC Editor</strong>: Please remove this entire appendix before publication.</t>

<t>This version of this specification draft-peltan-edns-presentation-format-02 has been implemented in Knot DNS 3.3.2.</t>

</section>
<section anchor="change-history"><name>Change History</name>

<t><strong>Note to the RFC Editor</strong>: Please remove this entire appendix before publication.</t>

<t><list style="symbols">
  <t>edns-presentation-format-00</t>
</list></t>

<ul empty="true"><li>
  <t>Initial public draft.</t>
</li></ul>

<t><list style="symbols">
  <t>edns-presentation-format-01</t>
</list></t>

<ul empty="true"><li>
  <t>Added Guidelines for Future EDNS Options, dummy IANA Considerations and Security Considerations.</t>
</li></ul>

<t><list style="symbols">
  <t>edns-presentation-format-02</t>
</list></t>

<ul empty="true"><li>
  <t>Substantial re-work with common FIELD-TYPE specifications, bigger changes in presentation format and smaller in JSON.</t>
</li></ul>

</section>


  </middle>

  <back>

    <references title='Normative References'>



<reference anchor='RFC1035' target='https://www.rfc-editor.org/info/rfc1035'>
  <front>
    <title>Domain names - implementation and specification</title>
    <author fullname='P. Mockapetris' initials='P.' surname='Mockapetris'/>
    <date month='November' year='1987'/>
    <abstract>
      <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='13'/>
  <seriesInfo name='RFC' value='1035'/>
  <seriesInfo name='DOI' value='10.17487/RFC1035'/>
</reference>

<reference anchor='RFC6891' target='https://www.rfc-editor.org/info/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='RFC8259' target='https://www.rfc-editor.org/info/rfc8259'>
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname='T. Bray' initials='T.' role='editor' surname='Bray'/>
    <date month='December' year='2017'/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='90'/>
  <seriesInfo name='RFC' value='8259'/>
  <seriesInfo name='DOI' value='10.17487/RFC8259'/>
</reference>

<reference anchor='RFC8427' target='https://www.rfc-editor.org/info/rfc8427'>
  <front>
    <title>Representing DNS Messages in JSON</title>
    <author fullname='P. Hoffman' initials='P.' surname='Hoffman'/>
    <date month='July' year='2018'/>
    <abstract>
      <t>Some applications use DNS messages, or parts of DNS messages, as data. For example, a system that captures DNS queries and responses might want to be able to easily search them without having to decode the messages each time. Another example is a system that puts together DNS queries and responses from message parts. This document describes a general format for DNS message data in JSON. Specific profiles of the format in this document can be described in other documents for specific applications and usage scenarios.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8427'/>
  <seriesInfo name='DOI' value='10.17487/RFC8427'/>
</reference>

<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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='RFC4648' target='https://www.rfc-editor.org/info/rfc4648'>
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname='S. Josefsson' initials='S.' surname='Josefsson'/>
    <date month='October' year='2006'/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='4648'/>
  <seriesInfo name='DOI' value='10.17487/RFC4648'/>
</reference>

<reference anchor='RFC3597' target='https://www.rfc-editor.org/info/rfc3597'>
  <front>
    <title>Handling of Unknown DNS Resource Record (RR) Types</title>
    <author fullname='A. Gustafsson' initials='A.' surname='Gustafsson'/>
    <date month='September' year='2003'/>
    <abstract>
      <t>Extending the Domain Name System (DNS) with new Resource Record (RR) types currently requires changes to name server software. This document specifies the changes necessary to allow future DNS implementations to handle new RR types transparently. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='3597'/>
  <seriesInfo name='DOI' value='10.17487/RFC3597'/>
</reference>

<reference anchor='RFC5890' target='https://www.rfc-editor.org/info/rfc5890'>
  <front>
    <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
    <author fullname='J. Klensin' initials='J.' surname='Klensin'/>
    <date month='August' year='2010'/>
    <abstract>
      <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5890'/>
  <seriesInfo name='DOI' value='10.17487/RFC5890'/>
</reference>

<reference anchor='RFC6975' target='https://www.rfc-editor.org/info/rfc6975'>
  <front>
    <title>Signaling Cryptographic Algorithm Understanding in DNS Security Extensions (DNSSEC)</title>
    <author fullname='S. Crocker' initials='S.' surname='Crocker'/>
    <author fullname='S. Rose' initials='S.' surname='Rose'/>
    <date month='July' year='2013'/>
    <abstract>
      <t>The DNS Security Extensions (DNSSEC) were developed to provide origin authentication and integrity protection for DNS data by using digital signatures. These digital signatures can be generated using different algorithms. This document specifies a way for validating end-system resolvers to signal to a server which digital signature and hash algorithms they support. The extensions allow the signaling of new algorithm uptake in client code to allow zone administrators to know when it is possible to complete an algorithm rollover in a DNSSEC-signed zone.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6975'/>
  <seriesInfo name='DOI' value='10.17487/RFC6975'/>
</reference>

<reference anchor='RFC4291' target='https://www.rfc-editor.org/info/rfc4291'>
  <front>
    <title>IP Version 6 Addressing Architecture</title>
    <author fullname='R. Hinden' initials='R.' surname='Hinden'/>
    <author fullname='S. Deering' initials='S.' surname='Deering'/>
    <date month='February' year='2006'/>
    <abstract>
      <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
      <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='4291'/>
  <seriesInfo name='DOI' value='10.17487/RFC4291'/>
</reference>




    </references>

    <references title='Informative References'>

<reference anchor="IANA.RCODEs" target="https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6">
  <front>
    <title>DNS RCODEs</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANA.EDNS.EDE" target="https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#extended-dns-error-codes">
  <front>
    <title>EDNS Extended Error Codes</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANA.EDNS.DAU" target="https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml">
  <front>
    <title>DNS Security Algorithm Numbers</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANA.EDNS.DHU" target="https://www.iana.org/assignments/ds-rr-types/ds-rr-types.xhtml#ds-rr-types-1">
  <front>
    <title>DNSSEC DS RR Type Digest Algorithms</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANA.EDNS.N3U" target="https://www.iana.org/assignments/dnssec-nsec3-parameters/dnssec-nsec3-parameters.xhtml#dnssec-nsec3-parameters-3">
  <front>
    <title>DNSSEC NSEC3 Hash Algorithms</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor='RFC8764' target='https://www.rfc-editor.org/info/rfc8764'>
  <front>
    <title>Apple's DNS Long-Lived Queries Protocol</title>
    <author fullname='S. Cheshire' initials='S.' surname='Cheshire'/>
    <author fullname='M. Krochmal' initials='M.' surname='Krochmal'/>
    <date month='June' year='2020'/>
    <abstract>
      <t>Apple's DNS Long-Lived Queries (LLQ) is a mechanism for extending the DNS protocol to support change notification, thus allowing clients to learn about changes to DNS data without polling the server. From 2005 onwards, LLQ was implemented in Apple products including Mac OS X, Bonjour for Windows, and AirPort wireless base stations. In 2020, the LLQ protocol was superseded by the IETF Standards Track RFC 8765, "DNS Push Notifications", which builds on experience gained with the LLQ protocol to create a superior replacement.</t>
      <t>The existing LLQ protocol deployed and used from 2005 to 2020 is documented here to give background regarding the operational experience that informed the development of DNS Push Notifications, and to help facilitate a smooth transition from LLQ to DNS Push Notifications.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8764'/>
  <seriesInfo name='DOI' value='10.17487/RFC8764'/>
</reference>

<reference anchor='RFC5001' target='https://www.rfc-editor.org/info/rfc5001'>
  <front>
    <title>DNS Name Server Identifier (NSID) Option</title>
    <author fullname='R. Austein' initials='R.' surname='Austein'/>
    <date month='August' year='2007'/>
    <abstract>
      <t>With the increased use of DNS anycast, load balancing, and other mechanisms allowing more than one DNS name server to share a single IP address, it is sometimes difficult to tell which of a pool of name servers has answered a particular query. While existing ad-hoc mechanisms allow an operator to send follow-up queries when it is necessary to debug such a configuration, the only completely reliable way to obtain the identity of the name server that responded is to have the name server include this information in the response itself. This note defines a protocol extension to support this functionality. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5001'/>
  <seriesInfo name='DOI' value='10.17487/RFC5001'/>
</reference>

<reference anchor='RFC7871' target='https://www.rfc-editor.org/info/rfc7871'>
  <front>
    <title>Client Subnet in DNS Queries</title>
    <author fullname='C. Contavalli' initials='C.' surname='Contavalli'/>
    <author fullname='W. van der Gaast' initials='W.' surname='van der Gaast'/>
    <author fullname='D. Lawrence' initials='D.' surname='Lawrence'/>
    <author fullname='W. Kumari' initials='W.' surname='Kumari'/>
    <date month='May' year='2016'/>
    <abstract>
      <t>This document describes an Extension Mechanisms for DNS (EDNS0) option that is in active use to carry information about the network that originated a DNS query and the network for which the subsequent response can be cached. Since it has some known operational and privacy shortcomings, a revision will be worked through the IETF for improvement.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7871'/>
  <seriesInfo name='DOI' value='10.17487/RFC7871'/>
</reference>

<reference anchor='RFC7314' target='https://www.rfc-editor.org/info/rfc7314'>
  <front>
    <title>Extension Mechanisms for DNS (EDNS) EXPIRE Option</title>
    <author fullname='M. Andrews' initials='M.' surname='Andrews'/>
    <date month='July' year='2014'/>
    <abstract>
      <t>This document specifies a method for secondary DNS servers to honour the SOA EXPIRE field as if they were always transferring from the primary, even when using other secondaries to perform indirect transfers and refresh queries.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7314'/>
  <seriesInfo name='DOI' value='10.17487/RFC7314'/>
</reference>

<reference anchor='RFC7873' target='https://www.rfc-editor.org/info/rfc7873'>
  <front>
    <title>Domain Name System (DNS) Cookies</title>
    <author fullname='D. Eastlake 3rd' initials='D.' surname='Eastlake 3rd'/>
    <author fullname='M. Andrews' initials='M.' surname='Andrews'/>
    <date month='May' year='2016'/>
    <abstract>
      <t>DNS Cookies are a lightweight DNS transaction security mechanism that provides limited protection to DNS servers and clients against a variety of increasingly common denial-of-service and amplification/ forgery or cache poisoning attacks by off-path attackers. DNS Cookies are tolerant of NAT, NAT-PT (Network Address Translation - Protocol Translation), and anycast and can be incrementally deployed. (Since DNS Cookies are only returned to the IP address from which they were originally received, they cannot be used to generally track Internet users.)</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7873'/>
  <seriesInfo name='DOI' value='10.17487/RFC7873'/>
</reference>

<reference anchor='RFC7828' target='https://www.rfc-editor.org/info/rfc7828'>
  <front>
    <title>The edns-tcp-keepalive EDNS0 Option</title>
    <author fullname='P. Wouters' initials='P.' surname='Wouters'/>
    <author fullname='J. Abley' initials='J.' surname='Abley'/>
    <author fullname='S. Dickinson' initials='S.' surname='Dickinson'/>
    <author fullname='R. Bellis' initials='R.' surname='Bellis'/>
    <date month='April' year='2016'/>
    <abstract>
      <t>DNS messages between clients and servers may be received over either UDP or TCP. UDP transport involves keeping less state on a busy server, but can cause truncation and retries over TCP. Additionally, UDP can be exploited for reflection attacks. Using TCP would reduce retransmits and amplification. However, clients commonly use TCP only for retries and servers typically use idle timeouts on the order of seconds.</t>
      <t>This document defines an EDNS0 option ("edns-tcp-keepalive") that allows DNS servers to signal a variable idle timeout. This signalling encourages the use of long-lived TCP connections by allowing the state associated with TCP transport to be managed effectively with minimal impact on the DNS transaction time.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7828'/>
  <seriesInfo name='DOI' value='10.17487/RFC7828'/>
</reference>

<reference anchor='RFC7830' target='https://www.rfc-editor.org/info/rfc7830'>
  <front>
    <title>The EDNS(0) Padding Option</title>
    <author fullname='A. Mayrhofer' initials='A.' surname='Mayrhofer'/>
    <date month='May' year='2016'/>
    <abstract>
      <t>This document specifies the EDNS(0) "Padding" option, which allows DNS clients and servers to pad request and response messages by a variable number of octets.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7830'/>
  <seriesInfo name='DOI' value='10.17487/RFC7830'/>
</reference>

<reference anchor='RFC7901' target='https://www.rfc-editor.org/info/rfc7901'>
  <front>
    <title>CHAIN Query Requests in DNS</title>
    <author fullname='P. Wouters' initials='P.' surname='Wouters'/>
    <date month='June' year='2016'/>
    <abstract>
      <t>This document defines an EDNS0 extension that can be used by a security-aware validating resolver configured to use a forwarding resolver to send a single query, requesting a complete validation path along with the regular query answer. The reduction in queries potentially lowers the latency and reduces the need to send multiple queries at once. This extension mandates the use of source-IP- verified transport such as TCP or UDP with EDNS-COOKIE, so it cannot be abused in amplification attacks.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7901'/>
  <seriesInfo name='DOI' value='10.17487/RFC7901'/>
</reference>

<reference anchor='RFC8145' target='https://www.rfc-editor.org/info/rfc8145'>
  <front>
    <title>Signaling Trust Anchor Knowledge in DNS Security Extensions (DNSSEC)</title>
    <author fullname='D. Wessels' initials='D.' surname='Wessels'/>
    <author fullname='W. Kumari' initials='W.' surname='Kumari'/>
    <author fullname='P. Hoffman' initials='P.' surname='Hoffman'/>
    <date month='April' year='2017'/>
    <abstract>
      <t>The DNS Security Extensions (DNSSEC) were developed to provide origin authentication and integrity protection for DNS data by using digital signatures. These digital signatures can be verified by building a chain of trust starting from a trust anchor and proceeding down to a particular node in the DNS. This document specifies two different ways for validating resolvers to signal to a server which keys are referenced in their chain of trust. The data from such signaling allow zone administrators to monitor the progress of rollovers in a DNSSEC-signed zone.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8145'/>
  <seriesInfo name='DOI' value='10.17487/RFC8145'/>
</reference>

<reference anchor='RFC8914' target='https://www.rfc-editor.org/info/rfc8914'>
  <front>
    <title>Extended DNS Errors</title>
    <author fullname='W. Kumari' initials='W.' surname='Kumari'/>
    <author fullname='E. Hunt' initials='E.' surname='Hunt'/>
    <author fullname='R. Arends' initials='R.' surname='Arends'/>
    <author fullname='W. Hardaker' initials='W.' surname='Hardaker'/>
    <author fullname='D. Lawrence' initials='D.' surname='Lawrence'/>
    <date month='October' year='2020'/>
    <abstract>
      <t>This document defines an extensible method to return additional information about the cause of DNS errors. Though created primarily to extend SERVFAIL to provide additional information about the cause of DNS and DNSSEC failures, the Extended DNS Errors option defined in this document allows all response types to contain extended error information. Extended DNS Error information does not change the processing of RCODEs.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8914'/>
  <seriesInfo name='DOI' value='10.17487/RFC8914'/>
</reference>




    </references>



  </back>

<!-- ##markdown-source:
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
lf8B8gd7GcxjAAA=

-->

</rfc>

