| rfc8961xml2.original.xml | rfc8961.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <!ENTITY RFC2119 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.2119.xml"> | ||||
| <!ENTITY RFC8174 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.8174.xml"> | ||||
| <!ENTITY I-D.ietf-tcpm-rack SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml3/ | ||||
| reference.I-D.ietf-tcpm-rack.xml"> | ||||
| <!ENTITY I-D.dukkipati-tcpm-tcp-loss-probe SYSTEM "https://xml2rfc.ietf.org/publ | ||||
| ic/rfc/bibxml3/reference.I-D.dukkipati-tcpm-tcp-loss-probe.xml"> | ||||
| <!ENTITY I-D.ietf-quic-recovery SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibx | ||||
| ml3/reference.I-D.ietf-quic-recovery.xml"> | ||||
| <!ENTITY RFC1034 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.1034.xml"> | ||||
| <!ENTITY RFC1035 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.1035.xml"> | ||||
| <!ENTITY RFC2018 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.2018.xml"> | ||||
| <!ENTITY RFC2140 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.2140.xml"> | ||||
| <!ENTITY RFC2883 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.2883.xml"> | ||||
| <!ENTITY RFC3124 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.3124.xml"> | ||||
| <!ENTITY RFC3261 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.3261.xml"> | ||||
| <!ENTITY RFC3522 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.3522.xml"> | ||||
| <!ENTITY RFC3708 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.3708.xml"> | ||||
| <!ENTITY RFC4960 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.4960.xml"> | ||||
| <!ENTITY RFC5681 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.5681.xml"> | ||||
| <!ENTITY RFC5682 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.5682.xml"> | ||||
| <!ENTITY RFC5740 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.5740.xml"> | ||||
| <!ENTITY RFC6182 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.6182.xml"> | ||||
| <!ENTITY RFC6298 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.6298.xml"> | ||||
| <!ENTITY RFC6675 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.6675.xml"> | ||||
| <!ENTITY RFC7323 SYSTEM "https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RF | ||||
| C.7323.xml"> | ||||
| ]> | ||||
| <rfc submissionType="IETF" docName="draft-ietf-tcpm-rto-consider-17" category="b | ||||
| cp" ipr="trust200902"> | ||||
| <!-- Generated by id2xml 1.5.0 on 2020-08-06T21:02:19Z --> | ||||
| <?rfc strict="yes"?> | ||||
| <?rfc compact="yes"?> | ||||
| <?rfc subcompact="no"?> | ||||
| <?rfc symrefs="yes"?> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <?rfc text-list-symbols="-"?> | ||||
| <?rfc toc="yes"?> | ||||
| <front> | ||||
| <title abbrev="Requirements for Time-Based Loss Detecti">Requirements for | ||||
| Time-Based Loss Detection</title> | ||||
| <author initials="M." surname="Allman" fullname="Mark Allman"> | ||||
| <organization abbrev="ICSI">International Computer Science Institute</org | ||||
| anization> | ||||
| <address><postal><street>1947 Center St. Suite 600</street> | ||||
| <city>Berkeley</city><region>CA</region><code>94704</code> | ||||
| </postal> | ||||
| <email>mallman@icir.org</email> | ||||
| <uri>http://www.icir.org/mallman</uri> | ||||
| </address> | ||||
| </author> | ||||
| <date year="2020" month="August"/> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" | |||
| <workgroup>Internet Engineering Task Force</workgroup> | docName="draft-ietf-tcpm-rto-consider-17" number="8961" | |||
| submissionType="IETF" category="bcp" consensus="true" ipr="trust200902" | ||||
| obsoletes="" updates="" xml:lang="en" symRefs="true" sortRefs="true" | ||||
| tocInclude="true" version="3"> | ||||
| <!-- [rfced] Please insert any keywords (beyond those that appear in the title) | <front> | |||
| for use on https://www.rfc-editor.org/search. --> | <title abbrev="Requirements for Time-Based Loss Detection">Requirements | |||
| for Time-Based Loss Detection</title> | ||||
| <seriesInfo name="RFC" value="8961"/> | ||||
| <seriesInfo name="BCP" value="233"/> | ||||
| <author initials="M." surname="Allman" fullname="Mark Allman"> | ||||
| <organization abbrev="ICSI">International Computer Science | ||||
| Institute</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>2150 Shattuck Ave., Suite 1100</street> | ||||
| <city>Berkeley</city> | ||||
| <region>CA</region> | ||||
| <country>United States of America</country> | ||||
| <code>94704</code> | ||||
| </postal> | ||||
| <email>mallman@icir.org</email> | ||||
| <uri>https://www.icir.org/mallman</uri> | ||||
| </address> | ||||
| </author> | ||||
| <date year="2020" month="November"/> | ||||
| <area>Transport</area> | ||||
| <workgroup>TCPM</workgroup> | ||||
| <keyword>example</keyword> | <keyword>retransmission timeout</keyword> | |||
| <keyword>packet loss</keyword> | ||||
| <keyword>loss detection</keyword> | ||||
| <keyword>requirements</keyword> | ||||
| <abstract><t>Many protocols must detect packet loss for various reasons | <abstract> | |||
| <t>Many protocols must detect packet loss for various reasons | ||||
| (e.g., to ensure reliability using retransmissions or to understand the | (e.g., to ensure reliability using retransmissions or to understand the | |||
| level of congestion along a network path). While many mechanisms have | level of congestion along a network path). While many mechanisms have | |||
| been designed to detect loss, ultimately, protocols can only count on the | been designed to detect loss, ultimately, protocols can only count on the | |||
| passage of time without delivery confirmation to declare a packet "lost". | passage of time without delivery confirmation to declare a packet "lost". | |||
| Each implementation of a time-based loss detection mechanism represents a | Each implementation of a time-based loss detection mechanism represents a | |||
| balance between correctness and timeliness and therefore no implementation | balance between correctness and timeliness; therefore, no implementation | |||
| suits all situations. This document provides high-level requirements for | suits all situations. This document provides high-level requirements for | |||
| time-based loss detectors appropriate for general use in unicast | time-based loss detectors appropriate for general use in unicast | |||
| communication across the Internet. Within the requirements, | communication across the Internet. Within the requirements, | |||
| implementations have latitude to define particulars that best address each | implementations have latitude to define particulars that best address each | |||
| situation.</t></abstract> | situation.</t> | |||
| </front> | </abstract> | |||
| </front> | ||||
| <middle> | <middle> | |||
| <section title="Introduction" anchor="sect-1"><section title="Terminology | <section anchor="sect-1" numbered="true" toc="default"> | |||
| " anchor="sect-1.1"><t> | <name>Introduction</name> | |||
| 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> | <t> | |||
| As a network of networks, the Internet consists of a large variety | As a network of networks, the Internet consists of a large variety | |||
| of links and systems that support a wide variety of tasks and | of links and systems that support a wide variety of tasks and | |||
| workloads. The service provided by the network varies from | workloads. The service provided by the network varies from | |||
| best-effort delivery among loosely connected components to highly | best-effort delivery among loosely connected components to highly | |||
| predictable delivery within controlled environments (e.g., between | predictable delivery within controlled environments (e.g., between | |||
| physically connected nodes, within a tightly controlled data | physically connected nodes, within a tightly controlled data | |||
| center). Each path through the network has a set of path | center). Each path through the network has a set of path | |||
| properties---e.g., available capacity, delay, packet loss. Given | properties, e.g., available capacity, delay, and packet loss. Given | |||
| the range of networks that make up the Internet, these properties | the range of networks that make up the Internet, these properties | |||
| range from largely static to highly dynamic.</t> | range from largely static to highly dynamic.</t> | |||
| <t> | ||||
| <t> | This document provides guidelines for developing an understanding of one | |||
| This document provides guidelines for developing an understanding of | path property: packet loss. In particular, we offer guidelines for | |||
| one path property: packet loss. In particular, we offer guidelines | developing and implementing time-based loss detectors that have been | |||
| for developing and implementing time-based loss detectors that have | gradually learned over the last several decades. We focus on the general | |||
| been gradually learned over the last several decades. We focus on | case where the loss properties of a path are (a) unknown a priori and (b) | |||
| the general case where the loss properties of a path are (a) unknown | dynamically varying over time. Further, while there are numerous root | |||
| a priori and (b) dynamically vary over time. Further, while there | causes of packet loss, we leverage the conservative notion that loss is an | |||
| are numerous root causes of packet loss, we leverage the | implicit indication of congestion <xref target="RFC5681" | |||
| conservative notion that loss is an implicit indication of | format="default"/>. While this stance is not always correct, as a general | |||
| congestion <xref target="RFC5681"/>. While this stance is not always correct | assumption it has historically served us well <xref target="Jac88" | |||
| , as a | format="default"/>. As we discuss further in <xref target="sect-2"/>, the | |||
| general assumption it has historically served us well <xref target="Jac88"/>. | guidelines in this document should be viewed as a general default for | |||
| As | unicast communication across best-effort networks and not as optimal -- or | |||
| we discuss further in section 2, the guidelines in this document | even applicable -- for all situations.</t> | |||
| should be viewed as a general default for unicast communication | <t> | |||
| across best-effort networks and not as optimal---or even | ||||
| applicable---for all situations.</t> | ||||
| <t> | ||||
| Given that packet loss is routine in best-effort networks, loss | Given that packet loss is routine in best-effort networks, loss | |||
| detection is a crucial activity for many protocols and applications | detection is a crucial activity for many protocols and applications | |||
| and is generally undertaken for two major reasons: | and is generally undertaken for two major reasons: | |||
| <list style="format (%d)"> | </t> | |||
| <ol type="(%d)"> | ||||
| <t>Ensuring reliable data delivery. | <li> | |||
| <t>Ensuring reliable data delivery</t> | ||||
| <list style="empty"><t>This requires a data sender to develop an | ||||
| understanding of which transmitted packets have not arrived at the | ||||
| receiver. This knowledge allows the sender to retransmit missing data. | ||||
| </t></list></t> | ||||
| <t> Congestion control. | ||||
| <list style="empty"><t> As we mention above, packet loss is often taken | ||||
| as an implicit indication that the sender is transmitting too fast and | ||||
| is overwhelming some portion of the network path. Data senders can | ||||
| therefore use loss to trigger transmission rate reductions. </t></list></t | ||||
| > | ||||
| </list> | ||||
| </t> | ||||
| <t> | <t>This requires a data sender to develop an understanding of | |||
| which transmitted packets have not arrived at the receiver. | ||||
| This knowledge allows the sender to retransmit missing | ||||
| data. </t> | ||||
| </li> | ||||
| <li> | ||||
| <t> Congestion control | ||||
| </t> | ||||
| <t> As we mention above, packet loss is often taken as an | ||||
| implicit indication that the sender is transmitting too fast and | ||||
| is overwhelming some portion of the network path. Data senders | ||||
| can therefore use loss to trigger transmission rate | ||||
| reductions. </t> | ||||
| </li> | ||||
| </ol> | ||||
| <t> | ||||
| Various mechanisms are used to detect losses in a packet stream. | Various mechanisms are used to detect losses in a packet stream. | |||
| Often we use continuous or periodic acknowledgments from the | Often, we use continuous or periodic acknowledgments from the | |||
| recipient to inform the sender's notion of which pieces of data are | recipient to inform the sender's notion of which pieces of data are | |||
| missing. However, despite our best intentions and most robust | missing. However, despite our best intentions and most robust | |||
| mechanisms we cannot place ultimate faith in receiving such | mechanisms, we cannot place ultimate faith in receiving such | |||
| acknowledgments, but can only truly depend on the passage of time. | acknowledgments but can only truly depend on the passage of time. | |||
| Therefore, our ultimate backstop to ensuring that we detect all loss | Therefore, our ultimate backstop to ensuring that we detect all loss | |||
| is a timeout. That is, the sender sets some expectation for how | is a timeout. That is, the sender sets some expectation for how | |||
| long to wait for confirmation of delivery for a given piece of data. | long to wait for confirmation of delivery for a given piece of data. | |||
| When this time period passes without delivery confirmation the | When this time period passes without delivery confirmation, the | |||
| sender concludes the data was lost in transit. | sender concludes the data was lost in transit.</t> | |||
| The specifics of time-based loss detection schemes represent a | ||||
| tradeoff between correctness and responsiveness. In other words we | ||||
| wish to simultaneously:</t> | ||||
| <t><list style="symbols"><t>wait long enough to ensure the detection of l | ||||
| oss is correct, and</t> | ||||
| <t>minimize the amount of delay we impose on applications (before | <t>The specifics of time-based loss detection schemes represent a | |||
| tradeoff between correctness and responsiveness. In other words, we | ||||
| wish to simultaneously:</t> | ||||
| <ul spacing="normal"> | ||||
| <li>wait long enough to ensure the detection of loss is correct, | ||||
| and</li> | ||||
| <li>minimize the amount of delay we impose on applications (before | ||||
| repairing loss) and the network (before we reduce the | repairing loss) and the network (before we reduce the | |||
| congestion).</t> | congestion).</li> | |||
| </ul> | ||||
| </list> | <t> | |||
| </t> | Serving both of these goals is difficult, as they pull in opposite | |||
| directions <xref target="AP99" format="default"/>. By not waiting long | ||||
| <t> | enough to accurately determine a packet has been lost, we may provide a | |||
| Serving both of these goals is difficult as they pull in opposite | needed retransmission in a timely manner but risk both sending unnecessary | |||
| directions <xref target="AP99"/>. By not waiting long enough to accurately | ("spurious") retransmissions and needlessly lowering the transmission rate. | |||
| determine a packet has been lost we may provide a needed | By waiting long enough that we are unambiguously certain a packet has been | |||
| retransmission in a timely manner, but risk sending unnecessary | lost, we cannot repair losses in a timely manner and we risk prolonging | |||
| ("spurious") retransmissions and needlessly lowering the | network congestion.</t> | |||
| transmission rate. By waiting long enough that we are unambiguously | <t> | |||
| certain a packet has been lost we cannot repair losses in a timely | Many protocols and applications -- such as TCP <xref target="RFC6298" | |||
| manner and we risk prolonging network congestion.</t> | format="default"/>, SCTP <xref target="RFC4960" format="default"/>, and SIP | |||
| <xref target="RFC3261" | ||||
| <t> | format="default"/> -- use their own time-based loss detection mechanisms. | |||
| Many protocols and applications---such as TCP <xref target="RFC6298"/>, SCTP | At | |||
| <xref target="RFC4960"/>, SIP <xref target="RFC3261"/>---use their own time-b | this point, our experience leads to a recognition that often specific | |||
| ased loss detection | tweaks that deviate from standardized time-based loss detectors do not | |||
| mechanisms. At this point, our experience leads to a recognition | materially impact network safety with respect to congestion control <xref | |||
| that often specific tweaks that deviate from standardized time-based | target="AP99" format="default"/>. Therefore, in this document we outline a | |||
| loss detectors do not materially impact network safety with respect | set of high-level, protocol-agnostic requirements for time-based loss | |||
| to congestion control <xref target="AP99"/>. Therefore, in this document we | detection. The intent is to provide a safe foundation on which | |||
| outline a set of high-level protocol-agnostic requirements for | implementations have the flexibility to instantiate mechanisms that best | |||
| time-based loss detection. The intent is to provide a safe | realize their specific goals.</t> | |||
| foundation on which implementations have the flexibility to | ||||
| instantiate mechanisms that best realize their specific goals.</t> | ||||
| </section> | <section anchor="sect-1.1" numbered="true" toc="default"> | |||
| <name>Terminology</name> | ||||
| </section> | <t> | |||
| 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"/> | ||||
| <xref target="RFC8174"/> when, and only when, they appear in all capitals, | ||||
| as shown here. | ||||
| </t> | ||||
| </section> | ||||
| <section title="Context" anchor="sect-2"><t> | </section> | |||
| <section anchor="sect-2" numbered="true" toc="default"> | ||||
| <name>Context</name> | ||||
| <t> | ||||
| This document is different from the way we ideally like to engineer | This document is different from the way we ideally like to engineer | |||
| systems. Usually, we strive to understand high-level requirements | systems. Usually, we strive to understand high-level requirements | |||
| as a starting point. We then methodically engineer specific | as a starting point. We then methodically engineer specific | |||
| protocols, algorithms and systems that meet these requirements. | protocols, algorithms, and systems that meet these requirements. | |||
| Within the IETF standards process we have derived many time-based | Within the IETF standards process, we have derived many time-based | |||
| loss detection schemes without benefit from some over-arching | loss detection schemes without the benefit of some over-arching | |||
| requirements document---because we had no idea how to write such a | requirements document -- because we had no idea how to write such a | |||
| document! Therefore, we made the best specific decisions we could | document! Therefore, we made the best specific decisions we could | |||
| in response to specific needs.</t> | in response to specific needs.</t> | |||
| <t> | ||||
| <t> | ||||
| At this point, however, the community's experience has matured to | At this point, however, the community's experience has matured to | |||
| the point where we can define a set of general, high-level | the point where we can define a set of general, high-level | |||
| requirements for time-based loss detection schemes. We now | requirements for time-based loss detection schemes. We now | |||
| understand how to separate the strategies these mechanisms use that | understand how to separate the strategies these mechanisms use that | |||
| are crucial for network safety from those small details that do not | are crucial for network safety from those small details that do not | |||
| materially impact network safety. The requirements in this document | materially impact network safety. The requirements in this document | |||
| may not be appropriate in all cases. In particular, the guidelines | may not be appropriate in all cases. In particular, the guidelines | |||
| in section 4 are concerned with the general case, but specific | in <xref target="sect-4"/> are concerned with the general case, but | |||
| specific | ||||
| situations may allow for more flexibility in terms of loss detection | situations may allow for more flexibility in terms of loss detection | |||
| because specific facets of the environment are known (e.g., when | because specific facets of the environment are known (e.g., when | |||
| operating over a single physical link or within a tightly controlled | operating over a single physical link or within a tightly controlled | |||
| data center). Therefore, variants, deviations or wholly different | data center). Therefore, variants, deviations, or wholly different | |||
| time-based loss detectors may be necessary or useful in some cases. | time-based loss detectors may be necessary or useful in some cases. | |||
| The correct way to view this document is as the default case and not | The correct way to view this document is as the default case and not | |||
| as a one-size-fits-all that is optimal in all cases.</t> | as one-size-fits-all guidance that is optimal in all cases.</t> | |||
| <t> | ||||
| <t> | ||||
| Adding a requirements umbrella to a body of existing specifications | Adding a requirements umbrella to a body of existing specifications | |||
| is inherently messy and we run the risk of creating inconsistencies | is inherently messy and we run the risk of creating inconsistencies | |||
| with both past and future mechanisms. Therefore, we make the | with both past and future mechanisms. Therefore, we make the | |||
| following statements about the relationship of this document to past | following statements about the relationship of this document to past | |||
| and future specifications:</t> | and future specifications:</t> | |||
| <ul spacing="normal"> | ||||
| <t><list style="symbols"><t>This document does not update or obsolete any | <li>This document does not update or obsolete any existing RFC. These | |||
| existing RFC. | previous specifications -- while generally consistent with the | |||
| These previous specifications---while generally consistent with | requirements in this document -- reflect community consensus, and this | |||
| the requirements in this document---reflect community consensus | document does not change that consensus.</li> | |||
| and this document does not change that consensus.</t> | <li>The requirements in this document are meant to provide for network | |||
| safety and, as such, <bcp14>SHOULD</bcp14> be used by all future | ||||
| <t>The requirements in this document are meant to provide for | time-based loss detection mechanisms.</li> | |||
| network safety and, as such, SHOULD be used by all future | <li>The requirements in this document may not be appropriate in all | |||
| time-based loss detection mechanisms.</t> | cases; therefore, deviations and variants may be necessary in the | |||
| future (hence the "<bcp14>SHOULD</bcp14>" in the last bullet). | ||||
| <t>The requirements in this document may not be appropriate in all | However, inconsistencies <bcp14>MUST</bcp14> be (a) explained and (b) | |||
| cases and, therefore, deviations and variants may be necessary | gather consensus.</li> | |||
| in the future (hence the "SHOULD" in the last bullet). However, | </ul> | |||
| inconsistencies MUST be (a) explained and (b) gather consensus.</t> | </section> | |||
| <section anchor="sect-3" numbered="true" toc="default"> | ||||
| </list> | <name>Scope</name> | |||
| </t> | <t> | |||
| </section> | ||||
| <section title="Scope" anchor="sect-3"><t> | ||||
| The principles we outline in this document are protocol-agnostic and | The principles we outline in this document are protocol-agnostic and | |||
| widely applicable. We make the following scope statements about | widely applicable. We make the following scope statements about | |||
| the application of the requirements discussed in Section 4:</t> | the application of the requirements discussed in <xref | |||
| target="sect-4"/>:</t> | ||||
| <t><list style="hanging" hangIndent="6"> | <ol type="(S.%d)" spacing="normal" indent="6"> | |||
| <li>While there are a bevy of uses for timers in | ||||
| <t hangText="(S.1)">While there are a bevy of uses for timers in | protocols -- from rate-based pacing to connection failure detection | |||
| protocols---from rate-based pacing to connection failure detection | and beyond -- this document is focused only on loss | |||
| and beyond---this document is focused only on loss detection.</t> | detection.</li> | |||
| <li> | ||||
| <t hangText="(S.2)"> The requirements for time-based loss detection | <t> The requirements for time-based loss detection | |||
| mechanisms in this document are for the primary or "last resort" | mechanisms in this document are for the primary or "last resort" | |||
| loss detection mechanism whether the mechanism is the sole loss | loss detection mechanism, whether the mechanism is the sole loss | |||
| repair strategy or works in concert with other mechanisms. | repair strategy or works in concert with other mechanisms. | |||
| <list style="empty"><t>While a straightforward time-based loss | ||||
| detector is sufficient for simple protocols like DNS <xref | ||||
| target="RFC1034"/>,<xref target="RFC1035"/>, more complex protocols | ||||
| often use more advanced loss detectors to aid performance. For | ||||
| instance, TCP and SCTP have methods to detect (and repair) loss | ||||
| based on explicit endpoint state sharing <xref | ||||
| target="RFC2018"/>,<xref target="RFC4960"/>,<xref target="RFC6675"/>. | ||||
| Such | ||||
| mechanisms often provide more timely and precise loss detection than | ||||
| time-based loss detectors. However, these mechanisms do not obviate | ||||
| the need for a "retransmission timeout" or "RTO" because---as we | ||||
| discuss in Section 1---only the passage of time can ultimately be | ||||
| relied upon to detect loss. In other words, ultimately we cannot | ||||
| count on acknowledgments to arrive at the data sender to indicate | ||||
| which packets never arrived at the receiver. In cases such as these | ||||
| we need a time-based loss detector to functions as a "last | ||||
| resort".</t> | ||||
| <t>Also, note, that some recent proposals have incorporated time as | </t> | |||
| a component of advanced loss detection methods---either as an | <t> | |||
| aggressive first loss detector in certain situations or in | While a straightforward time-based loss detector is sufficient | |||
| conjunction with endpoint state sharing <xref | for simple protocols like DNS <xref target="RFC1034" | |||
| target="I-D.dukkipati-tcpm-tcp-loss-probe"/>,<xref | format="default"/> <xref target="RFC1035" format="default"/>, more | |||
| target="I-D.ietf-tcpm-rack"/>,<xref | complex protocols often use more advanced loss detectors to aid | |||
| target="I-D.ietf-quic-recovery"/>. While these mechanisms can aid | performance. For instance, TCP and SCTP have methods to detect | |||
| timely loss recovery, the protocol ultimately leans on another more | (and repair) loss based on explicit endpoint state sharing <xref | |||
| conservative timer to ensure reliability when these mechanisms break | target="RFC2018" format="default"/> <xref target="RFC4960" | |||
| down. The requirements in this document are only directly | format="default"/> <xref target="RFC6675" format="default"/>. | |||
| applicable to last resort loss detection. However, we expect that | Such mechanisms often provide more timely and precise loss | |||
| many of the requirements can serve as useful guidelines for more | detection than time-based loss detectors. However, these | |||
| aggressive non-last resort timers, as well.</t></list></t> | mechanisms do not obviate the need for a "retransmission timeout" | |||
| or "RTO" because, as we discuss in <xref target="sect-1"/>, only | ||||
| the passage | ||||
| of time can ultimately be relied upon to detect loss. In other | ||||
| words, we ultimately cannot count on acknowledgments to arrive at | ||||
| the data sender to indicate which packets never arrived at the | ||||
| receiver. In cases such as these, we need a time-based loss | ||||
| detector to function as a "last resort". | ||||
| </t> | ||||
| <t>Also, note that some recent proposals have incorporated time | ||||
| as a component of advanced loss detection methods either as an | ||||
| aggressive first loss detector in certain situations or in | ||||
| conjunction with endpoint state sharing <xref | ||||
| target="I-D.dukkipati-tcpm-tcp-loss-probe" | ||||
| format="default"/> <xref target="I-D.ietf-tcpm-rack" | ||||
| format="default"/> <xref target="I-D.ietf-quic-recovery" | ||||
| format="default"/>. While these mechanisms can aid timely loss | ||||
| recovery, the protocol ultimately leans on another more | ||||
| conservative timer to ensure reliability when these mechanisms | ||||
| break down. The requirements in this document are only directly | ||||
| applicable to last-resort loss detection. However, we expect that | ||||
| many of the requirements can serve as useful guidelines for more | ||||
| aggressive non-last-resort timers as well.</t> | ||||
| <t hangText="(S.3)"> The requirements in this document apply only to | </li> | |||
| endpoint-to-endpoint unicast communication. Reliable multicast | <li> | |||
| (e.g., <xref target="RFC5740"/>) protocols are explicitly outside | <t> The requirements in this document apply only to | |||
| the scope of this document. | endpoint-to-endpoint unicast communication. Reliable multicast | |||
| (e.g., <xref target="RFC5740" format="default"/>) protocols are | ||||
| explicitly outside | ||||
| the scope of this document. | ||||
| <list style="empty"><t>Protocols such as SCTP <xref | </t> | |||
| target="RFC4960"/> and MP-TCP <xref target="RFC6182"/> that | ||||
| communicate in a unicast fashion with multiple specific endpoints | ||||
| can leverage the requirements in this document provided they track | ||||
| state and follow the requirements for each endpoint independently. | ||||
| I.e., if host A communicates with addresses B and C, A needs to use | ||||
| independent time-based loss detector instances for traffic sent to B | ||||
| and C.</t></list></t> | ||||
| <t hangText="(S.4)"> There are cases where state is shared across | <t>Protocols such as SCTP <xref target="RFC4960" | |||
| connections or flows (e.g., <xref target="RFC2140"/>, <xref | format="default"/> and Multipath TCP (MP-TCP) <xref | |||
| target="RFC3124"/>). State pertaining to time-based loss detection | target="RFC6182" | |||
| is often discussed as sharable. These situations raise issues that | format="default"/> that communicate in a unicast fashion with | |||
| the simple flow-oriented time-based loss detection mechanism | multiple specific endpoints can leverage the requirements in this | |||
| discussed in this document does not consider (e.g., how long to | document provided they track state and follow the requirements for | |||
| preserve state between connections). Therefore, while the general | each endpoint independently. That is, if host A communicates with | |||
| principles given in <xref target="sect-4"/> are likely applicable, | addresses B and C, A needs to use independent time-based loss | |||
| sharing time-based loss detection information across flows is | detector instances for traffic sent to B and C.</t> | |||
| outside the scope of this document. | ||||
| </t> | ||||
| </list> | </li> | |||
| </t> | <li> There are cases where state is shared across connections or flows | |||
| (e.g., <xref target="RFC2140" format="default"/> and <xref | ||||
| target="RFC3124" format="default"/>). State pertaining to time-based | ||||
| loss detection is often discussed as sharable. These situations raise | ||||
| issues that the simple flow-oriented time-based loss detection | ||||
| mechanism discussed in this document does not consider (e.g., how long | ||||
| to preserve state between connections). Therefore, while the general | ||||
| principles given in <xref target="sect-4" format="default"/> are | ||||
| likely applicable, sharing time-based loss detection information | ||||
| across flows is outside the scope of this document. | ||||
| </li> | ||||
| </ol> | ||||
| </section> | ||||
| </section> | <section anchor="sect-4" numbered="true" toc="default"> | |||
| <name>Requirements</name> | ||||
| <section title="Requirements" anchor="sect-4"><t> | <t> | |||
| We now list the requirements that apply when designing primary or | We now list the requirements that apply when designing primary or | |||
| last resort time-based loss detection mechanisms. For historical | last-resort time-based loss detection mechanisms. For historical | |||
| reasons and ease of exposition, we refer to the time between sending | reasons and ease of exposition, we refer to the time between sending | |||
| a packet and determining the packet has been lost due to lack of | a packet and determining the packet has been lost due to lack of | |||
| delivery confirmation as the "retransmission timeout" or "RTO". | delivery confirmation as the "retransmission timeout" or "RTO". | |||
| After the RTO passes without delivery confirmation, the sender may | After the RTO passes without delivery confirmation, the sender may | |||
| safely assume the packet is lost. However, as discussed above, the | safely assume the packet is lost. However, as discussed above, the | |||
| detected loss need not be repaired (i.e., the loss could be detected | detected loss need not be repaired (i.e., the loss could be detected | |||
| only for congestion control and not reliability purposes). | only for congestion control and not reliability purposes). | |||
| <list style="format (%d)"> | </t> | |||
| <ol spacing="normal" type="(%d)"> | ||||
| <t>As we note above, loss detection happens when a sender does not | <li> | |||
| <t>As we note above, loss detection happens when a sender does not | ||||
| receive delivery confirmation within some expected period of | receive delivery confirmation within some expected period of | |||
| time. In the absence of any knowledge about the latency of a | time. In the absence of any knowledge about the latency of a | |||
| path, the initial RTO MUST be conservatively set to no less than | path, the initial RTO <bcp14>MUST</bcp14> be conservatively set to no less | |||
| than | ||||
| 1 second. | 1 second. | |||
| <list style="empty"> | </t> | |||
| <t>Correctness is of the utmost importance when transmitting into a | ||||
| network with unknown properties because: | ||||
| <list style="symbols"> | ||||
| <t>Premature loss detection can trigger spurious retransmits that | ||||
| could cause issues when a network is already congested.</t> | ||||
| <t>Premature loss detection can needlessly cause congestion | ||||
| control to dramatically lower the sender's allowed | ||||
| transmission rate---especially since the rate is already | ||||
| likely low at this stage of the communication. Recovering | ||||
| from such a rate change can taken a relatively long time.</t> | ||||
| <t>Finally, as discussed below, sometimes using time-based | ||||
| loss detection and retransmissions can cause ambiguities in | ||||
| assessing the latency of a network path. Therefore, it is | ||||
| especially important for the first latency sample to be free | ||||
| of ambiguities such that there is a baseline for the remainder | ||||
| of the communication.</t> | ||||
| </list></t> | ||||
| <t>The specific constant (1 second) comes from the analysis of Internet | <t>Correctness is of the utmost importance when transmitting | |||
| RTTs found in Appendix A of <xref target="RFC6298"/>.</t> | into a network with unknown properties because: | |||
| </list></t> | </t> | |||
| <ul spacing="normal"> | ||||
| <li>Premature loss detection can trigger spurious retransmits | ||||
| that could cause issues when a network is already | ||||
| congested.</li> | ||||
| <li>Premature loss detection can needlessly cause congestion | ||||
| control to dramatically lower the sender's allowed | ||||
| transmission rate, especially since the rate is already | ||||
| likely low at this stage of the communication. Recovering | ||||
| from such a rate change can take a relatively long time.</li> | ||||
| <li>Finally, as discussed below, sometimes using time-based | ||||
| loss detection and retransmissions can cause ambiguities in | ||||
| assessing the latency of a network path. Therefore, it is | ||||
| especially important for the first latency sample to be free | ||||
| of ambiguities such that there is a baseline for the remainder | ||||
| of the communication.</li> | ||||
| </ul> | ||||
| <t> | ||||
| The specific constant (1 second) comes from the analysis of | ||||
| Internet | ||||
| round-trip times (RTTs) found in <xref target="RFC6298" | ||||
| sectionFormat="of" section="A"/>.</t> | ||||
| <t> We now specify four requirements that pertain to setting an | </li> | |||
| expected time interval for delivery confirmation. | <li> | |||
| <t> We now specify four requirements that pertain to setting an | ||||
| expected time interval for delivery confirmation. | ||||
| </t> | ||||
| <list style="empty"> | <t> | |||
| <t>Often measuring the time required for delivery confirmation is | Often, measuring the time required for delivery confirmation is | |||
| framed as assessing the "round-trip time (RTT)" of the network path. | framed as assessing the RTT of the network path. | |||
| The RTT is the minimum amount of time required to receive delivery | The RTT is the minimum amount of time required to receive delivery | |||
| confirmation and also often follows protocol behavior whereby | confirmation and also often follows protocol behavior whereby | |||
| acknowledgments are generated quickly after data arrives. For | acknowledgments are generated quickly after data arrives. For | |||
| instance, this is the case for the RTO used by TCP <xref | instance, this is the case for the RTO used by TCP <xref | |||
| target="RFC6298"/> and SCTP <xref target="RFC4960"/>. However, this | target="RFC6298" format="default"/> and SCTP <xref target="RFC4960" | |||
| is somewhat mis-leading and the expected latency is better framed as | format="default"/>. However, this | |||
| is somewhat misleading, and the expected latency is better framed as | ||||
| the "feedback time" (FT). In other words, the expectation is not | the "feedback time" (FT). In other words, the expectation is not | |||
| always simply a network property, but can include additional time | always simply a network property; it can include additional time | |||
| before a sender should reasonably expect a response. </t> | before a sender should reasonably expect a response. | |||
| </t> | ||||
| <t>For instance, consider a UDP-based DNS request from a client to a | <t>For instance, consider a UDP-based DNS request from a client to | |||
| recursive resolver <xref target="RFC1035"/>. When the request can be | a | |||
| served from the resolver's cache the FT likely well approximates the | recursive resolver <xref target="RFC1035" format="default"/>. | |||
| network RTT between the client and resolver. However, on a cache miss | When the request can be | |||
| the resolver will request the needed information from one or more | served from the resolver's cache, the feedback time (FT) likely | |||
| authoritative DNS servers, which will non-trivially increase the FT | well approximates the | |||
| compared to the network RTT between the client and resolver.</t> | network RTT between the client and resolver. However, on a cache | |||
| miss, | ||||
| <t>Therefore, we express the requirements in terms of FT. Again, for | the resolver will request the needed information from one or more | |||
| ease of exposition we use "RTO" to indicate the interval between a | authoritative DNS servers, which will non-trivially increase the | |||
| packet transmission and the decision the packet has been | FT | |||
| lost---regardless of whether the packet will be retransmitted.</t> | compared to the network RTT between the client and resolver.</t> | |||
| <t>Therefore, we express the requirements in terms of FT. Again, | ||||
| </list> | for | |||
| ease of exposition, we use "RTO" to indicate the interval between | ||||
| <list style="format (%c)"> | a | |||
| packet transmission and the decision that the packet has been | ||||
| <t>The RTO SHOULD be set based on multiple observations of the FT when | lost, regardless of whether the packet will be retransmitted.</t> | |||
| available. | ||||
| <list style="empty"> | <ol spacing="normal" type="(%c)"> | |||
| <t>In other words, the RTO should represent an empirically-derived | <li> | |||
| <t>The RTO <bcp14>SHOULD</bcp14> be set based on multiple | ||||
| observations of the FT when available. | ||||
| </t> | ||||
| <t>In other words, the RTO should represent an empirically | ||||
| derived | ||||
| reasonable amount of time that the sender should wait for delivery | reasonable amount of time that the sender should wait for delivery | |||
| confirmation before deciding the given data is lost. Network paths are | confirmation before deciding the given data is lost. Network paths are | |||
| inherently dynamic and therefore it is crucial to incorporate multiple | inherently dynamic; therefore, it is crucial to incorporate multiple | |||
| recent FT samples in the RTO to take into account the delay variation | recent FT samples in the RTO to take into account the delay variation | |||
| across time.</t> | across time.</t> | |||
| <t>For example, TCP's RTO <xref target="RFC6298" | ||||
| format="default"/> would satisfy this requirement due to its | ||||
| use of an exponentially weighted moving average (EWMA) to | ||||
| combine multiple FT samples into a "smoothed RTT". In the | ||||
| name of conservativeness, TCP goes further to also include an | ||||
| explicit variance term when computing the RTO.</t> | ||||
| <t>For example, TCP's RTO <xref target="RFC6298"/> would satisfy this | <t>While multiple FT samples are crucial for capturing the | |||
| requirement due to its use of an exponentially-weighted | delay | |||
| moving average (EWMA) to combine multiple FT samples into a | ||||
| "smoothed RTT". In the name of conservativeness, TCP goes | ||||
| further to also include an explicit variance term when | ||||
| computing the RTO.</t> | ||||
| <t>While multiple FT samples are crucial for capturing the delay | ||||
| dynamics of a path, we explicitly do not tightly specify the | dynamics of a path, we explicitly do not tightly specify the | |||
| process---including the number of FT samples to use and how/when to age | process -- including the number of FT samples to use and how/when to age | |||
| samples out of the RTO calculation---as the particulars could depend on | samples out of the RTO calculation -- as the particulars could depend on | |||
| the situation and/or goals of each specific loss detector.</t> | the situation and/or goals of each specific loss detector.</t> | |||
| <t>Finally, FT samples come from packet exchanges between | ||||
| <t>Finally, FT samples come from packet exchanges between peers. We | peers. We | |||
| encourage protocol designers---especially for new protocols---to strive | encourage protocol designers -- especially for new protocols -- to | |||
| strive | ||||
| to ensure the feedback is not easily spoofable by on- or off-path | to ensure the feedback is not easily spoofable by on- or off-path | |||
| attackers such that they can perturb a host's notion of the FT. | attackers such that they can perturb a host's notion of the FT. | |||
| Ideally, all messages would be cryptographically secure, but given that | Ideally, all messages would be cryptographically secure, but given that | |||
| this is not always possible---especially in legacy protocols---using a | this is not always possible -- especially in legacy protocols -- using a | |||
| healthy amount of randomness in the packets is encouraged.</t> | healthy amount of randomness in the packets is encouraged.</t> | |||
| </list></t> | </li> | |||
| <li> | ||||
| <t>FT observations SHOULD be taken and incorporated into the RTO at | <t>FT observations <bcp14>SHOULD</bcp14> be taken and | |||
| incorporated into the RTO at | ||||
| least once per RTT or as frequently as data is exchanged in cases where | least once per RTT or as frequently as data is exchanged in cases where | |||
| that happens less frequently than once per RTT. | that happens less frequently than once per RTT. | |||
| <list style="empty"> | </t> | |||
| <t>Internet measurements show that taking only a single FT sample per | <t>Internet measurements show that taking only a single FT | |||
| sample per | ||||
| TCP connection results in a relatively poorly performing RTO mechanism | TCP connection results in a relatively poorly performing RTO mechanism | |||
| <xref target="AP99"/>, hence this requirement that the FT be sampled | <xref target="AP99" format="default"/>, hence this requirement that the | |||
| FT be sampled | ||||
| continuously throughout the lifetime of communication.</t> | continuously throughout the lifetime of communication.</t> | |||
| <t>As an example, TCP takes an FT sample roughly once per RTT, | ||||
| or, if using the timestamp option <xref target="RFC7323" | ||||
| format="default"/>, on each acknowledgment arrival. <xref | ||||
| target="AP99" format="default"/> shows that both these | ||||
| approaches result in roughly equivalent performance for the | ||||
| RTO estimator.</t> | ||||
| <t>As an example, TCP takes an FT sample roughly once per RTT, or if | </li> | |||
| using the timestamp option <xref target="RFC7323"/> on each | <li> | |||
| acknowledgment arrival. <xref target="AP99"/> shows that both these | <t>FT observations <bcp14>MAY</bcp14> be taken from non-data | |||
| approaches result in roughly equivalent performance for the RTO | exchanges. | |||
| estimator.</t> | ||||
| </list></t> | ||||
| <t>FT observations MAY be taken from non-data exchanges. | ||||
| <list style="empty"> | </t> | |||
| <t>Some protocols use non-data exchanges for various reasons---e.g., | <t>Some protocols use non-data exchanges for various reasons, | |||
| keepalives, heartbeats, control messages. To the extent that the | e.g., | |||
| keepalives, heartbeats, and control messages. To the extent that the | ||||
| latency of these exchanges mirrors data exchange, they can be leveraged | latency of these exchanges mirrors data exchange, they can be leveraged | |||
| to take FT samples within the RTO mechanism. Such samples can help | to take FT samples within the RTO mechanism. Such samples can help | |||
| protocols keep their RTO accurate during lulls in data transmission. | protocols keep their RTO accurate during lulls in data transmission. | |||
| However, given that these messages may not be subject to the same delays | However, given that these messages may not be subject to the same delays | |||
| as data transmission, we do not take a general view on whether this is | as data transmission, we do not take a general view on whether this is | |||
| useful or not.</t> | useful or not.</t> | |||
| </list></t> | </li> | |||
| <li> | ||||
| <t>An RTO mechanism MUST NOT use ambiguous FT samples. | <t>An RTO mechanism <bcp14>MUST NOT</bcp14> use ambiguous FT | |||
| samples. | ||||
| <list style="empty"> | ||||
| <t>Assume two copies of some packet X are transmitted at times t0 and t1 | </t> | |||
| and then at time t2 the sender receives confirmation that X in fact | ||||
| arrived. In some cases, it is not clear which copy of X triggered the | ||||
| confirmation and hence the actual FT is either t2-t1 or t2-t0, but which | ||||
| is a mystery. Therefore, in this situation an implementation MUST NOT | ||||
| use either version of the FT sample and hence not update the RTO (as | ||||
| discussed in <xref target="KP87"/>,<xref target="RFC6298"/>).</t> | ||||
| <t>There are cases where two copies of some data are | <t>Assume two copies of some packet X are transmitted at | |||
| times t0 and t1. Then, at time t2, the sender receives | ||||
| confirmation that X in fact arrived. In some cases, it is not | ||||
| clear which copy of X triggered the confirmation; hence, the | ||||
| actual FT is either t2-t1 or t2-t0, but which is a mystery. | ||||
| Therefore, in this situation, an implementation <bcp14>MUST | ||||
| NOT</bcp14> use either version of the FT sample and hence not | ||||
| update the RTO (as discussed in <xref target="KP87" | ||||
| format="default"/> and <xref target="RFC6298" | ||||
| format="default"/>).</t> | ||||
| <t>There are cases where two copies of some data are | ||||
| transmitted in a way whereby the sender can tell which is | transmitted in a way whereby the sender can tell which is | |||
| being acknowledged by an incoming ACK. E.g., TCP's | being acknowledged by an incoming ACK. For example, TCP's | |||
| timestamp option <xref target="RFC7323"/> allows for packets to be | timestamp option <xref target="RFC7323" format="default"/> allows for | |||
| packets to be | ||||
| uniquely identified and hence avoid the ambiguity. In such | uniquely identified and hence avoid the ambiguity. In such | |||
| cases there is no ambiguity and the resulting samples can | cases, there is no ambiguity and the resulting samples can | |||
| update the RTO.</t> | update the RTO.</t> | |||
| </list></t> | </li> | |||
| </ol> | ||||
| </list></t> | </li> | |||
| <li> | ||||
| <t>Loss detected by the RTO mechanism MUST be taken as an indication of | <t>Loss detected by the RTO mechanism <bcp14>MUST</bcp14> be taken | |||
| network congestion and the sending rate adapted using a standard | as an indication of network congestion and the sending rate adapted | |||
| mechanism (e.g., TCP collapses the congestion window to one packet <xref | using a standard mechanism (e.g., TCP collapses the congestion | |||
| target="RFC5681"/>). | window to one packet <xref target="RFC5681" format="default"/>). | |||
| <list style="empty"> | ||||
| <t>This ensures network safety.</t> | </t> | |||
| <t>An exception to this rule is if an IETF standardized mechanism | <t>This ensures network safety.</t> | |||
| <t>An exception to this rule is if an IETF standardized mechanism | ||||
| determines that a particular loss is due to a non-congestion event | determines that a particular loss is due to a non-congestion event | |||
| (e.g., packet corruption). In such a case a congestion control action | (e.g., packet corruption). In such a case, a congestion control action | |||
| is not required. Additionally, congestion control actions taken based | is not required. Additionally, congestion control actions taken based | |||
| on time-based loss detection could be reversed when a standard mechanism | on time-based loss detection could be reversed when a standard mechanism | |||
| post-facto determines that the cause of the loss was not congestion | post facto determines that the cause of the loss was not congestion | |||
| (e.g., <xref target="RFC5682"/>).</t> | (e.g., <xref target="RFC5682" format="default"/>).</t> | |||
| </list></t> | ||||
| <t>Each time the RTO is used to detect a loss, the value of the RTO MUST | </li> | |||
| <li> | ||||
| <t>Each time the RTO is used to detect a loss, the value of the RTO | ||||
| <bcp14>MUST</bcp14> | ||||
| be exponentially backed off such that the next firing requires a longer | be exponentially backed off such that the next firing requires a longer | |||
| interval. The backoff SHOULD be removed after either (a) the subsequent | interval. The backoff <bcp14>SHOULD</bcp14> be removed after either (a) | |||
| the subsequent | ||||
| successful transmission of non-retransmitted data, or (b) an RTO passes | successful transmission of non-retransmitted data, or (b) an RTO passes | |||
| without detecting additional losses. The former will generally be | without detecting additional losses. The former will generally be | |||
| quicker. The latter covers cases where loss is detected, but not | quicker. The latter covers cases where loss is detected but not | |||
| repaired. | repaired. | |||
| <list style="empty"> | </t> | |||
| <t>A maximum value MAY be placed on the RTO. The maximum RTO MUST NOT | ||||
| be less than 60 seconds (as specified in <xref target="RFC6298"/>).</t> | ||||
| <t>This ensures network safety.</t> | ||||
| <t>As with guideline (3), an exception to this rule exists if an IETF | <t>A maximum value <bcp14>MAY</bcp14> be placed on the RTO. The | |||
| maximum RTO <bcp14>MUST NOT</bcp14> be less than 60 seconds (as | ||||
| specified in <xref target="RFC6298" format="default"/>).</t> | ||||
| <t>This ensures network safety.</t> | ||||
| <t>As with guideline (3), an exception to this rule exists if an | ||||
| IETF | ||||
| standardized mechanism determines that a particular loss is not due to | standardized mechanism determines that a particular loss is not due to | |||
| congestion.</t> | congestion.</t> | |||
| </list></t> | </li> | |||
| </list></t> | </ol> | |||
| </section> | </section> | |||
| <section anchor="sect-5" numbered="true" toc="default"> | ||||
| <name>Discussion</name> | ||||
| <section title="Discussion" anchor="sect-5"><t> | <t> | |||
| We note that research has shown the tension between the | We note that research has shown the tension between the | |||
| responsiveness and correctness of time-based loss detection seems to | responsiveness and correctness of time-based loss detection seems to | |||
| be a fundamental tradeoff in the context of TCP <xref target="AP99"/>. That | be a fundamental tradeoff in the context of TCP <xref target="AP99" | |||
| is, | format="default"/>. That is, | |||
| making the RTO more aggressive (e.g., via changing TCP's | making the RTO more aggressive (e.g., via changing TCP's | |||
| exponentially weighted moving average (EWMA) gains, lowering the | exponentially weighted moving average (EWMA) gains, lowering the | |||
| minimum RTO, etc.) can reduce the time required to detect actual | minimum RTO, etc.) can reduce the time required to detect actual | |||
| loss. However, at the same time, such aggressiveness leads to more | loss. However, at the same time, such aggressiveness leads to more | |||
| cases of mistakenly declaring packets lost that ultimately arrived | cases of mistakenly declaring packets lost that ultimately arrived | |||
| at the receiver. Therefore, being as aggressive as the requirements | at the receiver. Therefore, being as aggressive as the requirements | |||
| given in the previous section allow in any particular situation may | given in the previous section allow in any particular situation may | |||
| not be the best course of action because detecting loss---even if | not be the best course of action because detecting loss, even if | |||
| falsely---carries a requirement to invoke a congestion response | falsely, carries a requirement to invoke a congestion response | |||
| which will ultimately reduce the transmission rate.</t> | that will ultimately reduce the transmission rate.</t> | |||
| <t> | ||||
| <t> | ||||
| While the tradeoff between responsiveness and correctness seems | While the tradeoff between responsiveness and correctness seems | |||
| fundamental, the tradeoff can be made less relevant if the sender | fundamental, the tradeoff can be made less relevant if the sender can | |||
| can detect and recover from mistaken loss detection. Several | detect and recover from mistaken loss detection. Several mechanisms have | |||
| mechanisms have been proposed for this purpose, such as Eifel | been proposed for this purpose, such as Eifel <xref target="RFC3522" | |||
| <xref target="RFC3522"/>, F-RTO <xref target="RFC5682"/> and DSACK <xref | format="default"/>, Forward RTO-Recovery (F-RTO) <xref target="RFC5682" | |||
| target="RFC2883"/>,<xref target="RFC3708"/>. Using such | format="default"/>, and Duplicate Selective Acknowledgement (DSACK) <xref | |||
| mechanisms may allow a data originator to tip towards being more | target="RFC2883" | |||
| responsive without incurring (as much of) the attendant costs of | format="default"/> <xref target="RFC3708" format="default"/>. Using such | |||
| mistakenly declaring packets to be lost.</t> | mechanisms may allow a data originator to tip towards being more responsive | |||
| without incurring (as much of) the attendant costs of mistakenly declaring | ||||
| <t> | packets to be lost.</t> | |||
| Also, note that, in addition to the experiments discussed in <xref target="AP | <t> | |||
| 99"/>, | Also, note that, in addition to the experiments discussed in <xref | |||
| target="AP99" format="default"/>, | ||||
| the Linux TCP implementation has been using various non-standard RTO | the Linux TCP implementation has been using various non-standard RTO | |||
| mechanisms for many years seemingly without large-scale problems | mechanisms for many years seemingly without large-scale problems | |||
| (e.g., using different EWMA gains than specified in <xref target="RFC6298"/>) | (e.g., using different EWMA gains than specified in <xref target="RFC6298" | |||
| . | format="default"/>). | |||
| Further, a number of TCP implementations use a steady-state minimum | Further, a number of TCP implementations use a steady-state minimum | |||
| RTO that is less than the 1 second specified in <xref target="RFC6298"/>. Wh | RTO that is less than the 1 second specified in <xref target="RFC6298" | |||
| ile | format="default"/>. While | |||
| the implication of these deviations from the standard may be more | the implication of these deviations from the standard may be more | |||
| spurious retransmits (per <xref target="AP99"/>), we are aware of no large-sc | spurious retransmits (per <xref target="AP99" format="default"/>), we are | |||
| ale | aware of no large-scale | |||
| network safety issues caused by this change to the minimum RTO. | network safety issues caused by this change to the minimum RTO. | |||
| This informs the guidelines in the last section (e.g., there is no | This informs the guidelines in the last section (e.g., there is no | |||
| minimum RTO specified).</t> | minimum RTO specified).</t> | |||
| <t> | <t> | |||
| Finally, we note that while allowing implementations to be more | Finally, we note that while allowing implementations to be more | |||
| aggressive could in fact increase the number of needless | aggressive could in fact increase the number of needless | |||
| retransmissions, the above requirements fail safe in that they | retransmissions, the above requirements fail safely in that they | |||
| insist on exponential backoff and a transmission rate reduction. | insist on exponential backoff and a transmission rate reduction. | |||
| Therefore, providing implementers more latitude than they have | Therefore, providing implementers more latitude than they have | |||
| traditionally been given in IETF specifications of RTO mechanisms | traditionally been given in IETF specifications of RTO mechanisms | |||
| does not somehow open the flood gates to aggressive behavior. Since | does not somehow open the flood gates to aggressive behavior. Since | |||
| there is a downside to being aggressive, the incentives for proper | there is a downside to being aggressive, the incentives for proper | |||
| behavior are retained in the mechanism.</t> | behavior are retained in the mechanism.</t> | |||
| </section> | ||||
| </section> | <section anchor="sect-6" numbered="true" toc="default"> | |||
| <name>Security Considerations</name> | ||||
| <section title="Security Considerations" anchor="sect-6"><t> | <t> | |||
| This document does not alter the security properties of time-based | This document does not alter the security properties of time-based | |||
| loss detection mechanisms. See <xref target="RFC6298"/> for a discussion of | loss detection mechanisms. See <xref target="RFC6298" format="default"/> | |||
| these | for a discussion of these | |||
| within the context of TCP.</t> | within the context of TCP.</t> | |||
| </section> | ||||
| <section anchor="sect-7" numbered="true" toc="default"> | ||||
| <name>IANA Considerations</name> | ||||
| <t> | ||||
| This document has no IANA actions.</t> | ||||
| </section> | ||||
| </section> | </middle> | |||
| <back> | ||||
| <section title="IANA Considerations" anchor="sect-7"><t> | <displayreference target="I-D.ietf-tcpm-rack" to="CCDJ20"/> | |||
| This document has no IANA considerations.</t> | <displayreference target="I-D.dukkipati-tcpm-tcp-loss-probe" to="DCCM13"/> | |||
| <displayreference target="I-D.ietf-quic-recovery" to="IS20"/> | ||||
| </section> | <references> | |||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.x | ||||
| ml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <section title="Acknowledgments" numbered="no" anchor="acknowledgments">< | <reference anchor="AP99"> | |||
| t> | <front> | |||
| This document benefits from years of discussions with Ethan Blanton, | <title>On Estimating End-to-End Network Path Properties</title> | |||
| Sally Floyd, Jana Iyengar, Shawn Ostermann, Vern Paxson, and the | <author initials="M." surname="Allman" fullname="M. Allman"> | |||
| members of the TCPM and TCP-IMPL working groups. Ran Atkinson, | </author> | |||
| Yuchung Cheng, David Black, Stewart Bryant, Martin Duke, Wesley | <author initials="V." surname="Paxson" fullname="V. Paxson"> | |||
| Eddy, Gorry Fairhurst, Rahul Arvind Jadhav, Benjamin Kaduk, Mirja | </author> | |||
| Kuhlewind, Nicolas Kuhn, Jonathan Looney and Michael Scharf provided | <date month="September" year="1999"/> | |||
| useful comments on previous versions of this document.</t> | </front> | |||
| <refcontent>Proceedings of the ACM SIGCOMM Technical Symposium</refcontent> | ||||
| </reference> | ||||
| </section> | <xi:include | |||
| href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf | ||||
| -tcpm-rack.xml"/> | ||||
| </middle> | <xi:include | |||
| href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.dukk | ||||
| ipati-tcpm-tcp-loss-probe.xml"/> | ||||
| <back> | <reference anchor='I-D.ietf-quic-recovery'> | |||
| <references title="Normative References"> | <front> | |||
| &RFC2119; | <title>QUIC Loss Detection and Congestion Control</title> | |||
| &RFC8174; | ||||
| </references> | ||||
| <references title="Informative References"> | ||||
| <reference anchor="AP99"><front> | ||||
| <title>On Estimating End-to-End Network Path Properties</title> | ||||
| <author initials="M." surname="Allman" fullname="M. Allman"> | ||||
| </author> | ||||
| <author initials="V." surname="Paxson" fullname="V. Paxson"> | <author initials='J' surname='Iyengar' fullname='Jana Iyengar' role='editor'> | |||
| </author> | <organization /> | |||
| </author> | ||||
| <date month="September" year="1999"/> | <author initials='I' surname='Swett' fullname='Ian Swett' role='editor'> | |||
| </front> | <organization /> | |||
| </author> | ||||
| <seriesInfo name="Proceedings" value="of the ACM SIGCOMM Technical Sympos | <date month='October' day='20' year='2020' /> | |||
| ium"/> | ||||
| </reference> | ||||
| &I-D.ietf-tcpm-rack; | ||||
| &I-D.dukkipati-tcpm-tcp-loss-probe; | ||||
| &I-D.ietf-quic-recovery; | ||||
| <reference anchor="Jac88"><front> | ||||
| <title>Congestion Avoidance and Control</title> | ||||
| <author initials="V." surname="Jacobson" fullname="V. Jacobson"> | ||||
| </author> | ||||
| <date month="August" year="1988"/> | </front> | |||
| </front> | ||||
| <seriesInfo name="ACM" value="SIGCOMM"/> | <seriesInfo name='Internet-Draft' value='draft-ietf-quic-recovery-32' /> | |||
| </reference> | </reference> | |||
| <reference anchor="KP87"><front> | <reference anchor="Jac88"> | |||
| <title>Improving Round-Trip Time Estimates in Reliable Transport Protocol | <front> | |||
| s</title> | <title>Congestion avoidance and control</title> | |||
| <author initials="P." surname="Karn" fullname="P. Karn"></author> | <author initials="V." surname="Jacobson" fullname="V. Jacobson"> | |||
| <author initials="C." surname="Partridge" fullname="C. Partridge"></autho | </author> | |||
| r> | <date month="August" year="1988"/> | |||
| <date/> | </front> | |||
| </front> | <refcontent>ACM SIGCOMM</refcontent> | |||
| <seriesInfo name="DOI" value="10.1145/52325.52356"/> | ||||
| <seriesInfo name="SIGCOMM" value="87"/> | </reference> | |||
| </reference> | ||||
| &RFC1034; | <reference anchor="KP87"> | |||
| &RFC1035; | <front> | |||
| &RFC2018; | <title>Improving Round-Trip Time Estimates in Reliable Transport | |||
| &RFC2140; | Protocols</title> | |||
| &RFC2883; | <author initials="P." surname="Karn" fullname="P. Karn"/> | |||
| &RFC3124; | <author initials="C." surname="Partridge" | |||
| &RFC3261; | fullname="C. Partridge"/> | |||
| &RFC3522; | </front> | |||
| &RFC3708; | <refcontent>SIGCOMM 87</refcontent> | |||
| &RFC4960; | </reference> | |||
| &RFC5681; | ||||
| &RFC5682; | ||||
| &RFC5740; | ||||
| &RFC6182; | ||||
| &RFC6298; | ||||
| &RFC6675; | ||||
| &RFC7323; | ||||
| </references> | ||||
| </back> | ||||
| </rfc> | <xi:include | |||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1034.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1035.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2018.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2140.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2883.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3124.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3261.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3522.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3708.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4960.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5681.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5682.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5740.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6182.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6298.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6675.x | ||||
| ml"/> | ||||
| <xi:include | ||||
| href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7323.x | ||||
| ml"/> | ||||
| </references> | ||||
| </references> | ||||
| <section numbered="false" anchor="acknowledgments" toc="default"> | ||||
| <name>Acknowledgments</name> | ||||
| <t> | ||||
| This document benefits from years of discussions with <contact | ||||
| fullname="Ethan Blanton"/>, <contact fullname="Sally Floyd"/>, <contact | ||||
| fullname="Jana Iyengar"/>, <contact fullname="Shawn Ostermann"/>, <contact | ||||
| fullname="Vern Paxson"/>, and the members of the TCPM and TCPIMPL Working | ||||
| Groups. <contact fullname="Ran Atkinson"/>, <contact fullname="Yuchung | ||||
| Cheng"/>, <contact fullname="David Black"/>, <contact fullname="Stewart | ||||
| Bryant"/>, <contact fullname="Martin Duke"/>, <contact fullname="Wesley | ||||
| Eddy"/>, <contact fullname="Gorry Fairhurst"/>, <contact fullname="Rahul | ||||
| Arvind Jadhav"/>, <contact fullname="Benjamin Kaduk"/>, <contact | ||||
| fullname="Mirja Kühlewind"/>, <contact fullname="Nicolas Kuhn"/>, <contact | ||||
| fullname="Jonathan Looney"/>, and <contact fullname="Michael Scharf"/> | ||||
| provided useful comments on | ||||
| previous draft versions of this document.</t> | ||||
| </section> | ||||
| </back> | ||||
| </rfc> | ||||
| End of changes. 104 change blocks. | ||||
| 522 lines changed or deleted | 515 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||