<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" number="9660" consensus="true" xml:lang="en" ipr="trust200902" category="std" docName="draft-ietf-dnsop-zoneversion-11" tocInclude="true" symRefs="true" sortRefs="true" submissionType="IETF" updates="" obsoletes="" prepTime="2024-10-11T15:21:53" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-dnsop-zoneversion-11" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9660" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="DNS ZONEVERSION Option">The DNS Zone Version (ZONEVERSION) Option</title>
    <seriesInfo name="RFC" value="9660" stream="IETF"/>
    <author fullname="Hugo Salgado" initials="H." surname="Salgado">
      <organization showOnFrontPage="true">NIC Chile</organization>
      <address>
        <postal>
          <street>Miraflores 222, piso 14</street>
          <city>Santiago</city>
          <code>CP 8320198</code>
          <country>Chile</country>
        </postal>
        <phone>+56 2 29407700</phone>
        <email>hsalgado@nic.cl</email>
      </address>
    </author>
    <author fullname="Mauricio Vergara Ereche" initials="M." surname="Vergara">
      <organization showOnFrontPage="true">DigitalOcean</organization>
      <address>
        <postal>
          <street>101 6th Ave</street>
          <city>New York</city>
          <region>NY</region>
          <code>10013</code>
          <country>United States of America</country>
        </postal>
        <email>mvergara@digitalocean.com</email>
      </address>
    </author>
    <author fullname="Duane Wessels" initials="D." surname="Wessels">
      <organization showOnFrontPage="true">Verisign</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
          <country>United States of America</country>
        </postal>
        <phone>+1 703 948-3200</phone>
        <email>dwessels@verisign.com</email>
        <uri>https://verisign.com</uri>
      </address>
    </author>
    <date month="10" year="2024"/>
    <area>OPS</area>
    <workgroup>dnsop</workgroup>
    <keyword>zoneversion</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">The DNS ZONEVERSION option is a way for DNS clients to request,
        and for authoritative DNS servers to provide, information
        regarding the version of the zone from which a response is
        generated.  The SERIAL field from the Start of Authority (SOA)
        resource record (RR) is a good example of a zone's version, and it is the
        only one defined by this specification.  Additional version
        types may be defined by future specifications.</t>
      <t indent="0" pn="section-abstract-2">Including zone version data in a response simplifies and improves
        the quality of debugging and diagnostics since the version
        and the DNS answer are provided atomically.  This can be especially
        useful for zones and DNS providers that leverage IP anycast or
        multiple backend systems.  It functions similarly to the
        DNS Name Server Identifier (NSID) option described in RFC 5001.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9660" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2024 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.2">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.2.1"><xref derivedContent="1.2" format="counter" sectionFormat="of" target="section-1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-zoneversion-option">The ZONEVERSION Option</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-wire-format">Wire Format</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-presentation-format">Presentation Format</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-zoneversion-processing">ZONEVERSION Processing</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-initiators">Initiators</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-responders">Responders</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.2.2">
                  <li pn="section-toc.1-1.3.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.2.2.1.1"><xref derivedContent="3.2.1" format="counter" sectionFormat="of" target="section-3.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-responding-to-invalid-zonev">Responding to Invalid ZONEVERSION Queries</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.3.2.2.2.2.1"><xref derivedContent="3.2.2" format="counter" sectionFormat="of" target="section-3.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-zoneversion-is-not-transiti">ZONEVERSION Is Not Transitive</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-soa-serial-zoneversion-">The SOA-SERIAL ZONEVERSION Type</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-type-soa-serial-presentatio">Type SOA-SERIAL Presentation Format</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-example-usage">Example Usage</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-dns-edns0-option-code-regis">DNS EDNS(0) Option Code Registration</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-zoneversion-type-values-reg">ZONEVERSION TYPE Values Registry</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2.2.2">
                  <li pn="section-toc.1-1.6.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.6.2.2.2.1.1"><xref derivedContent="6.2.1" format="counter" sectionFormat="of" target="section-6.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-designated-expert-review-di">Designated Expert Review Directives</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-implementation-consideratio">Implementation Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="Appendix B" format="default" sectionFormat="of" target="section-appendix.b"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-implementation-references">Implementation References</xref></t>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.13">
            <t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="intro" numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The ZONEVERSION option
        allows DNS queriers to request, and authoritative DNS servers to provide,
        a
        token representing the version of the zone from which a DNS response was generated. It is similar
        to the NSID option <xref target="RFC5001" format="default" sectionFormat="of" derivedContent="RFC5001"/>, which can be used to convey the identification
        of a name server that generates a response.</t>
      <t indent="0" pn="section-1-2">The Domain Name System allows data to be loosely coherent
        <xref target="RFC3254" format="default" sectionFormat="of" derivedContent="RFC3254"/>, because synchronization can never
        be instantaneous, and some uses of DNS do not require strong
        coherency anyway.  This means that a record obtained by
        one response could be out of sync with other authoritative
        sources of the same data at the same point in time.  This can
        make it difficult to debug some problems when there is a need
        to couple the data with the version of the zone it came from.
        Furthermore, in today's Internet, it is common for high volume and
        important DNS zones to utilize IP anycast (<xref target="RFC4786" sectionFormat="of" section="4.9" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4786#section-4.9" derivedContent="RFC4786"/>) and/or load-balanced backend
        servers.  In general, there is no way to ensure that two separate
        queries are delivered to the same server.  The ZONEVERSION option both
        simplifies and improves DNS monitoring and debugging by
        directly associating the data and the version together in a
        single response.</t>
      <t indent="0" pn="section-1-3">The SOA SERIAL field (<xref target="RFC1034" sectionFormat="of" section="4.3.5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc1034#section-4.3.5" derivedContent="RFC1034"/>) is one example of zone versioning.  Its purpose
        is to facilitate the distribution of zone data between primary
        and secondary name servers.  It is also often useful in DNS
        monitoring and debugging.  This document specifies the SOA SERIAL
        as one type of ZONEVERSION data.</t>
      <t indent="0" pn="section-1-4">Some DNS zones may use other distribution and synchronization
        mechanisms that are not based on the SOA SERIAL number, such as relational
        databases or other proprietary methods.  In those cases, the SOA
        SERIAL field may not be relevant with respect to the versioning
        of its content.  To accommodate these use cases, new ZONEVERSION
        types could be defined in future specifications.  Alternatively,
        zone operators may use one of the Private Use ZONEVERSION code
        points allocated by this specification.</t>
      <t indent="0" pn="section-1-5">The ZONEVERSION option is <bcp14>OPTIONAL</bcp14> to implement by DNS clients and name servers.
        It is designed for use only when a name server provides
        authoritative response data.  It is intended only for hop-to-hop
        communication and is not transitive.</t>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-1.1">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t indent="0" pn="section-1.1-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they appear in all capitals, as
    shown here.
        </t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-1.2">
        <name slugifiedName="name-terminology">Terminology</name>
        <t indent="0" pn="section-1.2-1">In this document, "original QNAME" is used to mean what the
        DNS terminology document <xref target="RFC9499" format="default" sectionFormat="of" derivedContent="RFC9499"/> calls "QNAME
        (original)":</t>
        <blockquote pn="section-1.2-2">The name actually sent in the Question section
        in the original query, which is always echoed in the (final)
        reply in the Question section when the QR bit is set to 1.</blockquote>
        <t indent="0" pn="section-1.2-3">In this document, an "enclosing zone" of a domain name means
          a zone in which the domain name is present as an owner name
          or any parent of that zone.  For example, if B.C.EXAMPLE and
          EXAMPLE are zones but C.EXAMPLE is not, the domain name
          A.B.C.EXAMPLE has B.C.EXAMPLE, EXAMPLE, and the root as
          enclosing zones.</t>
      </section>
    </section>
    <section anchor="theoption" numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-the-zoneversion-option">The ZONEVERSION Option</name>
      <t indent="0" pn="section-2-1">This document specifies a new EDNS(0) <xref target="RFC6891" format="default" sectionFormat="of" derivedContent="RFC6891"/> option, ZONEVERSION, which can be used by DNS
        clients and servers to provide information regarding the version
        of the zone from which a response is generated.</t>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-2.1">
        <name slugifiedName="name-wire-format">Wire Format</name>
        <t indent="0" pn="section-2.1-1">The ZONEVERSION option is encoded as follows:</t>
        <t indent="0" pn="section-2.1-2">OPTION-CODE for the ZONEVERSION option is 19.</t>
        <t indent="0" pn="section-2.1-3">OPTION-LENGTH for the ZONEVERSION option <bcp14>MUST</bcp14> have a value of 0 for queries
          and <bcp14>MUST</bcp14> have the value of the length (in octets) of the OPTION-DATA for responses.</t>
        <t indent="0" pn="section-2.1-4">OPTION-DATA for the ZONEVERSION option is omitted in queries.  For responses, it is composed of three fields:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-2.1-5">
          <li pn="section-2.1-5.1">an unsigned 1-octet Label Count (LABELCOUNT)
              indicating the number of labels for the name of the zone that VERSION value refers to</li>
          <li pn="section-2.1-5.2">an unsigned 1-octet type number (TYPE) distinguishing the format and meaning of VERSION</li>
          <li pn="section-2.1-5.3">an opaque octet string conveying the zone version data (VERSION)</li>
        </ul>
        <figure align="left" suppress-title="false" pn="figure-1">
          <name slugifiedName="name-diagram-with-the-option-dat">Diagram with the OPTION-DATA Format for the ZONEVERSION Option</name>
          <artset pn="section-2.1-6.1">
            <artwork type="ascii-art" name="zoneversion.txt" align="left" pn="section-2.1-6.1.1">

                +0 (MSB)                       +1 (LSB)
   +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
0: |           LABELCOUNT          |            TYPE               |
   +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
2: |                            VERSION                            |
   /                                                               /
   +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
</artwork>
          </artset>
        </figure>
        <t indent="0" pn="section-2.1-7">
        The LABELCOUNT field indicates the name of the zone that the ZONEVERSION option refers to, by means of taking the last LABELCOUNT labels of the original QNAME.
        For example, an answer with QNAME "a.b.c.example.com" and a ZONEVERSION option with a LABELCOUNT of value 2 indicates that the zone name in which this ZONEVERSION refers to is "example.com.".</t>
        <t indent="0" pn="section-2.1-8">In the case of a downward referral response, the LABELCOUNT number helps to differentiate between the parent and child zones, where the parent is authoritative for some portion of the QNAME above a zone cut.  Also, if the ANSWER section has more than one RR set with different zones (like a CNAME and a target name in another zone), the number of labels in the QNAME disambiguates such a situation.</t>
        <t indent="0" pn="section-2.1-9">The value of the LABELCOUNT field <bcp14>MUST NOT</bcp14> count the null (root) label that terminates the original QNAME. The value of the LABELCOUNT field <bcp14>MUST</bcp14> be less than or equal to the number of labels in the original QNAME.
        The Root zone (".") has a LABELCOUNT field value of 0.</t>
      </section>
      <section anchor="optionpresentation" numbered="true" removeInRFC="false" toc="include" pn="section-2.2">
        <name slugifiedName="name-presentation-format">Presentation Format</name>
        <t indent="0" pn="section-2.2-1">The presentation format of the ZONEVERSION option is as follows:</t>
        <t indent="0" pn="section-2.2-2">The OPTION-CODE field <bcp14>MUST</bcp14> be represented as the mnemonic value ZONEVERSION.</t>
        <t indent="0" pn="section-2.2-3">The OPTION-LENGTH field <bcp14>MAY</bcp14> be omitted,
            but if present, it <bcp14>MUST</bcp14> be represented as an unsigned decimal integer.</t>
        <t indent="0" pn="section-2.2-4">The LABELCOUNT value of the OPTION-DATA field <bcp14>MAY</bcp14> be omitted,
            but if present, it <bcp14>MUST</bcp14> be represented as an unsigned decimal integer.
            The corresponding zone name <bcp14>SHOULD</bcp14> be displayed (i.e., LABELCOUNT labels of the original QNAME)
            for easier human consumption.</t>
        <t indent="0" pn="section-2.2-5">The TYPE and VERSION fields of the option <bcp14>SHOULD</bcp14> be represented according to each specific TYPE.</t>
      </section>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-zoneversion-processing">ZONEVERSION Processing</name>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-3.1">
        <name slugifiedName="name-initiators">Initiators</name>
        <t indent="0" pn="section-3.1-1">A DNS client <bcp14>MAY</bcp14> signal its support and desire for zone version information by
          including an empty ZONEVERSION option in the EDNS(0) OPT pseudo-RR of a query to an authoritative
          name server.  An empty ZONEVERSION option has OPTION-LENGTH set to zero.</t>
        <t indent="0" pn="section-3.1-2">A DNS client <bcp14>SHOULD NOT</bcp14> send the ZONEVERSION option to non-authoritative name servers.</t>
        <t indent="0" pn="section-3.1-3">A DNS client <bcp14>MUST NOT</bcp14> include more than one ZONEVERSION option in the OPT pseudo-RR of a DNS query.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-3.2">
        <name slugifiedName="name-responders">Responders</name>
        <t indent="0" pn="section-3.2-1">A name server that (a) understands the ZONEVERSION option, (b) receives a
          query with the ZONEVERSION option, (c) is
          authoritative for one or more enclosing zones of the original QNAME, and (d) chooses to honor a
          particular ZONEVERSION request responds by including a TYPE and
          corresponding VERSION value in a ZONEVERSION option in an EDNS(0)
          OPT pseudo-RR in the response message.</t>
        <t indent="0" pn="section-3.2-2">Otherwise,
          a server <bcp14>MUST NOT</bcp14> include a ZONEVERSION option in the response.</t>
        <t indent="0" pn="section-3.2-3">A name server <bcp14>MAY</bcp14> include more than one ZONEVERSION option in
           the response if it supports multiple TYPEs. A name server <bcp14>MAY</bcp14>
           also include more than one ZONEVERSION option in the response
           if it is authoritative for more than one enclosing zone of the original
           QNAME. A name server <bcp14>MUST NOT</bcp14> include more than one ZONEVERSION
        option for a given TYPE and LABELCOUNT.</t>
        <t indent="0" pn="section-3.2-4">Note: the ZONEVERSION option should be included for any response
          satisfying the criteria above including, but not limited to, the following:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-3.2-5">
          <li pn="section-3.2-5.1">Downward referral
            (see "Referrals" in <xref target="RFC9499" section="4" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc9499#section-4" derivedContent="RFC9499"/>),
            even though the response's Authoritative Answer bit is not set.
            In this case, the ZONEVERSION data <bcp14>MUST</bcp14> correspond to the version of the referring zone.</li>
          <li pn="section-3.2-5.2">Name error (NXDOMAIN), even though the response
            does not include any Answer section RRs.</li>
          <li pn="section-3.2-5.3">NODATA (<xref target="RFC9499" section="3" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc9499#section-3" derivedContent="RFC9499"/>),
            even though the response does not include any Answer
            section RRs.</li>
          <li pn="section-3.2-5.4">Server failure (SERVFAIL) when the server is authoritative for the original QNAME.</li>
        </ul>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-3.2.1">
          <name slugifiedName="name-responding-to-invalid-zonev">Responding to Invalid ZONEVERSION Queries</name>
          <t indent="0" pn="section-3.2.1-1">A name server that understands the ZONEVERSION option <bcp14>MUST</bcp14>
             return a FORMERR response when:</t>
          <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-3.2.1-2">
            <li pn="section-3.2.1-2.1">The ZONEVERSION OPTION-LENGTH is not zero.</li>
            <li pn="section-3.2.1-2.2">More than one ZONEVERSION option is present.</li>
          </ul>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-3.2.2">
          <name slugifiedName="name-zoneversion-is-not-transiti">ZONEVERSION Is Not Transitive</name>
          <t indent="0" pn="section-3.2.2-1">The ZONEVERSION option is not transitive.  A name server
            (recursive or otherwise) <bcp14>MUST NOT</bcp14> blindly copy the ZONEVERSION
            option from a query it receives into a subsequent query that
            it sends onward to another server.  A name server <bcp14>MUST NOT</bcp14>
            send a ZONEVERSION option back to a client that did not
            request it.</t>
        </section>
      </section>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-the-soa-serial-zoneversion-">The SOA-SERIAL ZONEVERSION Type</name>
      <t indent="0" pn="section-4-1">The first and only ZONEVERSION option TYPE defined in this document is a zone's serial number as found in the Start of Authority (SOA) RR.</t>
      <t indent="0" pn="section-4-2">As mentioned previously, some DNS zones may use alternative
        distribution and synchronization mechanisms that are not based on the SOA
        SERIAL number, and the SERIAL field may not be relevant with
        respect to the versioning of zone content.  In those cases, a
        name server <bcp14>SHOULD NOT</bcp14> include a ZONEVERSION option with type
        SOA-SERIAL in a reply.</t>
      <t indent="0" pn="section-4-3">The value for this type is "0".</t>
      <t indent="0" pn="section-4-4">The mnemonic for this type is "SOA-SERIAL".</t>
      <t indent="0" pn="section-4-5">The EDNS(0) OPTION-LENGTH for this type <bcp14>MUST</bcp14> be set to "6" in responses.</t>
      <t indent="0" pn="section-4-6">The VERSION value for the SOA-SERIAL type <bcp14>MUST</bcp14> be a copy of the unsigned 32-bit 
        SERIAL field of the SOA RR, as defined in <xref target="RFC1035" section="3.3.13" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc1035#section-3.3.13" derivedContent="RFC1035"/>.</t>
      <section anchor="typepresentation" numbered="true" removeInRFC="false" toc="include" pn="section-4.1">
        <name slugifiedName="name-type-soa-serial-presentatio">Type SOA-SERIAL Presentation Format</name>
        <t indent="0" pn="section-4.1-1">The presentation format of this type content is as follows:</t>
        <ul empty="true" bare="false" indent="3" spacing="normal" pn="section-4.1-2">
          <li pn="section-4.1-2.1">The TYPE field <bcp14>MUST</bcp14> be represented as the mnemonic value "SOA-SERIAL".</li>
          <li pn="section-4.1-2.2">The VERSION field <bcp14>MUST</bcp14> be represented as an unsigned decimal integer.</li>
        </ul>
      </section>
    </section>
    <section anchor="usage" numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-example-usage">Example Usage</name>
      <t indent="0" pn="section-5-1">A name server that (a) implements this specification, (b)
      receives a query with the ZONEVERSION option, (c) is authoritative
      for the zone of the original QNAME, and (d) utilizes the SOA SERIAL field for
      versioning of said zone should include a ZONEVERSION option in
      its response.  In the response's ZONEVERSION option, the EDNS(0) OPTION-LENGTH
      would be set to 6 and the OPTION-DATA would consist of the 1-octet LABELCOUNT,
      the 1-octet TYPE with value 0, and the 4-octet SOA-SERIAL value.</t>
      <t indent="0" pn="section-5-2">The example below demonstrates expected output of a diagnostic tool that implements the ZONEVERSION option, displaying a response from a compliant authoritative DNS server:</t>
      <figure align="left" suppress-title="false" pn="figure-2">
        <name slugifiedName="name-example-usage-and-dig-outpu">Example Usage and Dig Output</name>
        <sourcecode type="dns-rr" markers="false" pn="section-5-3.1">

  $ dig @ns.example.com www.example.com aaaa +zoneversion \
  +norecurse +nocmd

  ;; Got answer:
  ;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 7077
  ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

  ;; OPT PSEUDOSECTION:
  ; EDNS: version: 0, flags:; udp: 1232
  ; ZONEVERSION: 02 00 78 95 a4 e9 ("SOA-SERIAL: 2023073001 \
  ; (example.com.)")
  ;; QUESTION SECTION:
  ;www.example.com.    IN  AAAA

  ;; ANSWER SECTION:
  www.example.com.  43200  IN  AAAA  2001:db8::80

  ;; AUTHORITY SECTION:
  example.com.    43200  IN  NS  ns.example.com.

  ;; ADDITIONAL SECTION:
  ns.example.com.    43200  IN  AAAA  2001:db8::53

  ;; Query time: 15 msec
  ;; SERVER: 2001:db8::53#53(2001:db8::53) (UDP)
  ;; WHEN: dom jul 30 19:51:04 -04 2023
  ;; MSG SIZE  rcvd: 129

</sourcecode>
      </figure>
    </section>
    <section anchor="IANA" numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.1">
        <name slugifiedName="name-dns-edns0-option-code-regis">DNS EDNS(0) Option Code Registration</name>
        <t indent="0" pn="section-6.1-1">This document defines a new EDNS(0) option,
          entitled "ZONEVERSION" (see <xref target="theoption" format="default" sectionFormat="of" derivedContent="Section 2"/>), with the 
          assigned value of 19 from the "DNS EDNS0 Option Codes (OPT)" registry:</t>
        <table align="center" pn="table-1">
          <name slugifiedName="name-dns-edns0-option-codes-opt-">DNS EDNS0 Option Codes (OPT) Registry</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Value</th>
              <th align="left" colspan="1" rowspan="1">Name</th>
              <th align="left" colspan="1" rowspan="1">Status</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <th align="left" colspan="1" rowspan="1">19</th>
              <th align="left" colspan="1" rowspan="1">ZONEVERSION</th>
              <th align="left" colspan="1" rowspan="1">Standard</th>
              <th align="left" colspan="1" rowspan="1">RFC 9660</th>
            </tr>
          </tbody>
        </table>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.2">
        <name slugifiedName="name-zoneversion-type-values-reg">ZONEVERSION TYPE Values Registry</name>
        <t indent="0" pn="section-6.2-1">
	  IANA has created and will maintain a new registry called "ZONEVERSION TYPE Values" in the "Domain Name System (DNS) Parameters" registry group as follows:</t>
        <table align="center" pn="table-2">
          <name slugifiedName="name-registration-procedures-for">Registration Procedures for the ZONEVERSION TYPE Values Registry</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Range</th>
              <th align="left" colspan="1" rowspan="1">Registration Procedures</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <th align="left" colspan="1" rowspan="1">0-245</th>
              <th align="left" colspan="1" rowspan="1">Specification Required</th>
            </tr>
            <tr>
              <th align="left" colspan="1" rowspan="1">246-254</th>
              <th align="left" colspan="1" rowspan="1">Private Use</th>
            </tr>
            <tr>
              <th align="left" colspan="1" rowspan="1">255</th>
              <th align="left" colspan="1" rowspan="1">Reserved</th>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-6.2-3">
          Initial values for the "ZONEVERSION TYPE Values" registry are given below;
          future assignments in the 1-245 values range are to be made through
	  Specification Required <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.
          Assignments consist of a TYPE value as an unsigned 8-bit integer recorded in decimal,
          a Mnemonic name as an uppercase ASCII string with a maximum length of 15 characters,
          and the required document reference.</t>
        <table align="center" pn="table-3">
          <name slugifiedName="name-zoneversion-type-values-regi">ZONEVERSION TYPE Values Registry</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">ZONEVERSION TYPE</th>
              <th align="left" colspan="1" rowspan="1">Mnemonic</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <th align="left" colspan="1" rowspan="1">0</th>
              <th align="left" colspan="1" rowspan="1">SOA-SERIAL</th>
              <th align="left" colspan="1" rowspan="1">RFC 9660</th>
            </tr>
            <tr>
              <th align="left" colspan="1" rowspan="1">1-245</th>
              <th align="left" colspan="1" rowspan="1">Unassigned</th>
              <th align="left" colspan="1" rowspan="1"/>
            </tr>
            <tr>
              <th align="left" colspan="1" rowspan="1">246-254</th>
              <th align="left" colspan="1" rowspan="1">Reserved for Private Use</th>
              <th align="left" colspan="1" rowspan="1">RFC 9660</th>
            </tr>
            <tr>
              <th align="left" colspan="1" rowspan="1">255</th>
              <th align="left" colspan="1" rowspan="1">Reserved</th>
              <th align="left" colspan="1" rowspan="1">RFC 9660</th>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-6.2-5">The change controller for this registry is IETF.</t>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-6.2.1">
          <name slugifiedName="name-designated-expert-review-di">Designated Expert Review Directives</name>
          <t indent="0" pn="section-6.2.1-1">The allocation procedure for new code points in the "ZONEVERSION TYPE Values" registry is Specification Required, thus review is required by a designated expert as stated in <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.</t>
          <t indent="0" pn="section-6.2.1-2">When evaluating requests, the expert should consider the following:</t>
          <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6.2.1-3">
            <li pn="section-6.2.1-3.1">Duplication of code point allocations should be avoided.</li>
            <li pn="section-6.2.1-3.2">A Presentation Format section should be provided
                with a clear code point mnemonic.</li>
            <li pn="section-6.2.1-3.3">The referenced document and stated use of the new code point should be appropriate for the intended use of a ZONEVERSION TYPE assignment.
                In particular, the reference should state clear instructions for implementers about the syntax and semantic of the data.
                Also, the length of the data must have proper limits.</li>
          </ul>
          <t indent="0" pn="section-6.2.1-4">The expert reviewing the request <bcp14>MUST</bcp14> respond within 10 business days.</t>
        </section>
      </section>
    </section>
    <section anchor="Security" numbered="true" removeInRFC="false" toc="include" pn="section-7">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-7-1">The EDNS extension data is not covered by RRSIG records,
        so there's no way to verify its authenticity nor integrity using DNSSEC,
        and it could theoretically be tampered with by a person in the middle if the transport is made by insecure means.
      Caution should be taken to use the EDNS ZONEVERSION data for any means besides troubleshooting and debugging.</t>
      <t indent="0" pn="section-7-2">If there's a need to certify the trustworthiness of ZONEVERSION,
        it will be necessary to use an encrypted and authenticated DNS transport,
        a transaction signature (TSIG) <xref target="RFC8945" format="default" sectionFormat="of" derivedContent="RFC8945"/>, or SIG(0) <xref target="RFC2931" format="default" sectionFormat="of" derivedContent="RFC2931"/>.</t>
      <t indent="0" pn="section-7-3">If there's a need to authenticate the data origin for the ZONEVERSION value,
        an answer with the SOA-SERIAL type as defined above could be compared to a separate regular SOA query with a DO flag,
        whose answer shall be DNSSEC signed.
        Since these are separate queries, the caveats about loose coherency already stated in
        the <xref target="intro" format="title" sectionFormat="of" derivedContent="Introduction"/> (<xref target="intro" format="default" sectionFormat="of" derivedContent="Section 1"/>) would apply.</t>
      <t indent="0" pn="section-7-4">With the SOA-SERIAL type defined above, there's no risk on disclosure of private information,
        as the SERIAL of the SOA record is already publicly available.</t>
      <t indent="0" pn="section-7-5">Please note that the ZONEVERSION option cannot be used for checking the correctness of an entire zone in a server.
        For such cases,
        the ZONEMD record <xref target="RFC8976" format="default" sectionFormat="of" derivedContent="RFC8976"/> might be better suited for such a task.
        ZONEVERSION can help identify and correlate a specific answer with a version of a zone,
        but it has no special integrity or verification function besides a normal field value inside a zone,
        as stated above.</t>
    </section>
  </middle>
  <back>
    <references pn="section-8">
      <name slugifiedName="name-normative-references">Normative References</name>
      <reference anchor="RFC1034" target="https://www.rfc-editor.org/info/rfc1034" quoteTitle="true" derivedAnchor="RFC1034">
        <front>
          <title>Domain names - concepts and facilities</title>
          <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
          <date month="November" year="1987"/>
          <abstract>
            <t indent="0">This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="13"/>
        <seriesInfo name="RFC" value="1034"/>
        <seriesInfo name="DOI" value="10.17487/RFC1034"/>
      </reference>
      <reference anchor="RFC1035" target="https://www.rfc-editor.org/info/rfc1035" quoteTitle="true" derivedAnchor="RFC1035">
        <front>
          <title>Domain names - implementation and specification</title>
          <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
          <date month="November" year="1987"/>
          <abstract>
            <t indent="0">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="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC6891" target="https://www.rfc-editor.org/info/rfc6891" quoteTitle="true" derivedAnchor="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 indent="0">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 indent="0">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="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author fullname="M. Cotton" initials="M." surname="Cotton"/>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <author fullname="T. Narten" initials="T." surname="Narten"/>
          <date month="June" year="2017"/>
          <abstract>
            <t indent="0">Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
            <t indent="0">To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
            <t indent="0">This is the third edition of this document; it obsoletes RFC 5226.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
        <seriesInfo name="DOI" value="10.17487/RFC8126"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="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 indent="0">RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <references pn="section-9">
      <name slugifiedName="name-informative-references">Informative References</name>
      <reference anchor="ImplRef" target="https://github.com/huguei/rrserial" quoteTitle="true" derivedAnchor="ImplRef">
        <front>
          <title>Zoneversion Implementations</title>
          <author>
            <organization showOnFrontPage="true"/>
          </author>
          <date month="August" year="2023"/>
        </front>
        <refcontent>commit f5f68a0</refcontent>
      </reference>
      <reference anchor="RFC2931" target="https://www.rfc-editor.org/info/rfc2931" quoteTitle="true" derivedAnchor="RFC2931">
        <front>
          <title>DNS Request and Transaction Signatures ( SIG(0)s )</title>
          <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
          <date month="September" year="2000"/>
          <abstract>
            <t indent="0">This document describes the minor but non-interoperable changes in Request and Transaction signature resource records ( SIG(0)s ) that implementation experience has deemed necessary. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2931"/>
        <seriesInfo name="DOI" value="10.17487/RFC2931"/>
      </reference>
      <reference anchor="RFC3254" target="https://www.rfc-editor.org/info/rfc3254" quoteTitle="true" derivedAnchor="RFC3254">
        <front>
          <title>Definitions for talking about directories</title>
          <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
          <date month="April" year="2002"/>
          <abstract>
            <t indent="0">When discussing systems for making information accessible through the Internet in standardized ways, it may be useful if the people who are discussing it have a common understanding of the terms they use. For example, a reference to this document would give one the power to agree that the DNS (Domain Name System) is a global lookup repository with perimeter integrity and loose, converging consistency. On the other hand, a LDAP (Lightweight Directory Access Protocol) directory server is a local, centralized repository with both lookup and search capability. This document discusses one group of such systems which is known under the term, "directories". This memo provides information for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3254"/>
        <seriesInfo name="DOI" value="10.17487/RFC3254"/>
      </reference>
      <reference anchor="RFC4786" target="https://www.rfc-editor.org/info/rfc4786" quoteTitle="true" derivedAnchor="RFC4786">
        <front>
          <title>Operation of Anycast Services</title>
          <author fullname="J. Abley" initials="J." surname="Abley"/>
          <author fullname="K. Lindqvist" initials="K." surname="Lindqvist"/>
          <date month="December" year="2006"/>
          <abstract>
            <t indent="0">As the Internet has grown, and as systems and networked services within enterprises have become more pervasive, many services with high availability requirements have emerged. These requirements have increased the demands on the reliability of the infrastructure on which those services rely.</t>
            <t indent="0">Various techniques have been employed to increase the availability of services deployed on the Internet. This document presents commentary and recommendations for distribution of services using anycast. 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="126"/>
        <seriesInfo name="RFC" value="4786"/>
        <seriesInfo name="DOI" value="10.17487/RFC4786"/>
      </reference>
      <reference anchor="RFC5001" target="https://www.rfc-editor.org/info/rfc5001" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC8945" target="https://www.rfc-editor.org/info/rfc8945" quoteTitle="true" derivedAnchor="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 indent="0">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 indent="0">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 indent="0">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="RFC8976" target="https://www.rfc-editor.org/info/rfc8976" quoteTitle="true" derivedAnchor="RFC8976">
        <front>
          <title>Message Digest for DNS Zones</title>
          <author fullname="D. Wessels" initials="D." surname="Wessels"/>
          <author fullname="P. Barber" initials="P." surname="Barber"/>
          <author fullname="M. Weinberg" initials="M." surname="Weinberg"/>
          <author fullname="W. Kumari" initials="W." surname="Kumari"/>
          <author fullname="W. Hardaker" initials="W." surname="Hardaker"/>
          <date month="February" year="2021"/>
          <abstract>
            <t indent="0">This document describes a protocol and new DNS Resource Record that provides a cryptographic message digest over DNS zone data at rest. The ZONEMD Resource Record conveys the digest data in the zone itself. When used in combination with DNSSEC, ZONEMD allows recipients to verify the zone contents for data integrity and origin authenticity. This provides assurance that received zone data matches published data, regardless of how the zone data has been transmitted and received. When used without DNSSEC, ZONEMD functions as a checksum, guarding only against unintentional changes.</t>
            <t indent="0">ZONEMD does not replace DNSSEC: DNSSEC protects individual RRsets (DNS data with fine granularity), whereas ZONEMD protects a zone's data as a whole, whether consumed by authoritative name servers, recursive name servers, or any other applications.</t>
            <t indent="0">As specified herein, ZONEMD is impractical for large, dynamic zones due to the time and resources required for digest calculation. However, the ZONEMD record is extensible so that new digest schemes may be added in the future to support large, dynamic zones.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8976"/>
        <seriesInfo name="DOI" value="10.17487/RFC8976"/>
      </reference>
      <reference anchor="RFC9499" target="https://www.rfc-editor.org/info/rfc9499" quoteTitle="true" derivedAnchor="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 indent="0">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 indent="0">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>
    </references>
    <section anchor="implementationcons" numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-implementation-consideratio">Implementation Considerations</name>
      <t indent="0" pn="section-appendix.a-1">With very few
exceptions, EDNS(0) option values in a response
are independent of the queried name. This is not the case for ZONEVERSION, so
its implementation may be more or less difficult, depending on how EDNS(0)
options are handled in the name server.
      </t>
    </section>
    <section anchor="implementation" numbered="true" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-implementation-references">Implementation References</name>
      <t indent="0" pn="section-appendix.b-1">There is a patched NSD server (version 4.7.0) with support for ZONEVERSION as well as live test servers installed for compliance tests. Also, there is a client command "dig" with added zoneversion support, along with test libraries in Perl, Python, and Go. See <xref target="ImplRef" format="default" sectionFormat="of" derivedContent="ImplRef"/> for more information.</t>
    </section>
    <section anchor="Acknowledgements" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.c-1">The authors are thankful for all the support and comments made in the DNSOP Working Group mailing list,
        chats, and discussions.
        A special thanks for suggestions to generalize the option using a registry of types from
        <contact fullname="Petr Špaček"/> and <contact fullname="Florian Obser"/>,
        suggestions for implementation from
        <contact fullname="Stéphane Bortzmeyer"/>,
        clarifications on security from <contact fullname="George Michaelson"/>,
        zone name disambiguation from <contact fullname="Joe Abley"/> and <contact fullname="Brian Dickson"/>,
        and reviews from <contact fullname="Tim Wicinski"/> and <contact fullname="Peter Thomassen"/>.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.d">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Hugo Salgado" initials="H." surname="Salgado">
        <organization showOnFrontPage="true">NIC Chile</organization>
        <address>
          <postal>
            <street>Miraflores 222, piso 14</street>
            <city>Santiago</city>
            <code>CP 8320198</code>
            <country>Chile</country>
          </postal>
          <phone>+56 2 29407700</phone>
          <email>hsalgado@nic.cl</email>
        </address>
      </author>
      <author fullname="Mauricio Vergara Ereche" initials="M." surname="Vergara">
        <organization showOnFrontPage="true">DigitalOcean</organization>
        <address>
          <postal>
            <street>101 6th Ave</street>
            <city>New York</city>
            <region>NY</region>
            <code>10013</code>
            <country>United States of America</country>
          </postal>
          <email>mvergara@digitalocean.com</email>
        </address>
      </author>
      <author fullname="Duane Wessels" initials="D." surname="Wessels">
        <organization showOnFrontPage="true">Verisign</organization>
        <address>
          <postal>
            <street>12061 Bluemont Way</street>
            <city>Reston</city>
            <region>VA</region>
            <code>20190</code>
            <country>United States of America</country>
          </postal>
          <phone>+1 703 948-3200</phone>
          <email>dwessels@verisign.com</email>
          <uri>https://verisign.com</uri>
        </address>
      </author>
    </section>
  </back>
</rfc>
