<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-core-hop-limit-07" indexInclude="true" ipr="trust200902" number="8768" prepTime="2020-03-20T21:03:17" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="4" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-core-hop-limit-07" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8768" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="CoAP Hop-Limit Option">Constrained Application Protocol (CoAP) Hop-Limit Option</title>
    <seriesInfo name="RFC" value="8768" stream="IETF"/>
    <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
      <organization showOnFrontPage="true">Orange</organization>
      <address>
        <postal>
          <city>Rennes</city>
          <code>35000</code>
          <country>France</country>
        </postal>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
      <organization abbrev="McAfee" showOnFrontPage="true">McAfee, Inc.</organization>
      <address>
        <postal>
          <street>Embassy Golf Link Business Park</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560071</code>
          <country>India</country>
        </postal>
        <email>kondtir@gmail.com</email>
      </address>
    </author>
    <author fullname="Jon Shallow" initials="J." surname="Shallow">
      <organization showOnFrontPage="true"/>
      <address>
        <postal>
          <country>United Kingdom</country>
        </postal>
        <email>supjps-ietf@jpshallow.com</email>
      </address>
    </author>
    <date month="03" year="2020"/>
    <workgroup>CORE</workgroup>
    <keyword>security</keyword>
    <keyword>mitigation</keyword>
    <keyword>service delivery</keyword>
    <keyword>connectivity</keyword>
    <keyword>anti-DDoS</keyword>
    <keyword>automation</keyword>
    <keyword>cooperation</keyword>
    <keyword>Resilience</keyword>
    <keyword>Filtering</keyword>
    <keyword>Security Center</keyword>
    <keyword>Mitigator</keyword>
    <keyword>Scrubbing</keyword>
    <keyword>dynamic service protection</keyword>
    <keyword>dynamic mitigation</keyword>
    <abstract pn="section-abstract">
      <t pn="section-abstract-1">The presence of Constrained Application Protocol (CoAP) proxies may
      lead to infinite forwarding loops, which is undesirable. To prevent and
      detect such loops, this document specifies the Hop-Limit CoAP
      option.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t 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/rfc8768" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t 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" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-intended-usage">Intended Usage</xref></t>
              </li>
            </ul>
          </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 derivedContent="" 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 derivedContent="" format="title" sectionFormat="of" target="name-hop-limit-option">Hop-Limit Option</xref></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 derivedContent="" format="title" sectionFormat="of" target="name-debugging-and-troubleshooti">Debugging and Troubleshooting</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 derivedContent="" format="title" sectionFormat="of" target="name-http-mapping-considerations">HTTP Mapping Considerations</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 derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-coap-response-code">CoAP Response Code</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-coap-option-number">CoAP Option Number</xref></t>
              </li>
            </ul>
          </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 derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</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 derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t keepWithNext="true" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t keepWithNext="true" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t pn="section-1-1">More and more applications are using the Constrained Application
      Protocol (CoAP) <xref target="RFC7252" format="default" sectionFormat="of" derivedContent="RFC7252"/> as a communication
      protocol between application agents. For example, <xref target="I-D.ietf-dots-signal-channel" format="default" sectionFormat="of" derivedContent="DOTS-SIG-CHANNEL"/> specifies how CoAP is used
      as a signaling protocol between domains under distributed
      denial-of-service (DDoS) attacks and DDoS mitigation providers. In such
      contexts, a CoAP client can communicate directly with a server or
      indirectly via proxies.</t>
      <t pn="section-1-2">When multiple proxies are involved, infinite forwarding loops may be
      experienced (e.g., routing misconfiguration, policy conflicts). To
      prevent such loops, this document defines a new CoAP option, called
      Hop-Limit (<xref target="spec" format="default" sectionFormat="of" derivedContent="Section 3"/>). Also, the document defines a
      new CoAP Response Code (<xref target="code" format="default" sectionFormat="of" derivedContent="Section 6.1"/>) to report loops
      together with relevant diagnostic information to ease troubleshooting
      (<xref target="debug" format="default" sectionFormat="of" derivedContent="Section 4"/>).</t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-intended-usage">Intended Usage</name>
        <t pn="section-1.1-1">The Hop-Limit option was originally designed for a specific use
        case <xref target="I-D.ietf-dots-signal-channel" format="default" sectionFormat="of" derivedContent="DOTS-SIG-CHANNEL"/>. However, its
        intended usage is general: </t>
        <ul empty="true" spacing="normal" bare="false" pn="section-1.1-2">
          <li pn="section-1.1-2.1">New CoAP proxies <bcp14>MUST</bcp14> implement this option and have it enabled
            by default.</li>
        </ul>
        <t pn="section-1.1-3">Note that this means that a server that receives requests both via
        proxies and directly from clients may see otherwise identical requests
        with and without the Hop-Limit option included; servers with internal
        caching will therefore also want to implement this option, since
        understanding the Hop-Limit option will improve caching
        efficiency.</t>
      </section>
    </section>
    <section anchor="notation" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t pn="section-2-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
    described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
      </t>
      <t pn="section-2-2">Readers should be familiar with the terms and concepts defined in
      <xref target="RFC7252" format="default" sectionFormat="of" derivedContent="RFC7252"/>.</t>
    </section>
    <section anchor="spec" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-hop-limit-option">Hop-Limit Option</name>
      <t pn="section-3-1">The properties of the Hop-Limit option are shown in <xref target="tab-option-props" format="default" sectionFormat="of" derivedContent="Table 1"/>. The
      formatting of this table follows the one used in Table 4 of 
      <xref target="RFC7252" section="5.10" sectionFormat="parens" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-5.10" derivedContent="RFC7252"/>. The C, U, N, and R columns
      indicate the properties Critical, Unsafe, NoCacheKey, and Repeatable
      defined in <xref target="RFC7252" section="5.4" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-5.4" derivedContent="RFC7252"/>. None of these
      properties is marked for the Hop-Limit option.</t>
      <table anchor="tab-option-props" align="center" pn="table-1">
        <name slugifiedName="name-coap-hop-limit-option-prope">CoAP Hop-Limit Option Properties</name>
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Number</th>
            <th align="left" colspan="1" rowspan="1">C</th>
            <th align="left" colspan="1" rowspan="1">U</th>
            <th align="left" colspan="1" rowspan="1">N</th>
            <th align="left" colspan="1" rowspan="1">R</th>
            <th align="left" colspan="1" rowspan="1">Name</th>
            <th align="left" colspan="1" rowspan="1">Format</th>
            <th align="left" colspan="1" rowspan="1">Length</th>
            <th align="left" colspan="1" rowspan="1">Default</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">16</td>
            <td align="left" colspan="1" rowspan="1"> </td>
            <td align="left" colspan="1" rowspan="1"> </td>
            <td align="left" colspan="1" rowspan="1"> </td>
            <td align="left" colspan="1" rowspan="1"> </td>
            <td align="left" colspan="1" rowspan="1">Hop-Limit</td>
            <td align="left" colspan="1" rowspan="1">uint</td>
            <td align="left" colspan="1" rowspan="1">1</td>
            <td align="left" colspan="1" rowspan="1">16</td>
          </tr>
        </tbody>
      </table>
      <t pn="section-3-3">The Hop-Limit option (<xref target="option" format="default" sectionFormat="of" derivedContent="Section 6.2"/>) is an elective
      option used to detect and prevent infinite loops of CoAP requests when
      proxies are involved. The option is not repeatable. Therefore, any
      request carrying multiple Hop-Limit options <bcp14>MUST</bcp14> be handled following
      the procedure specified in <xref target="RFC7252" section="5.4.5" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-5.4.5" derivedContent="RFC7252"/>.</t>
      <t pn="section-3-4">The value of the Hop-Limit option is encoded as an unsigned integer
      (see <xref target="RFC7252" section="3.2" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-3.2" derivedContent="RFC7252"/>). This value <bcp14>MUST</bcp14> be
      between 1 and 255 inclusive. CoAP requests received with a Hop-Limit
      option set to '0' or greater than '255' <bcp14>MUST</bcp14> be rejected by a CoAP
      server/proxy using 4.00 (Bad Request).</t>
      <t pn="section-3-5">The Hop-Limit option is safe to forward. That is, a CoAP proxy that
      does not understand the Hop-Limit option should forward it on. The
      option is also part of the cache key. As such, a CoAP proxy that does
      not understand the Hop-Limit option must follow the recommendations in
      <xref target="RFC7252" section="5.7.1" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-5.7.1" derivedContent="RFC7252"/> for caching. Note that
      loops that involve only such proxies will not be detected. Nevertheless,
      the presence of such proxies will not prevent infinite loop detection if
      at least one CoAP proxy that supports the Hop-Limit option is involved
      in the loop.</t>
      <t pn="section-3-6">A CoAP proxy that understands the Hop-Limit option <bcp14>SHOULD</bcp14> be
      instructed, using a configuration parameter, to insert a Hop-Limit
      option when relaying a request that does not include the Hop-Limit
      option.</t>
      <t pn="section-3-7">The initial Hop-Limit value should be configurable. If no initial
      value is explicitly provided, the default initial Hop-Limit value of 16
      <bcp14>MUST</bcp14> be used. This value is chosen so that in the majority of cases, it
      is sufficiently large to guarantee that a CoAP request would not be
      dropped in networks when there were no loops, but not so large as to
      consume CoAP proxy resources when a loop does occur. The value is still
      configurable to accommodate unusual topologies. Lower values should be
      used with caution and only in networks where topologies are known by the
      CoAP client (or proxy) inserting the Hop-Limit option.</t>
      <t pn="section-3-8">Because forwarding errors may occur if inadequate Hop-Limit values
      are used, proxies at the boundaries of an administrative domain <bcp14>MAY</bcp14> be
      instructed to remove or rewrite the value of Hop-Limit carried in
      received requests (i.e., ignore the value of Hop-Limit received in a
      request). This modification should be done with caution in case
      proxy-forwarded traffic repeatedly crosses the administrative domain
      boundary in a loop, rendering ineffective the efficacy of loop detection
      through the Hop-Limit option.</t>
      <t pn="section-3-9">Otherwise, a CoAP proxy that understands the Hop-Limit option <bcp14>MUST</bcp14>
      decrement the value of the option by 1 prior to forwarding it. A CoAP
      proxy that understands the Hop-Limit option <bcp14>MUST NOT</bcp14> use a stored 5.08 
      (Hop Limit Reached) error response unless the value of the Hop-Limit
      option in the presented request is smaller than or equal to the value of
      the Hop-Limit option in the request used to obtain the stored response.
      Otherwise, the CoAP proxy follows the behavior in 
      <xref target="RFC7252" section="5.6" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-5.6" derivedContent="RFC7252"/>.</t>
      <ul empty="true" spacing="normal" bare="false" pn="section-3-10">
        <li pn="section-3-10.1">Note: If a request with a given value of Hop-Limit failed to
          reach a server because the hop limit is exhausted, then the same
          failure will be observed if a smaller value of the Hop-Limit option
          is used instead.</li>
      </ul>
      <t pn="section-3-11">CoAP requests <bcp14>MUST NOT</bcp14> be forwarded if the Hop-Limit option is set to
      '0' after decrement. Requests that cannot be forwarded because of
      exhausted Hop-Limit <bcp14>SHOULD</bcp14> be logged with a 5.08 (Hop Limit Reached)
      error response sent back to the CoAP peer. It is <bcp14>RECOMMENDED</bcp14> that CoAP
      implementations support means to alert administrators about loop errors
      so that appropriate actions are undertaken.</t>
    </section>
    <section anchor="debug" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-debugging-and-troubleshooti">Debugging and Troubleshooting</name>
      <t pn="section-4-1">To ease debugging and troubleshooting, the CoAP proxy that detects a
      loop includes an identifier for itself in the diagnostic payload under
      the conditions detailed in <xref target="RFC7252" section="5.5.2" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-5.5.2" derivedContent="RFC7252"/>. 
      That identifier <bcp14>MUST NOT</bcp14> include any space
      character (ASCII value 32). The identifier inserted by a CoAP proxy can
      be, for example, a proxy name (e.g., p11.example.net), proxy alias
      (e.g., myproxyalias), or IP address (e.g., 2001:db8::1).</t>
      <t pn="section-4-2">Each intermediate proxy involved in relaying a 5.08 (Hop Limit
      Reached) error message prepends its own identifier in the diagnostic
      payload with a space character used as separator. Only one identifier
      per proxy should appear in the diagnostic payload. 
   This approach allows the limiting of the size of the 5.08 (Hop 
   Limit Reached) error message, eases the correlation with hops 
   count, and detects whether a proxy was involved in the forwarding 
   of the 5.08 (Hop Limit Reached) error message.  Note that
      an intermediate proxy prepends its identifier only if there is enough
      space as determined by the Path MTU 
      (<xref target="RFC7252" section="4.6" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-4.6" derivedContent="RFC7252"/>). 
      If not, an intermediate proxy forwards the
      5.08 (Hop Limit Reached) error message to the next hop without updating
      the diagnostic payload.</t>
      <t pn="section-4-3">An intermediate proxy <bcp14>MUST NOT</bcp14> forward a 5.08 (Hop Limit Reached)
      error message if it detects that its identifier is included in the
      diagnostic payload. Such messages <bcp14>SHOULD</bcp14> be logged and appropriate
      alerts sent to the administrators.</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-http-mapping-considerations">HTTP Mapping Considerations</name>
      <t pn="section-5-1">This section focuses on the HTTP mappings specific to the CoAP
      extension specified in this document. As a reminder, the basic normative
      requirements on HTTP/CoAP mappings are defined in 
      <xref target="RFC7252" section="10" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-10" derivedContent="RFC7252"/>. The implementation guidelines for HTTP/CoAP
      mappings are elaborated in <xref target="RFC8075" format="default" sectionFormat="of" derivedContent="RFC8075"/>.</t>
      <t pn="section-5-2">By default, the HTTP-to-CoAP Proxy inserts a Hop-Limit option
      following the guidelines in <xref target="spec" format="default" sectionFormat="of" derivedContent="Section 3"/>. The
      HTTP-to-CoAP Proxy may be instructed by policy to insert a Hop-Limit
      option only if a Via (<xref target="RFC7230" section="5.7.1" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7230#section-5.7.1" derivedContent="RFC7230"/>)
      or CDN-Loop header field <xref target="RFC8586" format="default" sectionFormat="of" derivedContent="RFC8586"/> is present in
      the HTTP request.</t>
      <t pn="section-5-3">The HTTP-to-CoAP Proxy uses 508 (Loop Detected) as the HTTP response
      status code to map 5.08 (Hop Limit Reached). Furthermore, it maps the
      diagnostic payload of 5.08 (Hop Limit Reached) as per 
      <xref target="RFC8075" section="6.6" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8075#section-6.6" derivedContent="RFC8075"/>.</t>
      <t pn="section-5-4">By default, the CoAP-to-HTTP Proxy inserts a Via header field in the
      HTTP request if the CoAP request includes a Hop-Limit option. The
      CoAP-to-HTTP Proxy may be instructed by policy to insert a CDN-Loop
      header field instead of the Via header field.</t>
      <t pn="section-5-5">The CoAP-to-HTTP Proxy maps the 508 (Loop Detected) HTTP response
      status code to 5.08 (Hop Limit Reached). Moreover, the CoAP-to-HTTP
      Proxy inserts its information following the guidelines in <xref target="debug" format="default" sectionFormat="of" derivedContent="Section 4"/>.</t>
      <t pn="section-5-6">When both HTTP-to-CoAP and CoAP-to-HTTP proxies are involved, the
      loop detection may break if the proxy-forwarded traffic repeatedly
      crosses the HTTP-to-CoAP and CoAP-to-HTTP proxies. Nevertheless, if the
      loop is within the CoAP or HTTP legs, the loop detection is still
      functional.</t>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section anchor="code" numbered="true" toc="include" removeInRFC="false" pn="section-6.1">
        <name slugifiedName="name-coap-response-code">CoAP Response Code</name>
        <t pn="section-6.1-1">IANA has registered the following entry in the "CoAP Response
        Codes" subregistry available at
        <eref target="https://www.iana.org/assignments/core-parameters" brackets="angle"/>:</t>
        <table anchor="tab-resp-codes" align="center" pn="table-2">
          <name slugifiedName="name-coap-response-codes">CoAP Response Codes</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Code</th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">5.08</td>
              <td align="left" colspan="1" rowspan="1">Hop Limit Reached</td>
              <td align="left" colspan="1" rowspan="1">RFC 8768</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="option" numbered="true" toc="include" removeInRFC="false" pn="section-6.2">
        <name slugifiedName="name-coap-option-number">CoAP Option Number</name>
        <t pn="section-6.2-1">IANA has registered the following entry in the "CoAP Option
        Numbers" subregistry available at
        <eref target="https://www.iana.org/assignments/core-parameters" brackets="angle"/>:</t>
        <table anchor="tab-option-number" align="center" pn="table-3">
          <name slugifiedName="name-coap-option-number-2">CoAP Option Number</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Number</th>
              <th align="left" colspan="1" rowspan="1">Name</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">16</td>
              <td align="left" colspan="1" rowspan="1">Hop-Limit</td>
              <td align="left" colspan="1" rowspan="1">RFC 8768</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="security" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t pn="section-7-1">Security considerations related to CoAP proxying are discussed in
      <xref target="RFC7252" section="11.2" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7252#section-11.2" derivedContent="RFC7252"/>.</t>
      <t pn="section-7-2">A CoAP endpoint can probe the topology of a network into which it is
      making requests by tweaking the value of the Hop-Limit option. Such
      probing is likely to fail if proxies at the boundaries of that network
      rewrite the value of Hop-Limit carried in received requests (see <xref target="spec" format="default" sectionFormat="of" derivedContent="Section 3"/>).</t>
      <t pn="section-7-3">The diagnostic payload of a 5.08 (Hop Limit Reached) error message
      may leak sensitive information revealing the topology of an
      administrative domain. To prevent that, a CoAP proxy that is located at
      the boundary of an administrative domain <bcp14>MAY</bcp14> be instructed to strip the
      diagnostic payload or part of it before forwarding on the 5.08 (Hop
      Limit Reached) response.</t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-dots-signal-channel" to="DOTS-SIG-CHANNEL"/>
    <references pn="section-8">
      <name slugifiedName="name-references">References</name>
      <references pn="section-8.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC7230" target="https://www.rfc-editor.org/info/rfc7230" quoteTitle="true" derivedAnchor="RFC7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author initials="R." surname="Fielding" fullname="R. Fielding" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Reschke" fullname="J. Reschke" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252" quoteTitle="true" derivedAnchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author initials="Z." surname="Shelby" fullname="Z. Shelby">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="K." surname="Hartke" fullname="K. Hartke">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8075" target="https://www.rfc-editor.org/info/rfc8075" quoteTitle="true" derivedAnchor="RFC8075">
          <front>
            <title>Guidelines for Mapping Implementations: HTTP to the Constrained Application Protocol (CoAP)</title>
            <author initials="A." surname="Castellani" fullname="A. Castellani">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Loreto" fullname="S. Loreto">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Rahman" fullname="A. Rahman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Fossati" fullname="T. Fossati">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Dijk" fullname="E. Dijk">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="February"/>
            <abstract>
              <t>This document provides reference information for implementing a cross-protocol network proxy that performs translation from the HTTP protocol to the Constrained Application Protocol (CoAP).  This will enable an HTTP client to access resources on a CoAP server through the proxy.  This document describes how an HTTP request is mapped to a CoAP request and how a CoAP response is mapped back to an HTTP response.  This includes guidelines for status code, URI, and media type mappings, as well as additional interworking advice.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8075"/>
          <seriesInfo name="DOI" value="10.17487/RFC8075"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author 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 protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references pn="section-8.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="I-D.ietf-dots-signal-channel" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-dots-signal-channel-41" derivedAnchor="DOTS-SIG-CHANNEL">
          <front>
            <title>Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal Channel Specification</title>
            <author initials="T" surname="Reddy" fullname="Tirumaleswar Reddy">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M" surname="Boucadair" fullname="Mohamed Boucadair">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P" surname="Patil" fullname="Prashanth Patil">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A" surname="Mortensen" fullname="Andrew Mortensen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N" surname="Teague" fullname="Nik Teague">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="January" day="6" year="2020"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dots-signal-channel-41"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-dots-signal-channel-41.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="RFC8586" target="https://www.rfc-editor.org/info/rfc8586" quoteTitle="true" derivedAnchor="RFC8586">
          <front>
            <title>Loop Detection in Content Delivery Networks (CDNs)</title>
            <author initials="S." surname="Ludin" fullname="S. Ludin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Nottingham" fullname="M. Nottingham">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Sullivan" fullname="N. Sullivan">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2019" month="April"/>
            <abstract>
              <t>This document defines the CDN-Loop request header field for HTTP. CDN-Loop addresses an operational need that occurs when an HTTP request is intentionally forwarded between Content Delivery Networks (CDNs), but is then accidentally or maliciously re-routed back into the original CDN causing a non-terminating loop.  The new header field can be used to identify the error and terminate the loop.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8586"/>
          <seriesInfo name="DOI" value="10.17487/RFC8586"/>
        </reference>
      </references>
    </references>
    <section anchor="ack" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t pn="section-appendix.a-1">This specification was part of <xref target="I-D.ietf-dots-signal-channel" format="default" sectionFormat="of" derivedContent="DOTS-SIG-CHANNEL"/>. 
      Many thanks to those who reviewed DOTS specifications.</t>
      <t pn="section-appendix.a-2">Thanks to <contact fullname="Klaus Hartke"/>, <contact fullname="Carsten Bormann"/>, 
      <contact fullname="Peter van der Stok"/>, <contact fullname="Jim Schaad"/>, 
      <contact fullname="Jaime Jiménez"/>, <contact fullname="Roni Even"/>, 
      <contact fullname="Scott Bradner"/>, <contact fullname="Thomas Fossati"/>,
      <contact fullname="Radia Perlman"/>, <contact fullname="Éric Vyncke"/>, 
      <contact fullname="Suresh Krishnan"/>, <contact fullname="Roman Danyliw"/>, 
      <contact fullname="Barry Leiba"/>, <contact fullname="Christer Holmberg"/>, 
      <contact fullname="Benjamin Kaduk"/>, and <contact fullname="Adam Roach"/> for their
      review and comments.</t>
      <t pn="section-appendix.a-3"><contact fullname="Carsten Bormann"/> provided the "Intended Usage" text.</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 fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
        <organization showOnFrontPage="true">Orange</organization>
        <address>
          <postal>
            <city>Rennes</city>
            <code>35000</code>
            <country>France</country>
          </postal>
          <email>mohamed.boucadair@orange.com</email>
        </address>
      </author>
      <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
        <organization abbrev="McAfee" showOnFrontPage="true">McAfee, Inc.</organization>
        <address>
          <postal>
            <street>Embassy Golf Link Business Park</street>
            <city>Bangalore</city>
            <region>Karnataka</region>
            <code>560071</code>
            <country>India</country>
          </postal>
          <email>kondtir@gmail.com</email>
        </address>
      </author>
      <author fullname="Jon Shallow" initials="J." surname="Shallow">
        <organization showOnFrontPage="true"/>
        <address>
          <postal>
            <country>United Kingdom</country>
          </postal>
          <email>supjps-ietf@jpshallow.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
