| < draft-ietf-tcpm-rfc8312bis-05.txt | draft-ietf-tcpm-rfc8312bis-06.txt > | |||
|---|---|---|---|---|
| TCPM L. Xu | TCPM L. Xu | |||
| Internet-Draft UNL | Internet-Draft UNL | |||
| Obsoletes: 8312 (if approved) S. Ha | Obsoletes: 8312 (if approved) S. Ha | |||
| Updates: 5681 (if approved) Colorado | Updates: 5681 (if approved) Colorado | |||
| Intended status: Standards Track I. Rhee | Intended status: Standards Track I. Rhee | |||
| Expires: 28 April 2022 Bowery | Expires: 30 July 2022 Bowery | |||
| V. Goel | V. Goel | |||
| Apple Inc. | Apple Inc. | |||
| L. Eggert, Ed. | L. Eggert, Ed. | |||
| NetApp | NetApp | |||
| 25 October 2021 | 26 January 2022 | |||
| CUBIC for Fast and Long-Distance Networks | CUBIC for Fast and Long-Distance Networks | |||
| draft-ietf-tcpm-rfc8312bis-05 | draft-ietf-tcpm-rfc8312bis-06 | |||
| Abstract | Abstract | |||
| CUBIC is a standard TCP congestion control algorithm that uses a | CUBIC is a standard TCP congestion control algorithm that uses a | |||
| cubic function instead of the linear window increase function on the | cubic function instead of a linear congestion window increase | |||
| sender side to improve scalability and stability over fast and long- | function to improve scalability and stability over fast and long- | |||
| distance networks. CUBIC has been adopted as the default TCP | distance networks. CUBIC has been adopted as the default TCP | |||
| congestion control algorithm by the Linux, Windows, and Apple stacks. | congestion control algorithm by the Linux, Windows, and Apple stacks. | |||
| This document updates the specification of CUBIC to include | This document updates the specification of CUBIC to include | |||
| algorithmic improvements based on these implementations and recent | algorithmic improvements based on these implementations and recent | |||
| academic work. Based on the extensive deployment experience with | academic work. Based on the extensive deployment experience with | |||
| CUBIC, it also moves the specification to the Standards Track, | CUBIC, it also moves the specification to the Standards Track, | |||
| obsoleting RFC 8312. This also requires updating RFC 5681, to allow | obsoleting RFC 8312. This also requires updating RFC 5681, to allow | |||
| for CUBIC's occasionally more aggressive sending behavior. | for CUBIC's occasionally more aggressive sending behavior. | |||
| Note to Readers | About This Document | |||
| Discussion of this draft takes place on the TCPM working group | This note is to be removed before publishing as an RFC. | |||
| Status information for this document may be found at | ||||
| https://datatracker.ietf.org/doc/draft-ietf-tcpm-rfc8312bis/. | ||||
| Discussion of this document takes place on the TCPM Working Group | ||||
| mailing list (mailto:tcpm@ietf.org), which is archived at | mailing list (mailto:tcpm@ietf.org), which is archived at | |||
| https://mailarchive.ietf.org/arch/browse/tcpm/. | https://mailarchive.ietf.org/arch/browse/tcpm/. | |||
| Working Group information can be found at | Source for this draft and an issue tracker can be found at | |||
| https://datatracker.ietf.org/wg/tcpm/; source code and issues list | https://github.com/NTAP/rfc8312bis. | |||
| for this draft can be found at https://github.com/NTAP/rfc8312bis. | ||||
| Note to the RFC Editor | Note to the RFC Editor | |||
| xml2rfc currently renders <em></em> in the XML by surrounding the | xml2rfc currently renders <em></em> in the XML by surrounding the | |||
| corresponding text with underscores. This is highly distracting; | corresponding text with underscores. This is highly distracting; | |||
| please manually remove the underscores when doing the final edits to | please manually remove the underscores when doing the final edits to | |||
| the text version of this document. | the text version of this document. | |||
| (There is an issue open against xml2rfc to stop doing this in the | (There is an issue open against xml2rfc to stop doing this in the | |||
| future: https://trac.tools.ietf.org/tools/xml2rfc/trac/ticket/596) | future: https://trac.tools.ietf.org/tools/xml2rfc/trac/ticket/596) | |||
| Also, please manually change "Figure" to "Equation" for all artwork | Also, please manually change "Figure" to "Equation" for all artwork | |||
| with anchors beginning with "eq" - xml2rfc doesn't seem to be able to | with anchors beginning with "eq" - xml2rfc doesn't seem to be able to | |||
| skipping to change at page 2, line 27 ¶ | skipping to change at page 2, line 31 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on 28 April 2022. | This Internet-Draft will expire on 30 July 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
| extracted from this document must include Simplified BSD License text | extracted from this document must include Revised BSD License text as | |||
| as described in Section 4.e of the Trust Legal Provisions and are | described in Section 4.e of the Trust Legal Provisions and are | |||
| provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Revised BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Design Principles of CUBIC . . . . . . . . . . . . . . . . . 5 | 3. Design Principles of CUBIC . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. Principle 1 for the CUBIC Increase Function . . . . . . . 5 | 3.1. Principle 1 for the CUBIC Increase Function . . . . . . . 6 | |||
| 3.2. Principle 2 for Reno-Friendliness . . . . . . . . . . . . 6 | 3.2. Principle 2 for Reno-Friendliness . . . . . . . . . . . . 6 | |||
| 3.3. Principle 3 for RTT Fairness . . . . . . . . . . . . . . 7 | 3.3. Principle 3 for RTT Fairness . . . . . . . . . . . . . . 7 | |||
| 3.4. Principle 4 for the CUBIC Decrease Factor . . . . . . . . 7 | 3.4. Principle 4 for the CUBIC Decrease Factor . . . . . . . . 7 | |||
| 4. CUBIC Congestion Control . . . . . . . . . . . . . . . . . . 8 | 4. CUBIC Congestion Control . . . . . . . . . . . . . . . . . . 8 | |||
| 4.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 8 | 4.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.1.1. Constants of Interest . . . . . . . . . . . . . . . . 8 | 4.1.1. Constants of Interest . . . . . . . . . . . . . . . . 8 | |||
| 4.1.2. Variables of Interest . . . . . . . . . . . . . . . . 8 | 4.1.2. Variables of Interest . . . . . . . . . . . . . . . . 8 | |||
| 4.2. Window Increase Function . . . . . . . . . . . . . . . . 9 | 4.2. Window Increase Function . . . . . . . . . . . . . . . . 9 | |||
| 4.3. Reno-Friendly Region . . . . . . . . . . . . . . . . . . 11 | 4.3. Reno-Friendly Region . . . . . . . . . . . . . . . . . . 11 | |||
| 4.4. Concave Region . . . . . . . . . . . . . . . . . . . . . 13 | 4.4. Concave Region . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.5. Convex Region . . . . . . . . . . . . . . . . . . . . . . 13 | 4.5. Convex Region . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.6. Multiplicative Decrease . . . . . . . . . . . . . . . . . 14 | 4.6. Multiplicative Decrease . . . . . . . . . . . . . . . . . 14 | |||
| 4.7. Fast Convergence . . . . . . . . . . . . . . . . . . . . 15 | 4.7. Fast Convergence . . . . . . . . . . . . . . . . . . . . 15 | |||
| 4.8. Timeout . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 4.8. Timeout . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 4.9. Spurious Congestion Events . . . . . . . . . . . . . . . 16 | 4.9. Spurious Congestion Events . . . . . . . . . . . . . . . 16 | |||
| 4.10. Slow Start . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.9.1. Spurious timeout . . . . . . . . . . . . . . . . . . 16 | |||
| 5. Discussion . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.9.2. Spurious loss detected by acknowledgements . . . . . 17 | |||
| 5.1. Fairness to Reno . . . . . . . . . . . . . . . . . . . . 18 | 4.10. Slow Start . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 5.2. Using Spare Capacity . . . . . . . . . . . . . . . . . . 20 | 5. Discussion . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 5.3. Difficult Environments . . . . . . . . . . . . . . . . . 21 | 5.1. Fairness to Reno . . . . . . . . . . . . . . . . . . . . 19 | |||
| 5.4. Investigating a Range of Environments . . . . . . . . . . 21 | 5.2. Using Spare Capacity . . . . . . . . . . . . . . . . . . 21 | |||
| 5.5. Protection against Congestion Collapse . . . . . . . . . 22 | 5.3. Difficult Environments . . . . . . . . . . . . . . . . . 22 | |||
| 5.4. Investigating a Range of Environments . . . . . . . . . . 22 | ||||
| 5.5. Protection against Congestion Collapse . . . . . . . . . 23 | ||||
| 5.6. Fairness within the Alternative Congestion Control | 5.6. Fairness within the Alternative Congestion Control | |||
| Algorithm . . . . . . . . . . . . . . . . . . . . . . . 22 | Algorithm . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 5.7. Performance with Misbehaving Nodes and Outside | 5.7. Performance with Misbehaving Nodes and Outside | |||
| Attackers . . . . . . . . . . . . . . . . . . . . . . . 22 | Attackers . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 5.8. Behavior for Application-Limited Flows . . . . . . . . . 22 | 5.8. Behavior for Application-Limited Flows . . . . . . . . . 23 | |||
| 5.9. Responses to Sudden or Transient Events . . . . . . . . . 22 | 5.9. Responses to Sudden or Transient Events . . . . . . . . . 24 | |||
| 5.10. Incremental Deployment . . . . . . . . . . . . . . . . . 23 | 5.10. Incremental Deployment . . . . . . . . . . . . . . . . . 24 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 23 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 24 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 25 | 8.2. Informative References . . . . . . . . . . . . . . . . . 26 | |||
| Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 27 | Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 29 | |||
| Appendix B. Evolution of CUBIC . . . . . . . . . . . . . . . . . 28 | Appendix B. Evolution of CUBIC . . . . . . . . . . . . . . . . . 30 | |||
| B.1. Since draft-ietf-tcpm-rfc8312bis-04 . . . . . . . . . . . 28 | B.1. Since draft-ietf-tcpm-rfc8312bis-05 . . . . . . . . . . . 30 | |||
| B.2. Since draft-ietf-tcpm-rfc8312bis-03 . . . . . . . . . . . 29 | B.2. Since draft-ietf-tcpm-rfc8312bis-04 . . . . . . . . . . . 30 | |||
| B.3. Since draft-ietf-tcpm-rfc8312bis-02 . . . . . . . . . . . 29 | B.3. Since draft-ietf-tcpm-rfc8312bis-03 . . . . . . . . . . . 31 | |||
| B.4. Since draft-ietf-tcpm-rfc8312bis-01 . . . . . . . . . . . 29 | B.4. Since draft-ietf-tcpm-rfc8312bis-02 . . . . . . . . . . . 31 | |||
| B.5. Since draft-ietf-tcpm-rfc8312bis-00 . . . . . . . . . . . 30 | B.5. Since draft-ietf-tcpm-rfc8312bis-01 . . . . . . . . . . . 32 | |||
| B.6. Since draft-eggert-tcpm-rfc8312bis-03 . . . . . . . . . . 30 | B.6. Since draft-ietf-tcpm-rfc8312bis-00 . . . . . . . . . . . 32 | |||
| B.7. Since draft-eggert-tcpm-rfc8312bis-02 . . . . . . . . . . 30 | B.7. Since draft-eggert-tcpm-rfc8312bis-03 . . . . . . . . . . 32 | |||
| B.8. Since draft-eggert-tcpm-rfc8312bis-01 . . . . . . . . . . 30 | B.8. Since draft-eggert-tcpm-rfc8312bis-02 . . . . . . . . . . 32 | |||
| B.9. Since draft-eggert-tcpm-rfc8312bis-00 . . . . . . . . . . 30 | B.9. Since draft-eggert-tcpm-rfc8312bis-01 . . . . . . . . . . 32 | |||
| B.10. Since RFC8312 . . . . . . . . . . . . . . . . . . . . . . 31 | B.10. Since draft-eggert-tcpm-rfc8312bis-00 . . . . . . . . . . 33 | |||
| B.11. Since the Original Paper . . . . . . . . . . . . . . . . 31 | B.11. Since RFC8312 . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 32 | B.12. Since the Original Paper . . . . . . . . . . . . . . . . 34 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| 1. Introduction | 1. Introduction | |||
| CUBIC has been adopted as the default TCP congestion control | CUBIC has been adopted as the default TCP congestion control | |||
| algorithm in the Linux, Windows, and Apple stacks, and has been used | algorithm in the Linux, Windows, and Apple stacks, and has been used | |||
| and deployed globally. Extensive, decade-long deployment experience | and deployed globally. Extensive, decade-long deployment experience | |||
| in vastly different Internet scenarios has convincingly demonstrated | in vastly different Internet scenarios has convincingly demonstrated | |||
| that CUBIC is safe for deployment on the global Internet and delivers | that CUBIC is safe for deployment on the global Internet and delivers | |||
| substantial benefits over classical Reno congestion control | substantial benefits over classical Reno congestion control | |||
| [RFC5681]. It is therefore to be regarded as the currently most | [RFC5681]. It is therefore to be regarded as the currently most | |||
| widely deployed standard for TCP congestion control. CUBIC can also | widely deployed standard for TCP congestion control. CUBIC can also | |||
| be used for other transport protocols such as QUIC [RFC9000] and SCTP | be used for other transport protocols such as QUIC [RFC9000] and SCTP | |||
| [RFC4960] as a default congestion controller. | [RFC4960] as a default congestion controller. | |||
| The design of CUBIC was motivated by the well-documented problem | The design of CUBIC was motivated by the well-documented problem | |||
| classical Reno TCP has with low utilization over fast and long- | classical Reno TCP has with low utilization over fast and long- | |||
| distance networks [K03][RFC3649]. This problem arises from a slow | distance networks [K03][RFC3649]. This problem arises from a slow | |||
| increase of the congestion window following a congestion event in a | increase of the congestion window following a congestion event in a | |||
| network with a large bandwidth-delay product (BDP). [HKLRX06] | network with a large bandwidth-delay product (BDP). [HLRX07] | |||
| indicates that this problem is frequently observed even in the range | indicates that this problem is frequently observed even in the range | |||
| of congestion window sizes over several hundreds of packets. This | of congestion window sizes over several hundreds of packets. This | |||
| problem is equally applicable to all Reno-style standards and their | problem is equally applicable to all Reno-style standards and their | |||
| variants, including TCP-Reno [RFC5681], TCP-NewReno | variants, including TCP-Reno [RFC5681], TCP-NewReno | |||
| [RFC6582][RFC6675], SCTP [RFC4960], TFRC [RFC5348], and QUIC | [RFC6582][RFC6675], SCTP [RFC4960], TFRC [RFC5348], and QUIC | |||
| congestion control [RFC9002], which use the same linear increase | congestion control [RFC9002], which use the same linear increase | |||
| function for window growth. We refer to all Reno-style standards and | function for window growth. We refer to all Reno-style standards and | |||
| their variants collectively as "Reno" below. | their variants collectively as "Reno" below. | |||
| CUBIC, originally proposed in [HRX08], is a modification to the | CUBIC, originally proposed in [HRX08], is a modification to the | |||
| skipping to change at page 6, line 20 ¶ | skipping to change at page 6, line 29 ¶ | |||
| of the congestion window. When CUBIC enters into congestion | of the congestion window. When CUBIC enters into congestion | |||
| avoidance, it starts to increase the congestion window using the | avoidance, it starts to increase the congestion window using the | |||
| concave profile of the cubic function. The cubic function is set to | concave profile of the cubic function. The cubic function is set to | |||
| have its plateau at the remembered congestion window size, so that | have its plateau at the remembered congestion window size, so that | |||
| the concave window increase continues until then. After that, the | the concave window increase continues until then. After that, the | |||
| cubic function turns into a convex profile and the convex window | cubic function turns into a convex profile and the convex window | |||
| increase begins. | increase begins. | |||
| This style of window adjustment (concave and then convex) improves | This style of window adjustment (concave and then convex) improves | |||
| the algorithm stability while maintaining high network utilization | the algorithm stability while maintaining high network utilization | |||
| [CEHRX07]. This is because the window size remains almost constant, | [CEHRX09]. This is because the window size remains almost constant, | |||
| forming a plateau around the remembered congestion window size of the | forming a plateau around the remembered congestion window size of the | |||
| last congestion event, where network utilization is deemed highest. | last congestion event, where network utilization is deemed highest. | |||
| Under steady state, most window size samples of CUBIC are close to | Under steady state, most window size samples of CUBIC are close to | |||
| that remembered congestion window size, thus promoting high network | that remembered congestion window size, thus promoting high network | |||
| utilization and stability. | utilization and stability. | |||
| Note that congestion control algorithms that only use convex | Note that congestion control algorithms that only use convex | |||
| functions to increase the congestion window size have their maximum | functions to increase the congestion window size have their maximum | |||
| increments around the remembered congestion window size of the last | increments around the remembered congestion window size of the last | |||
| congestion event, and thus introduce many packet bursts around the | congestion event, and thus introduce many packet bursts around the | |||
| skipping to change at page 9, line 50 ¶ | skipping to change at page 10, line 6 ¶ | |||
| than the MSS. | than the MSS. | |||
| 4.2. Window Increase Function | 4.2. Window Increase Function | |||
| CUBIC maintains the acknowledgment (ACK) clocking of Reno by | CUBIC maintains the acknowledgment (ACK) clocking of Reno by | |||
| increasing the congestion window only at the reception of a new ACK. | increasing the congestion window only at the reception of a new ACK. | |||
| It does not make any changes to the TCP Fast Recovery and Fast | It does not make any changes to the TCP Fast Recovery and Fast | |||
| Retransmit algorithms [RFC6582][RFC6675]. | Retransmit algorithms [RFC6582][RFC6675]. | |||
| During congestion avoidance, after a congestion event is detected by | During congestion avoidance, after a congestion event is detected by | |||
| mechanisms described in Section 3.1, CUBIC changes the window | mechanisms described in Section 3.1, CUBIC uses a window increase | |||
| increase function of Reno. | function different from Reno. | |||
| CUBIC uses the following window increase function: | CUBIC uses the following window increase function: | |||
| 3 | 3 | |||
| W (t) = C * (t - K) + W | W (t) = C * (t - K) + W | |||
| cubic max | cubic max | |||
| Figure 1 | Figure 1 | |||
| where _t_ is the elapsed time in seconds from the beginning of the | where _t_ is the elapsed time in seconds from the beginning of the | |||
| skipping to change at page 10, line 42 ¶ | skipping to change at page 10, line 46 ¶ | |||
| Figure 2 | Figure 2 | |||
| where _cwnd_start_ is the congestion window at the beginning of the | where _cwnd_start_ is the congestion window at the beginning of the | |||
| current congestion avoidance stage. | current congestion avoidance stage. | |||
| Upon receiving a new ACK during congestion avoidance, CUBIC computes | Upon receiving a new ACK during congestion avoidance, CUBIC computes | |||
| the _target_ congestion window size after the next _RTT_ using | the _target_ congestion window size after the next _RTT_ using | |||
| Figure 1 as follows, where _RTT_ is the smoothed round-trip time. | Figure 1 as follows, where _RTT_ is the smoothed round-trip time. | |||
| The lower and upper bounds below ensure that CUBIC's congestion | The lower and upper bounds below ensure that CUBIC's congestion | |||
| window increase rate is non-decreasing and is less than the increase | window increase rate is non-decreasing and is less than the increase | |||
| rate of slow start. | rate of slow start [SXEZ19]. | |||
| / | / | |||
| | if W (t + RTT) < cwnd | | if W (t + RTT) < cwnd | |||
| |cwnd cubic | |cwnd cubic | |||
| | | | | |||
| | | | | |||
| | | | | |||
| target = < if W (t + RTT) > 1.5 * cwnd | target = < if W (t + RTT) > 1.5 * cwnd | |||
| |1.5 * cwnd cubic | |1.5 * cwnd cubic | |||
| | | | | |||
| | | | | |||
| |W (t + RTT) | |W (t + RTT) | |||
| | cubic otherwise | | cubic otherwise | |||
| \ | \ | |||
| The elapsed time _t_ in Figure 1 MUST NOT include periods during | The elapsed time _t_ in Figure 1 MUST NOT include periods during | |||
| which _cwnd_ has not been updated due to an application limit (see | which _cwnd_ has not been updated due to application-limited behavior | |||
| Section 5.8). | (see Section 5.8). | |||
| Depending on the value of the current congestion window size _cwnd_, | Depending on the value of the current congestion window size _cwnd_, | |||
| CUBIC runs in three different regions: | CUBIC runs in three different regions: | |||
| 1. The Reno-friendly region, which ensures that CUBIC achieves at | 1. The Reno-friendly region, which ensures that CUBIC achieves at | |||
| least the same throughput as Reno. | least the same throughput as Reno. | |||
| 2. The concave region, if CUBIC is not in the Reno-friendly region | 2. The concave region, if CUBIC is not in the Reno-friendly region | |||
| and _cwnd_ is less than _W_max_. | and _cwnd_ is less than _W_max_. | |||
| skipping to change at page 14, line 26 ¶ | skipping to change at page 14, line 26 ¶ | |||
| during fast recovery. | during fast recovery. | |||
| In Figure 5, _flight_size_ is the amount of outstanding data in the | In Figure 5, _flight_size_ is the amount of outstanding data in the | |||
| network, as defined in [RFC5681]. Note that a rate-limited | network, as defined in [RFC5681]. Note that a rate-limited | |||
| application with idle periods or periods when unable to send at the | application with idle periods or periods when unable to send at the | |||
| full rate permitted by _cwnd_ may easily encounter notable variations | full rate permitted by _cwnd_ may easily encounter notable variations | |||
| in the volume of data sent from one RTT to another, resulting in | in the volume of data sent from one RTT to another, resulting in | |||
| _flight_size_ that is significantly less than _cwnd_ on a congestion | _flight_size_ that is significantly less than _cwnd_ on a congestion | |||
| event. This may decrease _cwnd_ to a much lower value than | event. This may decrease _cwnd_ to a much lower value than | |||
| necessary. To avoid suboptimal performance with such applications, | necessary. To avoid suboptimal performance with such applications, | |||
| some implementations of CUBIC use _cwnd_ instead of _flight_size_ to | the mechanisms described in [RFC7661] can be used to mitigate this | |||
| calculate the new _ssthresh_ in Figure 5. Alternatively, the | issue as it would allow using a value between _cwnd_ and | |||
| mechanisms described in [RFC7661] may also be adopted to mitigate | _flight_size_ to calculate the new _ssthresh_ in Figure 5. Some | |||
| this issue. | implementations of CUBIC use _cwnd_ instead of _flight_size_ when | |||
| calculating a new _ssthresh_ using Figure 5. | ||||
| flight_size * β // new ssthresh | flight_size * β // new ssthresh | |||
| ssthresh = cubic | ssthresh = cubic | |||
| /max(ssthresh, 2) // reduction on packet loss, cwnd is at least 2 MSS | /max(ssthresh, 2) // reduction on packet loss, cwnd is at least 2 MSS | |||
| | | | | |||
| cwnd = < | cwnd = < | |||
| |max(ssthresh, 1) // reduction on ECE, cwnd is at least 1 MSS | |max(ssthresh, 1) // reduction on ECE, cwnd is at least 1 MSS | |||
| \ | \ | |||
| max(ssthresh, 2) // ssthresh is at least 2 MSS | max(ssthresh, 2) // ssthresh is at least 2 MSS | |||
| ssthresh = | ssthresh = | |||
| Figure 5 | Figure 5 | |||
| A side effect of setting β__cubic_ to a value bigger than 0.5 is | A side effect of setting β__cubic_ to a value bigger than 0.5 is | |||
| slower convergence. We believe that while a more adaptive setting of | slower convergence. We believe that while a more adaptive setting of | |||
| β__cubic_ could result in faster convergence, it will make the | β__cubic_ could result in faster convergence, it will make the | |||
| analysis of CUBIC much harder. | analysis of CUBIC much harder. | |||
| Note that CUBIC will continue to reduce _cwnd_ in response to | Note that CUBIC MUST continue to reduce _cwnd_ in response to | |||
| congestion events due to ECN-Echo ACKs until it reaches a value of 1 | congestion events due to ECN-Echo ACKs until it reaches a value of 1 | |||
| MSS. If congestion persists, a sender with a _cwnd_ of 1 MSS needs | MSS. If congestion events indicated by ECN-Echo ACKs persist, a | |||
| to reduce its sending rate even further. It can achieve that by | sender with a _cwnd_ of 1 MSS MUST reduce its sending rate even | |||
| using a retransmission timer with exponential backoff, as described | further. It can achieve that by using a retransmission timer with | |||
| in [RFC3168]. | exponential backoff, as described in [RFC3168]. | |||
| 4.7. Fast Convergence | 4.7. Fast Convergence | |||
| To improve convergence speed, CUBIC uses a heuristic. When a new | To improve convergence speed, CUBIC uses a heuristic. When a new | |||
| flow joins the network, existing flows need to give up some of their | flow joins the network, existing flows need to give up some of their | |||
| bandwidth to allow the new flow some room for growth, if the existing | bandwidth to allow the new flow some room for growth, if the existing | |||
| flows have been using all the network bandwidth. To speed up this | flows have been using all the network bandwidth. To speed up this | |||
| bandwidth release by existing flows, the following "Fast Convergence" | bandwidth release by existing flows, the following "Fast Convergence" | |||
| mechanism SHOULD be implemented. | mechanism SHOULD be implemented. | |||
| skipping to change at page 16, line 26 ¶ | skipping to change at page 16, line 32 ¶ | |||
| In cases where CUBIC reduces its congestion window in response to | In cases where CUBIC reduces its congestion window in response to | |||
| having detected packet loss via duplicate ACKs or timeouts, there is | having detected packet loss via duplicate ACKs or timeouts, there is | |||
| a possibility that the missing ACK would arrive after the congestion | a possibility that the missing ACK would arrive after the congestion | |||
| window reduction and a corresponding packet retransmission. For | window reduction and a corresponding packet retransmission. For | |||
| example, packet reordering could trigger this behavior. A high | example, packet reordering could trigger this behavior. A high | |||
| degree of packet reordering could cause multiple congestion window | degree of packet reordering could cause multiple congestion window | |||
| reduction events, where spurious losses are incorrectly interpreted | reduction events, where spurious losses are incorrectly interpreted | |||
| as congestion signals, thus degrading CUBIC's performance | as congestion signals, thus degrading CUBIC's performance | |||
| significantly. | significantly. | |||
| When there is a congestion event, a CUBIC implementation SHOULD save | For TCP, there are two types of spurious events - spurious timeouts | |||
| the current value of the following variables before the congestion | and spurious fast retransmits. In case of QUIC, there are no | |||
| window reduction. | spurious timeouts as the loss is only detected after receiving an | |||
| ACK. | ||||
| 4.9.1. Spurious timeout | ||||
| An implementation MAY detect spurious timeouts based on the | ||||
| mechanisms described in Forward RTO-Recovery [RFC5682]. Experimental | ||||
| alternatives include Eifel [RFC3522]. When a spurious timeout is | ||||
| detected, a TCP implementation MAY follow the response algorithm | ||||
| described in [RFC4015] to restore the congestion control state and | ||||
| adapt the retransmission timer to avoid further spurious timeouts. | ||||
| 4.9.2. Spurious loss detected by acknowledgements | ||||
| Upon receiving an ACK, a TCP implementation MAY detect spurious | ||||
| losses either using TCP Timestamps or via D-SACK[RFC2883]. | ||||
| Experimental alternatives include Eifel detection algorithm [RFC3522] | ||||
| which uses TCP Timestamps and DSACK based detection [RFC3708] which | ||||
| uses DSACK information. A QUIC implementation can easily determine a | ||||
| spurious loss if a QUIC packet is acknowledged after it has been | ||||
| marked as lost and the original data has been retransmitted with a | ||||
| new QUIC packet. | ||||
| In this section, we specify a simple response algorithm when a | ||||
| spurious loss is detected by acknowledgements. Implementations would | ||||
| need to carefully evaluate the impact of using this algorithm in | ||||
| different environments that may experience sudden change in available | ||||
| capacity (e.g., due to variable radio capacity, a routing change, or | ||||
| a mobility event). | ||||
| When a packet loss is detected via acknowledgements, a CUBIC | ||||
| implementation MAY save the current value of the following variables | ||||
| before the congestion window is reduced. | ||||
| prior_cwnd = cwnd | prior_cwnd = cwnd | |||
| prior_ssthresh = ssthresh | prior_ssthresh = ssthresh | |||
| prior_W = W | prior_W = W | |||
| max max | max max | |||
| prior_K = K | prior_K = K | |||
| prior_epoch = epoch | prior_epoch = epoch | |||
| start start | start start | |||
| prior_W_{est} = W | prior_W_{est} = W | |||
| est | est | |||
| CUBIC MAY implement an algorithm to detect spurious retransmissions, | Once the previously declared packet loss is confirmed to be spurious, | |||
| such as Forward RTO-Recovery [RFC5682]. Experimental alternatives | CUBIC MAY restore the original values of the above-mentioned | |||
| include DSACK [RFC3708] and Eifel [RFC3522]. Once a spurious | variables as follows if the current _cwnd_ is lower than | |||
| congestion event is detected, CUBIC SHOULD restore the original | _prior_cwnd_. Restoring the original values ensures that CUBIC's | |||
| values of above-mentioned variables as follows if the current _cwnd_ | performance is similar to what it would be without spurious losses. | |||
| is lower than _prior_cwnd_. Restoring the original values ensures | ||||
| that CUBIC's performance is similar to what it would be without | ||||
| spurious losses. | ||||
| \ | \ | |||
| cwnd = prior_cwnd | | cwnd = prior_cwnd | | |||
| | | | | |||
| ssthresh = prior_ssthresh | | ssthresh = prior_ssthresh | | |||
| | | | | |||
| W = prior_W | | W = prior_W | | |||
| max max | | max max | | |||
| >if cwnd < prior_cwnd | >if cwnd < prior_cwnd | |||
| K = prior_K | | K = prior_K | | |||
| skipping to change at page 17, line 33 ¶ | skipping to change at page 18, line 33 ¶ | |||
| CUBIC SHOULD continue to use the current and the most recent values | CUBIC SHOULD continue to use the current and the most recent values | |||
| of these variables. | of these variables. | |||
| 4.10. Slow Start | 4.10. Slow Start | |||
| CUBIC MUST employ a slow-start algorithm, when _cwnd_ is no more than | CUBIC MUST employ a slow-start algorithm, when _cwnd_ is no more than | |||
| _ssthresh_. In general, CUBIC SHOULD use the HyStart++ slow start | _ssthresh_. In general, CUBIC SHOULD use the HyStart++ slow start | |||
| algorithm [I-D.ietf-tcpm-hystartplusplus], or MAY use the Reno TCP | algorithm [I-D.ietf-tcpm-hystartplusplus], or MAY use the Reno TCP | |||
| slow start algorithm [RFC5681] in the rare cases when HyStart++ is | slow start algorithm [RFC5681] in the rare cases when HyStart++ is | |||
| not suitable. Experimental alternatives include hybrid slow start | not suitable. Experimental alternatives include hybrid slow start | |||
| [HR08], a predecessor to HyStart++ that some CUBIC implementations | [HR11], a predecessor to HyStart++ that some CUBIC implementations | |||
| have used as the default for the last decade, and limited slow start | have used as the default for the last decade, and limited slow start | |||
| [RFC3742]. Whichever start-up algorithm is used, work might be | [RFC3742]. Whichever start-up algorithm is used, work might be | |||
| needed to ensure that the end of slow start and the first | needed to ensure that the end of slow start and the first | |||
| multiplicative decrease of congestion avoidance work well together. | multiplicative decrease of congestion avoidance work well together. | |||
| When CUBIC uses HyStart++ [I-D.ietf-tcpm-hystartplusplus], it may | When CUBIC uses HyStart++ [I-D.ietf-tcpm-hystartplusplus], it may | |||
| exit the first slow start without incurring any packet loss and thus | exit the first slow start without incurring any packet loss and thus | |||
| _W_max_ is undefined. In this special case, CUBIC switches to | _W_max_ is undefined. In this special case, CUBIC switches to | |||
| congestion avoidance and increases its congestion window size using | congestion avoidance and increases its congestion window size using | |||
| Figure 1, where _t_ is the elapsed time since the beginning of the | Figure 1, where _t_ is the elapsed time since the beginning of the | |||
| skipping to change at page 21, line 26 ¶ | skipping to change at page 22, line 26 ¶ | |||
| | 10000 | 83333.3 | 2.0e-10 | 1.0e-7 | 2.9e-8 | | | 10000 | 83333.3 | 2.0e-10 | 1.0e-7 | 2.9e-8 | | |||
| +-------------------+-----------+---------+---------+---------+ | +-------------------+-----------+---------+---------+---------+ | |||
| Table 3: Required packet loss rate for Reno TCP, HSTCP, and | Table 3: Required packet loss rate for Reno TCP, HSTCP, and | |||
| CUBIC to achieve a certain throughput | CUBIC to achieve a certain throughput | |||
| Table 3 describes the required packet loss rate for Reno TCP, HSTCP, | Table 3 describes the required packet loss rate for Reno TCP, HSTCP, | |||
| and CUBIC to achieve a certain throughput. We use 1500-byte packets | and CUBIC to achieve a certain throughput. We use 1500-byte packets | |||
| and an _RTT_ of 0.1 seconds. | and an _RTT_ of 0.1 seconds. | |||
| Our test results in [HKLRX06] indicate that CUBIC uses the spare | Our test results in [HLRX07] indicate that CUBIC uses the spare | |||
| bandwidth left unused by existing Reno TCP flows in the same | bandwidth left unused by existing Reno TCP flows in the same | |||
| bottleneck link without taking away much bandwidth from the existing | bottleneck link without taking away much bandwidth from the existing | |||
| flows. | flows. | |||
| 5.3. Difficult Environments | 5.3. Difficult Environments | |||
| CUBIC is designed to remedy the poor performance of Reno in fast and | CUBIC is designed to remedy the poor performance of Reno in fast and | |||
| long-distance networks. | long-distance networks. | |||
| 5.4. Investigating a Range of Environments | 5.4. Investigating a Range of Environments | |||
| There is decade-long deployment experience with CUBIC on the | CUBIC has been extensively studied using simulations, testbed | |||
| Internet. CUBIC has also been extensively studied by using both NS-2 | emulations, Internet experiments, and Internet measurements, covering | |||
| simulation and testbed experiments, covering a wide range of network | a wide range of network environments | |||
| environments. More information can be found in [HKLRX06]. | [HLRX07][H16][CEHRX09][HR11][BSCLU13][LBEWK16]. They have | |||
| convincingly demonstrated that CUBIC delivers substantial benefits | ||||
| over classical Reno congestion control [RFC5681]. | ||||
| Same as Reno, CUBIC is a loss-based congestion control algorithm. | Same as Reno, CUBIC is a loss-based congestion control algorithm. | |||
| Because CUBIC is designed to be more aggressive (due to a faster | Because CUBIC is designed to be more aggressive (due to a faster | |||
| window increase function and bigger multiplicative decrease factor) | window increase function and bigger multiplicative decrease factor) | |||
| than Reno in fast and long-distance networks, it can fill large drop- | than Reno in fast and long-distance networks, it can fill large drop- | |||
| tail buffers more quickly than Reno and increases the risk of a | tail buffers more quickly than Reno and increases the risk of a | |||
| standing queue [RFC8511]. In this case, proper queue sizing and | standing queue [RFC8511]. In this case, proper queue sizing and | |||
| management [RFC7567] could be used to mitigate the risk to some | management [RFC7567] could be used to mitigate the risk to some | |||
| extent and reduce the packet queuing delay. Also, in large-BDP | extent and reduce the packet queuing delay. Also, in large-BDP | |||
| networks after a congestion event, CUBIC, due its cubic window | networks after a congestion event, CUBIC, due its cubic window | |||
| skipping to change at page 22, line 33 ¶ | skipping to change at page 23, line 35 ¶ | |||
| exponentially increases the transmission timer for each packet | exponentially increases the transmission timer for each packet | |||
| retransmission while congestion persists. | retransmission while congestion persists. | |||
| 5.6. Fairness within the Alternative Congestion Control Algorithm | 5.6. Fairness within the Alternative Congestion Control Algorithm | |||
| CUBIC ensures convergence of competing CUBIC flows with the same RTT | CUBIC ensures convergence of competing CUBIC flows with the same RTT | |||
| in the same bottleneck links to an equal throughput. When competing | in the same bottleneck links to an equal throughput. When competing | |||
| flows have different RTT values, their throughput ratio is linearly | flows have different RTT values, their throughput ratio is linearly | |||
| proportional to the inverse of their RTT ratios. This is true | proportional to the inverse of their RTT ratios. This is true | |||
| independently of the level of statistical multiplexing on the link. | independently of the level of statistical multiplexing on the link. | |||
| The convergence time depends on the network environments (e.g., | ||||
| bandwidth, RTT) and the level of statistical multiplexing, as | ||||
| mentioned in Section 3.4. | ||||
| 5.7. Performance with Misbehaving Nodes and Outside Attackers | 5.7. Performance with Misbehaving Nodes and Outside Attackers | |||
| This is not considered in the current CUBIC design. | This is not considered in the current CUBIC design. | |||
| 5.8. Behavior for Application-Limited Flows | 5.8. Behavior for Application-Limited Flows | |||
| CUBIC does not increase its congestion window size if a flow is | A flow is application-limited if it is currently sending less than | |||
| currently limited by the application instead of the congestion | what is allowed by the congestion window. This can happen if the | |||
| window. Section 4.2 requires that _t_ in Figure 1 does not include | flow is limited by either the sender application or the receiver | |||
| application-limited periods, such as idle periods, otherwise | application (via the receiver advertised window) and thus sends less | |||
| W_cubic(_t_) might be very high after restarting from these periods. | data than what is allowed by the sender's congestion window. | |||
| CUBIC does not increase its congestion window if a flow is | ||||
| application-limited. Section 4.2 requires that _t_ in Figure 1 does | ||||
| not include application-limited periods, such as idle periods, | ||||
| otherwise W_cubic(_t_) might be very high after restarting from these | ||||
| periods. | ||||
| 5.9. Responses to Sudden or Transient Events | 5.9. Responses to Sudden or Transient Events | |||
| If there is a sudden increase in capacity, e.g., due to variable | If there is a sudden increase in capacity, e.g., due to variable | |||
| radio capacity, a routing change, or a mobility event, CUBIC is | radio capacity, a routing change, or a mobility event, CUBIC is | |||
| designed to utilize the newly available capacity faster than Reno. | designed to utilize the newly available capacity faster than Reno. | |||
| On the other hand, if there is a sudden decrease in capacity, CUBIC | On the other hand, if there is a sudden decrease in capacity, CUBIC | |||
| reduces more slowly than Reno. This remains true whether or not | reduces more slowly than Reno. This remains true whether or not | |||
| CUBIC is in Reno-friendly mode and whether or not fast convergence is | CUBIC is in Reno-friendly mode and whether or not fast convergence is | |||
| skipping to change at page 23, line 34 ¶ | skipping to change at page 24, line 46 ¶ | |||
| This document does not require any IANA actions. | This document does not require any IANA actions. | |||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [I-D.ietf-tcpm-hystartplusplus] | [I-D.ietf-tcpm-hystartplusplus] | |||
| Balasubramanian, P., Huang, Y., and M. Olson, "HyStart++: | Balasubramanian, P., Huang, Y., and M. Olson, "HyStart++: | |||
| Modified Slow Start for TCP", Work in Progress, Internet- | Modified Slow Start for TCP", Work in Progress, Internet- | |||
| Draft, draft-ietf-tcpm-hystartplusplus-03, 25 July 2021, | Draft, draft-ietf-tcpm-hystartplusplus-04, 23 January | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-tcpm- | 2022, <https://datatracker.ietf.org/doc/html/draft-ietf- | |||
| hystartplusplus-03>. | tcpm-hystartplusplus-04>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/rfc/rfc2119>. | |||
| [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/rfc/rfc2883>. | ||||
| [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition | |||
| of Explicit Congestion Notification (ECN) to IP", | of Explicit Congestion Notification (ECN) to IP", | |||
| RFC 3168, DOI 10.17487/RFC3168, September 2001, | RFC 3168, DOI 10.17487/RFC3168, September 2001, | |||
| <https://www.rfc-editor.org/rfc/rfc3168>. | <https://www.rfc-editor.org/rfc/rfc3168>. | |||
| [RFC4015] Ludwig, R. and A. Gurtov, "The Eifel Response Algorithm | ||||
| for TCP", RFC 4015, DOI 10.17487/RFC4015, February 2005, | ||||
| <https://www.rfc-editor.org/rfc/rfc4015>. | ||||
| [RFC5033] Floyd, S. and M. Allman, "Specifying New Congestion | [RFC5033] Floyd, S. and M. Allman, "Specifying New Congestion | |||
| Control Algorithms", BCP 133, RFC 5033, | Control Algorithms", BCP 133, RFC 5033, | |||
| DOI 10.17487/RFC5033, August 2007, | DOI 10.17487/RFC5033, August 2007, | |||
| <https://www.rfc-editor.org/rfc/rfc5033>. | <https://www.rfc-editor.org/rfc/rfc5033>. | |||
| [RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, "TCP | [RFC5348] Floyd, S., Handley, M., Padhye, J., and J. Widmer, "TCP | |||
| Friendly Rate Control (TFRC): Protocol Specification", | Friendly Rate Control (TFRC): Protocol Specification", | |||
| RFC 5348, DOI 10.17487/RFC5348, September 2008, | RFC 5348, DOI 10.17487/RFC5348, September 2008, | |||
| <https://www.rfc-editor.org/rfc/rfc5348>. | <https://www.rfc-editor.org/rfc/rfc5348>. | |||
| skipping to change at page 25, line 7 ¶ | skipping to change at page 26, line 31 ¶ | |||
| RACK-TLP Loss Detection Algorithm for TCP", RFC 8985, | RACK-TLP Loss Detection Algorithm for TCP", RFC 8985, | |||
| DOI 10.17487/RFC8985, February 2021, | DOI 10.17487/RFC8985, February 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc8985>. | <https://www.rfc-editor.org/rfc/rfc8985>. | |||
| [RFC9002] Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection | [RFC9002] Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection | |||
| and Congestion Control", RFC 9002, DOI 10.17487/RFC9002, | and Congestion Control", RFC 9002, DOI 10.17487/RFC9002, | |||
| May 2021, <https://www.rfc-editor.org/rfc/rfc9002>. | May 2021, <https://www.rfc-editor.org/rfc/rfc9002>. | |||
| 8.2. Informative References | 8.2. Informative References | |||
| [CEHRX07] Cai, H., Eun, D., Ha, S., Rhee, I., and L. Xu, "Stochastic | [BSCLU13] Belhareth, S., Sassatelli, L., Collange, D., Lopez- | |||
| Ordering for Internet Congestion Control and its | Pacheco, D., and G. Urvoy-Keller, "Understanding TCP cubic | |||
| Applications", IEEE INFOCOM 2007 - 26th IEEE International | performance in the cloud: A mean-field approach", 2013 | |||
| Conference on Computer Communications, | IEEE 2nd International Conference on Cloud | |||
| DOI 10.1109/infcom.2007.111, 2007, | Networking (CloudNet), DOI 10.1109/cloudnet.2013.6710576, | |||
| <https://doi.org/10.1109/infcom.2007.111>. | November 2013, | |||
| <https://doi.org/10.1109/cloudnet.2013.6710576>. | ||||
| [CEHRX09] Cai, H., Eun, D., Ha, S., Rhee, I., and L. Xu, "Stochastic | ||||
| convex ordering for multiplicative decrease internet | ||||
| congestion control", Computer Networks Vol. 53, pp. | ||||
| 365-381, DOI 10.1016/j.comnet.2008.10.012, February 2009, | ||||
| <https://doi.org/10.1016/j.comnet.2008.10.012>. | ||||
| [FHP00] Floyd, S., Handley, M., and J. Padhye, "A Comparison of | [FHP00] Floyd, S., Handley, M., and J. Padhye, "A Comparison of | |||
| Equation-Based and AIMD Congestion Control", May 2000, | Equation-Based and AIMD Congestion Control", May 2000, | |||
| <https://www.icir.org/tfrc/aimd.pdf>. | <https://www.icir.org/tfrc/aimd.pdf>. | |||
| [GV02] Gorinsky, S. and H. Vin, "Extended Analysis of Binary | [GV02] Gorinsky, S. and H. Vin, "Extended Analysis of Binary | |||
| Adjustment Algorithms", Technical Report TR2002-29, | Adjustment Algorithms", Technical Report TR2002-29, | |||
| Department of Computer Sciences, The University of | Department of Computer Sciences, The University of | |||
| Texas at Austin, 11 August 2002, | Texas at Austin, 11 August 2002, | |||
| <https://www.cs.utexas.edu/ftp/techreports/tr02-39.ps.gz>. | <https://www.cs.utexas.edu/ftp/techreports/tr02-39.ps.gz>. | |||
| [HKLRX06] Ha, S., Kim, Y., Le, L., Rhee, I., and L. Xu, "A Step | [H16] Sangtae Ha, ., "Simulation, Testbed, and Deployment | |||
| toward Realistic Performance Evaluation of High-Speed TCP | Testing Results of CUBIC", 3 November 2016, | |||
| Variants", International Workshop on Protocols for Fast | <https://web.archive.org/web/20161118125842/ | |||
| Long-Distance Networks, February 2006, | http://netsrv.csc.ncsu.edu/wiki/index.php/TCP_Testing>. | |||
| <https://pfld.net/2006/paper/s2_03.pdf>. | ||||
| [HR08] Ha, S. and I. Rhee, "Hybrid Slow Start for High-Bandwidth | [HLRX07] Ha, S., Le, L., Rhee, I., and L. Xu, "Impact of background | |||
| and Long-Distance Networks", International Workshop | traffic on performance of high-speed TCP variant | |||
| on Protocols for Fast Long-Distance Networks, March 2008, | protocols", Computer Networks Vol. 51, pp. 1748-1762, | |||
| <http://www.hep.man.ac.uk/g/GDARN-IT/pfldnet2008/paper/ | DOI 10.1016/j.comnet.2006.11.005, May 2007, | |||
| Sangate_Ha%20Final.pdf>. | <https://doi.org/10.1016/j.comnet.2006.11.005>. | |||
| [HR11] Ha, S. and I. Rhee, "Taming the elephants: New TCP slow | ||||
| start", Computer Networks Vol. 55, pp. 2092-2110, | ||||
| DOI 10.1016/j.comnet.2011.01.014, June 2011, | ||||
| <https://doi.org/10.1016/j.comnet.2011.01.014>. | ||||
| [HRX08] Ha, S., Rhee, I., and L. Xu, "CUBIC: a new TCP-friendly | [HRX08] Ha, S., Rhee, I., and L. Xu, "CUBIC: a new TCP-friendly | |||
| high-speed TCP variant", ACM SIGOPS Operating Systems | high-speed TCP variant", ACM SIGOPS Operating Systems | |||
| Review Vol. 42, pp. 64-74, DOI 10.1145/1400097.1400105, | Review Vol. 42, pp. 64-74, DOI 10.1145/1400097.1400105, | |||
| July 2008, <https://doi.org/10.1145/1400097.1400105>. | July 2008, <https://doi.org/10.1145/1400097.1400105>. | |||
| [K03] Kelly, T., "Scalable TCP: improving performance in | [K03] Kelly, T., "Scalable TCP: improving performance in | |||
| highspeed wide area networks", ACM SIGCOMM Computer | highspeed wide area networks", ACM SIGCOMM Computer | |||
| Communication Review Vol. 33, pp. 83-91, | Communication Review Vol. 33, pp. 83-91, | |||
| DOI 10.1145/956981.956989, April 2003, | DOI 10.1145/956981.956989, April 2003, | |||
| <https://doi.org/10.1145/956981.956989>. | <https://doi.org/10.1145/956981.956989>. | |||
| [LBEWK16] Lukaseder, T., Bradatsch, L., Erb, B., Van Der Heijden, | ||||
| R., and F. Kargl, "A Comparison of TCP Congestion Control | ||||
| Algorithms in 10G Networks", 2016 IEEE 41st Conference on | ||||
| Local Computer Networks (LCN), DOI 10.1109/lcn.2016.121, | ||||
| November 2016, <https://doi.org/10.1109/lcn.2016.121>. | ||||
| [LIU16] Liu, K. and J. Lee, "On Improving TCP Performance over | [LIU16] Liu, K. and J. Lee, "On Improving TCP Performance over | |||
| Mobile Data Networks", IEEE Transactions on Mobile | Mobile Data Networks", IEEE Transactions on Mobile | |||
| Computing Vol. 15, pp. 2522-2536, | Computing Vol. 15, pp. 2522-2536, | |||
| DOI 10.1109/tmc.2015.2500227, October 2016, | DOI 10.1109/tmc.2015.2500227, October 2016, | |||
| <https://doi.org/10.1109/tmc.2015.2500227>. | <https://doi.org/10.1109/tmc.2015.2500227>. | |||
| [RFC3465] Allman, M., "TCP Congestion Control with Appropriate Byte | [RFC3465] Allman, M., "TCP Congestion Control with Appropriate Byte | |||
| Counting (ABC)", RFC 3465, DOI 10.17487/RFC3465, February | Counting (ABC)", RFC 3465, DOI 10.17487/RFC3465, February | |||
| 2003, <https://www.rfc-editor.org/rfc/rfc3465>. | 2003, <https://www.rfc-editor.org/rfc/rfc3465>. | |||
| skipping to change at page 27, line 11 ¶ | skipping to change at page 29, line 6 ¶ | |||
| "TCP Alternative Backoff with ECN (ABE)", RFC 8511, | "TCP Alternative Backoff with ECN (ABE)", RFC 8511, | |||
| DOI 10.17487/RFC8511, December 2018, | DOI 10.17487/RFC8511, December 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8511>. | <https://www.rfc-editor.org/rfc/rfc8511>. | |||
| [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
| DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc9000>. | <https://www.rfc-editor.org/rfc/rfc9000>. | |||
| [SXEZ19] Sun, W., Xu, L., Elbaum, S., and D. Zhao, "Model-Agnostic | [SXEZ19] Sun, W., Xu, L., Elbaum, S., and D. Zhao, "Model-Agnostic | |||
| and Efficient Exploration of Numerical State Space of | and Efficient Exploration of Numerical Congestion Control | |||
| Real-World TCP Congestion Control Implementations", USENIX | State Space of Real-World TCP Implementations", IEEE/ACM | |||
| NSDI 2019, February 2019, | Transactions on Networking Vol. 29, pp. 1990-2004, | |||
| <https://www.usenix.org/system/files/nsdi19-sun.pdf>. | DOI 10.1109/tnet.2021.3078161, October 2021, | |||
| <https://doi.org/10.1109/tnet.2021.3078161>. | ||||
| [XHR04] Xu, L., Harfoush, K., and I. Rhee, "Binary Increase | [XHR04] Xu, L., Harfoush, K., and I. Rhee, "Binary increase | |||
| Congestion Control (BIC) for Fast Long-Distance Networks", | congestion control (BIC) for fast long-distance networks", | |||
| IEEE INFOCOM 2004, DOI 10.1109/infcom.2004.1354672, March | IEEE INFOCOM 2004, DOI 10.1109/infcom.2004.1354672, n.d., | |||
| 2004, <https://doi.org/10.1109/infcom.2004.1354672>. | <https://doi.org/10.1109/infcom.2004.1354672>. | |||
| Appendix A. Acknowledgments | Appendix A. Acknowledgments | |||
| Richard Scheffenegger and Alexander Zimmermann originally co-authored | Richard Scheffenegger and Alexander Zimmermann originally co-authored | |||
| [RFC8312]. | [RFC8312]. | |||
| These individuals suggested improvements to this document: | These individuals suggested improvements to this document: | |||
| * Bob Briscoe | * Bob Briscoe | |||
| skipping to change at page 28, line 4 ¶ | skipping to change at page 29, line 49 ¶ | |||
| * Matt Olson | * Matt Olson | |||
| * Michael Welzl | * Michael Welzl | |||
| * Mirja Kuehlewind | * Mirja Kuehlewind | |||
| * Mohit P. Tahiliani | * Mohit P. Tahiliani | |||
| * Neal Cardwell | * Neal Cardwell | |||
| * Praveen Balasubramanian | * Praveen Balasubramanian | |||
| * Richard Scheffenegger | * Richard Scheffenegger | |||
| * Rod Grimes | * Rod Grimes | |||
| * Tom Henderson | * Tom Henderson | |||
| * Tom Petch | * Tom Petch | |||
| * Wesley Rosenblum | * Wesley Rosenblum | |||
| * Yoshifumi Nishida | * Yoshifumi Nishida | |||
| * Yuchung Cheng | * Yuchung Cheng | |||
| Appendix B. Evolution of CUBIC | Appendix B. Evolution of CUBIC | |||
| B.1. Since draft-ietf-tcpm-rfc8312bis-04 | B.1. Since draft-ietf-tcpm-rfc8312bis-05 | |||
| * Clarify meaning of "application-limited" in Section 5.8 (#137 | ||||
| (https://github.com/NTAP/rfc8312bis/issues/137) | ||||
| * Brief discussion of convergence in Section 5.6 (#96 | ||||
| (https://github.com/NTAP/rfc8312bis/issues/96)) | ||||
| * Add more test results to Section 5 and update some references (#91 | ||||
| (https://github.com/NTAP/rfc8312bis/issues/91)) | ||||
| * Change wording around setting ssthresh (#131 | ||||
| (https://github.com/NTAP/rfc8312bis/issues/131)) | ||||
| B.2. Since draft-ietf-tcpm-rfc8312bis-04 | ||||
| * Fix incorrect math (#106 (https://github.com/NTAP/rfc8312bis/ | * Fix incorrect math (#106 (https://github.com/NTAP/rfc8312bis/ | |||
| issues/106)) | issues/106)) | |||
| * Update RFC5681 (#99 (https://github.com/NTAP/rfc8312bis/ | * Update RFC5681 (#99 (https://github.com/NTAP/rfc8312bis/ | |||
| issues/99)) | issues/99)) | |||
| * Rephrase text around algorithmic alternatives, add HyStart++ (#85 | * Rephrase text around algorithmic alternatives, add HyStart++ (#85 | |||
| (https://github.com/NTAP/rfc8312bis/issues/85), #86 | (https://github.com/NTAP/rfc8312bis/issues/85), #86 | |||
| (https://github.com/NTAP/rfc8312bis/issues/86), #90 | (https://github.com/NTAP/rfc8312bis/issues/86), #90 | |||
| skipping to change at page 29, line 15 ¶ | skipping to change at page 31, line 27 ¶ | |||
| * Clarify text around queuing and slow adaptation of CUBIC in | * Clarify text around queuing and slow adaptation of CUBIC in | |||
| wireless environments (#94 (https://github.com/NTAP/rfc8312bis/ | wireless environments (#94 (https://github.com/NTAP/rfc8312bis/ | |||
| issues/94)) | issues/94)) | |||
| * Set lower bound of cwnd to 1 MSS and use retransmit timer | * Set lower bound of cwnd to 1 MSS and use retransmit timer | |||
| thereafter (#83 (https://github.com/NTAP/rfc8312bis/issues/83)) | thereafter (#83 (https://github.com/NTAP/rfc8312bis/issues/83)) | |||
| * Use FlightSize instead of cwnd to update ssthresh (#114 | * Use FlightSize instead of cwnd to update ssthresh (#114 | |||
| (https://github.com/NTAP/rfc8312bis/issues/114)) | (https://github.com/NTAP/rfc8312bis/issues/114)) | |||
| B.2. Since draft-ietf-tcpm-rfc8312bis-03 | * Create new subsections for spurious timeouts and spurious loss via | |||
| ACK (#90 (https://github.com/NTAP/rfc8312bis/issues/90)) | ||||
| B.3. Since draft-ietf-tcpm-rfc8312bis-03 | ||||
| * Remove reference from abstract (#82 | * Remove reference from abstract (#82 | |||
| (https://github.com/NTAP/rfc8312bis/pull/82)) | (https://github.com/NTAP/rfc8312bis/pull/82)) | |||
| B.3. Since draft-ietf-tcpm-rfc8312bis-02 | B.4. Since draft-ietf-tcpm-rfc8312bis-02 | |||
| * Description of packet loss rate _p_ (#65 | * Description of packet loss rate _p_ (#65 | |||
| (https://github.com/NTAP/rfc8312bis/issues/65)) | (https://github.com/NTAP/rfc8312bis/issues/65)) | |||
| * Clarification of TCP Friendly Equation for ABC and Delayed ACK | * Clarification of TCP Friendly Equation for ABC and Delayed ACK | |||
| (#66 (https://github.com/NTAP/rfc8312bis/issues/66)) | (#66 (https://github.com/NTAP/rfc8312bis/issues/66)) | |||
| * add applicability to QUIC and SCTP (#61 | * add applicability to QUIC and SCTP (#61 | |||
| (https://github.com/NTAP/rfc8312bis/issues/61)) | (https://github.com/NTAP/rfc8312bis/issues/61)) | |||
| skipping to change at page 29, line 46 ¶ | skipping to change at page 32, line 14 ¶ | |||
| * clarify _cwnd_ growth in convex region (#69 | * clarify _cwnd_ growth in convex region (#69 | |||
| (https://github.com/NTAP/rfc8312bis/issues/69)) | (https://github.com/NTAP/rfc8312bis/issues/69)) | |||
| * add guidance for using bytes and mention that segments count is | * add guidance for using bytes and mention that segments count is | |||
| decimal (#67 (https://github.com/NTAP/rfc8312bis/issues/67)) | decimal (#67 (https://github.com/NTAP/rfc8312bis/issues/67)) | |||
| * add loss events detected by RACK and QUIC loss detection (#62 | * add loss events detected by RACK and QUIC loss detection (#62 | |||
| (https://github.com/NTAP/rfc8312bis/issues/62)) | (https://github.com/NTAP/rfc8312bis/issues/62)) | |||
| B.4. Since draft-ietf-tcpm-rfc8312bis-01 | B.5. Since draft-ietf-tcpm-rfc8312bis-01 | |||
| * address Michael Scharf's editorial suggestions. (#59 | * address Michael Scharf's editorial suggestions. (#59 | |||
| (https://github.com/NTAP/rfc8312bis/issues/59)) | (https://github.com/NTAP/rfc8312bis/issues/59)) | |||
| * add "Note to the RFC Editor" about removing underscores | * add "Note to the RFC Editor" about removing underscores | |||
| B.5. Since draft-ietf-tcpm-rfc8312bis-00 | B.6. Since draft-ietf-tcpm-rfc8312bis-00 | |||
| * use updated xml2rfc with better text rendering of subscripts | * use updated xml2rfc with better text rendering of subscripts | |||
| B.6. Since draft-eggert-tcpm-rfc8312bis-03 | B.7. Since draft-eggert-tcpm-rfc8312bis-03 | |||
| * fix spelling nits | * fix spelling nits | |||
| * rename to draft-ietf | * rename to draft-ietf | |||
| * define _W_max_ more clearly | * define _W_max_ more clearly | |||
| B.7. Since draft-eggert-tcpm-rfc8312bis-02 | B.8. Since draft-eggert-tcpm-rfc8312bis-02 | |||
| * add definition for segments_acked and alpha__aimd_. (#47 | * add definition for segments_acked and alpha__aimd_. (#47 | |||
| (https://github.com/NTAP/rfc8312bis/issues/47)) | (https://github.com/NTAP/rfc8312bis/issues/47)) | |||
| * fix a mistake in _W_max_ calculation in the fast convergence | * fix a mistake in _W_max_ calculation in the fast convergence | |||
| section. (#51 (https://github.com/NTAP/rfc8312bis/issues/51)) | section. (#51 (https://github.com/NTAP/rfc8312bis/issues/51)) | |||
| * clarity on setting _ssthresh_ and _cwnd_start_ during | * clarity on setting _ssthresh_ and _cwnd_start_ during | |||
| multiplicative decrease. (#53 (https://github.com/NTAP/rfc8312bis/ | multiplicative decrease. (#53 (https://github.com/NTAP/rfc8312bis/ | |||
| issues/53)) | issues/53)) | |||
| B.8. Since draft-eggert-tcpm-rfc8312bis-01 | B.9. Since draft-eggert-tcpm-rfc8312bis-01 | |||
| * rename TCP-Friendly to AIMD-Friendly and rename Standard TCP to | * rename TCP-Friendly to AIMD-Friendly and rename Standard TCP to | |||
| AIMD TCP to avoid confusion as CUBIC has been widely used on the | AIMD TCP to avoid confusion as CUBIC has been widely used on the | |||
| Internet. (#38 (https://github.com/NTAP/rfc8312bis/issues/38)) | Internet. (#38 (https://github.com/NTAP/rfc8312bis/issues/38)) | |||
| * change introductory text to reflect the significant broader | * change introductory text to reflect the significant broader | |||
| deployment of CUBIC on the Internet. (#39 | deployment of CUBIC on the Internet. (#39 | |||
| (https://github.com/NTAP/rfc8312bis/issues/39)) | (https://github.com/NTAP/rfc8312bis/issues/39)) | |||
| * rephrase introduction to avoid referring to variables that have | * rephrase introduction to avoid referring to variables that have | |||
| not been defined yet. | not been defined yet. | |||
| B.9. Since draft-eggert-tcpm-rfc8312bis-00 | B.10. Since draft-eggert-tcpm-rfc8312bis-00 | |||
| * acknowledge former co-authors (#15 | * acknowledge former co-authors (#15 | |||
| (https://github.com/NTAP/rfc8312bis/issues/15)) | (https://github.com/NTAP/rfc8312bis/issues/15)) | |||
| * prevent _cwnd_ from becoming less than two (#7 | * prevent _cwnd_ from becoming less than two (#7 | |||
| (https://github.com/NTAP/rfc8312bis/issues/7)) | (https://github.com/NTAP/rfc8312bis/issues/7)) | |||
| * add list of variables and constants (#5 | * add list of variables and constants (#5 | |||
| (https://github.com/NTAP/rfc8312bis/issues/5), #6 | (https://github.com/NTAP/rfc8312bis/issues/5), #6 | |||
| (https://github.com/NTAP/rfc8312bis/issues/6)) | (https://github.com/NTAP/rfc8312bis/issues/6)) | |||
| skipping to change at page 31, line 28 ¶ | skipping to change at page 33, line 47 ¶ | |||
| * note for Fast Recovery during _cwnd_ decrease due to congestion | * note for Fast Recovery during _cwnd_ decrease due to congestion | |||
| event (#11 (https://github.com/NTAP/rfc8312bis/issues/11)) | event (#11 (https://github.com/NTAP/rfc8312bis/issues/11)) | |||
| * add section for spurious congestion events (#23 | * add section for spurious congestion events (#23 | |||
| (https://github.com/NTAP/rfc8312bis/issues/23)) | (https://github.com/NTAP/rfc8312bis/issues/23)) | |||
| * initialize _W_est_ after timeout and remove variable | * initialize _W_est_ after timeout and remove variable | |||
| _W_(last_max)_ (#28 (https://github.com/NTAP/rfc8312bis/ | _W_(last_max)_ (#28 (https://github.com/NTAP/rfc8312bis/ | |||
| issues/28)) | issues/28)) | |||
| B.10. Since RFC8312 | B.11. Since RFC8312 | |||
| * converted to Markdown and xml2rfc v3 | * converted to Markdown and xml2rfc v3 | |||
| * updated references (as part of the conversion) | * updated references (as part of the conversion) | |||
| * updated author information | * updated author information | |||
| * various formatting changes | * various formatting changes | |||
| * move to Standards Track | * move to Standards Track | |||
| B.11. Since the Original Paper | B.12. Since the Original Paper | |||
| CUBIC has gone through a few changes since the initial release | CUBIC has gone through a few changes since the initial release | |||
| [HRX08] of its algorithm and implementation. Below we highlight the | [HRX08] of its algorithm and implementation. Below we highlight the | |||
| differences between its original paper and [RFC8312]. | differences between its original paper and [RFC8312]. | |||
| * The original paper [HRX08] includes the pseudocode of CUBIC | * The original paper [HRX08] includes the pseudocode of CUBIC | |||
| implementation using Linux's pluggable congestion control | implementation using Linux's pluggable congestion control | |||
| framework, which excludes system-specific optimizations. The | framework, which excludes system-specific optimizations. The | |||
| simplified pseudocode might be a good source to start with and | simplified pseudocode might be a good source to start with and | |||
| understand CUBIC. | understand CUBIC. | |||
| End of changes. 54 change blocks. | ||||
| 127 lines changed or deleted | 217 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/ | ||||