<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
There has to be one entity for each item to be referenced.
An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC0882 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.0882.xml">
<!ENTITY RFC0883 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.0883.xml">
<!ENTITY RFC2119 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8126 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
<!ENTITY RFC8174 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC1034 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1034.xml">
<!ENTITY RFC1035 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml">
<!ENTITY RFC2308 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2308.xml">
<!ENTITY RFC4035 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4035.xml">
<!ENTITY RFC4697 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4697.xml">
<!ENTITY RFC5452 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5452.xml">
<!ENTITY RFC8767 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8767.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="std" docName="draft-dwmtwc-dnsop-caching-resolution-failures-01" ipr="trust200902" consensus="true" updates="2308">
  <!-- category values: std, bcp, info, exp, and historic
  ipr values: full3667, noModification3667, noDerivatives3667
  you can add the attributes updates="NNNN" and obsoletes="NNNN"
  they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the
    full title is longer than 39 characters -->

    <title abbrev="Caching Resolution Failures">Negative Caching of DNS Resolution Failures</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Duane Wessels" initials="D." surname="Wessels">
      <organization>Verisign</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
        </postal>
        <phone>+1 703 948-3200</phone>
        <email>dwessels@verisign.com</email>
        <uri>https://verisign.com</uri>
      </address>
    </author>

    <author fullname="William Carroll" initials="W." surname="Carroll">
      <organization>Verisign</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
        </postal>
        <phone>+1 703 948-3200</phone>
        <email>wicarroll@verisign.com</email>
        <uri>https://verisign.com</uri>
      </address>
    </author>

    <author fullname="Matthew Thomas" initials="M." surname="Thomas">
      <organization>Verisign</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
        </postal>
        <phone>+1 703 948-3200</phone>
        <email>mthomas@verisign.com</email>
        <uri>https://verisign.com</uri>
      </address>
    </author>

    <date year="2022"/>

    <area>General</area>

    <workgroup>Internet Engineering Task Force</workgroup>

    <keyword>DNS</keyword>
    <keyword>Negative</keyword>
    <keyword>Caching</keyword>

    <abstract>
      <t>
	In the DNS, resolvers employ caching to reduce both latency for
	end users and load on authoritative name servers.
<!-- Jim Gould: I believe the only reason for the caching is to reduce the latency for the end users, where a positive side effect is decreasing the load on the authoritative name servers. -->
      The process of
	resolution may result in one of three types of responses: (1) a
	response containing the requested data; (2) a response indicating
	the requested data does not exist; or (3) a non-response due to
	a resolution failure in which the resolver does not receive any
	useful information regarding the data's existence.  This document
	concerns itself only with the third type.
      </t>
      <t>
        RFC 2308 specifies requirements for DNS
        negative caching.  There, caching of type (1) and (2) responses
        is mandatory
        and caching of type (3) responses
        is optional.  This document updates RFC 2308
        to require negative caching
        for DNS resolution failures.
      </t>
    </abstract>
  </front>

  <middle>

    <section title="Introduction">

      <t>
        Caching has always been a fundamental component of DNS resolution
        on the Internet.  For example <xref target="RFC0882"/> states:
      </t>
      <t>
         "The sheer size of the database and frequency of updates suggest
         that it must be maintained in a distributed manner, with local
         caching to improve performance."
      </t>
      <t>
	The early DNS RFCs (<xref target="RFC0882"/>, <xref
	target="RFC0883"/>, <xref target="RFC1034"/>, and <xref
	target="RFC1035"/>) primarily discuss caching in the context
	of what <xref target="RFC2308"/> calls "positive" responses,
        that is, when the response includes the requested data.
        In this case, a TTL is associated with each resource record in
	the response.  Resolvers can cache and reuse the data until the
	TTL expires.
      </t>
      <t>
	Section 4.3.4 of <xref target="RFC1034"/> describes negative
	response caching, but notes it is optional and only talks
	about name errors (NXDOMAIN).  This is the origin of using
	the SOA MINIMUM field as a negative caching TTL.
      </t>
      <t>
        <xref target="RFC2308"/> updated <xref target="RFC1034"/>
        to specify new requirements for DNS negative caching, including
	making it mandatory for name error (NXDOMAIN) and no data responses.
	It further specified optional negative caching for two DNS resolution failure cases: server failure and dead / unreachable servers.
      </t>
      <t>
	FOR DISCUSSION: RFC 2308 seems to use RFC 2119 keywords somewhat inconsistently when
	in comes to requirements for negative caching of type (1) and (2) responses.  For example:
      </t>
      <ul>
	<li><t>Abstract: "negative caching should no longer be seen as an optional part of..."</t></li>
	<li><t>Section 5: "A negative answer that resulted from a name error (NXDOMAIN) should be cached..."</t></li>
	<li><t>Section 5: "A negative answer that resulted from a no data error (NODATA) should be cached..."</t></li>
	<li><t>Section 8: "Negative caching in resolvers is no-longer optional, if a resolver caches anything it must also cache negative answers."</t></li>
      </ul>
      <t>
	This document updates <xref target="RFC2308"/> to require
	negative caching of DNS resolution failures, and provides
	additional examples of resolution failures.
      </t>

      <section title="Motivation">
        <t>
	  Operators of DNS services have known for some time that
	  recursive resolvers become more aggressive when they
	  experience resolution failures.  A number of different
	  anecdotes, experiments, and incidents support this
	  claim.
        </t>
	<t>
	  [The authors vaguely recall stories of a moderately popular DNSBL
	  that wanted to shut down, but found that not responding or REFUSED
	  caused an overwhelming amount of traffic.  Are there any citable
	  references to this happening?]
        </t>
	<t>
	  In December 2009, a secondary server for a number of
	  in-addr.arpa subdomains saw its traffic suddenly double, and
	  queries of type DNSKEY in particular increase by approximately
	  two orders of magnitude, coinciding with a DNSSEC key rollover
	  by the zone operator <xref target="roll-over-and-die"/>.
	  This predated a signed root zone and an operating system
	  vendor was providing non-root trust anchors to the recursive
	  resolver, which became out-of-date following the rollover.
	  Unable to validate responses for the affected in-addr.arpa
	  zones, recursive resolvers aggressively retried their queries.
	</t>
	<t>
	  In 2016, the internet infrastructure company Dyn experienced
	  a large attack that impacted many high-profile customers.
	  As documented in a technical presentation detailing the attack <xref target="dyn-attack"/>, Dyn staff wrote:
	  "At this point we are now experiencing botnet attack traffic
	  and what is best classified as a 'retry storm'.  Looking at
	  certain large recursive platforms &gt; 10x normal volume."
	</t>
	<t>
	  In 2018 the root zone key signing key (KSK) was rolled over
	  <xref target="root-ksk-roll"/>.  Throughout the rollover
	  period, the root servers experienced a significant increase in
	  DNSKEY queries.  Before the rollover, a.root-servers.net and
	  j.root-servers.net together received about 15 million DNSKEY
	  queries per day.  At the end of the revocation period, they
	  received 1.2 billion per day -- an 80x increase.  Removal of
	  the revoked key from the zone caused DNSKEY queries to drop
	  to post-rollover but pre-revoke levels, indicating there is
	  still a population of recursive resolvers using the previous
	  root trust anchor and aggressively retrying DNSKEY queries.
	</t>
        <t>
          In 2021, Verisign researchers used botnet query traffic
          to demonstrate that certain large, public recursive DNS
          services exhibit very high query rates when all authoritative
          name servers for a zone return REFUSED or SERVFAIL <xref
          target="botnet"/>. When configured normally, query rates for
          a single botnet domain averaged approximately 50 queries
          per second.  However, when configured to return SERVFAIL,
          the query rate increased to 60,000 per second.  Furthermore,
          increases were also observed at the Root and TLD levels,
          even though delegations at those levels were unchanged and
          continued operating normally.
        </t>
        <t>
	  Later that same year, on October 4, Facebook experienced a
	  widespread and well-publicized outage <xref target="fb-outage"/>. During the 6-hour outage,
	  none of Facebook's authoritative name servers were reachable and
	  did not respond to queries. Recursive name servers attempting to
	  resolve Facebook domains experienced timeouts. During this time
	  query traffic on the .COM/.NET infrastructure increased from
	  7,000 to 900,000 queries per second [CITATION NEEDED].
        </t>
      </section>

      <section title="Related Work">
        <t>
	  <xref target="RFC2308"/> describes negative caching for four
	  types of DNS queries and responses: Name errors, no data,
	  server failures, and dead / unreachable servers.  It places
	  the strongest requirements on negative caching
	  for name errors and no data responses, while server failures
	  and dead servers are left as optional.
        </t>
        <t>
	  <xref target="RFC4697"/> is a Best Current Practice that
	  documents observed resolution misbehaviors.  It describes a
	  number of situations that can lead to excessive queries from
	  recursive resolvers, including: requerying for delegation data,
	  lame servers, responses blocked by firewalls, and records
	  with zero TTL.  <xref target="RFC4697"/> makes a number of
	  recommendations, varying from "SHOULD" to "MUST."
        </t>
        <t>
	  An expired Internet Draft describes "The DNS thundering herd
	  problem" <xref target="thundering-herd"/> as a situation arising
	  when cached data expires at the same time for a large number
	  of users.  Although that document is not focused on negative
	  caching, it does describe the benefits of combining multiple,
	  identical queries to upstream name servers.  That is, when
	  a recursive resolver receives multiple queries for the same
	  name, class, and type that cannot be answered from cached data,
	  it should combine or join them into a single upstream query,
	  rather than emit repeated, identical upstream queries.
        </t>
	<t>
	  <xref target="RFC5452"/>, "Measures for Making DNS More
	  Resilient against Forged Answers," includes a section that
	  describes the phenomenon known as birthday attacks.  Here,
	  again, the problem arises when a recursive resolver emits
	  multiple, identical upstream queries.  Multiple outstanding
	  queries makes it easier for an attacker to guess and correctly
	  match some of the DNS message parameters, such as the port
	  number and ID field.	This situation is only exacerbated in the
	  case of timeout-based resolution failures.  DNSSEC, of course,
	  is a suitable defense to spoofing attacks.
	</t>
	<t>
	  <xref target="RFC8767"/> describes "Serving Stale Data to Improve
	  DNS Resiliency." This permits a recursive resolver to return
	  possibly stale data when it is unable to refresh cached,
	  expired data.  It introduces the idea of a failure recheck
	  timer and says: "Attempts to refresh from non-responsive or
	  otherwise failing authoritative nameservers are recommended
	  to be done no more frequently than every 30 seconds."
        </t>
      </section>

      <section title="Terminology">
        <t>
          The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
          "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
          "OPTIONAL" in this document are to be interpreted as described in
          BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
          capitals, as shown here.
        </t>
        <t>
          The terms Private Use, Reserved, Unassigned, and Specification
          Required are to be interpreted as defined in <xref
          target="RFC8126"/>.
        </t>
      </section>
    </section>

    <section title="Types of DNS Resolution Failures">

      <t>
	This section describes a number of different resolution failure
	conditions.
      </t>

      <section title="Server Failure">
	<t>
	  Server failure is defined in <xref target="RFC1035"/> as:
	  "The name server was unable to process this query due to a
	  problem with the name server." A server failure is signaled
	  by setting the RCODE field to SERVFAIL.
	</t>
	<t>
	  Authoritative servers, and more specifically secondary
	  servers, return server failure responses when they don't have
	  any valid data for a zone.  That is, a secondary server has
	  been configured to serve a particular zone, but is unable to
	  retrieve or refresh the zone data from the primary server.
	</t>
	<t>
	  Recursive servers return server failure in response to a
	  number of different conditions, including many described below.
        </t>
      </section>

      <section title="Refused Response Code">
	<t>
	  A name server returns a message with the RCODE field set to REFUSED when it refuses to
	  process the query for policy reasons.
	</t>
	<t>
	  Authoritative servers generally return REFUSED when processing
	  a query for which they are not authoritative.  For example,
	  a server that is configured to be authoritative for only the
	  EXAMPLE.NET zone, may return REFUSED in response to a query
	  for EXAMPLE.COM.
        </t>
        <t>
	  Recursive servers generally return REFUSED for query
	  sources that do not match configured access control lists.
	  For example, a server that is configured to allow queries from
	  only 2001:DB8:1::/48 may return REFUSED in response to a query
	  from 2001:DB8:5::1.
        </t>
      </section>


      <section title="Timeouts">
	<t>
	  A timeout occurs when a resolver fails to receive any
	  response from a server within a reasonable amount of time.
	  <xref target="RFC2308"/> refers to this as a "dead / unreachable
	  server."
	</t>
	<t>
	  Note that resolver implementations may have two types of
	  timeouts: a smaller timeout which might trigger a query retry
	  and a larger timeout after which the server is considered
	  unresponsive.
	</t>
	<t>
	  Timeouts can present a particular problem for negative
	  caching, depending on how the resolver handles multiple,
	  outstanding queries for the same &lt;query name, type,
	  class&gt; tuple.  For example, consider a very popular
	  website in a zone whose name servers are all unresponsive.
	  A recursive resolver might receive tens or hundreds of queries
	  per second for the popular website.  If the recursive server
	  implementation "joins" these outstanding queries together,
	  then it only sends one recursive-to-authoritative query for
	  the numerous pending stub-to-recursive queries.  If, however,
	  the implementation does not join outstanding queries together,
	  then it sends one recursive-to-authoritative query for each
	  stub-to-recursive query.  If the incoming query rate is high
	  and the timeout is large, this might result in hundreds or
	  thousands of recursive-to-authoritative queries while waiting
	  for an authoritative server to time out.
	</t>
      </section>

      <section title="Delegation Loops">
	<t>
	  A delegation loop, or cycle, can occur when one domain utilizes
	  name servers in a second domain, and the second domain uses
	  name servers in the first.  For example:
	</t>
        <figure><artwork align="left"><![CDATA[
FOO.EXAMPLE.	NS	NS1.EXAMPLE.COM.
FOO.EXAMPLE.	NS	NS2.EXAMPLE.COM.

EXAMPLE.COM.	NS	NS1.FOO.EXAMPLE.
EXAMPLE.COM.	NS	NS2.FOO.EXAMPLE.
]]></artwork></figure>
	<t>
	  In this example, no names under FOO.EXAMPLE or EXAMPLE.COM can be
	  resolved because of the delegation loop.  Note that delegation loop
	  may involve more than two domains.  A resolver that does not
	  detect delegation loops may generate DDoS-levels of attack traffic
	  to authoritative name servers, as documented in the TsuNAME vulnerability
	  <xref target="TsuNAME"/>.
	</t>
      </section>

      <section title="Alias Loops">
	<t>
	  An alias loop, or cycle, can occur when one CNAME or DNAME RR refers to
	  a second name, which in turn is specified as an alias for the first.
	  For example:
	</t>
        <figure><artwork align="left"><![CDATA[
APP.FOO.EXAMPLE.	CNAME	APP.EXAMPLE.NET.
APP.EXAMPLE.NET.	CNAME	APP.FOO.EXAMPLE.
]]></artwork></figure>
      <t>
	The need to detect CNAME loops has been known since at least
	<xref target="RFC1034"/> which states in Section 3.6.2:
      </t>
      <t>
	"Of course, by the robustness principle, domain software should
	not fail when presented with CNAME chains or loops; CNAME chains
	should be followed and CNAME loops signaled as an error."
      </t>
      </section>

      <section title="DNSSEC Validation Failures">
	<t>
	  Negative caching of DNSSEC validation errors is
	  described in section 4.7 of <xref target="RFC4035"/>.
	</t>
	<t>
	  FOR DISCUSSION: RFC4035 says "resolvers MAY cache data with
	  invalid signatures" while in this document all resolution
	  failures MUST be negatively cached.  The focus of 4035 seems
	  to be on caching bad *data* rather than caching a more general
	  resolution failure (e.g. inability to retrieve keys).
	</t>
      </section>

    </section>

    <section title="DNS Negative Caching Requirements">
      <!-- t>
	<xref target="RFC2308"/> states that "a resolver MAY cache a
	server failure response" and "a server MAY cache a dead server
	indication." This document requires that a resolver MUST NOT
	requery a failing server or dead server more than three (3) times
	per minute. These retries are not required to be evenly spaced. A
	resolver MAY use exponential backoff to fulfill this requirement.
        <xref target="RFC2308"/> also requires that "it MUST NOT cache
        it for longer than five (5) minutes" and "it MUST NOT be deemed
        dead for longer than five (5) minutes." This document does not
        change the five (5) minute limit on caching a server failure or
        a dead server.
      </t -->

      <section title="Retries and Timeouts">
	<t>
          A resolver MUST NOT retry more than twice
	  (i.e., three queries in total) before considering a server
	  unresponsive.
	</t>
	<t>
	  This document does not place any requirements on timeout values,
	  which may be implementation- or configuration-dependent.
	  It is generally expected that typical timeout values range
	  from 3 to 30 seconds.
	</t>
      </section>

      <section title="TTLs">
        <t>
          Resolvers MUST cache resolution failures for at least 5 seconds.
<!-- Jim Gould: Would requiring all failures to be cached for 5 seconds, does that represent a caching memory leak issue that could be leveraged by an attacker?  I’m not sure whether all failures MUST be cached in the event of a cache attack use case.  Another question is where did the 5 seconds come from? -->
          Resolvers SHOULD employ an exponential backoff algorithm to
          increase the amount of time for subsequent resolution failures.  For example,
          the initial TTL for negatively caching a resolution failure is set to 5 seconds.  The TTL
          is doubled after each retry that results in another resolution
          failure. Consistent with <xref target="RFC2308"/>, resolution failures MUST NOT be cached for longer than
          5 minutes.
<!-- Jim Gould: Where did the 5 minutes come from? -->
        </t>
      </section>

      <section title="Scope">
        <t>
          Resolution failures MUST be cached against the specific query
          <!-- Mukund was sort of suggesting that caching by 4-tuple is
          overkill, and that caching server timeouts by IP address might
          be sufficient or preferable.  DW didn't find his arguments very
          convincing, and that change would weaken requirements from 2308
          which I'm not sure we want to do yet.  If we do then the above
          sentence could be replaced by these two:
          Resolution failures MUST be cached at least by server IP address.
          Resolution failures SHOULD be cached against the specific query
          -->
          tuple &lt;query name, type, class, server IP address&gt;.
        </t>
        <t>
	  It is common for resolvers to have multiple servers from
	  which to choose for a particular query.  For example,
	  in the case of stub-to-recursive, the stub resolver may be
	  configured with multiple resolver addresses.	In the case of
	  recursive-to-authoritative, a given zone usually has more than
	  one name server (NS record), each of which can have multiple
	  IP addresses.
	</t>
	<!-- t>
		In order to preserve cache resources, the minimal requirement is that
		resolvers cache resolution failures by server IP address.
		However, if resources are available, the cache SHOULD be scoped at the
		&lt;query name, type, class, server IP address&gt; tuple.
	</t -->
	<t>
	  Nothing in this document prevents a resolver from
	  retrying a query at a different server.  However, if all known
	  servers for a query tuple &lt;query name, type, class&gt;
	  result in resolution failure, the resolver MUST NOT send further
	  queries for the tuple until the corresponding negative cache
	  entries expire.
	</t>
      </section>

      <section title="Requerying Delegation Information">
        <t>
	  Quoting from <xref target="RFC4697"/>:
	</t>
	<t>
	  There can be times when every name server in a zone's NS RRSet is
	  unreachable (e.g., during a network outage), unavailable (e.g., the
	  name server process is not running on the server host), or
	  misconfigured (e.g., the name server is not authoritative for the
	  given zone, also known as "lame").
        </t>
        <t>
	  This document reiterates the requirement from Section 2.1.1 of <xref target="RFC4697"/>:
        </t>
        <t>
	  An iterative resolver MUST NOT send a query for the NS RRSet of a
	  non-responsive zone to any of the name servers for that zone's parent
	  zone.  For the purposes of this injunction, a non-responsive zone is
	  defined as a zone for which every name server listed in the zone's NS
	  RRSet:
	</t>
	<ol>
	  <li><t>is not authoritative for the zone (i.e., lame), or</t></li>
	  <li><t>returns a server failure response (RCODE=2), or</t></li>
	  <li><t>is dead or unreachable according to Section 7.2 of <xref target="RFC2308"/>.</t></li>
        </ol>
	<t>
	  FOR DISCUSSION: the requirement quoted above may be problematic today.  e.g., focusing
	  on NS as the query type (a) probably goes against qname minimization, and (b) is not the
	  real problem.  Also RFC 4697 doesn't place any time restriction (TTL) on this.
	</t>
      </section>

    </section>

    <section title="IANA Considerations" anchor="iana">
      <t>
        None
      </t>
    </section>

    <section title="Security Considerations" anchor="security">
      <t>
	This is intended to improve security.
      </t>
      <t>
	Future work: Think about if/how new requirements could be abused, used for DoS.
      </t>
    </section>

    <section title="Privacy Considerations" anchor="privacy">
      <t>This specification has no impact on user privacy.</t>
    </section>

    <section title="Acknowledgments" anchor="acknowledgments">
      <t>
        The authors wish to thank ...
      </t>
    </section>

    <section anchor="Changes" title="Change Log">
      <t>RFC Editor: Please remove this section before publication.</t>
      <t>This section lists substantial changes to the document as it is being worked on.</t>
      <t>From -00 to -01:
      <list style="symbols">
        <t>use phrase "the initial TTL for negatively caching a resolution failure" instead of "negative cache TTL"</t>
        <t>typos, etc</t>
      </list></t>
    </section>

  </middle>
  <back>

    <references title="Normative References">
      &RFC2119;
      &RFC8126;
      &RFC8174;
      &RFC1034;
      &RFC1035;
      &RFC2308;
      &RFC4697;
    </references>

    <references title="Informative References">
      &RFC0882;
      &RFC0883;
      &RFC4035;
      &RFC5452;
      &RFC8767;

     <reference anchor="botnet" target="https://indico.dns-oarc.net/event/38/contributions/841/">
        <front>
          <title>Botnet Traffic Observed at Various Levels of the DNS Hierarchy</title>
          <author initials="D." surname="Wessels" fullname="Duane Wessels"/>
          <author initials="M." surname="Thomas" fullname="Matt Thomas"/>
          <date year="2021" month="May"/>
        </front>
     </reference>

     <reference anchor="fb-outage" target="https://engineering.fb.com/2021/10/05/networking-traffic/outage-details/">
        <front>
          <title>More details about the October 4 outage</title>
          <author initials="S." surname="Janardhan" fullname="Santosh Janardhan"/>
          <date year="2021" month="October"/>
        </front>
     </reference>

     <reference anchor="TsuNAME" target="https://dl.acm.org/doi/10.1145/3487552.3487824">
        <front>
          <title>TsuNAME: exploiting misconfiguration and vulnerability to DDoS DNS</title>
          <author initials="G. C. M." surname="Moura" fullname="Giovane C. M. Moura"/>
	  <author initials="S." surname="Castro" fullname="Sebastian Castro"/>
	  <author initials="J." surname="Heidemann" fullname="John Heidemann"/>
	  <author initials="W." surname="Hardaker" fullname="Wes Hardaker"/>
          <date year="2021" month="November"/>
        </front>
     </reference>

     <reference anchor="roll-over-and-die" target="https://www.potaroo.net/ispcol/2010-02/rollover.html">
        <front>
          <title>Roll Over and Die?</title>
          <author initials="G." surname="Michaleson" fullname="George Michaleson"/>
	  <author initials="P." surname="Wallstr&ouml;m" fullname="Patrik Wallstr&ouml;m"/>
	  <author initials="R." surname="Arends" fullname="Roy Arends"/>
	  <author initials="G." surname="Huston" fullname="Geoff Huston"/>
          <date year="2010" month="February"/>
        </front>
     </reference>

     <reference anchor="dyn-attack" target="https://ccnso.icann.org/sites/default/files/file/field-file-attach/2017-04/presentation-oracle-dyn-ddos-dns-13mar17-en.pdf">
        <front>
          <title>Dyn, DDoS, and DNS</title>
          <author initials="A." surname="Sullivan" fullname="Andrew Sullivan"/>
          <date year="2017" month="March"/>
        </front>
     </reference>

     <reference anchor="root-ksk-roll" target="https://dl.acm.org/doi/10.1145/3355369.3355570">
        <front>
          <title>Roll, Roll, Roll Your Root: A Comprehensive Analysis of the First Ever DNSSEC Root KSK Rollover</title>
          <author fullname="Moritz M&uuml;ller" initials="M." surname="M&uuml;ller"/>
          <author fullname="Matthew Thomas" initials="M." surname="Thomas"/>
          <author fullname="Duane Wessels" initials="D." surname="Wessels"/>
          <author fullname="Wes Hardaker" initials="W." surname="Hardaker"/>
          <author fullname="Taejoong Chung" initials="T." surname="Chung"/>
          <author fullname="Willem Toorop" initials="W." surname="Toorop"/>
          <author fullname="Roland van Rijswijk-Deij" initials="R.v." surname="Rijswijk-Deij"/>
          <date year="2019" month="Oct"/>
        </front>
     </reference>

      <reference anchor="thundering-herd" target="https://datatracker.ietf.org/doc/draft-muks-dnsop-dns-thundering-herd/">
	<front>
	  <title>The DNS thundering herd problem (expired Internet Draft)</title>
	  <author fullname="Mukund Sivaraman" initials="M." surname="Sivaraman"/>
	  <author fullname="Cricket Liu" initials="C." surname="Liu"/>
	  <date year="2020" month="Jun"/>
	</front>
      </reference>

<!-- https://indico.dns-oarc.net/event/38/contributions/841/ -->

    </references>

  </back>
</rfc>
