| rfc8767xml2.original.xml | rfc8767.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="us-ascii"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse | |||
| <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.9 --> | nsus="true" docName="draft-ietf-dnsop-serve-stale-10" indexInclude="true" ipr="t | |||
| rust200902" number="8767" prepTime="2020-03-31T14:58:06" scripts="Common,Latin" | ||||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="tr | |||
| <!ENTITY RFC1035 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ue" updates="1034, 1035, 2181" xml:lang="en"> | |||
| nce.RFC.1035.xml"> | <link href="https://datatracker.ietf.org/doc/draft-ietf-dnsop-serve-stale-10" | |||
| <!ENTITY RFC2181 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | rel="prev"/> | |||
| nce.RFC.2181.xml"> | <link href="https://dx.doi.org/10.17487/rfc8767" rel="alternate"/> | |||
| <!ENTITY RFC1034 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | <link href="urn:issn:2070-1721" rel="alternate"/> | |||
| nce.RFC.1034.xml"> | ||||
| <!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.2119.xml"> | ||||
| <!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.8174.xml"> | ||||
| <!ENTITY RFC2308 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.2308.xml"> | ||||
| <!ENTITY RFC8499 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.8499.xml"> | ||||
| <!ENTITY RFC6672 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.6672.xml"> | ||||
| ]> | ||||
| <?rfc toc="yes"?> | ||||
| <?rfc symrefs="yes"?> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <rfc ipr="trust200902" docName="draft-ietf-dnsop-serve-stale-10" category="std" | ||||
| updates="1034, 1035, 2181"> | ||||
| <front> | <front> | |||
| <title abbrev="DNS Serve Stale">Serving Stale Data to Improve DNS Resiliency | <title abbrev="DNS Serve-Stale">Serving Stale Data to Improve DNS Resiliency | |||
| </title> | </title> | |||
| <seriesInfo name="RFC" value="8767" stream="IETF"/> | ||||
| <author initials="D.C." surname="Lawrence" fullname="David C Lawrence"> | <author initials="D." surname="Lawrence" fullname="David C Lawrence"> | |||
| <organization>Oracle</organization> | <organization showOnFrontPage="true">Oracle</organization> | |||
| <address> | <address> | |||
| <email>tale@dd.org</email> | <email>tale@dd.org</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="W." surname="Kumari" fullname="Warren "Ace" Kuma ri"> | <author initials="W." surname="Kumari" fullname="Warren "Ace" Kuma ri"> | |||
| <organization>Google</organization> | <organization showOnFrontPage="true">Google</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>1600 Amphitheatre Parkway</street> | <street>1600 Amphitheatre Parkway</street> | |||
| <city>Mountain View</city> | <city>Mountain View</city> | |||
| <code>CA 94043</code> | <region>CA</region> | |||
| <country>USA</country> | <code>94043</code> | |||
| <country>United States of America</country> | ||||
| </postal> | </postal> | |||
| <email>warren@kumari.net</email> | <email>warren@kumari.net</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="P." surname="Sood" fullname="Puneet Sood"> | <author initials="P." surname="Sood" fullname="Puneet Sood"> | |||
| <organization>Google</organization> | <organization showOnFrontPage="true">Google</organization> | |||
| <address> | <address> | |||
| <email>puneets@google.com</email> | <email>puneets@google.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date month="03" year="2020"/> | ||||
| <date year="2019" month="December" day="09"/> | <keyword>DNS</keyword> | |||
| <keyword>DDoS</keyword> | ||||
| <area>Internet</area> | <keyword>Resiliency</keyword> | |||
| <workgroup>DNSOP Working Group</workgroup> | <keyword>Denial-of-Service</keyword> | |||
| <keyword>Internet-Draft</keyword> | <keyword>Expired</keyword> | |||
| <abstract pn="section-abstract"> | ||||
| <abstract> | <t pn="section-abstract-1">This document defines a method (serve-stale) fo | |||
| r recursive resolvers to | ||||
| <t>This draft defines a method (serve-stale) for recursive resolvers to | ||||
| use stale DNS data to avoid outages when authoritative nameservers | use stale DNS data to avoid outages when authoritative nameservers | |||
| cannot be reached to refresh expired data. One of the motivations | cannot be reached to refresh expired data. One of the motivations | |||
| for serve-stale is to make the DNS more resilient to DoS attacks, | for serve-stale is to make the DNS more resilient to DoS attacks | |||
| and thereby make them less attractive as an attack vector. | and thereby make them less attractive as an attack vector. | |||
| This document updates the definitions of TTL from RFC 1034 | This document updates the definitions of TTL from RFCs 1034 | |||
| and RFC 1035 so that data can be kept in the cache beyond | and 1035 so that data can be kept in the cache beyond | |||
| the TTL expiry, updates RFC 2181 by interpreting | the TTL expiry; it also updates RFC 2181 by interpreting | |||
| values with the high order bit set as being positive, rather | values with the high-order bit set as being positive, rather | |||
| than 0, and suggests a cap of 7 days.</t> | than 0, and suggests a cap of 7 days.</t> | |||
| </abstract> | </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 pn="section-boilerplate.1-1"> | ||||
| This is an Internet Standards Track document. | ||||
| </t> | ||||
| <t 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 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/rfc8767" brackets="non | ||||
| e"/>. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="copyright" numbered="false" removeInRFC="false" toc="excl | ||||
| ude" pn="section-boilerplate.2"> | ||||
| <name slugifiedName="name-copyright-notice">Copyright Notice</name> | ||||
| <t pn="section-boilerplate.2-1"> | ||||
| Copyright (c) 2020 IETF Trust and the persons identified as the | ||||
| document authors. All rights reserved. | ||||
| </t> | ||||
| <t 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 Simplified BSD License text as described in | ||||
| Section 4.e of the Trust Legal Provisions and are provided without | ||||
| warranty as described in the Simplified BSD License. | ||||
| </t> | ||||
| </section> | ||||
| </boilerplate> | ||||
| <toc> | ||||
| <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p | ||||
| n="section-toc.1"> | ||||
| <name slugifiedName="name-table-of-contents">Table of Contents</name> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to | ||||
| c.1-1"> | ||||
| <li pn="section-toc.1-1.1"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent | ||||
| ="1" format="counter" sectionFormat="of" target="section-1"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-introduction">Introductio | ||||
| n</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.2"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent | ||||
| ="2" format="counter" sectionFormat="of" target="section-2"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-terminology">Terminology< | ||||
| /xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.3"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent | ||||
| ="3" format="counter" sectionFormat="of" target="section-3"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-background">Background</x | ||||
| ref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.4"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.4.1"><xref derivedContent | ||||
| ="4" format="counter" sectionFormat="of" target="section-4"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-standards-action">Standar | ||||
| ds Action</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.5"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.5.1"><xref derivedContent | ||||
| ="5" format="counter" sectionFormat="of" target="section-5"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-example-method">Example M | ||||
| ethod</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.6"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.6.1"><xref derivedContent | ||||
| ="6" format="counter" sectionFormat="of" target="section-6"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-implementation-considerat | ||||
| io">Implementation Considerations</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.7"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.7.1"><xref derivedContent | ||||
| ="7" format="counter" sectionFormat="of" target="section-7"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-implementation-caveats">I | ||||
| mplementation Caveats</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.8"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.8.1"><xref derivedContent | ||||
| ="8" format="counter" sectionFormat="of" target="section-8"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-implementation-status">Im | ||||
| plementation Status</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.9"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.9.1"><xref derivedContent | ||||
| ="9" format="counter" sectionFormat="of" target="section-9"/>. <xref derivedCon | ||||
| tent="" format="title" sectionFormat="of" target="name-edns-option">EDNS Option< | ||||
| /xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.10"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.10.1"><xref derivedConten | ||||
| t="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedC | ||||
| ontent="" format="title" sectionFormat="of" target="name-security-considerations | ||||
| ">Security Considerations</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.11"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.11.1"><xref derivedConten | ||||
| t="11" format="counter" sectionFormat="of" target="section-11"/>. <xref derivedC | ||||
| ontent="" format="title" sectionFormat="of" target="name-privacy-considerations" | ||||
| >Privacy Considerations</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.12"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.12.1"><xref derivedConten | ||||
| t="12" format="counter" sectionFormat="of" target="section-12"/>. <xref derivedC | ||||
| ontent="" format="title" sectionFormat="of" target="name-nat-considerations">NAT | ||||
| Considerations</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.13"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.13.1"><xref derivedConten | ||||
| t="13" format="counter" sectionFormat="of" target="section-13"/>. <xref derivedC | ||||
| ontent="" format="title" sectionFormat="of" target="name-iana-considerations">IA | ||||
| NA Considerations</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.14"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.14.1"><xref derivedConten | ||||
| t="14" format="counter" sectionFormat="of" target="section-14"/>. <xref derivedC | ||||
| ontent="" format="title" sectionFormat="of" target="name-references">References< | ||||
| /xref></t> | ||||
| <ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
| n-toc.1-1.14.2"> | ||||
| <li pn="section-toc.1-1.14.2.1"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.14.2.1.1"><xref deriv | ||||
| edContent="14.1" format="counter" sectionFormat="of" target="section-14.1"/>. < | ||||
| xref derivedContent="" format="title" sectionFormat="of" target="name-normative- | ||||
| references">Normative References</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.14.2.2"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.14.2.2.1"><xref deriv | ||||
| edContent="14.2" format="counter" sectionFormat="of" target="section-14.2"/>. < | ||||
| xref derivedContent="" format="title" sectionFormat="of" target="name-informativ | ||||
| e-references">Informative References</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.15"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.15.1"><xref derivedConten | ||||
| t="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derived | ||||
| Content="" format="title" sectionFormat="of" target="name-acknowledgements">Ackn | ||||
| owledgements</xref></t> | ||||
| </li> | ||||
| <li pn="section-toc.1-1.16"> | ||||
| <t keepWithNext="true" pn="section-toc.1-1.16.1"><xref derivedConten | ||||
| t="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derived | ||||
| Content="" format="title" sectionFormat="of" target="name-authors-addresses">Aut | ||||
| hors' Addresses</xref></t> | ||||
| </li> | ||||
| </ul> | ||||
| </section> | ||||
| </toc> | ||||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="introduction" numbered="true" toc="include" removeInRFC="fa | ||||
| <section anchor="introduction" title="Introduction"> | lse" pn="section-1"> | |||
| <name slugifiedName="name-introduction">Introduction</name> | ||||
| <t>Traditionally the Time To Live (TTL) of a DNS resource record has been | <t pn="section-1-1">Traditionally, the Time To Live (TTL) of a DNS Resourc | |||
| e Record (RR) has been | ||||
| understood to represent the maximum number of seconds that a record | understood to represent the maximum number of seconds that a record | |||
| can be used before it must be discarded, based on its description and | can be used before it must be discarded, based on its description and | |||
| usage in <xref target="RFC1035"/> and clarifications in <xref target="RFC2181"/> | usage in <xref target="RFC1035" format="default" sectionFormat="of" derivedConte | |||
| .</t> | nt="RFC1035"/> and clarifications in <xref target="RFC2181" format="default" sec | |||
| tionFormat="of" derivedContent="RFC2181"/>.</t> | ||||
| <t>This document expands the definition of the TTL | <t pn="section-1-2">This document expands the definition of the TTL | |||
| to explicitly allow for expired data to be used in the exceptional | to explicitly allow for expired data to be used in the exceptional | |||
| circumstance that a recursive resolver is unable to refresh the | circumstance that a recursive resolver is unable to refresh the | |||
| information. It is predicated on the observation that authoritative | information. It is predicated on the observation that authoritative | |||
| answer unavailability can cause outages even when the underlying data | answer unavailability can cause outages even when the underlying data | |||
| those servers would return is typically unchanged.</t> | those servers would return is typically unchanged.</t> | |||
| <t pn="section-1-3">We describe a method below for this use of stale data, | ||||
| <t>We describe a method below for this use of stale data, balancing the | balancing the | |||
| competing needs of resiliency and freshness.</t> | competing needs of resiliency and freshness.</t> | |||
| <t pn="section-1-4">This document updates the definitions of TTL from <xre | ||||
| <t>This document updates the definitions of TTL from <xref target="RFC1034"/> | f target="RFC1034" format="default" sectionFormat="of" derivedContent="RFC1034"/ | |||
| and <xref target="RFC1035"/> so that data can be kept in the cache beyond | > | |||
| the TTL expiry, and also updates <xref target="RFC2181"/> by interpreting | and <xref target="RFC1035" format="default" sectionFormat="of" derivedContent="R | |||
| values with the high order bit set as being positive, rather | FC1035"/> so that data can be kept in the cache beyond | |||
| the TTL expiry; it also updates <xref target="RFC2181" format="default" sectionF | ||||
| ormat="of" derivedContent="RFC2181"/> by interpreting | ||||
| values with the high-order bit set as being positive, rather | ||||
| than 0, and also suggests a cap of 7 days.</t> | than 0, and also suggests a cap of 7 days.</t> | |||
| </section> | ||||
| </section> | <section anchor="terminology" numbered="true" toc="include" removeInRFC="fal | |||
| <section anchor="terminology" title="Terminology"> | se" pn="section-2"> | |||
| <name slugifiedName="name-terminology">Terminology</name> | ||||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t pn="section-2-1">The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT< | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | /bcp14>", | |||
| "OPTIONAL" in this document are to be interpreted as described in | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
| BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, th | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
| ey appear in all | "<bcp14>SHOULD NOT</bcp14>", | |||
| capitals, as shown here.</t> | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document | ||||
| <t>For a glossary of DNS terms, please see <xref target="RFC8499"/>.</t> | are to be interpreted as described in BCP 14 | |||
| <xref target="RFC2119" format="default" sectionFormat="of" derivedContent | ||||
| </section> | ="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedC | |||
| <section anchor="background" title="Background"> | ontent="RFC8174"/> when, and only | |||
| when, they appear in all capitals, as shown here.</t> | ||||
| <t>There are a number of reasons why an authoritative server may become | <t pn="section-2-2">For a glossary of DNS terms, please see <xref target=" | |||
| unreachable, including Denial of Service (DoS) attacks, network | RFC8499" format="default" sectionFormat="of" derivedContent="RFC8499"/>.</t> | |||
| </section> | ||||
| <section anchor="background" numbered="true" toc="include" removeInRFC="fals | ||||
| e" pn="section-3"> | ||||
| <name slugifiedName="name-background">Background</name> | ||||
| <t pn="section-3-1">There are a number of reasons why an authoritative ser | ||||
| ver may become | ||||
| unreachable, including Denial-of-Service (DoS) attacks, network | ||||
| issues, and so on. If a recursive server is unable to contact the | issues, and so on. If a recursive server is unable to contact the | |||
| authoritative servers for a query but still has relevant data that has | authoritative servers for a query but still has relevant data that has | |||
| aged past its TTL, that information can still be useful for generating | aged past its TTL, that information can still be useful for generating | |||
| an answer under the metaphorical assumption that "stale bread is | an answer under the metaphorical assumption that "stale bread is | |||
| better than no bread."</t> | better than no bread."</t> | |||
| <t pn="section-3-2"><xref target="RFC1035" sectionFormat="comma" section=" | ||||
| <t><xref target="RFC1035"/> Section 3.2.1 says that the TTL "specifies the time | 3.2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc1035#section- | |||
| 3.2.1" derivedContent="RFC1035"/> | ||||
| says that the TTL "specifies the time | ||||
| interval that the resource record may be cached before the source of | interval that the resource record may be cached before the source of | |||
| the information should again be consulted", and Section 4.1.3 further | the information should again be consulted." <xref target="RFC1035" sectionFormat | |||
| says the TTL, "specifies the time interval (in seconds) that the | ="comma" section="4.1.3" format="default" derivedLink="https://rfc-editor.org/rf | |||
| c/rfc1035#section-4.1.3" derivedContent="RFC1035"/> further | ||||
| says that the TTL "specifies the time interval (in seconds) that the | ||||
| resource record may be cached before it should be discarded."</t> | resource record may be cached before it should be discarded."</t> | |||
| <t pn="section-3-3">A natural English interpretation of these remarks woul | ||||
| <t>A natural English interpretation of these remarks would seem to be | d seem to be | |||
| clear enough that records past their TTL expiration must not be used. | clear enough that records past their TTL expiration must not be used. | |||
| However, <xref target="RFC1035"/> predates the more rigorous terminology of | However, <xref target="RFC1035" format="default" sectionFormat="of" derivedConte | |||
| <xref target="RFC2119"/> which softened the interpretation of "may" and "should" | nt="RFC1035"/> predates the more rigorous terminology of | |||
| .</t> | <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC21 | |||
| 19"/>, which softened the interpretation of "may" and "should".</t> | ||||
| <t><xref target="RFC2181"/> aimed to provide "the precise definition of the Time | <t pn="section-3-4"><xref target="RFC2181" format="default" sectionFormat= | |||
| to | "of" derivedContent="RFC2181"/> aimed to provide "the | |||
| Live", but in Section 8 was mostly concerned with the numeric range of | precise definition of the Time to | |||
| Live," but <xref target="RFC2181" sectionFormat="of" section="8" format="default | ||||
| " derivedLink="https://rfc-editor.org/rfc/rfc2181#section-8" derivedContent="RFC | ||||
| 2181"/> | ||||
| was mostly concerned with the numeric range of | ||||
| values rather than data expiration behavior. It does, however, close | values rather than data expiration behavior. It does, however, close | |||
| that section by noting, "The TTL specifies a maximum time to live, not | that section by noting, "The TTL specifies a maximum time to live, not | |||
| a mandatory time to live." This wording again does not contain BCP 14 | a mandatory time to live." This wording again does not contain BCP 14 | |||
| <xref target="RFC2119"/> key words, but does convey the natural language | key words <xref target="RFC2119" format="default" sectionFormat="of" derivedCont ent="RFC2119"/>, but it does convey the natural language | |||
| connotation that data becomes unusable past TTL expiry.</t> | connotation that data becomes unusable past TTL expiry.</t> | |||
| <t pn="section-3-5">As of the time of this writing, several large-scale op | ||||
| <t>As of the time of this writing, several large-scale operators use stale | erators use stale | |||
| data for answers in some way. A number of recursive resolver packages, | data for answers in some way. | |||
| including BIND, Knot, OpenDNS, and Unbound, provide options to use stale data. | A number of recursive resolver packages, | |||
| Apple MacOS can also use stale data as part of the Happy Eyeballs algorithms in | including BIND, Knot Resolver, OpenDNS, and Unbound, provide options to use stal | |||
| e data. | ||||
| Apple macOS can also use stale data as part of the Happy Eyeballs algorithms in | ||||
| mDNSResponder. The collective operational experience is that using stale data | mDNSResponder. The collective operational experience is that using stale data | |||
| can provide significant benefit with minimal downside.</t> | can provide significant benefit with minimal downside.</t> | |||
| </section> | ||||
| </section> | <section anchor="standards-action" numbered="true" toc="include" removeInRFC | |||
| <section anchor="standards-action" title="Standards Action"> | ="false" pn="section-4"> | |||
| <name slugifiedName="name-standards-action">Standards Action</name> | ||||
| <t>The definition of TTL in <xref target="RFC1035"/> Sections 3.2.1 and 4.1.3 is | <t pn="section-4-1">The definition of TTL in Sections <xref target="RFC103 | |||
| 5" section="3.2.1" sectionFormat="bare" format="default" derivedLink="https://rf | ||||
| c-editor.org/rfc/rfc1035#section-3.2.1" derivedContent="RFC1035"/> and <xref tar | ||||
| get="RFC1035" section="4.1.3" sectionFormat="bare" format="default" derivedLink= | ||||
| "https://rfc-editor.org/rfc/rfc1035#section-4.1.3" derivedContent="RFC1035"/> of | ||||
| <xref target="RFC1035" format="default" sectionFormat="of" derivedContent="RFC1 | ||||
| 035"/> is | ||||
| amended to read:</t> | amended to read:</t> | |||
| <dl newline="false" spacing="normal" indent="5" pn="section-4-2"> | ||||
| <t><list style="hanging"> | <dt pn="section-4-2.1">TTL</dt> | |||
| <t hangText='TTL'> | <dd pn="section-4-2.2"> | |||
| a 32-bit unsigned integer number of seconds that specifies the | a 32-bit unsigned integer number of seconds that specifies the | |||
| duration that the resource record MAY be cached before the source of | duration that the resource record <bcp14>MAY</bcp14> be cached before the source | |||
| the information MUST again be consulted. Zero values are interpreted | of | |||
| the information <bcp14>MUST</bcp14> again be consulted. Zero values are interpr | ||||
| eted | ||||
| to mean that the RR can only be used for the transaction in progress, | to mean that the RR can only be used for the transaction in progress, | |||
| and should not be cached. Values SHOULD be capped on the orders of | and should not be cached. Values <bcp14>SHOULD</bcp14> be capped on the order o | |||
| days to weeks, with a recommended cap of 604,800 seconds (seven days). If the | f | |||
| days to weeks, with a recommended cap of 604,800 seconds (7 days). If the | ||||
| data is unable to be authoritatively refreshed when the TTL expires, | data is unable to be authoritatively refreshed when the TTL expires, | |||
| the record MAY be used as though it is unexpired. See [RFC Editor: | the record <bcp14>MAY</bcp14> be used as though it is unexpired. See Sections <x | |||
| replace by RFC number] <xref target="example-method"/> | ref target="example-method" format="counter" sectionFormat="of" derivedContent=" | |||
| and <xref target="implementation-considerations"/> for details.</t> | 5"/> | |||
| </list></t> | and <xref target="implementation-considerations" format="counter" sectionFormat= | |||
| "of" derivedContent="6"/> of | ||||
| <t>Interpreting values which have the high-order bit set as being | [RFC8767] for details.</dd> | |||
| positive, rather than 0, is a change from <xref target="RFC2181"/>, the rational | </dl> | |||
| e | <t pn="section-4-3">Interpreting values that have the high-order bit set a | |||
| for which is explained in <xref target="implementation-considerations"/>. | s being | |||
| Suggesting a cap of seven days, rather than the 68 years allowed by | positive, rather than 0, is a change from <xref target="RFC2181" format="default | |||
| <xref target="RFC2181"/>, reflects the current practice of major modern DNS | " sectionFormat="of" derivedContent="RFC2181"/>, the rationale | |||
| for which is explained in <xref target="implementation-considerations" format="d | ||||
| efault" sectionFormat="of" derivedContent="Section 6"/>. | ||||
| Suggesting a cap of 7 days, rather than the 68 years allowed by the full | ||||
| 31 bits of | ||||
| <xref target="RFC2181" sectionFormat="of" section="8" format="default" derivedLi | ||||
| nk="https://rfc-editor.org/rfc/rfc2181#section-8" derivedContent="RFC2181"/>, re | ||||
| flects the current practice of major modern DNS | ||||
| resolvers.</t> | resolvers.</t> | |||
| <t pn="section-4-4">When returning a response containing stale records, a | ||||
| <t>When returning a response containing stale records, a recursive | recursive | |||
| resolver MUST set the TTL of each expired record in the message to a | resolver <bcp14>MUST</bcp14> set the TTL of each expired record in the message t | |||
| value greater than 0, with a RECOMMENDED value of 30 seconds. See | o a | |||
| <xref target="implementation-considerations"/> for explanation.</t> | value greater than 0, with a <bcp14>RECOMMENDED</bcp14> value of 30 seconds. See | |||
| <xref target="implementation-considerations" format="default" sectionFormat="of" | ||||
| <t>Answers from authoritative servers that have a DNS Response Code of | derivedContent="Section 6"/> for explanation.</t> | |||
| either 0 (NoError) or 3 (NXDomain) and the Authoritative Answers (AA) | <t pn="section-4-5">Answers from authoritative servers that have a DNS res | |||
| bit set MUST be considered to have refreshed the data at the resolver. | ponse code of | |||
| either 0 (NoError) or 3 (NXDomain) and the Authoritative Answer (AA) | ||||
| bit set <bcp14>MUST</bcp14> be considered to have refreshed the data at the reso | ||||
| lver. | ||||
| Answers from authoritative servers that have any other response code | Answers from authoritative servers that have any other response code | |||
| SHOULD be considered a failure to refresh the data and therefore leave | <bcp14>SHOULD</bcp14> be considered a failure to refresh the data and therefore | |||
| any previous state intact. See <xref target="implementation-considerations"/> fo | leave | |||
| r | any previous state intact. See <xref target="implementation-considerations" form | |||
| at="default" sectionFormat="of" derivedContent="Section 6"/> for | ||||
| a discussion.</t> | a discussion.</t> | |||
| </section> | ||||
| </section> | <section anchor="example-method" numbered="true" toc="include" removeInRFC=" | |||
| <section anchor="example-method" title="Example Method"> | false" pn="section-5"> | |||
| <name slugifiedName="name-example-method">Example Method</name> | ||||
| <t>There is more than one way a recursive resolver could | <t pn="section-5-1">There is more than one way a recursive resolver could | |||
| responsibly implement this resiliency feature while still respecting | responsibly implement this resiliency feature while still respecting | |||
| the intent of the TTL as a signal for when data is to be refreshed.</t> | the intent of the TTL as a signal for when data is to be refreshed.</t> | |||
| <t pn="section-5-2">In this example method, four notable timers drive cons | ||||
| <t>In this example method four notable timers drive considerations for | iderations for | |||
| the use of stale data:</t> | the use of stale data:</t> | |||
| <ul spacing="normal" bare="false" empty="false" pn="section-5-3"> | ||||
| <t><list style="symbols"> | <li pn="section-5-3.1">A client response timer, which is the maximum amo | |||
| <t>A client response timer, which is the maximum amount of time a | unt of time a | |||
| recursive resolver should allow between the receipt of a resolution | recursive resolver should allow between the receipt of a resolution | |||
| request and sending its response.</t> | request and sending its response.</li> | |||
| <t>A query resolution timer, which caps the total amount of time a | <li pn="section-5-3.2">A query resolution timer, which caps the total am | |||
| recursive resolver spends processing the query.</t> | ount of time a | |||
| <t>A failure recheck timer, which limits the frequency at which a | recursive resolver spends processing the query.</li> | |||
| failed lookup will be attempted again.</t> | <li pn="section-5-3.3">A failure recheck timer, which limits the frequen | |||
| <t>A maximum stale timer, which caps the amount of time | cy at which a | |||
| that records will be kept past their expiration.</t> | failed lookup will be attempted again.</li> | |||
| </list></t> | <li pn="section-5-3.4">A maximum stale timer, which caps the amount of t | |||
| ime | ||||
| <t>Most recursive resolvers already have the query resolution timer, and | that records will be kept past their expiration.</li> | |||
| effectively some kind of failure recheck timer. The client | </ul> | |||
| <t pn="section-5-4">Most recursive resolvers already have the query resolu | ||||
| tion timer and, | ||||
| effectively, some kind of failure recheck timer. The client | ||||
| response timer and maximum stale timer are new concepts for this | response timer and maximum stale timer are new concepts for this | |||
| mechanism.</t> | mechanism.</t> | |||
| <t pn="section-5-5">When a recursive resolver receives a request, it shoul | ||||
| <t>When a recursive resolver receives a request, it should start | d start | |||
| the client response timer. This timer is used to avoid client | the client response timer. This timer is used to avoid client | |||
| timeouts. It should be configurable, with a recommended value of 1.8 | timeouts. It should be configurable, with a recommended value of 1.8 | |||
| seconds as being just under a common timeout value of 2 seconds while | seconds as being just under a common timeout value of 2 seconds while | |||
| still giving the resolver a fair shot at resolving the name.</t> | still giving the resolver a fair shot at resolving the name.</t> | |||
| <t pn="section-5-6">The resolver then checks its cache for any unexpired r | ||||
| <t>The resolver then checks its cache for any unexpired records that | ecords that | |||
| satisfy the request and returns them if available. If it | satisfy the request and returns them if available. If it | |||
| finds no relevant unexpired data and the Recursion Desired flag is not | finds no relevant unexpired data and the Recursion Desired flag is not | |||
| set in the request, it should immediately return the response without | set in the request, it should immediately return the response without | |||
| consulting the cache for expired records. Typically this response | consulting the cache for expired records. Typically, this response | |||
| would be a referral to authoritative nameservers covering the zone, | would be a referral to authoritative nameservers covering the zone, | |||
| but the specifics are implementation-dependent.</t> | but the specifics are implementation dependent.</t> | |||
| <t pn="section-5-7">If iterative lookups will be done, then the failure re | ||||
| <t>If iterative lookups will be done, then the failure recheck timer is | check timer is | |||
| consulted. Attempts to refresh from non-responsive or otherwise | consulted. Attempts to refresh from non-responsive or otherwise | |||
| failing authoritative nameservers are recommended to be done no more | failing authoritative nameservers are recommended to be done no more | |||
| frequently than every 30 seconds. If this request was received within | frequently than every 30 seconds. If this request was received within | |||
| this period, the cache may be immediately consulted for stale data to | this period, the cache may be immediately consulted for stale data to | |||
| satisfy the request.</t> | satisfy the request.</t> | |||
| <t pn="section-5-8">Outside the period of the failure recheck timer, the r | ||||
| <t>Outside the period of the failure recheck timer, the resolver | esolver | |||
| should start the query resolution timer and begin the iterative | should start the query resolution timer and begin the iterative | |||
| resolution process. This timer bounds the work done by the resolver | resolution process. This timer bounds the work done by the resolver | |||
| when contacting external authorities, and is commonly around 10 to 30 | when contacting external authorities and is commonly around 10 to 30 | |||
| seconds. If this timer expires on an attempted lookup that is still | seconds. If this timer expires on an attempted lookup that is still | |||
| being processed, the resolution effort is abandoned.</t> | being processed, the resolution effort is abandoned.</t> | |||
| <t pn="section-5-9">If the answer has not been completely determined by th | ||||
| <t>If the answer has not been completely determined by the time the | e time the | |||
| client response timer has elapsed, the resolver should then check its | client response timer has elapsed, the resolver should then check its | |||
| cache to see whether there is expired data that would satisfy the | cache to see whether there is expired data that would satisfy the | |||
| request. If so, it adds that data to the response message with a TTL | request. If so, it adds that data to the response message with a TTL | |||
| greater than 0 (as specified in <xref target="standards-action"/>). The respons e is then sent to | greater than 0 (as specified in <xref target="standards-action" format="default" sectionFormat="of" derivedContent="Section 4"/>). The response is then sent to | |||
| the client while the resolver continues its attempt to refresh the | the client while the resolver continues its attempt to refresh the | |||
| data.</t> | data.</t> | |||
| <t pn="section-5-10">When no authorities are able to be reached during a r | ||||
| <t>When no authorities are able to be reached during a resolution | esolution | |||
| attempt, the resolver should attempt to refresh the delegation and | attempt, the resolver should attempt to refresh the delegation and | |||
| restart the iterative lookup process with the remaining time on the | restart the iterative lookup process with the remaining time on the | |||
| query resolution timer. This resumption should be done only once | query resolution timer. This resumption should be done only once | |||
| per resolution effort.</t> | per resolution effort.</t> | |||
| <t pn="section-5-11">Outside the resolution process, the maximum stale tim | ||||
| <t>Outside the resolution process, the maximum stale timer is used for | er is used for | |||
| cache management and is independent of the query resolution | cache management and is independent of the query resolution | |||
| process. This timer is conceptually different from the maximum cache | process. This timer is conceptually different from the maximum cache | |||
| TTL that exists in many resolvers, the latter being a clamp on the | TTL that exists in many resolvers, the latter being a clamp on the | |||
| value of TTLs as received from authoritative servers and recommended | value of TTLs as received from authoritative servers and recommended | |||
| to be seven days in the TTL definition in <xref target="standards-action"/>. | to be 7 days in the TTL definition in <xref target="standards-action" format="de fault" sectionFormat="of" derivedContent="Section 4"/>. | |||
| The maximum stale timer | The maximum stale timer | |||
| should be configurable, and defines the length of time after a record | should be configurable. It defines the length of time after a record | |||
| expires that it should be retained in the cache. The suggested value | expires that it should be retained in the cache. The suggested value | |||
| is between 1 and 3 days.</t> | is between 1 and 3 days.</t> | |||
| </section> | ||||
| </section> | <section anchor="implementation-considerations" numbered="true" toc="include | |||
| <section anchor="implementation-considerations" title="Implementation Considerat | " removeInRFC="false" pn="section-6"> | |||
| ions"> | <name slugifiedName="name-implementation-consideratio">Implementation Cons | |||
| iderations</name> | ||||
| <t>This document mainly describes the issues behind serving stale data | <t pn="section-6-1">This document mainly describes the issues behind servi | |||
| ng stale data | ||||
| and intentionally does not provide a formal algorithm. The concept is | and intentionally does not provide a formal algorithm. The concept is | |||
| not overly complex, and the details are best left to resolver authors | not overly complex, and the details are best left to resolver authors | |||
| to implement in their codebases. The processing of serve-stale is a | to implement in their codebases. The processing of serve-stale is a | |||
| local operation, and consistent variables between deployments are not | local operation, and consistent variables between deployments are not | |||
| needed for interoperability. However, we would like to highlight the | needed for interoperability. However, we would like to highlight the | |||
| impact of various implementation choices, starting with the timers | impact of various implementation choices, starting with the timers | |||
| involved.</t> | involved.</t> | |||
| <t pn="section-6-2">The most obvious of these is the maximum stale timer. | ||||
| <t>The most obvious of these is the maximum stale timer. If this variable | If this variable | |||
| is too large it could cause excessive cache memory usage, but if it is | is too large, it could cause excessive cache memory usage, but if it is | |||
| too small, the serve-stale technique becomes less effective, as the | too small, the serve-stale technique becomes less effective, as the | |||
| record may not be in the cache to be used if needed. Shorter values, | record may not be in the cache to be used if needed. Shorter values, | |||
| even less than a day, can effectively handle the vast majority of | even less than a day, can effectively handle the vast majority of | |||
| outages. Longer values, as much as a week, give time for monitoring | outages. Longer values, as much as a week, give time for monitoring | |||
| systems to notice a resolution problem and for human intervention to | systems to notice a resolution problem and for human intervention to | |||
| fix it; operational experience has been that sometimes the right | fix it; operational experience has been that sometimes the right | |||
| people can be hard to track down and unfortunately slow to remedy the | people can be hard to track down and unfortunately slow to remedy the | |||
| situation.</t> | situation.</t> | |||
| <t pn="section-6-3">Increased memory consumption could be mitigated by pri | ||||
| <t>Increased memory consumption could be mitigated by prioritizing | oritizing | |||
| removal of stale records over non-expired records during cache | removal of stale records over non-expired records during cache | |||
| exhaustion. Implementations may also wish to consider whether to | exhaustion. Eviction strategies could consider additional factors, | |||
| track the names in requests for their last time of use or their | including the last time of use or the popularity of a record, to | |||
| popularity, using that as an additional factor when considering cache | retain active but stale records. A feature to manually flush | |||
| eviction. A feature to manually flush only stale records could also | only stale records could also be useful.</t> | |||
| be useful.</t> | <t pn="section-6-4">The client response timer is another variable that des | |||
| erves | ||||
| <t>The client response timer is another variable which deserves | ||||
| consideration. If this value is too short, there exists the risk that | consideration. If this value is too short, there exists the risk that | |||
| stale answers may be used even when the authoritative server is | stale answers may be used even when the authoritative server is | |||
| actually reachable but slow; this may result in undesirable answers | actually reachable but slow; this may result in undesirable answers | |||
| being returned. Conversely, waiting too long will negatively impact | being returned. Conversely, waiting too long will negatively impact | |||
| user experience.</t> | user experience.</t> | |||
| <t pn="section-6-5">The balance for the failure recheck timer is responsiv | ||||
| <t>The balance for the failure recheck timer is responsiveness in | eness in | |||
| detecting the renewed availability of authorities versus the extra | detecting the renewed availability of authorities versus the extra | |||
| resource use for resolution. If this variable is set too large, stale | resource use for resolution. If this variable is set too large, stale | |||
| answers may continue to be returned even after the authoritative | answers may continue to be returned even after the authoritative | |||
| server is reachable; per <xref target="RFC2308"/>, Section 7, this should be no | server is reachable; per <xref target="RFC2308" sectionFormat="comma" section="7 | |||
| more than five minutes. If this variable is too small, authoritative | " format="default" derivedLink="https://rfc-editor.org/rfc/rfc2308#section-7" de | |||
| rivedContent="RFC2308"/>, this should be no | ||||
| more than 5 minutes. If this variable is too small, authoritative | ||||
| servers may be targeted with a significant amount of excess traffic.</t> | servers may be targeted with a significant amount of excess traffic.</t> | |||
| <t pn="section-6-6">Regarding the TTL to set on stale records in the respo | ||||
| <t>Regarding the TTL to set on stale records in the response, | nse, | |||
| historically TTLs of zero seconds have been problematic for some | historically TTLs of 0 seconds have been problematic for some | |||
| implementations, and negative values can't effectively be communicated | implementations, and negative values can't effectively be communicated | |||
| to existing software. Other very short TTLs could lead to congestive | to existing software. Other very short TTLs could lead to congestive | |||
| collapse as TTL-respecting clients rapidly try to refresh. The | collapse as TTL-respecting clients rapidly try to refresh. The | |||
| recommended value of 30 seconds not only sidesteps those potential problems | recommended value of 30 seconds not only sidesteps those potential problems | |||
| with no practical negative consequences, it also rate limits | with no practical negative consequences, it also rate-limits | |||
| further queries from any client that honors the TTL, such as a | further queries from any client that honors the TTL, such as a | |||
| forwarding resolver.</t> | forwarding resolver.</t> | |||
| <t pn="section-6-7">As for the change to treat a TTL with the high-order b | ||||
| <t>As for the change to treat a TTL with the high-order bit set as | it set as | |||
| positive and then clamping it, as opposed to <xref target="RFC2181"/> treating i | positive and then clamping it, as opposed to <xref target="RFC2181" format="defa | |||
| t | ult" sectionFormat="of" derivedContent="RFC2181"/> treating it | |||
| as zero, the rationale here is basically one of engineering simplicity | as zero, the rationale here is basically one of engineering simplicity | |||
| versus an inconsequential operational history. Negative TTLs had no | versus an inconsequential operational history. Negative TTLs had no | |||
| rational intentional meaning that wouldn't have been satisfied by just | rational intentional meaning that wouldn't have been satisfied by just | |||
| sending 0 instead, and similarly there was realistically no practical | sending 0 instead, and similarly there was realistically no practical | |||
| purpose for sending TTLs of 2^25 seconds (1 year) or more. There's | purpose for sending TTLs of 2^25 seconds (1 year) or more. There's | |||
| also no record of TTLs in the wild having the most significant bit set | also no record of TTLs in the wild having the most significant bit set | |||
| in DNS-OARC's "Day in the Life" samples <xref target="DITL"/>. With no apparent | in the DNS Operations, Analysis, and Research Center's (DNS-OARC's) "Day in the Life" samples <xref target="DITL" format="default" sectionFormat="of" derivedCon tent="DITL"/>. With no apparent | |||
| reason for | reason for | |||
| operators to use them intentionally, that leaves either errors or | operators to use them intentionally, that leaves either errors or | |||
| non-standard experiments as explanations as to why such TTLs might be | non-standard experiments as explanations as to why such TTLs might be | |||
| encountered, with neither providing an obviously compelling reason as | encountered, with neither providing an obviously compelling reason as | |||
| to why having the leading bit set should be treated differently from | to why having the leading bit set should be treated differently from | |||
| having any of the next eleven bits set and then capped per | having any of the next eleven bits set and then capped per | |||
| <xref target="standards-action"/>.</t> | <xref target="standards-action" format="default" sectionFormat="of" derivedConte | |||
| nt="Section 4"/>.</t> | ||||
| <t>Another implementation consideration is the use of | <t pn="section-6-8">Another implementation consideration is the use of | |||
| stale nameserver addresses for lookups. This is mentioned explicitly | stale nameserver addresses for lookups. This is mentioned explicitly | |||
| because, in some resolvers, getting the addresses for nameservers is | because, in some resolvers, getting the addresses for nameservers is | |||
| a separate path from a normal cache lookup. If authoritative server | a separate path from a normal cache lookup. If authoritative server | |||
| addresses are not able to be refreshed, resolution can possibly still | addresses are not able to be refreshed, resolution can possibly still | |||
| be successful if the authoritative servers themselves are up. For | be successful if the authoritative servers themselves are up. For | |||
| instance, consider an attack on a top-level domain that takes its | instance, consider an attack on a top-level domain that takes its | |||
| nameservers offline; serve-stale resolvers that had expired glue | nameservers offline; serve-stale resolvers that had expired glue | |||
| addresses for subdomains within that TLD would still be able to | addresses for subdomains within that top-level domain would still be able to | |||
| resolve names within those subdomains, even those it had not | resolve names within those subdomains, even those it had not | |||
| previously looked up.</t> | previously looked up.</t> | |||
| <t pn="section-6-9">The directive in <xref target="standards-action" forma | ||||
| <t>The directive in <xref target="standards-action"/> that only NoError and NXDo | t="default" sectionFormat="of" derivedContent="Section 4"/> that only NoError an | |||
| main | d NXDomain | |||
| responses should invalidate any previously associated answer stems | responses should invalidate any previously associated answer stems | |||
| from the fact that no other RCODEs that a resolver normally | from the fact that no other RCODEs that a resolver normally | |||
| encounters make any assertions regarding the name in the question or | encounters make any assertions regarding the name in the question or | |||
| any data associated with it. This comports with existing resolver | any data associated with it. This comports with existing resolver | |||
| behavior where a failed lookup (say, during pre-fetching) doesn't | behavior where a failed lookup (say, during prefetching) doesn't | |||
| impact the existing cache state. Some authoritative server operators | impact the existing cache state. Some authoritative server operators | |||
| have said that they would prefer stale answers to be used in the event | have said that they would prefer stale answers to be used in the event | |||
| that their servers are responding with errors like ServFail instead of | that their servers are responding with errors like ServFail instead of | |||
| giving true authoritative answers. Implementers MAY decide to return | giving true authoritative answers. Implementers <bcp14>MAY</bcp14> decide to re turn | |||
| stale answers in this situation.</t> | stale answers in this situation.</t> | |||
| <t pn="section-6-10">Since the goal of serve-stale is to provide resilienc | ||||
| <t>Since the goal of serve-stale is to provide resiliency for all obvious | y for all obvious | |||
| errors to refresh data, these other RCODEs are treated as though they | errors to refresh data, these other RCODEs are treated as though they | |||
| are equivalent to not getting an authoritative response. Although | are equivalent to not getting an authoritative response. Although | |||
| NXDomain for a previously existing name might well be an error, it is | NXDomain for a previously existing name might well be an error, it is | |||
| not handled that way because there is no effective way to distinguish | not handled that way because there is no effective way to distinguish | |||
| operator intent for legitimate cases versus error cases.</t> | operator intent for legitimate cases versus error cases.</t> | |||
| <t pn="section-6-11">During discussion in the IETF, it was suggested that, | ||||
| <t>During discussion in the IETF, it was suggested that, | if all authorities return responses with an RCODE of Refused, | |||
| if all authorities return responses with RCODE of Refused, | ||||
| it may be an explicit signal to take down the zone from | it may be an explicit signal to take down the zone from | |||
| servers that still have the zone's delegation pointed to them. | servers that still have the zone's delegation pointed to them. | |||
| Refused, however, is also | Refused, however, is also | |||
| overloaded to mean multiple possible failures which could represent | overloaded to mean multiple possible failures that could represent | |||
| transient configuration failures. Operational experience has shown | transient configuration failures. Operational experience has shown | |||
| that purposely returning Refused is a poor way to achieve an | that purposely returning Refused is a poor way to achieve an | |||
| explicit takedown of a zone compared to either updating the delegation | explicit takedown of a zone compared to either updating the delegation | |||
| or returning NXDomain with a suitable SOA for extended negative | or returning NXDomain with a suitable SOA for extended negative | |||
| caching. Implementers MAY nonetheless consider whether to | caching. Implementers <bcp14>MAY</bcp14> nonetheless consider whether to | |||
| treat all authorities returning Refused as preempting the use of stale | treat all authorities returning Refused as preempting the use of stale | |||
| data.</t> | data.</t> | |||
| </section> | ||||
| </section> | <section anchor="implementation-caveats" numbered="true" toc="include" remov | |||
| <section anchor="implementation-caveats" title="Implementation Caveats"> | eInRFC="false" pn="section-7"> | |||
| <name slugifiedName="name-implementation-caveats">Implementation Caveats</ | ||||
| <t>Stale data is used only when refreshing has failed in order to adhere | name> | |||
| to the original intent of the design of the DNS and the behaviour | <t pn="section-7-1">Stale data is used only when refreshing has failed in | |||
| order to adhere | ||||
| to the original intent of the design of the DNS and the behavior | ||||
| expected by operators. If stale data were to always be used | expected by operators. If stale data were to always be used | |||
| immediately and then a cache refresh attempted after the client | immediately and then a cache refresh attempted after the client | |||
| response has been sent, the resolver would frequently be sending data | response has been sent, the resolver would frequently be sending data | |||
| that it would have had no trouble refreshing. Because modern resolvers use | that it would have had no trouble refreshing. Because modern resolvers use | |||
| techniques like pre-fetching and request coalescing for efficiency, it | techniques like prefetching and request coalescing for efficiency, it | |||
| is not necessary that every client request needs to trigger a new | is not necessary that every client request needs to trigger a new | |||
| lookup flow in the presence of stale data, but rather that a | lookup flow in the presence of stale data, but rather that a | |||
| good-faith effort has been recently made to refresh the stale data | good-faith effort has been recently made to refresh the stale data | |||
| before it is delivered to any client.</t> | before it is delivered to any client.</t> | |||
| <t pn="section-7-2">It is important to continue the resolution attempt aft | ||||
| <t>It is important to continue the resolution attempt after the stale | er the stale | |||
| response has been sent, until the query resolution timeout, because | response has been sent, until the query resolution timeout, because | |||
| some pathological resolutions can take many seconds to succeed as they | some pathological resolutions can take many seconds to succeed as they | |||
| cope with unavailable servers, bad networks, and other problems. | cope with unavailable servers, bad networks, and other problems. | |||
| Stopping the resolution attempt when the response with expired data | Stopping the resolution attempt when the response with expired data | |||
| has been sent would mean that answers in these pathological cases | has been sent would mean that answers in these pathological cases | |||
| would never be refreshed.</t> | would never be refreshed.</t> | |||
| <t pn="section-7-3">The continuing prohibition against using data with a 0 | ||||
| <t>The continuing prohibition against using data with a 0 second TTL | -second TTL | |||
| beyond the current transaction explicitly extends to it being unusable | beyond the current transaction explicitly extends to it being unusable | |||
| even for stale fallback, as it is not to be cached at all.</t> | even for stale fallback, as it is not to be cached at all.</t> | |||
| <t pn="section-7-4">Be aware that Canonical Name (CNAME) and DNAME records | ||||
| <t>Be aware that Canonical Name (CNAME) and DNAME <xref target="RFC6672"/> recor | <xref target="RFC6672" format="default" sectionFormat="of" derivedContent="RFC6 | |||
| ds | 672"/> mingled in the expired | |||
| mingled in the expired | ||||
| cache with other records at the same owner name can cause surprising | cache with other records at the same owner name can cause surprising | |||
| results. This was observed with an initial implementation in BIND | results. This was observed with an initial implementation in BIND | |||
| when a hostname changed from having an IPv4 Address (A) record to a | when a hostname changed from having an IPv4 Address (A) record to a | |||
| CNAME. The version of BIND being used did not evict other types in | CNAME. The version of BIND being used did not evict other types in | |||
| the cache when a CNAME was received, which in normal operations is not | the cache when a CNAME was received, which in normal operations is not | |||
| a significant issue. However, after both records expired and the | a significant issue. However, after both records expired and the | |||
| authorities became unavailable, the fallback to stale answers returned | authorities became unavailable, the fallback to stale answers returned | |||
| the older A instead of the newer CNAME.</t> | the older A instead of the newer CNAME.</t> | |||
| </section> | ||||
| </section> | <section anchor="implementation-status" numbered="true" toc="include" remove | |||
| <section anchor="implementation-status" title="Implementation Status"> | InRFC="false" pn="section-8"> | |||
| <name slugifiedName="name-implementation-status">Implementation Status</na | ||||
| <t>The algorithm described in <xref target="example-method"/> was | me> | |||
| <t pn="section-8-1">The algorithm described in <xref target="example-metho | ||||
| d" format="default" sectionFormat="of" derivedContent="Section 5"/> was | ||||
| originally implemented as a patch to BIND 9.7.0. It has been in use | originally implemented as a patch to BIND 9.7.0. It has been in use | |||
| on Akamai's production network since 2011, and effectively | on Akamai's production network since 2011; it effectively | |||
| smoothed over transient failures and longer outages that would have | smoothed over transient failures and longer outages that would have | |||
| resulted in major incidents. The patch was contributed to Internet | resulted in major incidents. The patch was contributed to the Internet | |||
| Systems Consortium and the functionality is now available in BIND 9.12 | Systems Consortium, and the functionality is now available in BIND 9.12 | |||
| and later via the options stale-answer-enable, stale-answer-ttl, and | and later via the options stale-answer-enable, stale-answer-ttl, and | |||
| max-stale-ttl.</t> | max-stale-ttl.</t> | |||
| <t pn="section-8-2">Unbound has a similar feature for serving stale answer | ||||
| <t>Unbound has a similar feature for serving stale answers, and will | s and will | |||
| respond with stale data immediately if it has recently tried and | respond with stale data immediately if it has recently tried and | |||
| failed to refresh the answer by pre-fetching.</t> | failed to refresh the answer by prefetching. Starting from | |||
| version 1.10.0, Unbound can also be configured to follow the | ||||
| <t>Knot Resolver has a demo module here: | algorithm described in <xref target="example-method" format="default" sectionFor | |||
| https://knot-resolver.readthedocs.io/en/stable/modules.html#serve-stale</t> | mat="of" derivedContent="Section 5"/>. Both behaviors can be | |||
| configured and fine-tuned with the available serve-expired-* | ||||
| <t>Apple's system resolvers are also known to use stale answers, but the | options.</t> | |||
| <t pn="section-8-3">Knot Resolver has a demo module here: | ||||
| <eref target="https://knot-resolver.readthedocs.io/en/stable/modules-serve_stale | ||||
| .html" brackets="angle"/>.</t> | ||||
| <t pn="section-8-4">Apple's system resolvers are also known to use stale a | ||||
| nswers, but the | ||||
| details are not readily available.</t> | details are not readily available.</t> | |||
| <t pn="section-8-5">In the research paper "When the Dike Breaks: Dissectin | ||||
| <t>In the research paper "When the Dike Breaks: Dissecting DNS Defenses | g DNS Defenses | |||
| During DDoS" <xref target="DikeBreaks"/>, the authors detected some use of | During DDoS" <xref target="DikeBreaks" format="default" sectionFormat="of" deriv | |||
| edContent="DikeBreaks"/>, the authors detected some use of | ||||
| stale answers by resolvers when authorities came under attack. Their | stale answers by resolvers when authorities came under attack. Their | |||
| research results suggest that more widespread adoption of the technique | research results suggest that more widespread adoption of the technique | |||
| would significantly improve resiliency for the large number of requests | would significantly improve resiliency for the large number of requests | |||
| that fail or experience abnormally long resolution times during an attack.</t> | that fail or experience abnormally long resolution times during an attack.</t> | |||
| </section> | ||||
| </section> | <section anchor="edns-option" numbered="true" toc="include" removeInRFC="fal | |||
| <section anchor="edns-option" title="EDNS Option"> | se" pn="section-9"> | |||
| <name slugifiedName="name-edns-option">EDNS Option</name> | ||||
| <t>During the discussion of serve-stale in the IETF, | <t pn="section-9-1">During the discussion of serve-stale in the IETF, | |||
| it was suggested that an EDNS option should be available to either | it was suggested that an EDNS option <xref target="RFC6891" format="default" sec | |||
| explicitly opt-in to getting data that is possibly stale, or at least | tionFormat="of" derivedContent="RFC6891"/> should be | |||
| as a debugging tool to indicate when stale data has been used for a | available. One proposal was to use it to opt in to getting data that is | |||
| response.</t> | possibly stale, and another was to signal when stale data has been used for a re | |||
| sponse.</t> | ||||
| <t>The opt-in use case was rejected as the technique was meant to be | <t pn="section-9-2">The opt-in use case was rejected, as the technique was | |||
| meant to be | ||||
| immediately useful in improving DNS resiliency for all clients.</t> | immediately useful in improving DNS resiliency for all clients.</t> | |||
| <t pn="section-9-3">The reporting case was ultimately also rejected becaus | ||||
| <t>The reporting case was ultimately also rejected because | e | |||
| even the simpler version of a proposed | even the simpler version of a proposed | |||
| option was still too much bother to implement for too little perceived | option was still too much bother to implement for too little perceived | |||
| value.</t> | value.</t> | |||
| </section> | ||||
| </section> | <section anchor="security-considerations" numbered="true" toc="include" remo | |||
| <section anchor="security-considerations" title="Security Considerations"> | veInRFC="false" pn="section-10"> | |||
| <name slugifiedName="name-security-considerations">Security Considerations | ||||
| <t>The most obvious security issue is the increased likelihood of DNSSEC | </name> | |||
| <t pn="section-10-1">The most obvious security issue is the increased like | ||||
| lihood of DNSSEC | ||||
| validation failures when using stale data because signatures could be | validation failures when using stale data because signatures could be | |||
| returned outside their validity period. Stale negative records can increase | returned outside their validity period. Stale negative records can increase | |||
| the time window where newly published TLSA or DS RRs may not be used due | the time window where newly published TLSA or DS RRs may not be used due | |||
| to cached NSEC or NSEC3 records. These scenarios would only be an issue | to cached NSEC or NSEC3 records. These scenarios would only be an issue if | |||
| if the authoritative servers are unreachable, the only time the | the authoritative servers are unreachable (the only time the techniques in | |||
| techniques in this document are used, and thus does not introduce | this document are used), and thus serve-stale does not introduce a new | |||
| a new failure in place of what would have otherwise been success.</t> | failure in place of what would have otherwise been success.</t> | |||
| <t pn="section-10-2">Additionally, bad actors have been known to use DNS c | ||||
| <t>Additionally, bad actors have been known to use DNS caches to keep | aches to keep | |||
| records alive even after their authorities have gone away. The serve stale | records alive even after their authorities have gone away. The serve-stale | |||
| feature potentially makes the attack easier, although without introducing | feature potentially makes the attack easier, although without introducing | |||
| a new risk. In addition, attackers could combine this with a DDoS attack on | a new risk. In addition, attackers could combine this with a DDoS attack on | |||
| authoritative servers with the explicit intent of having stale information | authoritative servers with the explicit intent of having stale information | |||
| cached for longer. But if attackers have this capacity, they probably could | cached for a longer period of time. But if attackers have this capacity, they pr obably could | |||
| do much worse than prolonging the life of old data.</t> | do much worse than prolonging the life of old data.</t> | |||
| <t pn="section-10-3">In <xref target="CloudStrife" format="default" sectio | ||||
| <t>In <xref target="CloudStrife"/>, it was demonstrated how stale DNS data, name | nFormat="of" derivedContent="CloudStrife"/>, it was demonstrated how stale DNS d | |||
| ly | ata, namely | |||
| hostnames pointing to addresses that are no longer in use by the owner | hostnames pointing to addresses that are no longer in use by the owner | |||
| of the name, can be used to co-opt security such as to get | of the name, can be used to co-opt security -- for example, to get | |||
| domain-validated certificates fraudulently issued to an attacker. | domain-validated certificates fraudulently issued to an attacker. | |||
| While this document does not create a new vulnerability in this area, it | While this document does not create a new vulnerability in this area, it | |||
| does potentially enlarge the window in which such an attack could be | does potentially enlarge the window in which such an attack could be | |||
| made. A proposed mitigation is that certificate authorities should fully | made. A proposed mitigation is that certificate authorities should fully | |||
| look up each name starting at the DNS root for every name lookup. | look up each name starting at the DNS root for every name lookup. | |||
| Alternatively, CAs should use a resolver that is not serving stale data.</t> | Alternatively, certificate authorities should use a resolver that is not serving | |||
| stale data.</t> | ||||
| </section> | </section> | |||
| <section anchor="privacy-considerations" title="Privacy Considerations"> | <section anchor="privacy-considerations" numbered="true" toc="include" remov | |||
| eInRFC="false" pn="section-11"> | ||||
| <t>This document does not add any practical new privacy issues.</t> | <name slugifiedName="name-privacy-considerations">Privacy Considerations</ | |||
| name> | ||||
| </section> | <t pn="section-11-1">This document does not add any practical new privacy | |||
| <section anchor="nat-considerations" title="NAT Considerations"> | issues.</t> | |||
| </section> | ||||
| <t>The method described here is not affected by the use of NAT devices.</t> | <section anchor="nat-considerations" numbered="true" toc="include" removeInR | |||
| FC="false" pn="section-12"> | ||||
| </section> | <name slugifiedName="name-nat-considerations">NAT Considerations</name> | |||
| <section anchor="iana-considerations" title="IANA Considerations"> | <t pn="section-12-1">The method described here is not affected by the use | |||
| of NAT devices.</t> | ||||
| <t>There are no IANA considerations.</t> | </section> | |||
| <section anchor="iana-considerations" numbered="true" toc="include" removeIn | ||||
| </section> | RFC="false" pn="section-13"> | |||
| <section anchor="acknowledgements" title="Acknowledgements"> | <name slugifiedName="name-iana-considerations">IANA Considerations</name> | |||
| <t pn="section-13-1">This document has no IANA actions.</t> | ||||
| <t>The authors wish to thank Brian Carpenter, Robert Edmonds, Tony Finch, | </section> | |||
| Bob Harold, Tatuya Jinmei, Matti Klock, Jason Moreau, Giovane Moura, | ||||
| Jean Roy, Mukund Sivaraman, Davey Song, Paul Vixie, Ralf Weber and | ||||
| Paul Wouters for their review and feedback. Paul Hoffman deserves | ||||
| special thanks for submitting a number of Pull Requests.</t> | ||||
| <t>Thank you also to the following members of the IESG for their final | ||||
| review: Roman Danyliw, Benjamin Kaduk, Suresh Krishnan, Mirja | ||||
| Kuehlewind, and Adam Roach.</t> | ||||
| </section> | ||||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references pn="section-14"> | ||||
| <references title='Normative References'> | <name slugifiedName="name-references">References</name> | |||
| <references pn="section-14.1"> | ||||
| &RFC1035; | <name slugifiedName="name-normative-references">Normative References</na | |||
| &RFC2181; | me> | |||
| &RFC1034; | <reference anchor="RFC1034" target="https://www.rfc-editor.org/info/rfc1 | |||
| &RFC2119; | 034" quoteTitle="true" derivedAnchor="RFC1034"> | |||
| &RFC8174; | <front> | |||
| &RFC2308; | <title>Domain names - concepts and facilities</title> | |||
| <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockape | ||||
| </references> | tris"> | |||
| <organization showOnFrontPage="true"/> | ||||
| <references title='Informative References'> | </author> | |||
| <date year="1987" month="November"/> | ||||
| <reference anchor="DikeBreaks" target="https://www.isi.edu/~johnh/PAPERS/Moura18 | <abstract> | |||
| b.pdf"> | <t>This RFC is the revised basic definition of The Domain Name Sys | |||
| <front> | tem. It obsoletes RFC-882. This memo describes the domain style names and thei | |||
| <title>When the Dike Breaks: Dissecting DNS Defenses During DDos</title> | r used for host address look up and electronic mail forwarding. It discusses th | |||
| <author initials="G.C.M." surname="Moura" fullname="Giovane C. M. Moura"> | e clients and servers in the domain name system and the protocol used between th | |||
| <organization></organization> | em.</t> | |||
| </author> | </abstract> | |||
| <author initials="J." surname="Heidemann" fullname="John Heidemann"> | </front> | |||
| <organization></organization> | <seriesInfo name="STD" value="13"/> | |||
| </author> | <seriesInfo name="RFC" value="1034"/> | |||
| <author initials="M." surname="Mueller" fullname="Moritz Mueller"> | <seriesInfo name="DOI" value="10.17487/RFC1034"/> | |||
| <organization></organization> | </reference> | |||
| </author> | <reference anchor="RFC1035" target="https://www.rfc-editor.org/info/rfc1 | |||
| <author initials="R.d.O." surname="Schmidt" fullname="Ricardo de O. Schmidt" | 035" quoteTitle="true" derivedAnchor="RFC1035"> | |||
| > | <front> | |||
| <organization></organization> | <title>Domain names - implementation and specification</title> | |||
| </author> | <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockape | |||
| <author initials="M." surname="Davids" fullname="Marco Davids"> | tris"> | |||
| <organization></organization> | <organization showOnFrontPage="true"/> | |||
| </author> | </author> | |||
| <date year="2018" month="October" day="31"/> | <date year="1987" month="November"/> | |||
| </front> | <abstract> | |||
| <seriesInfo name="ACM" value="2018 Internet Measurement Conference"/> | <t>This RFC is the revised specification of the protocol and forma | |||
| <seriesInfo name="DOI" value="10.1145/3278532.3278534"/> | t used in the implementation of the Domain Name System. It obsoletes RFC-883. T | |||
| </reference> | his memo documents the details of the domain name client - server communication. | |||
| <reference anchor="CloudStrife" target="https://www.ndss-symposium.org/wp-conten | </t> | |||
| t/uploads/2018/02/ndss2018_06A-4_Borgolte_paper.pdf"> | </abstract> | |||
| <front> | </front> | |||
| <title>Cloud Strife: Mitigating the Security Risks of Domain-Validated Certi | <seriesInfo name="STD" value="13"/> | |||
| ficates</title> | <seriesInfo name="RFC" value="1035"/> | |||
| <author initials="K." surname="Borgolte" fullname="Kevin Borgolte"> | <seriesInfo name="DOI" value="10.17487/RFC1035"/> | |||
| <organization></organization> | </reference> | |||
| </author> | <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | |||
| <author initials="T." surname="Fiebig" fullname="Tobias Fiebig"> | 119" quoteTitle="true" derivedAnchor="RFC2119"> | |||
| <organization></organization> | <front> | |||
| </author> | <title>Key words for use in RFCs to Indicate Requirement Levels</tit | |||
| <author initials="S." surname="Hao" fullname="Shuang Hao"> | le> | |||
| <organization></organization> | <author initials="S." surname="Bradner" fullname="S. Bradner"> | |||
| </author> | <organization showOnFrontPage="true"/> | |||
| <author initials="C." surname="Kruegel" fullname="Christopher Kruegel"> | </author> | |||
| <organization></organization> | <date year="1997" month="March"/> | |||
| </author> | <abstract> | |||
| <author initials="G." surname="Vigna" fullname="Giovanni Vigna"> | <t>In many standards track documents several words are used to sig | |||
| <organization></organization> | nify the requirements in the specification. These words are often capitalized. | |||
| </author> | This document defines these words as they should be interpreted in IETF document | |||
| <date year="2018" month="July" day="16"/> | s. This document specifies an Internet Best Current Practices for the Internet | |||
| </front> | Community, and requests discussion and suggestions for improvements.</t> | |||
| <seriesInfo name="ACM" value="2018 Applied Networking Research Workshop"/> | </abstract> | |||
| <seriesInfo name="DOI" value="10.1145/3232755.3232859"/> | </front> | |||
| </reference> | <seriesInfo name="BCP" value="14"/> | |||
| <reference anchor="DITL" target="https://www.dns-oarc.net/oarc/data/ditl"> | <seriesInfo name="RFC" value="2119"/> | |||
| <front> | <seriesInfo name="DOI" value="10.17487/RFC2119"/> | |||
| <title>DITL Traces and Analysis | DNS-OARC</title> | </reference> | |||
| <author > | <reference anchor="RFC2181" target="https://www.rfc-editor.org/info/rfc2 | |||
| <organization></organization> | 181" quoteTitle="true" derivedAnchor="RFC2181"> | |||
| </author> | <front> | |||
| <date year="n.d."/> | <title>Clarifications to the DNS Specification</title> | |||
| </front> | <author initials="R." surname="Elz" fullname="R. Elz"> | |||
| </reference> | <organization showOnFrontPage="true"/> | |||
| &RFC8499; | </author> | |||
| &RFC6672; | <author initials="R." surname="Bush" fullname="R. Bush"> | |||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1997" month="July"/> | ||||
| <abstract> | ||||
| <t>This document considers some areas that have been identified as | ||||
| problems with the specification of the Domain Name System, and proposes remedie | ||||
| s for the defects identified. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2181"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2181"/> | ||||
| </reference> | ||||
| <reference anchor="RFC2308" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 308" quoteTitle="true" derivedAnchor="RFC2308"> | ||||
| <front> | ||||
| <title>Negative Caching of DNS Queries (DNS NCACHE)</title> | ||||
| <author initials="M." surname="Andrews" fullname="M. Andrews"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="1998" month="March"/> | ||||
| <abstract> | ||||
| <t>RFC1034 provided a description of how to cache negative respons | ||||
| es. It however had a fundamental flaw in that it did not allow a name server to | ||||
| hand out those cached responses to other resolvers, thereby greatly reducing th | ||||
| e effect of the caching. This document addresses issues raise in the light of e | ||||
| xperience and replaces RFC1034 Section 4.3.4. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="2308"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2308"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 174" quoteTitle="true" derivedAnchor="RFC8174"> | ||||
| <front> | ||||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
| tle> | ||||
| <author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2017" month="May"/> | ||||
| <abstract> | ||||
| <t>RFC 2119 specifies common key words that may be used in protoco | ||||
| l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
| t 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-14.2"> | ||||
| <name slugifiedName="name-informative-references">Informative References | ||||
| </name> | ||||
| <reference anchor="CloudStrife" target="https://www.ndss-symposium.org/w | ||||
| p-content/uploads/2018/02/ndss2018_06A-4_Borgolte_paper.pdf" quoteTitle="true" d | ||||
| erivedAnchor="CloudStrife"> | ||||
| <front> | ||||
| <title>Cloud Strife: Mitigating the Security Risks of Domain-Validat | ||||
| ed Certificates</title> | ||||
| <seriesInfo name="DOI" value="10.1145/3232755.3232859"/> | ||||
| <seriesInfo name="ACM" value="2018 Applied Networking Research Works | ||||
| hop"/> | ||||
| <author initials="K." surname="Borgolte" fullname="Kevin Borgolte"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="T." surname="Fiebig" fullname="Tobias Fiebig"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="S." surname="Hao" fullname="Shuang Hao"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="C." surname="Kruegel" fullname="Christopher Kruege | ||||
| l"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="G." surname="Vigna" fullname="Giovanni Vigna"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2018" month="July"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="DikeBreaks" target="https://www.isi.edu/~johnh/PAPERS | ||||
| /Moura18b.pdf" quoteTitle="true" derivedAnchor="DikeBreaks"> | ||||
| <front> | ||||
| <title>When the Dike Breaks: Dissecting DNS Defenses During DDoS</ti | ||||
| tle> | ||||
| <seriesInfo name="DOI" value="10.1145/3278532.3278534"/> | ||||
| <seriesInfo name="ACM" value="2018 Internet Measurement Conference"/ | ||||
| > | ||||
| <author initials="G.C.M." surname="Moura" fullname="Giovane C. M. Mo | ||||
| ura"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="J." surname="Heidemann" fullname="John Heidemann"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Müller" fullname="Moritz Müller"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="R. de O." surname="Schmidt" fullname="Ricardo de O | ||||
| . Schmidt"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Davids" fullname="Marco Davids"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2018" month="October"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="DITL" target="https://www.dns-oarc.net/oarc/data/ditl | ||||
| " quoteTitle="true" derivedAnchor="DITL"> | ||||
| <front> | ||||
| <title>DITL Traces and Analysis</title> | ||||
| <author> | ||||
| <organization showOnFrontPage="true">DNS-OARC</organization> | ||||
| </author> | ||||
| <date month="January" year="2018"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC6672" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 672" quoteTitle="true" derivedAnchor="RFC6672"> | ||||
| <front> | ||||
| <title>DNAME Redirection in the DNS</title> | ||||
| <author initials="S." surname="Rose" fullname="S. Rose"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="W." surname="Wijngaards" fullname="W. Wijngaards"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2012" month="June"/> | ||||
| <abstract> | ||||
| <t>The DNAME record provides redirection for a subtree of the doma | ||||
| in name tree in the DNS. That is, all names that end with a particular suffix a | ||||
| re redirected to another part of the DNS. This document obsoletes the original | ||||
| specification in RFC 2672 as well as updates the document on representing IPv6 a | ||||
| ddresses in DNS (RFC 3363). [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6672"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6672"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6891" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 891" quoteTitle="true" derivedAnchor="RFC6891"> | ||||
| <front> | ||||
| <title>Extension Mechanisms for DNS (EDNS(0))</title> | ||||
| <author initials="J." surname="Damas" fullname="J. Damas"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="M." surname="Graff" fullname="M. Graff"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="P." surname="Vixie" fullname="P. Vixie"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2013" month="April"/> | ||||
| <abstract> | ||||
| <t>The Domain Name System's wire protocol includes a number of fix | ||||
| ed fields whose range has been or soon will be exhausted and does not allow requ | ||||
| estors to advertise their capabilities to responders. This document describes b | ||||
| ackward-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 exper | ||||
| ience 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="RFC8499" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 499" quoteTitle="true" derivedAnchor="RFC8499"> | ||||
| <front> | ||||
| <title>DNS Terminology</title> | ||||
| <author initials="P." surname="Hoffman" fullname="P. Hoffman"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="A." surname="Sullivan" fullname="A. Sullivan"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <author initials="K." surname="Fujiwara" fullname="K. Fujiwara"> | ||||
| <organization showOnFrontPage="true"/> | ||||
| </author> | ||||
| <date year="2019" month="January"/> | ||||
| <abstract> | ||||
| <t>The Domain Name System (DNS) is defined in literally dozens of | ||||
| different RFCs. The terminology used by implementers and developers of DNS prot | ||||
| ocols, and by operators of DNS systems, has sometimes changed in the decades sin | ||||
| ce the DNS was first defined. This document gives current definitions for many | ||||
| of the terms used in the DNS in a single document.</t> | ||||
| <t>This document obsoletes RFC 7719 and updates RFC 2308.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="219"/> | ||||
| <seriesInfo name="RFC" value="8499"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8499"/> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | </references> | |||
| <section anchor="acknowledgements" numbered="false" toc="include" removeInRF | ||||
| C="false" pn="section-appendix.a"> | ||||
| <name slugifiedName="name-acknowledgements">Acknowledgements</name> | ||||
| <t pn="section-appendix.a-1">The authors wish to thank <contact fullname=" | ||||
| Brian Carpenter"/>, | ||||
| <contact fullname="Vladimir Cunat"/>, <contact fullname="Robert Edmonds"/> | ||||
| , <contact fullname="Tony Finch"/>, | ||||
| <contact fullname="Bob Harold"/>, <contact fullname="Tatuya Jinmei"/>, <contact | ||||
| fullname="Matti Klock"/>, <contact fullname="Jason Moreau"/>, <contact fullname= | ||||
| "Giovane Moura"/>, | ||||
| <contact fullname="Jean Roy"/>, <contact fullname="Mukund Sivaraman"/>, <contact | ||||
| fullname="Davey Song"/>, <contact fullname="Paul Vixie"/>, <contact fullname="R | ||||
| alf Weber"/>, and | ||||
| <contact fullname="Paul Wouters"/> for their review and feedback. <contact full | ||||
| name="Paul Hoffman"/> deserves | ||||
| special thanks for submitting a number of Pull Requests.</t> | ||||
| <t pn="section-appendix.a-2">Thank you also to the following members of th | ||||
| e IESG for their final | ||||
| review: <contact fullname="Roman Danyliw"/>, <contact fullname="Benjamin Kaduk" | ||||
| />, <contact fullname="Suresh Krishnan"/>, <contact fullname="Mirja Kühlewind"/> | ||||
| , and <contact fullname="Adam Roach"/>.</t> | ||||
| </section> | ||||
| <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | ||||
| ="include" pn="section-appendix.b"> | ||||
| <name slugifiedName="name-authors-addresses">Authors' Addresses</name> | ||||
| <author initials="D." surname="Lawrence" fullname="David C Lawrence"> | ||||
| <organization showOnFrontPage="true">Oracle</organization> | ||||
| <address> | ||||
| <email>tale@dd.org</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="W." surname="Kumari" fullname="Warren "Ace" Ku | ||||
| mari"> | ||||
| <organization showOnFrontPage="true">Google</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>1600 Amphitheatre Parkway</street> | ||||
| <city>Mountain View</city> | ||||
| <region>CA</region> | ||||
| <code>94043</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>warren@kumari.net</email> | ||||
| </address> | ||||
| </author> | ||||
| <author initials="P." surname="Sood" fullname="Puneet Sood"> | ||||
| <organization showOnFrontPage="true">Google</organization> | ||||
| <address> | ||||
| <email>puneets@google.com</email> | ||||
| </address> | ||||
| </author> | ||||
| </section> | ||||
| </back> | </back> | |||
| <!-- ##markdown-source: | ||||
| H4sIAErV7l0AA7V8W3cbR5Lme/6KXPrB0hwAIiXZltQP0xApt9UWRa1It3d3 | ||||
| ZrdPApUA0ixUYSqrCKF7PL9s3vaPbXwRkVlVJOhxP6zPkUkCWXmJ6xeXrOl0 | ||||
| atrQlv6NvfbNXajW9rp1pbcXrnW2re377a6p7+jvj9f2s4+hDL5aHoxbLBp/ | ||||
| 94Y/xoNeHjNFvazclmYrGrdqp8G3q2lRxXo3jRg1jRg1PTs1hWtplH1+evZ6 | ||||
| evZ8evramLBr3ti26WL7/PT09elz4xrv3tj3Veubyrdmv+b1rj7Zn+vmFlv9 | ||||
| U1N3O3O77wdNL7CuWbr2jY1tYbodFopv7Nnpi5cT/P+biX1+9urMmGVd0Bxv | ||||
| bBenLi5DMLvwxlg7pVMv+Wc8bBu/ivJ73bT8h3Fdu6kbHkn/rA0VzX4xO5/Z | ||||
| D27fEHE8fyxUuHB3obDn46/qhla9atyylL/91oWSTk6U+WNRzOhrM57955n9 | ||||
| sdu6Jgxm/tk1NKM9mS/9yfBbnvxPdb3WySNt2xMxzr49PbXz7W4T2o139KH9 | ||||
| 5JrbvTvwqGVoD2/sZd1VrQuV/Uvwe/m8Lmit87l9/fL05Qv9iAY1NPqn6/lw | ||||
| +3ve0B9veSsz8Gt8iE8ze13XxeAIn7qKttZ/en/rOvGOh8U/rvmb2bLekqhU | ||||
| q7rZujbceXDiItz6tyQst/ENP9m6Zo1Db9p2F988e7bf72chhpkvumf/8Uu9 | ||||
| qTbPPs0/vft8/YyO3LizV4vZrljJo6IMJz9viLpEKp7b6uT0R4x+2UL2IPkX | ||||
| fuWr6KO96Br+7KKOJzxNLyX4b6o/08n/FOo7V3lLQnM5s7yHR0b+mTZrf/Ch | ||||
| IGJU1SODLusmtH+zl50vS988MuhzWLqmqG3h7RWxYrnZhqJ9bELXLGsR3shf | ||||
| ibaSsr4i3Z2+OBPR8k0gi0CsSOecn1/KqKyP9tK72DV+66vWntfVyvd6QHy7 | ||||
| eg/NnJ2dvfzm2Yvn37365sXzmfx8SUPOy7orrtsmrPzjfK2KGKekqrs6hm4L | ||||
| 7Xm2302XNW2gap91u7J2RXyGTT07ff4Mo/H7X0+/nU9f/vUtDa/L1v9153a+ | ||||
| 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 | ||||
| jAupuAokIEn2XfgtGl2LTpPyb0x6Q9MtjZ7mcgK68SER9TLOQv3MV88iQ+pn | ||||
| 8mycbdpt+dUgLjZygZVkT5oKhr39SGEgdU1LIFoaXmvNVNKeYzPsvMH+sZEA | ||||
| 8Jg7t/U6CntIeUsVvx/sH3wrnOnfCnd9glR3fktdukinHT5WCqO+kPTnKLma | ||||
| jMdi0GY2fkNU4PLY1qeOes4Sij6ExuQTqD9I4asoF9cg9yhF7fhNCq4QMc63 | ||||
| oBMSVXc+MKBiSPjdkPcyFJzR5j6a4TVnaS0QnAwps/WwuGzdIqXIpCZ9D2jl | ||||
| 9oecB5VbUKD31U7u/Cq5OejoQ/j7uZVBRG+ORvRYguet7/c69rYgR49mADVo | ||||
| /DSw8KXcSd8Vi1btPk3sYBOQKeGCReSaFhRnQRvRyjzH/6GSFwYJwwf6nA1z | ||||
| vqTrMoRVgKW7gTABkKm3/EXkzMUxe+WNA17B88KPgip9ZQdNJgxPcn4kMaU1 | ||||
| 0nzhAohc8oK6AyQTthqrccky7SiBaE0IeynVSek28RGJpZrrg0Z5w9zj/AcK | ||||
| 5NyUtFDwMGyaY6lEE0AgQ8sd7YIapB1TrpCnt/k97Ca8118W00hGEKkiEnI/ | ||||
| EEK2Mmxq6ZknQl2/OzeaYh7mQYSp92/B53wXZ4FaHpjaiUxuTqj7dtrAfVmh | ||||
| wI6kVX+mr3DN1eLcMiPFTt6nSd10pP5VQY5O8sCEP4g1OwpYA1+xvPlwPYek | ||||
| Xlzbz5/jsCdNYFvH4b9i4490UgzGzxf9RZIbDhEi+Rq0+6W3gqRr5tgTCGl+ | ||||
| s1LC5ZHhW3PY5WKK3O4+iJqPvoNIUl7i7LvY93MGfe8awTu+j5UaWnDNne9v | ||||
| Exf3YyTS3wjRIEnqPSiiFf1b2yRW4/anYRPEyEVBj5h6HKHcer8zGewj3L3X | ||||
| hhKakdnnSdfIazl+scRNajnUqDZBh9xcUMrr+vSqndSTSBoC419N5qarQpkw | ||||
| /IIeJg16nGaEpXJ/10QnkVs+3DFZbxeh8kJ/Dd0u+ncHWvS6H+Vwbh3I6bs+ | ||||
| j6SxRrLg+c0HRgVPio3AjjP7Vtox+31pZhQ1EbdzS25Y4zIDIma34Cot7sIW | ||||
| akAIykZtzKERmDaXacOKpYGwu75RAzjh738fvKcUnl29CnBQhZdHwrxtSMPG | ||||
| 732ccOxGyDiFV1EStWL/B8VO8UmMVRJAVruuFz44EjQpgKCZJnb4yj7OhkzJ | ||||
| YPaWK/V5iKsyUo2b3uX3li4H7y2laM91AGTi8qGqmoHJNJ6Zn/XyxFDn+je7 | ||||
| cNlBUkr2riur3DScFRVveuacFT80FFdfCZSQ9gO2VMjCymt7+Bi5MJrNJLJK | ||||
| 3FCY3EXqw8wVbKLo4IwjnVJ3Tx6PeIMEmO12cn2fY+DckqyxODtCCm0kAce5 | ||||
| NR6ntWYzL/nakURBE3s+zyuAg4MKYYIJoNjDhnT2UZ+acOeWx1zUUbqTCGlF | ||||
| s+8f2qMLlSeRFnie9+P85rjbkzvYfXjZl2CQQVvlnO0g84y5CkTxOvf7+cf5 | ||||
| scn1JWok0zxifJubn5wvYSkpGpHbHinqVcicWluhp7eExINDXrvZcZZ9Yj/X | ||||
| BDxb+67YIs02sTc1EeJ7cn6biXlbL+wPjlSb3MENGciDs38O1daHib0kUQr2 | ||||
| x7JGEujP3LBxSRDZdZP8zmZ+W/PE/BnJsM81sfSyu0XQdk1kbSg2Jpt44fBm | ||||
| ousabwz65Ag6/SV8CaSVn125sj/7hVx9M/zVz2Rp05vXxMCjdkZ84o5o74uF | ||||
| oHke/EO9WqE/Ojes8g0oeTlZdZtL9STt+laNHoB/InmmSE1QOOMz0O1Qd4LD | ||||
| NIe/qnGfHc9uPZ7Mr0N6/+76T4M9rpBKMLLTN5bogF1dkLCVYT+xb331i9uS | ||||
| mv7oio4Ied1xJPkjuY9NBQJdhuYXZ378v/+5KT2UWtzyvHBbmopUbSbvRsXR | ||||
| zf8DFAIysqJeAAA= | ||||
| </rfc> | </rfc> | |||
| End of changes. 86 change blocks. | ||||
| 624 lines changed or deleted | 843 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||