rfc8768xml2.original.xml | rfc8768.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<?rfc toc="yes"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" | |||
<?rfc tocompact="yes"?> | category="std" | |||
<?rfc tocdepth="4"?> | docName="draft-ietf-core-hop-limit-07" | |||
<?rfc tocindent="yes"?> | number="8768" | |||
<?rfc symrefs="yes"?> | ipr="trust200902" | |||
<?rfc sortrefs="yes"?> | obsoletes="" | |||
<?rfc comments="yes"?> | updates="" | |||
<?rfc inline="yes"?> | submissionType="IETF" | |||
<?rfc compact="yes"?> | consensus="true" | |||
<?rfc subcompact="no"?> | xml:lang="en" | |||
<rfc category="std" docName="draft-ietf-core-hop-limit-07" ipr="trust200902"> | tocInclude="true" | |||
tocDepth="4" | ||||
symRefs="true" | ||||
sortRefs="true" | ||||
version="3"> | ||||
<front> | <front> | |||
<title abbrev="CoAP Hop Limit Option">Constrained Application Protocol | <title abbrev="CoAP Hop-Limit Option">Constrained Application Protocol | |||
(CoAP) Hop-Limit Option</title> | (CoAP) Hop-Limit Option</title> | |||
<seriesInfo name="RFC" value="8768"/> | ||||
<author fullname="Mohamed Boucadair" initials="M." surname="Boucadair"> | <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair"> | |||
<organization>Orange</organization> | <organization>Orange</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | ||||
<city>Rennes</city> | <city>Rennes</city> | |||
<region></region> | ||||
<code>35000</code> | <code>35000</code> | |||
<country>France</country> | <country>France</country> | |||
</postal> | </postal> | |||
<email>mohamed.boucadair@orange.com</email> | <email>mohamed.boucadair@orange.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K"> | ||||
<author fullname="Tirumaleswar Reddy" initials="T." surname="Reddy"> | ||||
<organization abbrev="McAfee">McAfee, Inc.</organization> | <organization abbrev="McAfee">McAfee, Inc.</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Embassy Golf Link Business Park</street> | <street>Embassy Golf Link Business Park</street> | |||
<city>Bangalore</city> | <city>Bangalore</city> | |||
<region>Karnataka</region> | <region>Karnataka</region> | |||
<code>560071</code> | <code>560071</code> | |||
<country>India</country> | <country>India</country> | |||
</postal> | </postal> | |||
<email>kondtir@gmail.com</email> | <email>kondtir@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Jon Shallow" initials="J." surname="Shallow"> | <author fullname="Jon Shallow" initials="J." surname="Shallow"> | |||
<organization></organization> | <organization/> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | ||||
<city></city> | ||||
<region></region> | ||||
<code></code> | ||||
<country>United Kingdom</country> | <country>United Kingdom</country> | |||
</postal> | </postal> | |||
<email>supjps-ietf@jpshallow.com</email> | <email>supjps-ietf@jpshallow.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="March" year="2020"/> | ||||
<date /> | ||||
<workgroup>CORE</workgroup> | <workgroup>CORE</workgroup> | |||
<keyword>security</keyword> | <keyword>security</keyword> | |||
<keyword>mitigation</keyword> | <keyword>mitigation</keyword> | |||
<keyword>service delivery</keyword> | <keyword>service delivery</keyword> | |||
<keyword>connectivity</keyword> | <keyword>connectivity</keyword> | |||
<keyword>anti-DDoS</keyword> | <keyword>anti-DDoS</keyword> | |||
<keyword>automation</keyword> | <keyword>automation</keyword> | |||
<keyword>cooperation</keyword> | <keyword>cooperation</keyword> | |||
<keyword>Resilience</keyword> | <keyword>Resilience</keyword> | |||
<keyword>Filtering</keyword> | <keyword>Filtering</keyword> | |||
<keyword>Security Center</keyword> | <keyword>Security Center</keyword> | |||
<keyword>Mitigator</keyword> | <keyword>Mitigator</keyword> | |||
<keyword>Scrubbing</keyword> | <keyword>Scrubbing</keyword> | |||
<keyword>dynamic service protection</keyword> | <keyword>dynamic service protection</keyword> | |||
<keyword>dynamic mitigation</keyword> | <keyword>dynamic mitigation</keyword> | |||
<abstract> | <abstract> | |||
<t>The presence of Constrained Application Protocol (CoAP) proxies may | <t>The presence of Constrained Application Protocol (CoAP) proxies may | |||
lead to infinite forwarding loops, which is undesirable. To prevent and | lead to infinite forwarding loops, which is undesirable. To prevent and | |||
detect such loops, this document specifies the Hop-Limit CoAP | detect such loops, this document specifies the Hop-Limit CoAP | |||
option.</t> | option.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="introduction" title="Introduction"> | <section anchor="introduction" numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<t>More and more applications are using the Constrained Application | <t>More and more applications are using the Constrained Application | |||
Protocol (CoAP) <xref target="RFC7252"></xref> as a communication | Protocol (CoAP) <xref target="RFC7252" format="default"/> as a communicati | |||
protocol between application agents. For example, <xref | on | |||
target="I-D.ietf-dots-signal-channel"></xref> specifies how CoAP is used | protocol between application agents. For example, <xref target="I-D.ietf-d | |||
ots-signal-channel" format="default"/> specifies how CoAP is used | ||||
as a signaling protocol between domains under distributed | as a signaling protocol between domains under distributed | |||
denial-of-service (DDoS) attacks and DDoS mitigation providers. In such | denial-of-service (DDoS) attacks and DDoS mitigation providers. In such | |||
contexts, a CoAP client can communicate directly with a server or | contexts, a CoAP client can communicate directly with a server or | |||
indirectly via proxies.</t> | indirectly via proxies.</t> | |||
<t>When multiple proxies are involved, infinite forwarding loops may be | <t>When multiple proxies are involved, infinite forwarding loops may be | |||
experienced (e.g., routing misconfiguration, policy conflicts). To | experienced (e.g., routing misconfiguration, policy conflicts). To | |||
prevent such loops, this document defines a new CoAP option, called | prevent such loops, this document defines a new CoAP option, called | |||
Hop-Limit (<xref target="spec"></xref>). Also, the document defines a | Hop-Limit (<xref target="spec" format="default"/>). Also, the document def | |||
new CoAP Response Code (<xref target="code"></xref>) to report loops | ines a | |||
new CoAP Response Code (<xref target="code" format="default"/>) to report | ||||
loops | ||||
together with relevant diagnostic information to ease troubleshooting | together with relevant diagnostic information to ease troubleshooting | |||
(<xref target="debug"></xref>).</t> | (<xref target="debug" format="default"/>).</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Intended Usage"> | <name>Intended Usage</name> | |||
<t>The Hop-Limit option was originally designed for a specific use | <t>The Hop-Limit option was originally designed for a specific use | |||
case <xref target="I-D.ietf-dots-signal-channel"></xref>. However, its | case <xref target="I-D.ietf-dots-signal-channel" format="default"/>. How | |||
intended usage is general: <list style="empty"> | ever, its | |||
<t>New CoAP proxies MUST implement this option and have it enabled | intended usage is general: </t> | |||
by default.</t> | ||||
</list></t> | ||||
<ul empty="true" spacing="normal"> | ||||
<li>New CoAP proxies <bcp14>MUST</bcp14> implement this option and hav | ||||
e it enabled | ||||
by default.</li> | ||||
</ul> | ||||
<t>Note that this means that a server that receives requests both via | <t>Note that this means that a server that receives requests both via | |||
proxies and directly from clients may see otherwise identical requests | proxies and directly from clients may see otherwise identical requests | |||
with and without the Hop-Limit option included; servers with internal | with and without the Hop-Limit option included; servers with internal | |||
caching will therefore also want to implement this option, since | caching will therefore also want to implement this option, since | |||
understanding the Hop-Limit option will improve caching | understanding the Hop-Limit option will improve caching | |||
efficiency.</t> | efficiency.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="notation" numbered="true" toc="default"> | ||||
<section anchor="notation" title="Terminology"> | <name>Terminology</name> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t> | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
"OPTIONAL" in this document are to be interpreted as described in BCP 14 | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
<xref target="RFC2119"></xref><xref target="RFC8174"></xref> when, and | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
only when, they appear in all capitals, as shown here.</t> | 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"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t>Readers should be familiar with the terms and concepts defined in | <t>Readers should be familiar with the terms and concepts defined in | |||
<xref target="RFC7252"></xref>.</t> | <xref target="RFC7252" format="default"/>.</t> | |||
</section> | </section> | |||
<section anchor="spec" numbered="true" toc="default"> | ||||
<section anchor="spec" title="Hop-Limit Option"> | <name>Hop-Limit Option</name> | |||
<t>The properties of the Hop-Limit option are shown in Table 1. The | <t>The properties of the Hop-Limit option are shown in <xref target="tab-o | |||
formatting of this table follows the one used in Table 4 of <xref | ption-props" format="default"/>. The | |||
target="RFC7252"></xref> (Section 5.10). The C, U, N, and R columns | formatting of this table follows the one used in Table 4 of | |||
<xref target="RFC7252" section="5.10" sectionFormat="parens" format="defau | ||||
lt"/>. The C, U, N, and R columns | ||||
indicate the properties Critical, Unsafe, NoCacheKey, and Repeatable | indicate the properties Critical, Unsafe, NoCacheKey, and Repeatable | |||
defined in Section 5.4 of <xref target="RFC7252"></xref>. None of these | defined in <xref target="RFC7252" section="5.4" sectionFormat="of" format= "default"/>. None of these | |||
properties is marked for the Hop-Limit option.</t> | properties is marked for the Hop-Limit option.</t> | |||
<t><figure align="center"> | <table anchor="tab-option-props"> | |||
<artwork align="center"><![CDATA[+--------+---+---+---+---+----------- | <name>CoAP Hop-Limit Option Properties</name> | |||
+--------+--------+---------+ | <thead> | |||
| Number | C | U | N | R | Name | Format | Length | Default | | <tr> | |||
+--------+---+---+---+---+-----------+--------+--------+---------+ | <th>Number</th> | |||
| TBA2 | | | | | Hop-Limit | uint | 1 | 16 | | <th>C</th> | |||
+--------+---+---+---+---+-----------+--------+--------+---------+ | <th>U</th> | |||
<th>N</th> | ||||
Table 1: CoAP Hop-Limit Option Properties]]></artwork> | <th>R</th> | |||
</figure></t> | <th>Name</th> | |||
<th>Format</th> | ||||
<t>The Hop-Limit option (<xref target="option"></xref>) is an elective | <th>Length</th> | |||
<th>Default</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>16</td> | ||||
<td> </td> | ||||
<td> </td> | ||||
<td> </td> | ||||
<td> </td> | ||||
<td>Hop-Limit</td> | ||||
<td>uint</td> | ||||
<td>1</td> | ||||
<td>16</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>The Hop-Limit option (<xref target="option" format="default"/>) is an e | ||||
lective | ||||
option used to detect and prevent infinite loops of CoAP requests when | option used to detect and prevent infinite loops of CoAP requests when | |||
proxies are involved. The option is not repeatable. Therefore, any | proxies are involved. The option is not repeatable. Therefore, any | |||
request carrying multiple Hop-Limit options MUST be handled following | request carrying multiple Hop-Limit options <bcp14>MUST</bcp14> be handled | |||
the procedure specified in Section 5.4.5 of <xref | following | |||
target="RFC7252"></xref>.</t> | the procedure specified in <xref target="RFC7252" section="5.4.5" sectionF | |||
ormat="of" format="default"/>.</t> | ||||
<t>The value of the Hop-Limit option is encoded as an unsigned integer | <t>The value of the Hop-Limit option is encoded as an unsigned integer | |||
(see Section 3.2 of <xref target="RFC7252"></xref>). This value MUST be | (see <xref target="RFC7252" section="3.2" sectionFormat="of" format="defau lt"/>). This value <bcp14>MUST</bcp14> be | |||
between 1 and 255 inclusive. CoAP requests received with a Hop-Limit | between 1 and 255 inclusive. CoAP requests received with a Hop-Limit | |||
option set to '0' or greater than '255' MUST be rejected by a CoAP | option set to '0' or greater than '255' <bcp14>MUST</bcp14> be rejected by a CoAP | |||
server/proxy using 4.00 (Bad Request).</t> | server/proxy using 4.00 (Bad Request).</t> | |||
<t>The Hop-Limit option is safe to forward. That is, a CoAP proxy that | <t>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 | 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 | 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 | not understand the Hop-Limit option must follow the recommendations in | |||
Section 5.7.1 of <xref target="RFC7252"></xref> for caching. Note that | <xref target="RFC7252" section="5.7.1" sectionFormat="of" format="default" /> for caching. Note that | |||
loops that involve only such proxies will not be detected. Nevertheless, | loops that involve only such proxies will not be detected. Nevertheless, | |||
the presence of such proxies will not prevent infinite loop detection if | 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 | at least one CoAP proxy that supports the Hop-Limit option is involved | |||
in the loop.</t> | in the loop.</t> | |||
<t>A CoAP proxy that understands the Hop-Limit option <bcp14>SHOULD</bcp14 | ||||
<t>A CoAP proxy that understands the Hop-Limit option SHOULD be | > be | |||
instructed, using a configuration parameter, to insert a Hop-Limit | instructed, using a configuration parameter, to insert a Hop-Limit | |||
option when relaying a request that does not include the Hop-Limit | option when relaying a request that does not include the Hop-Limit | |||
option.</t> | option.</t> | |||
<t>The initial Hop-Limit value should be configurable. If no initial | <t>The initial Hop-Limit value should be configurable. If no initial | |||
value is explicitly provided, the default initial Hop-Limit value of 16 | value is explicitly provided, the default initial Hop-Limit value of 16 | |||
MUST be used. This value is chosen so that in the majority of cases it | <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 | 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 | 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 | consume CoAP proxy resources when a loop does occur. The value is still | |||
configurable to accommodate unusual topologies. Lower values should be | configurable to accommodate unusual topologies. Lower values should be | |||
used with caution and only in networks where topologies are known by the | used with caution and only in networks where topologies are known by the | |||
CoAP client (or proxy) inserting the Hop-Limit option.</t> | CoAP client (or proxy) inserting the Hop-Limit option.</t> | |||
<t>Because forwarding errors may occur if inadequate Hop-Limit values | <t>Because forwarding errors may occur if inadequate Hop-Limit values | |||
are used, proxies at the boundaries of an administrative domain MAY be | 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 | 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 | received requests (i.e., ignore the value of Hop-Limit received in a | |||
request). This modification should be done with caution in case | request). This modification should be done with caution in case | |||
proxy-forwarded traffic repeatedly crosses the administrative domain | proxy-forwarded traffic repeatedly crosses the administrative domain | |||
boundary in a loop rendering ineffective the efficacy of loop detection | boundary in a loop, rendering ineffective the efficacy of loop detection | |||
through the Hop-Limit option.</t> | through the Hop-Limit option.</t> | |||
<t>Otherwise, a CoAP proxy that understands the Hop-Limit option MUST | <t>Otherwise, a CoAP proxy that understands the Hop-Limit option <bcp14>MU ST</bcp14> | |||
decrement the value of the option by 1 prior to forwarding it. A CoAP | decrement the value of the option by 1 prior to forwarding it. A CoAP | |||
proxy that understands the Hop-Limit option MUST NOT use a stored TBA1 | 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 | (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 | 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. | the Hop-Limit option in the request used to obtain the stored response. | |||
Otherwise, the CoAP proxy follows the behavior in Section 5.6 of <xref | Otherwise, the CoAP proxy follows the behavior in | |||
target="RFC7252"></xref>.<list style="empty"> | <xref target="RFC7252" section="5.6" sectionFormat="of" format="default"/> | |||
<t>Note: If a request with a given value of Hop-Limit failed to | .</t> | |||
<ul empty="true" spacing="normal"> | ||||
<li>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 | 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 | failure will be observed if a smaller value of the Hop-Limit option | |||
is used instead.</t> | is used instead.</li> | |||
</list></t> | </ul> | |||
<t>CoAP requests <bcp14>MUST NOT</bcp14> be forwarded if the Hop-Limit opt | ||||
<t>CoAP requests MUST NOT be forwarded if the Hop-Limit option is set to | ion is set to | |||
'0' after decrement. Requests that cannot be forwarded because of | '0' after decrement. Requests that cannot be forwarded because of | |||
exhausted Hop-Limit SHOULD be logged with a TBA1 (Hop Limit Reached) | exhausted Hop-Limit <bcp14>SHOULD</bcp14> be logged with a 5.08 (Hop Limit | |||
error response sent back to the CoAP peer. It is RECOMMENDED that CoAP | 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 | implementations support means to alert administrators about loop errors | |||
so that appropriate actions are undertaken.</t> | so that appropriate actions are undertaken.</t> | |||
</section> | </section> | |||
<section anchor="debug" title="Debugging & Troubleshooting"> | <section anchor="debug" numbered="true" toc="default"> | |||
<name>Debugging and Troubleshooting</name> | ||||
<t>To ease debugging and troubleshooting, the CoAP proxy that detects a | <t>To ease debugging and troubleshooting, the CoAP proxy that detects a | |||
loop includes an identifier for itself in the diagnostic payload under | loop includes an identifier for itself in the diagnostic payload under | |||
the conditions detailed in Section 5.5.2 of <xref | the conditions detailed in <xref target="RFC7252" section="5.5.2" sectionF | |||
target="RFC7252"></xref>. That identifier MUST NOT include any space | ormat="of" format="default"/>. | |||
That identifier <bcp14>MUST NOT</bcp14> include any space | ||||
character (ASCII value 32). The identifier inserted by a CoAP proxy can | 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 | 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> | (e.g., myproxyalias), or IP address (e.g., 2001:db8::1).</t> | |||
<t>Each intermediate proxy involved in relaying a 5.08 (Hop Limit | ||||
<t>Each intermediate proxy involved in relaying a TBA1 (Hop Limit | ||||
Reached) error message prepends its own identifier in the diagnostic | Reached) error message prepends its own identifier in the diagnostic | |||
payload with a space character used as separator. Only one identifier | payload with a space character used as separator. Only one identifier | |||
per proxy should appear in the diagnostic payload. This approach allows | per proxy should appear in the diagnostic payload. | |||
to limit the size of the TBA1 (Hop Limit Reached) error message, ease | This approach allows the limiting of the size of the 5.08 (Hop | |||
correlation with hops count, and detect whether a proxy was involved in | Limit Reached) error message, eases the correlation with hops | |||
the forwarding of the TBA1 (Hop Limit Reached) error message. Note that | 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 | an intermediate proxy prepends its identifier only if there is enough | |||
space as determined by the Path MTU (Section 4.6 of <xref | space as determined by the Path MTU | |||
target="RFC7252"></xref>). If not, an intermediate proxy forwards the | (<xref target="RFC7252" section="4.6" sectionFormat="of" format="default"/ | |||
TBA1 (Hop Limit Reached) error message to the next hop without updating | >). | |||
If not, an intermediate proxy forwards the | ||||
5.08 (Hop Limit Reached) error message to the next hop without updating | ||||
the diagnostic payload.</t> | the diagnostic payload.</t> | |||
<t>An intermediate proxy <bcp14>MUST NOT</bcp14> forward a 5.08 (Hop Limit | ||||
<t>An intermediate proxy MUST NOT forward a TBA1 (Hop Limit Reached) | Reached) | |||
error message if it detects that its identifier is included in the | error message if it detects that its identifier is included in the | |||
diagnostic payload. Such messages SHOULD be logged and appropriate | diagnostic payload. Such messages <bcp14>SHOULD</bcp14> be logged and appr opriate | |||
alerts sent to the administrators.</t> | alerts sent to the administrators.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="HTTP-Mapping Considerations"> | <name>HTTP Mapping Considerations</name> | |||
<t>This section focuses on the HTTP mappings specific to the CoAP | <t>This section focuses on the HTTP mappings specific to the CoAP | |||
extension specified in this document. As a reminder, the basic normative | extension specified in this document. As a reminder, the basic normative | |||
requirements on HTTP/CoAP mappings are defined in Section 10 of <xref | requirements on HTTP/CoAP mappings are defined in | |||
target="RFC7252"></xref>. The implementation guidelines for HTTP/CoAP | <xref target="RFC7252" section="10" sectionFormat="of" format="default"/>. | |||
mappings are elaborated in <xref target="RFC8075"></xref>.</t> | The implementation guidelines for HTTP/CoAP | |||
mappings are elaborated in <xref target="RFC8075" format="default"/>.</t> | ||||
<t>By default, the HTTP-to-CoAP Proxy inserts a Hop-Limit option | <t>By default, the HTTP-to-CoAP Proxy inserts a Hop-Limit option | |||
following the guidelines in <xref target="spec"></xref>. The | following the guidelines in <xref target="spec" format="default"/>. The | |||
HTTP-to-CoAP Proxy may be instructed by policy to insert a Hop-Limit | HTTP-to-CoAP Proxy may be instructed by policy to insert a Hop-Limit | |||
option only if a Via (Section 5.7.1 of <xref target="RFC7230"></xref>) | option only if a Via (<xref target="RFC7230" section="5.7.1" sectionFormat | |||
or CDN-Loop header field <xref target="RFC8586"></xref> is present in | ="of" format="default"/>) | |||
or CDN-Loop header field <xref target="RFC8586" format="default"/> is pres | ||||
ent in | ||||
the HTTP request.</t> | the HTTP request.</t> | |||
<t>The HTTP-to-CoAP Proxy uses 508 (Loop Detected) as the HTTP response | <t>The HTTP-to-CoAP Proxy uses 508 (Loop Detected) as the HTTP response | |||
status code to map TBA1 (Hop Limit Reached). Furthermore, it maps the | status code to map 5.08 (Hop Limit Reached). Furthermore, it maps the | |||
diagnostic payload of TBA1 (Hop Limit Reached) as per Section 6.6 of | diagnostic payload of 5.08 (Hop Limit Reached) as per | |||
<xref target="RFC8075"></xref>.</t> | <xref target="RFC8075" section="6.6" sectionFormat="of" format="default"/> | |||
.</t> | ||||
<t>By default, the CoAP-to-HTTP Proxy inserts a Via header field in the | <t>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 | 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 | CoAP-to-HTTP Proxy may be instructed by policy to insert a CDN-Loop | |||
header field instead of the Via header field.</t> | header field instead of the Via header field.</t> | |||
<t>The CoAP-to-HTTP Proxy maps the 508 (Loop Detected) HTTP response | <t>The CoAP-to-HTTP Proxy maps the 508 (Loop Detected) HTTP response | |||
status code to TBA1 (Hop Limit Reached). Moreover, the CoAP-to-HTTP | status code to 5.08 (Hop Limit Reached). Moreover, the CoAP-to-HTTP | |||
Proxy inserts its information following the guidelines in <xref | Proxy inserts its information following the guidelines in <xref target="de | |||
target="debug"></xref>.</t> | bug" format="default"/>.</t> | |||
<t>When both HTTP-to-CoAP and CoAP-to-HTTP proxies are involved, the | <t>When both HTTP-to-CoAP and CoAP-to-HTTP proxies are involved, the | |||
loop detection may get broken if the proxy-forwarded traffic repeatedly | loop detection may break if the proxy-forwarded traffic repeatedly | |||
crosses the HTTP-to-CoAP and CoAP-to-HTTP proxies. Nevertheless, if the | 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 | loop is within the CoAP or HTTP legs, the loop detection is still | |||
functional.</t> | functional.</t> | |||
</section> | </section> | |||
<section anchor="IANA" numbered="true" toc="default"> | ||||
<section anchor="IANA" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
<t><list style="empty"> | <section anchor="code" numbered="true" toc="default"> | |||
<t>Editorial Note: Please update TBA1/TBA2 statements within the | <name>CoAP Response Code</name> | |||
document with the assigned codes.</t> | <t>IANA has registered the following entry in the "CoAP Response | |||
</list></t> | Codes" subregistry available at | |||
<eref target="https://www.iana.org/assignments/core-parameters" brackets | ||||
<section anchor="code" title="CoAP Response Code"> | ="angle"/>:</t> | |||
<t>IANA is requested to add the following entry to the "CoAP Response | <table anchor="tab-resp-codes"> | |||
Codes" sub-registry available at | <name>CoAP Response Codes</name> | |||
https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#r | <thead> | |||
esponse-codes:</t> | <tr> | |||
<th>Code</th> | ||||
<t><figure align="center"> | <th>Description</th> | |||
<artwork align="center"><![CDATA[+------+------------------+-------- | <th>Reference</th> | |||
---+ | </tr> | |||
| Code | Description | Reference | | </thead> | |||
+------+------------------+-----------+ | <tbody> | |||
| TBA1 | Hop Limit Reached| [RFCXXXX] | | <tr> | |||
+------+------------------+-----------+ | <td>5.08</td> | |||
<td>Hop Limit Reached</td> | ||||
Table 2: CoAP Response Codes]]></artwork> | <td>RFC 8768</td> | |||
</figure></t> | </tr> | |||
</tbody> | ||||
<t>This document suggests 5.08 as a code to be assigned for the new | </table> | |||
response code.</t> | ||||
</section> | </section> | |||
<section anchor="option" title="CoAP Option Number"> | <section anchor="option" numbered="true" toc="default"> | |||
<t>IANA is requested to add the following entry to the "CoAP Option | <name>CoAP Option Number</name> | |||
Numbers" sub-registry available at | <t>IANA has registered the following entry in the "CoAP Option | |||
https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#o | Numbers" subregistry available at | |||
ption-numbers:</t> | <eref target="https://www.iana.org/assignments/core-parameters" brackets | |||
="angle"/>:</t> | ||||
<t><figure align="center"> | <table anchor="tab-option-number"> | |||
<artwork align="center"><![CDATA[+--------+------------------+------ | <name>CoAP Option Number</name> | |||
-----+ | <thead> | |||
| Number | Name | Reference | | <tr> | |||
+--------+------------------+-----------+ | <th>Number</th> | |||
| TBA2 | Hop-Limit | [RFCXXXX] | | <th>Name</th> | |||
+--------+------------------+-----------+ | <th>Reference</th> | |||
</tr> | ||||
Table 3: CoAP Option Number]]></artwork> | </thead> | |||
</figure></t> | <tbody> | |||
<tr> | ||||
<t>This document suggests 16 as a value to be assigned for the new | <td>16</td> | |||
option number.</t> | <td>Hop-Limit</td> | |||
<td>RFC 8768</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="security" numbered="true" toc="default"> | ||||
<section anchor="security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<t>Security considerations related to CoAP proxying are discussed in | <t>Security considerations related to CoAP proxying are discussed in | |||
Section 11.2 of <xref target="RFC7252"></xref>.</t> | <xref target="RFC7252" section="11.2" sectionFormat="of" format="default"/ | |||
>.</t> | ||||
<t>A CoAP endpoint can probe the topology of a network into which it is | <t>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 | 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 | 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 | rewrite the value of Hop-Limit carried in received requests (see <xref tar | |||
target="spec"></xref>).</t> | get="spec" format="default"/>).</t> | |||
<t>The diagnostic payload of a 5.08 (Hop Limit Reached) error message | ||||
<t>The diagnostic payload of a TBA1 (Hop Limit Reached) error message | ||||
may leak sensitive information revealing the topology of an | may leak sensitive information revealing the topology of an | |||
administrative domain. To prevent that, a CoAP proxy that is located at | administrative domain. To prevent that, a CoAP proxy that is located at | |||
the boundary of an administrative domain MAY be instructed to strip the | the boundary of an administrative domain <bcp14>MAY</bcp14> be instructed | |||
diagnostic payload or part of it before forwarding on the TBA1 (Hop | to strip the | |||
diagnostic payload or part of it before forwarding on the 5.08 (Hop | ||||
Limit Reached) response.</t> | Limit Reached) response.</t> | |||
</section> | </section> | |||
<section anchor="ack" title="Acknowledgements"> | ||||
<t>This specification was part of <xref | ||||
target="I-D.ietf-dots-signal-channel"></xref>. Many thanks to those who | ||||
reviewed DOTS specifications.</t> | ||||
<t>Thanks to Klaus Hartke, Carsten Bormann, Peter van der Stok, Jim | ||||
Schaad, Jaime Jiménez, Roni Even, Scott Bradner, Thomas Fossati, | ||||
Radia Perlman, Éric Vyncke, Suresh Krishnan, Roman Danyliw, Barry | ||||
Leiba, Christer Holmberg, Benjamin Kaduk, and Adam Roach for their | ||||
review and comments.</t> | ||||
<t>Carsten Bormann provided the "Intended Usage" text.</t> | ||||
</section> | ||||
</middle> | </middle> | |||
<back> | <back> | |||
<references title="Normative References"> | <displayreference target="I-D.ietf-dots-signal-channel" to="DOTS-SIG-CHANNEL"/> | |||
<?rfc include="reference.RFC.2119"?> | <references> | |||
<name>References</name> | ||||
<?rfc include="reference.RFC.7252"?> | <references> | |||
<name>Normative References</name> | ||||
<?rfc include='reference.RFC.8174'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.2119.xml"/> | ||||
<?rfc include='reference.RFC.7230'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.7252.xml"/> | ||||
<?rfc include='reference.RFC.8075'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
</references> | FC.8174.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7230.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8075.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<references title="Informative References"> | <reference anchor="I-D.ietf-dots-signal-channel"> | |||
<?rfc include="reference.I-D.ietf-dots-signal-channel"?> | <front> | |||
<title>Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal Cha | ||||
nnel Specification</title> | ||||
<author initials="T" surname="Reddy" fullname="Tirumaleswar Reddy"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M" surname="Boucadair" fullname="Mohamed Boucadair"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="P" surname="Patil" fullname="Prashanth Patil"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="A" surname="Mortensen" fullname="Andrew Mortensen"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="N" surname="Teague" fullname="Nik Teague"> | ||||
<organization/> | ||||
</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-do | ||||
ts-signal-channel-41.txt"/> | ||||
</reference> | ||||
<?rfc include='reference.RFC.8586'?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.8586.xml"/> | ||||
</references> | ||||
</references> | </references> | |||
<section anchor="ack" numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | ||||
<t>This specification was part of <xref target="I-D.ietf-dots-signal-chann | ||||
el" format="default"/>. | ||||
Many thanks to those who reviewed DOTS specifications.</t> | ||||
<t>Thanks to <contact fullname="Klaus Hartke"/>, <contact fullname="Carste | ||||
n 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><contact fullname="Carsten Bormann"/> provided the "Intended Usage" tex | ||||
t.</t> | ||||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 92 change blocks. | ||||
249 lines changed or deleted | 286 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/ |