diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc8961.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc8961.txt')
-rw-r--r-- | doc/rfc/rfc8961.txt | 672 |
1 files changed, 672 insertions, 0 deletions
diff --git a/doc/rfc/rfc8961.txt b/doc/rfc/rfc8961.txt new file mode 100644 index 0000000..85471c7 --- /dev/null +++ b/doc/rfc/rfc8961.txt @@ -0,0 +1,672 @@ + + + + +Internet Engineering Task Force (IETF) M. Allman +Request for Comments: 8961 ICSI +BCP: 233 November 2020 +Category: Best Current Practice +ISSN: 2070-1721 + + + Requirements for Time-Based Loss Detection + +Abstract + + Many protocols must detect packet loss for various reasons (e.g., to + ensure reliability using retransmissions or to understand the level + of congestion along a network path). While many mechanisms have been + designed to detect loss, ultimately, protocols can only count on the + passage of time without delivery confirmation to declare a packet + "lost". Each implementation of a time-based loss detection mechanism + represents a balance between correctness and timeliness; therefore, + no implementation suits all situations. This document provides high- + level requirements for time-based loss detectors appropriate for + general use in unicast communication across the Internet. Within the + requirements, implementations have latitude to define particulars + that best address each situation. + +Status of This Memo + + This memo documents an Internet Best Current Practice. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + BCPs is available in Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + https://www.rfc-editor.org/info/rfc8961. + +Copyright Notice + + Copyright (c) 2020 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + +Table of Contents + + 1. Introduction + 1.1. Terminology + 2. Context + 3. Scope + 4. Requirements + 5. Discussion + 6. Security Considerations + 7. IANA Considerations + 8. References + 8.1. Normative References + 8.2. Informative References + Acknowledgments + Author's Address + +1. Introduction + + As a network of networks, the Internet consists of a large variety of + links and systems that support a wide variety of tasks and workloads. + The service provided by the network varies from best-effort delivery + among loosely connected components to highly predictable delivery + within controlled environments (e.g., between physically connected + nodes, within a tightly controlled data center). Each path through + the network has a set of path properties, e.g., available capacity, + delay, and packet loss. Given the range of networks that make up the + Internet, these properties range from largely static to highly + dynamic. + + This document provides guidelines for developing an understanding of + one path property: packet loss. In particular, we offer guidelines + for developing and implementing time-based loss detectors that have + been gradually learned over the last several decades. We focus on + the general case where the loss properties of a path are (a) unknown + a priori and (b) dynamically varying over time. Further, while there + are numerous root causes of packet loss, we leverage the conservative + notion that loss is an implicit indication of congestion [RFC5681]. + While this stance is not always correct, as a general assumption it + has historically served us well [Jac88]. As we discuss further in + Section 2, the guidelines in this document should be viewed as a + general default for unicast communication across best-effort networks + and not as optimal -- or even applicable -- for all situations. + + Given that packet loss is routine in best-effort networks, loss + detection is a crucial activity for many protocols and applications + and is generally undertaken for two major reasons: + + (1) Ensuring reliable data delivery + + 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. + + (2) Congestion control + + 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. + + Various mechanisms are used to detect losses in a packet stream. + Often, we use continuous or periodic acknowledgments from the + recipient to inform the sender's notion of which pieces of data are + missing. However, despite our best intentions and most robust + mechanisms, we cannot place ultimate faith in receiving such + acknowledgments but can only truly depend on the passage of time. + Therefore, our ultimate backstop to ensuring that we detect all loss + 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. When + this time period passes without delivery confirmation, the sender + concludes the data was lost in transit. + + The specifics of time-based loss detection schemes represent a + tradeoff between correctness and responsiveness. In other words, we + wish to simultaneously: + + * wait long enough to ensure the detection of loss is correct, and + + * minimize the amount of delay we impose on applications (before + repairing loss) and the network (before we reduce the congestion). + + Serving both of these goals is difficult, as they pull in opposite + directions [AP99]. By not waiting long enough to accurately + determine a packet has been lost, we may provide a needed + retransmission in a timely manner but risk both sending unnecessary + ("spurious") retransmissions and needlessly lowering the transmission + rate. By waiting long enough that we are unambiguously certain a + packet has been lost, we cannot repair losses in a timely manner and + we risk prolonging network congestion. + + Many protocols and applications -- such as TCP [RFC6298], SCTP + [RFC4960], and SIP [RFC3261] -- use their own time-based loss + detection mechanisms. At this point, our experience leads to a + recognition that often specific tweaks that deviate from standardized + time-based loss detectors do not materially impact network safety + with respect to congestion control [AP99]. Therefore, in this + document we outline a set of high-level, protocol-agnostic + requirements for time-based loss detection. The intent is to provide + a safe foundation on which implementations have the flexibility to + instantiate mechanisms that best realize their specific goals. + +1.1. Terminology + + 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 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +2. Context + + This document is different from the way we ideally like to engineer + systems. Usually, we strive to understand high-level requirements as + a starting point. We then methodically engineer specific protocols, + algorithms, and systems that meet these requirements. Within the + IETF standards process, we have derived many time-based loss + detection schemes without the benefit of some over-arching + requirements document -- because we had no idea how to write such a + document! Therefore, we made the best specific decisions we could in + response to specific needs. + + At this point, however, the community's experience has matured to the + point where we can define a set of general, high-level requirements + for time-based loss detection schemes. We now understand how to + separate the strategies these mechanisms use that are crucial for + network safety from those small details that do not materially impact + network safety. The requirements in this document may not be + appropriate in all cases. In particular, the guidelines in Section 4 + are concerned with the general case, but specific situations may + allow for more flexibility in terms of loss detection because + specific facets of the environment are known (e.g., when operating + over a single physical link or within a tightly controlled data + center). Therefore, variants, deviations, or wholly different 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 as + one-size-fits-all guidance that is optimal in all cases. + + Adding a requirements umbrella to a body of existing specifications + is inherently messy and we run the risk of creating inconsistencies + with both past and future mechanisms. Therefore, we make the + following statements about the relationship of this document to past + and future specifications: + + * This document does not update or obsolete any existing RFC. These + previous specifications -- while generally consistent with the + requirements in this document -- reflect community consensus, and + this document does not change that consensus. + + * The requirements in this document are meant to provide for network + safety and, as such, SHOULD be used by all future time-based loss + detection mechanisms. + + * The requirements in this document may not be appropriate in all + cases; therefore, deviations and variants may be necessary in the + future (hence the "SHOULD" in the last bullet). However, + inconsistencies MUST be (a) explained and (b) gather consensus. + +3. Scope + + The principles we outline in this document are protocol-agnostic and + widely applicable. We make the following scope statements about the + application of the requirements discussed in Section 4: + + (S.1) While there are a bevy of uses for timers in protocols -- from + rate-based pacing to connection failure detection and beyond -- + this document is focused only on loss detection. + + (S.2) The requirements for time-based loss detection mechanisms in + this document are for the primary or "last resort" loss + detection mechanism, whether the mechanism is the sole loss + repair strategy or works in concert with other mechanisms. + + While a straightforward time-based loss detector is sufficient + for simple protocols like DNS [RFC1034] [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 + [RFC2018] [RFC4960] [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, 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". + + 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 [DCCM13] [CCDJ20] + [IS20]. 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. + + (S.3) The requirements in this document apply only to endpoint-to- + endpoint unicast communication. Reliable multicast (e.g., + [RFC5740]) protocols are explicitly outside the scope of this + document. + + Protocols such as SCTP [RFC4960] and Multipath TCP (MP-TCP) + [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. That is, 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. + + (S.4) There are cases where state is shared across connections or + flows (e.g., [RFC2140] and [RFC3124]). 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 + Section 4 are likely applicable, sharing time-based loss + detection information across flows is outside the scope of this + document. + +4. Requirements + + We now list the requirements that apply when designing primary or + last-resort time-based loss detection mechanisms. For historical + 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 + delivery confirmation as the "retransmission timeout" or "RTO". + After the RTO passes without delivery confirmation, the sender may + safely assume the packet is lost. However, as discussed above, the + detected loss need not be repaired (i.e., the loss could be detected + only for congestion control and not reliability purposes). + + (1) As we note above, loss detection happens when a sender does not + receive delivery confirmation within some expected period of + time. In the absence of any knowledge about the latency of a + path, the initial RTO MUST be conservatively set to no less than + 1 second. + + Correctness is of the utmost importance when transmitting into a + network with unknown properties because: + + * Premature loss detection can trigger spurious retransmits + that could cause issues when a network is already congested. + + * 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. + + * 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. + + The specific constant (1 second) comes from the analysis of + Internet round-trip times (RTTs) found in Appendix A of + [RFC6298]. + + (2) We now specify four requirements that pertain to setting an + expected time interval for delivery confirmation. + + Often, measuring the time required for delivery confirmation is + framed as assessing the RTT of the network path. The RTT is the + minimum amount of time required to receive delivery confirmation + and also often follows protocol behavior whereby acknowledgments + are generated quickly after data arrives. For instance, this is + the case for the RTO used by TCP [RFC6298] and SCTP [RFC4960]. + However, this is somewhat misleading, and the expected latency + is better framed as the "feedback time" (FT). In other words, + the expectation is not always simply a network property; it can + include additional time before a sender should reasonably expect + a response. + + For instance, consider a UDP-based DNS request from a client to + a recursive resolver [RFC1035]. When the request can be served + from the resolver's cache, the feedback time (FT) likely well + approximates the network RTT between the client and resolver. + However, on a cache miss, the resolver will request the needed + information from one or more authoritative DNS servers, which + will non-trivially increase the FT compared to the network RTT + between the client and resolver. + + Therefore, we express the requirements in terms of FT. Again, + for ease of exposition, we use "RTO" to indicate the interval + between a packet transmission and the decision that the packet + has been lost, regardless of whether the packet will be + retransmitted. + + (a) The RTO SHOULD be set based on multiple observations of the + FT when available. + + In other words, the RTO should represent an empirically + derived reasonable amount of time that the sender should + wait for delivery confirmation before deciding the given + data is lost. Network paths are inherently dynamic; + therefore, it is crucial to incorporate multiple recent FT + samples in the RTO to take into account the delay variation + across time. + + For example, TCP's RTO [RFC6298] 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. + + While multiple FT samples are crucial for capturing the + delay 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 samples out of the RTO + calculation -- as the particulars could depend on the + situation and/or goals of each specific loss detector. + + Finally, FT samples come from packet exchanges between + peers. We encourage protocol designers -- especially for + new protocols -- to strive 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. Ideally, all + messages would be cryptographically secure, but given that + this is not always possible -- especially in legacy + protocols -- using a healthy amount of randomness in the + packets is encouraged. + + (b) FT observations SHOULD be taken and incorporated into the + RTO at least once per RTT or as frequently as data is + exchanged in cases where that happens less frequently than + once per RTT. + + Internet measurements show that taking only a single FT + sample per TCP connection results in a relatively poorly + performing RTO mechanism [AP99], hence this requirement + that the FT be sampled continuously throughout the lifetime + of communication. + + As an example, TCP takes an FT sample roughly once per RTT, + or, if using the timestamp option [RFC7323], on each + acknowledgment arrival. [AP99] shows that both these + approaches result in roughly equivalent performance for the + RTO estimator. + + (c) FT observations MAY be taken from non-data exchanges. + + Some protocols use non-data exchanges for various reasons, + e.g., keepalives, heartbeats, and control messages. To the + extent that the latency of these exchanges mirrors data + exchange, they can be leveraged to take FT samples within + the RTO mechanism. Such samples can help protocols keep + their RTO accurate during lulls in data transmission. + 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 useful or not. + + (d) An RTO mechanism MUST NOT use ambiguous FT samples. + + 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 + MUST NOT use either version of the FT sample and hence not + update the RTO (as discussed in [KP87] and [RFC6298]). + + There are cases where two copies of some data are + transmitted in a way whereby the sender can tell which is + being acknowledged by an incoming ACK. For example, TCP's + timestamp option [RFC7323] allows for packets to be + uniquely identified and hence avoid the ambiguity. In such + cases, there is no ambiguity and the resulting samples can + update the RTO. + + (3) Loss detected by the RTO mechanism MUST be taken as an + indication of network congestion and the sending rate adapted + using a standard mechanism (e.g., TCP collapses the congestion + window to one packet [RFC5681]). + + This ensures network safety. + + An exception to this rule is if an IETF standardized mechanism + determines that a particular loss is due to a non-congestion + event (e.g., packet corruption). In such a case, a congestion + control action is not required. Additionally, congestion + control actions taken based on time-based loss detection could + be reversed when a standard mechanism post facto determines that + the cause of the loss was not congestion (e.g., [RFC5682]). + + (4) Each time the RTO is used to detect a loss, the value of the RTO + MUST be exponentially backed off such that the next firing + requires a longer interval. The backoff SHOULD be removed after + either (a) the subsequent successful transmission of non- + retransmitted data, or (b) an RTO passes without detecting + additional losses. The former will generally be quicker. The + latter covers cases where loss is detected but not repaired. + + A maximum value MAY be placed on the RTO. The maximum RTO MUST + NOT be less than 60 seconds (as specified in [RFC6298]). + + This ensures network safety. + + As with guideline (3), an exception to this rule exists if an + IETF standardized mechanism determines that a particular loss is + not due to congestion. + +5. Discussion + + We note that research has shown the tension between the + responsiveness and correctness of time-based loss detection seems to + be a fundamental tradeoff in the context of TCP [AP99]. That is, + making the RTO more aggressive (e.g., via changing TCP's + exponentially weighted moving average (EWMA) gains, lowering the + minimum RTO, etc.) can reduce the time required to detect actual + loss. However, at the same time, such aggressiveness leads to more + cases of mistakenly declaring packets lost that ultimately arrived at + the receiver. Therefore, being as aggressive as the requirements + given in the previous section allow in any particular situation may + not be the best course of action because detecting loss, even if + falsely, carries a requirement to invoke a congestion response that + will ultimately reduce the transmission rate. + + While the tradeoff between responsiveness and correctness seems + fundamental, the tradeoff can be made less relevant if the sender can + detect and recover from mistaken loss detection. Several mechanisms + have been proposed for this purpose, such as Eifel [RFC3522], Forward + RTO-Recovery (F-RTO) [RFC5682], and Duplicate Selective + Acknowledgement (DSACK) [RFC2883] [RFC3708]. Using such mechanisms + may allow a data originator to tip towards being more responsive + without incurring (as much of) the attendant costs of mistakenly + declaring packets to be lost. + + Also, note that, in addition to the experiments discussed in [AP99], + the Linux TCP implementation has been using various non-standard RTO + mechanisms for many years seemingly without large-scale problems + (e.g., using different EWMA gains than specified in [RFC6298]). + Further, a number of TCP implementations use a steady-state minimum + RTO that is less than the 1 second specified in [RFC6298]. While the + implication of these deviations from the standard may be more + spurious retransmits (per [AP99]), we are aware of no large-scale + network safety issues caused by this change to the minimum RTO. This + informs the guidelines in the last section (e.g., there is no minimum + RTO specified). + + Finally, we note that while allowing implementations to be more + aggressive could in fact increase the number of needless + retransmissions, the above requirements fail safely in that they + insist on exponential backoff and a transmission rate reduction. + Therefore, providing implementers more latitude than they have + traditionally been given in IETF specifications of RTO mechanisms + does not somehow open the flood gates to aggressive behavior. Since + there is a downside to being aggressive, the incentives for proper + behavior are retained in the mechanism. + +6. Security Considerations + + This document does not alter the security properties of time-based + loss detection mechanisms. See [RFC6298] for a discussion of these + within the context of TCP. + +7. IANA Considerations + + This document has no IANA actions. + +8. References + +8.1. Normative References + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + +8.2. Informative References + + [AP99] Allman, M. and V. Paxson, "On Estimating End-to-End + Network Path Properties", Proceedings of the ACM SIGCOMM + Technical Symposium, September 1999. + + [CCDJ20] Cheng, Y., Cardwell, N., Dukkipati, N., and P. Jha, "The + RACK-TLP loss detection algorithm for TCP", Work in + Progress, Internet-Draft, draft-ietf-tcpm-rack-13, 2 + November 2020, + <https://tools.ietf.org/html/draft-ietf-tcpm-rack-13>. + + [DCCM13] Dukkipati, N., Cardwell, N., Cheng, Y., and M. Mathis, + "Tail Loss Probe (TLP): An Algorithm for Fast Recovery of + Tail Losses", Work in Progress, Internet-Draft, draft- + dukkipati-tcpm-tcp-loss-probe-01, 25 February 2013, + <https://tools.ietf.org/html/draft-dukkipati-tcpm-tcp- + loss-probe-01>. + + [IS20] Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection + and Congestion Control", Work in Progress, Internet-Draft, + draft-ietf-quic-recovery-32, 20 October 2020, + <https://tools.ietf.org/html/draft-ietf-quic-recovery-32>. + + [Jac88] Jacobson, V., "Congestion avoidance and control", ACM + SIGCOMM, DOI 10.1145/52325.52356, August 1988, + <https://doi.org/10.1145/52325.52356>. + + [KP87] Karn, P. and C. Partridge, "Improving Round-Trip Time + Estimates in Reliable Transport Protocols", SIGCOMM 87. + + [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", + STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, + <https://www.rfc-editor.org/info/rfc1034>. + + [RFC1035] Mockapetris, P., "Domain names - implementation and + specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, + November 1987, <https://www.rfc-editor.org/info/rfc1035>. + + [RFC2018] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, "TCP + Selective Acknowledgment Options", RFC 2018, + DOI 10.17487/RFC2018, October 1996, + <https://www.rfc-editor.org/info/rfc2018>. + + [RFC2140] Touch, J., "TCP Control Block Interdependence", RFC 2140, + DOI 10.17487/RFC2140, April 1997, + <https://www.rfc-editor.org/info/rfc2140>. + + [RFC2883] Floyd, S., Mahdavi, J., Mathis, M., and M. Podolsky, "An + Extension to the Selective Acknowledgement (SACK) Option + for TCP", RFC 2883, DOI 10.17487/RFC2883, July 2000, + <https://www.rfc-editor.org/info/rfc2883>. + + [RFC3124] Balakrishnan, H. and S. Seshan, "The Congestion Manager", + RFC 3124, DOI 10.17487/RFC3124, June 2001, + <https://www.rfc-editor.org/info/rfc3124>. + + [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, + A., Peterson, J., Sparks, R., Handley, M., and E. + Schooler, "SIP: Session Initiation Protocol", RFC 3261, + DOI 10.17487/RFC3261, June 2002, + <https://www.rfc-editor.org/info/rfc3261>. + + [RFC3522] Ludwig, R. and M. Meyer, "The Eifel Detection Algorithm + for TCP", RFC 3522, DOI 10.17487/RFC3522, April 2003, + <https://www.rfc-editor.org/info/rfc3522>. + + [RFC3708] Blanton, E. and M. Allman, "Using TCP Duplicate Selective + Acknowledgement (DSACKs) and Stream Control Transmission + Protocol (SCTP) Duplicate Transmission Sequence Numbers + (TSNs) to Detect Spurious Retransmissions", RFC 3708, + DOI 10.17487/RFC3708, February 2004, + <https://www.rfc-editor.org/info/rfc3708>. + + [RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", + RFC 4960, DOI 10.17487/RFC4960, September 2007, + <https://www.rfc-editor.org/info/rfc4960>. + + [RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion + Control", RFC 5681, DOI 10.17487/RFC5681, September 2009, + <https://www.rfc-editor.org/info/rfc5681>. + + [RFC5682] Sarolahti, P., Kojo, M., Yamamoto, K., and M. Hata, + "Forward RTO-Recovery (F-RTO): An Algorithm for Detecting + Spurious Retransmission Timeouts with TCP", RFC 5682, + DOI 10.17487/RFC5682, September 2009, + <https://www.rfc-editor.org/info/rfc5682>. + + [RFC5740] Adamson, B., Bormann, C., Handley, M., and J. Macker, + "NACK-Oriented Reliable Multicast (NORM) Transport + Protocol", RFC 5740, DOI 10.17487/RFC5740, November 2009, + <https://www.rfc-editor.org/info/rfc5740>. + + [RFC6182] Ford, A., Raiciu, C., Handley, M., Barre, S., and J. + Iyengar, "Architectural Guidelines for Multipath TCP + Development", RFC 6182, DOI 10.17487/RFC6182, March 2011, + <https://www.rfc-editor.org/info/rfc6182>. + + [RFC6298] Paxson, V., Allman, M., Chu, J., and M. Sargent, + "Computing TCP's Retransmission Timer", RFC 6298, + DOI 10.17487/RFC6298, June 2011, + <https://www.rfc-editor.org/info/rfc6298>. + + [RFC6675] Blanton, E., Allman, M., Wang, L., Jarvinen, I., Kojo, M., + and Y. Nishida, "A Conservative Loss Recovery Algorithm + Based on Selective Acknowledgment (SACK) for TCP", + RFC 6675, DOI 10.17487/RFC6675, August 2012, + <https://www.rfc-editor.org/info/rfc6675>. + + [RFC7323] Borman, D., Braden, B., Jacobson, V., and R. + Scheffenegger, Ed., "TCP Extensions for High Performance", + RFC 7323, DOI 10.17487/RFC7323, September 2014, + <https://www.rfc-editor.org/info/rfc7323>. + +Acknowledgments + + This document benefits from years of discussions with Ethan Blanton, + Sally Floyd, Jana Iyengar, Shawn Ostermann, Vern Paxson, and the + members of the TCPM and TCPIMPL Working Groups. Ran Atkinson, + Yuchung Cheng, David Black, Stewart Bryant, Martin Duke, Wesley Eddy, + Gorry Fairhurst, Rahul Arvind Jadhav, Benjamin Kaduk, Mirja + Kühlewind, Nicolas Kuhn, Jonathan Looney, and Michael Scharf provided + useful comments on previous draft versions of this document. + +Author's Address + + Mark Allman + International Computer Science Institute + 2150 Shattuck Ave., Suite 1100 + Berkeley, CA 94704 + United States of America + + Email: mallman@icir.org + URI: https://www.icir.org/mallman |