<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ccwg-ratelimited-increase-01" category="std" consensus="true" submissionType="IETF" updates="RFC5681, RFC9002, RFC9260, RFC9438" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="Rate-Limited cwnd Increase">Increase of the Congestion Window when the Sender Is Rate-Limited</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ccwg-ratelimited-increase-01"/>
    <author initials="M." surname="Welzl" fullname="Michael Welzl">
      <organization>University of Oslo</organization>
      <address>
        <postal>
          <street>PO Box 1080 Blindern</street>
          <city>0316  Oslo</city>
          <country>Norway</country>
        </postal>
        <email>michawe@ifi.uio.no</email>
        <uri>http://welzl.at/</uri>
      </address>
    </author>
    <author initials="T." surname="Henderson" fullname="Tom Henderson">
      <organization>University of Washington</organization>
      <address>
        <postal>
          <street>185 Stevens Way</street>
          <city>Seattle, WA 98195</city>
          <country>United States</country>
        </postal>
        <email>tomh@tomh.org</email>
        <uri>https://www.tomh.org/</uri>
      </address>
    </author>
    <author initials="G." surname="Fairhurst" fullname="Godred Fairhurst">
      <organization>University of Aberdeen</organization>
      <address>
        <postal>
          <street>Fraser Noble Building</street>
          <city>Aberdeen, AB24 3UE</city>
          <country>UK</country>
        </postal>
        <email>gorry@erg.abdn.ac.uk</email>
        <uri>https://www.erg.abdn.ac.uk/</uri>
      </address>
    </author>
    <author initials="M. P." surname="Tahiliani" fullname="Mohit P. Tahiliani">
      <organization>National Institute of Technology Karnataka</organization>
      <address>
        <postal>
          <street>P. O. Srinivasnagar, Surathkal</street>
          <city>Mangalore, Karnataka - 575025</city>
          <country>India</country>
        </postal>
        <email>tahiliani@nitk.edu.in</email>
        <uri>https://tahiliani.in/</uri>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <area>Transport</area>
    <workgroup>Congestion Control Working Group</workgroup>
    <abstract>
      <?line 74?>

<t>This document specifies how transport protocols increase their congestion window when the sender is rate-limited, and updates RFC 5681, RFC 9002, RFC 9260, and RFC 9438.
Such a limitation can be caused by the sending application not supplying data or by receiver flow control.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://mwelzl.github.io/draft-ccwg-ratelimited-increase/draft-ietf-ccwg-ratelimited-increase.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-ccwg-ratelimited-increase/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Congestion Control Working Group Working Group mailing list (<eref target="mailto:ccwg@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ccwg/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ccwg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mwelzl/draft-ccwg-ratelimited-increase"/>.</t>
    </note>
  </front>
  <middle>
    <?line 80?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A sender of a congestion controlled transport protocol becomes "rate-limited" when it does not send any data
even though the congestion control rules would allow it to transmit data.
This could occur because the application has not provided sufficient data to fully utilise the congestion window (cwnd).
It could also occur because the receiver has limited the sender using flow control
(e.g., by the advertised TCP receiver window (rwnd) or by the connection or stream flow credit in QUIC).
Current RFCs specifying congestion control algorithms diverge regarding the rules for increasing the cwnd when the sender is rate-limited.</t>
      <t>Congestion Window Validation (CWV) <xref target="RFC7661"/> provides an experimental specification defining how to manage a cwnd that has
become larger than the current flight size.
In contrast, this present document concerns the increase in cwnd when a sender is rate-limited. These two topics are distinct,
but are related, because both describe the management of the cwnd when the sender does not fully utilise the current cwnd.</t>
      <t>This document specifies a uniform rule that congestion control algorithms <bcp14>MUST</bcp14> apply and provides a recommendation that congestion control implementations <bcp14>SHOULD</bcp14> follow.
An appendix provides an overview of the divergence in current RFCs and some current implementations regarding cwnd increase when the sender is rate-limited.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This document uses the terms defined in <xref section="2" sectionFormat="of" target="RFC5681"/> and <xref section="3" sectionFormat="of" target="RFC7661"/>. Additionally, we define:</t>
        <ul spacing="normal">
          <li>
            <t>maxFS: the largest value of FlightSize since the last time that cwnd was decreased. If cwnd has never been decreased, maxFS is the maximum value of FlightSize since the start of the data transfer.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="rules">
      <name>Increase rules</name>
      <t>When FlightSize &lt; cwnd, regardless of the current state of a congestion control algorithm, senders using a congestion controlled transport protocol:</t>
      <ol spacing="normal" type="1"><li>
          <t><bcp14>MUST</bcp14> cap cwnd to be no larger than limit(maxFS).</t>
        </li>
        <li>
          <t><bcp14>MAY</bcp14> restrict maxFS as min(maxFS, pipeACK), using "pipeACK" as defined in <xref target="RFC7661"/>.</t>
        </li>
      </ol>
      <t>In rule #1, the function limit() returns the maximum cwnd value the congestion control algorithm would yield by increasing from the value of the maxFS parameter within one RTT.
The RTT includes the minimum path propagation delay plus any delay accumulated by queing in the stack, at the interface and in network elements along the path.
For example, for Slow Start, as specified in <xref target="RFC5681"/>, limit(maxFS)=2*maxFS, such that equation 2 in <xref target="RFC5681"/> becomes:</t>
      <artwork><![CDATA[
cwnd_new = cwnd + min (N, SMSS)
cwnd = min(cwnd_new, 2*maxFS)
]]></artwork>
      <t>where cwnd and SMSS follow their definitions in <xref target="RFC5681"/> and N is the number of previously unacknowledged bytes acknowledged in the incoming ACK.</t>
      <t>Similarly, with rule #1 applied to Congestion Avoidance, limit(maxFS)=1+maxFS, such that equation 3 in <xref target="RFC5681"/> becomes:</t>
      <artwork><![CDATA[
cwnd_new = cwnd + SMSS*SMSS/cwnd
cwnd = min(cwnd_new, 1+maxFS)
]]></artwork>
      <t>where cwnd and SMSS follow their definitions in <xref target="RFC5681"/>.</t>
      <t>As with cwnd, without a way to reduce it when the transport sender becomes rate-limited, rule #1 allows for maxFS to stay valid for a long time, possibly not reflecting the reality of the end-to-end Internet path in use. For cwnd, this is remedied by "Congestion Window Validation" in <xref target="RFC7661"/>, which also defines a "pipeACK" variable that measures the acknowledged size of the network pipe when the sender is rate-limited. Accordingly, to implement CWV, rule #2 can be used.</t>
      <section anchor="example">
        <name>Example</name>
        <t>We illustrate the working of the rules by showing the increase of cwnd in two scenarios: when the growth of cwnd is unconstrained, and when it is constrained by the increase rules. In both cases we assume initial cwnd (initcwnd) = 10 segments, as defined for TCP in <xref target="RFC6928"/>, QUIC in <xref target="RFC9002"/>, a single connection begins with Slow Start, the sender transmits a total of 14 segments but pauses after transmitting 10 segments and resumes the transmission for the remaining 4 segments afterwards, no packets are lost, and an ACK is sent for every packet.</t>
        <section anchor="unconstrained-sender">
          <name>Unconstrained sender</name>
          <t>Initially, cwnd = initcwnd. Therefore, using initcwnd = 10 segments, as defined for TCP in <xref target="RFC6928"/>, QUIC in <xref target="RFC9002"/>, the sender transmits 10 segments and pauses. Since the sender is in the Slow Start phase, the arrival of an ACK for each of the 10 segments increases the cwnd by 1 segment, resulting in the cwnd increasing to 20 segments. Subsequently, after the pause, the sender transmits 4 segments and pauses again. As a consequence, the arrival of 4 ACKs results in cwnd further increasing to 24 segments even though the sender is rate-limited (i.e., has never sent more than 10 segments/RTT).</t>
        </section>
        <section anchor="sender-constrained-by-the-increase-rules">
          <name>Sender constrained by the increase rules</name>
          <t>Initially, cwnd = initcwnd. Therefore, using initcwnd = 10 segments, as defined for TCP in <xref target="RFC6928"/>, QUIC in <xref target="RFC9002"/>, the sender transmits 10 segments and pauses; note that FlightSize and maxFS are 10 segments at this point. Since the sender is in the Slow Start phase, the arrival of an ACK for each of the 10 segments increases the cwnd by 1 segment, resulting in cwnd increasing to 20 segments. Subsequently, when the sender resumes and transmits 4 segments, rule #1 constrains the growth of cwnd because FlightSize &lt; cwnd and rule #1 caps cwnd to be no larger than limit(maxFS) = 2<em>maxFS = 2</em>10 segments = 20 segments.</t>
        </section>
      </section>
      <section anchor="discussion">
        <name>Discussion</name>
        <t>If the sending rate is less than permitted by cwnd for multiple RTTs, limited either by the sending application or by the receiver-advertised window, continuously increasing the cwnd would cause a mismatch between the cwnd and the capacity that the path supports (i.e., over-estimating the capacity).
Such unlimited growth in the cwnd is therefore disallowed.</t>
        <t>However, in most common congestion control algorithms, in the absence of an indication of congestion, a cwnd that has been fully utilized during an RTT is permitted to be increased during the immediately following RTT.
Thus, such an increase is allowed by the first rule.</t>
        <section anchor="rate-based-congestion-control">
          <name>Rate-based congestion control</name>
          <t>The present document updates congestion control specifications that use a congestion window (cwnd) to limit the number of unacknowledged packets a sender is allowed to emit. Use of a congestion window variable to control sending rate is not the only mechanism available and used in practice.</t>
          <t>Congestion control algorithms can also constrain data transmission by explicitly calculating the sending rate over some time interval, by "pacing" packets (injecting pauses in between their transmission) or via combinations of the above (e.g., BBR combines these three methods <xref target="I-D.cardwell-iccrg-bbr-congestion-control"/>). The guiding principle behind the rules in <xref target="rules"/> applies to all  congestion control algorithms: in the absence of a congestion indication, a sender should be allowed to increase its rate from the amount of data that it has transmitted during the previous RTT. This holds irrespective of whether the sender is rate-limited or not.</t>
        </section>
        <section anchor="pacing">
          <name>Pacing</name>
          <t>Pacing mechanisms seek to avoid the negative impacts associated with "bursts" (flights of packets transmitted back-to-back). This is usually without limiting the number of packets that are sent per RTT. The present specification introduces a limitation using "maxFS", which is measured over an RTT; thus, as long as the number of packets per RTT is unaffected by pacing, the rules in <xref target="rules"/> also do not constrain the use of pacing mechanisms.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>While congestion control designs could result in unwanted competing traffic, they do not directly result in new security considerations.</t>
      <t>Transport protocols that provide authentication (including those using encryption), or are carried over protocols that provide authentication,
can protect their congestion control algorithm from network attack. This is orthogonal to the congestion control rules.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests no IANA action.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC7661">
          <front>
            <title>Updating TCP to Support Rate-Limited Traffic</title>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="A. Sathiaseelan" initials="A." surname="Sathiaseelan"/>
            <author fullname="R. Secchi" initials="R." surname="Secchi"/>
            <date month="October" year="2015"/>
            <abstract>
              <t>This document provides a mechanism to address issues that arise when TCP is used for traffic that exhibits periods where the sending rate is limited by the application rather than the congestion window. It provides an experimental update to TCP that allows a TCP sender to restart quickly following a rate-limited interval. This method is expected to benefit applications that send rate-limited traffic using TCP while also providing an appropriate response if congestion is experienced.</t>
              <t>This document also evaluates the Experimental specification of TCP Congestion Window Validation (CWV) defined in RFC 2861 and concludes that RFC 2861 sought to address important issues but failed to deliver a widely used solution. This document therefore reclassifies the status of RFC 2861 from Experimental to Historic. This document obsoletes RFC 2861.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7661"/>
          <seriesInfo name="DOI" value="10.17487/RFC7661"/>
        </reference>
        <reference anchor="RFC5681">
          <front>
            <title>TCP Congestion Control</title>
            <author fullname="M. Allman" initials="M." surname="Allman"/>
            <author fullname="V. Paxson" initials="V." surname="Paxson"/>
            <author fullname="E. Blanton" initials="E." surname="Blanton"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document defines TCP's four intertwined congestion control algorithms: slow start, congestion avoidance, fast retransmit, and fast recovery. In addition, the document specifies how TCP should begin transmission after a relatively long idle period, as well as discussing various acknowledgment generation methods. This document obsoletes RFC 2581. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5681"/>
          <seriesInfo name="DOI" value="10.17487/RFC5681"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9002">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="RFC9438">
          <front>
            <title>CUBIC for Fast and Long-Distance Networks</title>
            <author fullname="L. Xu" initials="L." surname="Xu"/>
            <author fullname="S. Ha" initials="S." surname="Ha"/>
            <author fullname="I. Rhee" initials="I." surname="Rhee"/>
            <author fullname="V. Goel" initials="V." surname="Goel"/>
            <author fullname="L. Eggert" initials="L." role="editor" surname="Eggert"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>CUBIC is a standard TCP congestion control algorithm that uses a cubic function instead of a linear congestion window increase function to improve scalability and stability over fast and long-distance networks. CUBIC has been adopted as the default TCP congestion control algorithm by the Linux, Windows, and Apple stacks.</t>
              <t>This document updates the specification of CUBIC to include algorithmic improvements based on these implementations and recent academic work. Based on the extensive deployment experience with CUBIC, this document also moves the specification to the Standards Track and obsoletes RFC 8312. This document also updates RFC 5681, to allow for CUBIC's occasionally more aggressive sending behavior.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9438"/>
          <seriesInfo name="DOI" value="10.17487/RFC9438"/>
        </reference>
        <reference anchor="RFC9260">
          <front>
            <title>Stream Control Transmission Protocol</title>
            <author fullname="R. Stewart" initials="R." surname="Stewart"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <author fullname="K. Nielsen" initials="K." surname="Nielsen"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document describes the Stream Control Transmission Protocol (SCTP) and obsoletes RFC 4960. It incorporates the specification of the chunk flags registry from RFC 6096 and the specification of the I bit of DATA chunks from RFC 7053. Therefore, RFCs 6096 and 7053 are also obsoleted by this document. In addition, RFCs 4460 and 8540, which describe errata for SCTP, are obsoleted by this document.</t>
              <t>SCTP was originally designed to transport Public Switched Telephone Network (PSTN) signaling messages over IP networks. It is also suited to be used for other applications, for example, WebRTC.</t>
              <t>SCTP is a reliable transport protocol operating on top of a connectionless packet network, such as IP. It offers the following services to its users:</t>
              <t>The design of SCTP includes appropriate congestion avoidance behavior and resistance to flooding and masquerade attacks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9260"/>
          <seriesInfo name="DOI" value="10.17487/RFC9260"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6928">
          <front>
            <title>Increasing TCP's Initial Window</title>
            <author fullname="J. Chu" initials="J." surname="Chu"/>
            <author fullname="N. Dukkipati" initials="N." surname="Dukkipati"/>
            <author fullname="Y. Cheng" initials="Y." surname="Cheng"/>
            <author fullname="M. Mathis" initials="M." surname="Mathis"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document proposes an experiment to increase the permitted TCP initial window (IW) from between 2 and 4 segments, as specified in RFC 3390, to 10 segments with a fallback to the existing recommendation when performance issues are detected. It discusses the motivation behind the increase, the advantages and disadvantages of the higher initial window, and presents results from several large-scale experiments showing that the higher initial window improves the overall performance of many web services without resulting in a congestion collapse. The document closes with a discussion of usage and deployment for further experimental purposes recommended by the IETF TCP Maintenance and Minor Extensions (TCPM) working group.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6928"/>
          <seriesInfo name="DOI" value="10.17487/RFC6928"/>
        </reference>
        <reference anchor="I-D.cardwell-iccrg-bbr-congestion-control">
          <front>
            <title>BBR Congestion Control</title>
            <author fullname="Neal Cardwell" initials="N." surname="Cardwell">
              <organization>Google</organization>
            </author>
            <author fullname="Yuchung Cheng" initials="Y." surname="Cheng">
              <organization>Google</organization>
            </author>
            <author fullname="Soheil Hassas Yeganeh" initials="S. H." surname="Yeganeh">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Van Jacobson" initials="V." surname="Jacobson">
              <organization>Google</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   This document specifies the BBR congestion control algorithm.  BBR
   ("Bottleneck Bandwidth and Round-trip propagation time") uses recent
   measurements of a transport connection's delivery rate, round-trip
   time, and packet loss rate to build an explicit model of the network
   path.  BBR then uses this model to control both how fast it sends
   data and the maximum volume of data it allows in flight in the
   network at any time.  Relative to loss-based congestion control
   algorithms such as Reno [RFC5681] or CUBIC [RFC8312], BBR offers
   substantially higher throughput for bottlenecks with shallow buffers
   or random losses, and substantially lower queueing delays for
   bottlenecks with deep buffers (avoiding "bufferbloat").  BBR can be
   implemented in any transport protocol that supports packet-delivery
   acknowledgment.  Thus far, open source implementations are available
   for TCP [RFC793] and QUIC [RFC9000].  This document specifies version
   2 of the BBR algorithm, also sometimes referred to as BBRv2 or bbr2.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-cardwell-iccrg-bbr-congestion-control-02"/>
        </reference>
        <reference anchor="RFC4341">
          <front>
            <title>Profile for Datagram Congestion Control Protocol (DCCP) Congestion Control ID 2: TCP-like Congestion Control</title>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="E. Kohler" initials="E." surname="Kohler"/>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document contains the profile for Congestion Control Identifier 2 (CCID 2), TCP-like Congestion Control, in the Datagram Congestion Control Protocol (DCCP). CCID 2 should be used by senders who would like to take advantage of the available bandwidth in an environment with rapidly changing conditions, and who are able to adapt to the abrupt changes in the congestion window typical of TCP's Additive Increase Multiplicative Decrease (AIMD) congestion control. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4341"/>
          <seriesInfo name="DOI" value="10.17487/RFC4341"/>
        </reference>
        <reference anchor="RFC2861">
          <front>
            <title>TCP Congestion Window Validation</title>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="J. Padhye" initials="J." surname="Padhye"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <date month="June" year="2000"/>
            <abstract>
              <t>This document describes a simple modification to TCP's congestion control algorithms to decay the congestion window cwnd after the transition from a sufficiently-long application-limited period, while using the slow-start threshold ssthresh to save information about the previous value of the congestion window. This memo defines an Experimental Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2861"/>
          <seriesInfo name="DOI" value="10.17487/RFC2861"/>
        </reference>
      </references>
    </references>
    <?line 197?>

<section anchor="the-state-of-rfcs-and-implementations">
      <name>The state of RFCs and implementations</name>
      <t>This section is provided as input for IETF discussion, and should be removed before publication.</t>
      <section anchor="tcp-reno-congestion-control">
        <name>TCP ("Reno" congestion control)</name>
        <section anchor="specification">
          <name>Specification</name>
          <t><xref target="RFC7661"/> suggests there is no increase limitation in the standard TCP behavior (which <xref target="RFC7661"/> changes), on page 4:</t>
          <ul empty="true">
            <li>
              <t>Standard TCP does not impose additional restrictions on the growth of
the congestion window when a TCP sender is unable to send at the
maximum rate allowed by the cwnd. In this case, the rate-limited
sender may grow a cwnd far beyond that corresponding to the current
transmit rate, resulting in a value that does not reflect current
information about the state of the network path the flow is using.</t>
            </li>
          </ul>
        </section>
        <section anchor="tcp-impl">
          <name>Implementation</name>
          <ul spacing="normal">
            <li>
              <t>ns-2 allows cwnd to grow when it is rate-limited by rwnd. (Rate-limited by the sending application: not tested.)</t>
            </li>
            <li>
              <t>Until release 3.42, ns-3 allowed cwnd to grow when rate-limited, either due to an application or rwnd limit.  Since release 3.42, ns-3 TCP models conform to rule #1 in <xref target="rules"/>, following the current Linux TCP approach in this regard (see next bullet).</t>
            </li>
            <li>
              <t>In Congestion Avoidance, Linux only allows the cwnd to grow when the sender is unconstrained.
Before kernel version 3.16, this also applied to Slow Start.
The check for "unconstrained" is perfomed by checking if FlightSize is greater or equal to cwnd.
Since kernel version 3.16, which was published in August 2014, in Slow Start, the increase
implements rule #1 in <xref target="rules"/> in the <tt>tcp_is_cwnd_limited</tt> function in <tt>tcp.h</tt>.</t>
            </li>
          </ul>
        </section>
        <section anchor="assessment">
          <name>Assessment</name>
          <t>Linux implements a limit to cwnd growth in accordance with rule #1 in <xref target="rules"/>;
in Slow Start, this limit follows the rule's upper limit, while in Congestion Avoidance, it is more conservative than rule #1.
The specification and the ns-2 and (older) ns-3 implementations are in conflict with rule #1 in <xref target="rules"/>.</t>
        </section>
      </section>
      <section anchor="cubic">
        <name>CUBIC</name>
        <section anchor="specification-1">
          <name>Specification</name>
          <t><xref section="5.8" sectionFormat="of" target="RFC9438"/> says:</t>
          <ul empty="true">
            <li>
              <t>Cubic doesn't increase cwnd when it's limited by the sending application or rwnd.</t>
            </li>
          </ul>
        </section>
        <section anchor="implementation">
          <name>Implementation</name>
          <t>The description of Linux described in <xref target="tcp-impl"/> also applies to Cubic.</t>
        </section>
        <section anchor="assessment-1">
          <name>Assessment</name>
          <t>Both the specification and the Linux implementation limit the cwnd growth in accordance with rule #1 in <xref target="rules"/>;
in Congestion Avoidance, this limit is more conservative than rule #1 in <xref target="rules"/>,
and in Slow Start, it implements the upper limit of rule #1 in <xref target="rules"/>.</t>
        </section>
      </section>
      <section anchor="sctp">
        <name>SCTP</name>
        <section anchor="specification-2">
          <name>Specification</name>
          <t><xref section="7.2.1" sectionFormat="of" target="RFC9260"/> says:</t>
          <ul empty="true">
            <li>
              <t>When cwnd is less than or equal to ssthresh, an SCTP endpoint <bcp14>MUST</bcp14> use the slow-start algorithm to
increase cwnd only if the current congestion window is being fully utilized and the data sender
is not in Fast Recovery.
Only when these two conditions are met can the cwnd be increased; otherwise, the cwnd <bcp14>MUST NOT</bcp14> be increased.</t>
            </li>
          </ul>
        </section>
        <section anchor="assessment-2">
          <name>Assessment</name>
          <t>The quoted statement from <xref target="RFC9260"/> prescribes the same cwnd growth limitation that is also specified for Cubic and implemented for both Reno and Cubic in Linux.
It is in accordance with rule #1 in <xref target="rules"/>, and more conservative.</t>
          <t><xref section="7.2.1" sectionFormat="of" target="RFC9260"/> is specifically limited to Slow Start.
Congestion Avoidance is discussed in <xref section="7.2.2" sectionFormat="of" target="RFC9260"/>
However, this section neither contains a similar rule, nor does it refer back to the rule that limits the growth of cwnd
in Section 7.2.1. It is thus implicitly clear that the quoted rule only applies to Slow Start, whereas the rules in <xref target="rules"/> apply to both Slow Start and Congestion Avoidance.</t>
        </section>
      </section>
      <section anchor="quic">
        <name>QUIC</name>
        <section anchor="specification-3">
          <name>Specification</name>
          <t><xref section="7.8" sectionFormat="of" target="RFC9002"/> states:</t>
          <ul empty="true">
            <li>
              <t>When bytes in flight is smaller than the congestion window and sending is not pacing limited, the congestion window is underutilized. This can happen due to insufficient application data or flow control limits. When this occurs, the congestion window <bcp14>SHOULD NOT</bcp14> be increased in either slow start or congestion avoidance.</t>
            </li>
          </ul>
        </section>
        <section anchor="assessment-3">
          <name>Assessment</name>
          <t>With the exception of pacing, this specification conservatively limits the growth in cwnd, similar to Cubic and SCTP. It is in accordance with rule #1 in <xref target="rules"/>, and more conservative.</t>
        </section>
      </section>
      <section anchor="dccp-ccid2">
        <name>DCCP CCID2</name>
        <section anchor="specification-4">
          <name>Specification</name>
          <t><xref section="5.1" sectionFormat="of" target="RFC4341"/> states:
&gt;There are currently no standards governing TCP's use of the congestion window during an application-limited period.  In particular, it is possible for TCP's congestion window to grow quite large during a long uncongested period when the sender is application limited, sending at a low rate.  <xref target="RFC2861"/> essentially suggests that TCP's congestion window not be increased during application-limited periods when the congestion window is not being fully utilized.</t>
        </section>
        <section anchor="assessment-4">
          <name>Assessment</name>
          <t>A DCCP Congestion Control ID (CCID) specifing TCP-like behaviour ought to follow the method specified in this document. The current guidance relates only to <xref target="RFC2861"/>.
The text in <xref section="5.1" sectionFormat="of" target="RFC4341"/> is updated by this document to specify the management of the
cwnd during an application-limited period.</t>
        </section>
      </section>
    </section>
    <section anchor="change-log">
      <name>Change Log</name>
      <ul spacing="normal">
        <li>
          <t>-00 was the first individual submission for feedback by CCWG.</t>
        </li>
        <li>
          <t>-01 includes editorial improvements
          </t>
          <ul spacing="normal">
            <li>
              <t>Removes application interaction with QUIC pacing, since pacing might be within the QUIC stack.</t>
            </li>
            <li>
              <t>Adds explicit mention of DCCP/CCID2.</t>
            </li>
            <li>
              <t>Adds this change log.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>-02 addresses comments from IETF-119
          </t>
          <ul spacing="normal">
            <li>
              <t>Discusses rate-based controls and pacing.</t>
            </li>
            <li>
              <t>Trims the list of possible RFCs to update.</t>
            </li>
            <li>
              <t>Some editorial fixes: "congestion control algorithm" instead of "mechanism" for consistency with RFC5033.bis; earlier definition of maxFS; explicit mention of RFCs to update in abstract.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>-03 addresses comments from IETF-120
          </t>
          <ul spacing="normal">
            <li>
              <t>Introduces a third rule, with <bcp14>MAY</bcp14>, that avoids having an unvalidated long-lived maxFS (using pipeACK from RFC 7661).</t>
            </li>
            <li>
              <t>Changes "inc" to "limit" and adapts the wording of rule 2 to make it clearer (thanks to Neal Cardwell).</t>
            </li>
            <li>
              <t>Appendix: updates ns-3 in line with the recent implementation.</t>
            </li>
            <li>
              <t>Appendix: makes the RFC 9002 text clearer and shorter.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>draft-ietf-ccwg-ratelimited-increase-00
          </t>
          <ul spacing="normal">
            <li>
              <t>adds Mohit Tahiliani as a co-author</t>
            </li>
            <li>
              <t>refines the "rule" text (shorter, clearer)</t>
            </li>
            <li>
              <t>adds an example</t>
            </li>
          </ul>
        </li>
        <li>
          <t>draft-ietf-ccwg-ratelimited-increase-01
    * Clarified what we mean with an RTT
    * rephrased example regarding initcwnd, citing RFCs 6928 and 9002
    * removed the too vague rule 1 and made rule 2 (now rule 1) a <bcp14>MUST</bcp14></t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank Neal Cardwell and Martin Duke for suggesting improvements to this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9VcW5fbxpF+x6/oUA+ecUjMcEaS5XHsmBpJ9pzotuIoOj45
OU4TaJKdAQEaDQzF6Ci/ZX/L/rL9qqobF5IjKZt92H2wBgQafan66l7waDSK
Kltl5kINrvKkNNoZVcxVtTTqssgXxlW2yNU7m6fFRm2WJudHU5OnplRXTr3R
lRk9tytbmXQQ6dmsNLeYq3tbJZs8VWH2QZTg2aIotxfKVWkUpUWS6xU2kJZ6
Xo2sqeajJNksRiXGZTLFyPq3R6fjyNWzlXUO+6q2a7x39fT6mVL3lM5cgaWx
VbOm/eXVYKgGJrVVUVqd0Y+ryWP8KUpcvbl+NojyejUz5UWUYqmLqF7TX3eh
3jy7fPDw0XhIF9+enp7JxdnDU7m4f/4oSorcmdzVGF2VtYlw6PNIY4/YwXWp
c7cuymoQbYryZlEW9Rq3O/TEZVUWmXqHxzZfqJ9oyCC6NXmNfSj15a8oJUQY
7N1faZvhPpHyRyJqXJQLuq/LZIn7y6pau4uTExpGt+yticOwE7pxMiuLjTMn
NMEJvbiw1bKe4dXVxmT/yE6EX3eyil7JiJ5VdzV+NZapYlt8bpKTLwFFvKxW
2SCKXKXz9FedFTkIsjUucitdVr/+VhfM1byI1vZC/aUqkqFyYE9p5g5X2xVd
/DWKdF0ti5LoP8J/Stkcb72I1TvaM98RoL6wyVKbrHMfNLtQb3PQsHS22pIE
vXJZwc8c1jGgwetX6nHxXo1PH52qxxmhtMx5QII3LtTp+fihat9Kihr8xv2X
RbnRW75nhKUrWn5jfrRzG9e2iHN5oy5xOKIzyCxU1tVJ/yzXsfqZJdcVeec8
18Vq5/6B87zTbgl8VX5EONWlXq1rxyc7f3D24PS093T86IGaVga4dphg2znu
1OgKameo3k3Ut4/G3z7onxprk+aYVgSg7uGrYrX8kf4hnPbPTfjabDZxeLpz
+J9i9UzbclmXruoc/qciLbFS/9GB80+gKFJj+qefJssCMonHT/OFzY0pQaLe
iGclAFqCi7PMqMe1zdIwQugQph2qyeOz++r87dMdQvype3qozXL7oykXsZ6l
eayTuL45TIT+mJM9TL+O1bVe2szq3HahXSxttf+Q6fFSkyLSGVQ5VFJVV2wp
rk2yzIusWGzVn3SZ60rf6B4Fnpg1pHAFdUzDLwvgpQJFpok1eWIURPZO4mEf
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

-->

</rfc>
