<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ccwg-ratelimited-increase-06" category="std" consensus="true" submissionType="IETF" updates="RFC4341, RFC5681, RFC9002, RFC9260, RFC9438" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.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-06"/>
    <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>
      </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="2026" month="July" day="22"/>
    <area>Transport</area>
    <workgroup>Congestion Control Working Group</workgroup>
    <abstract>
      <?line 73?>

<t>This document specifies how transport protocols increase their congestion window when the sender is rate-limited, and updates RFC 4341, 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://ietf-wg-ccwg.github.io/draft-ietf-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 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/ietf-wg-ccwg/draft-ietf-ccwg-ratelimited-increase"/>.</t>
    </note>
  </front>
  <middle>
    <?line 79?>

<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 utilize 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, and how to respond to detected congestion when this is the case.
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 a sender does not fully utilize the current cwnd.</t>
      <t>An appendix provides an example of how rate-limited increase can play out.</t>
      <t>RFC-Ed Note, please remove the following sentence prior to publication:
Another appendix provides an overview of the divergence in current RFCs and some implementations regarding cwnd increase when the sender is rate-limited (the second appendix is to be removed before publication).</t>
    </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 anchor="terminology">
        <name>Terminology</name>
        <t>This document uses the terms defined in <xref section="2" sectionFormat="of" target="RFC5681"/>.</t>
        <t>Additionally, the following are defined:</t>
        <ul spacing="normal">
          <li>
            <t>cwnd-limited: A flow that has sent the maximum number of segments permitted by the cwnd, where the application utilises the allowed sending rate (based on the definition for TCP in Section 4.5.3 of <xref target="RFC7661"/>).</t>
          </li>
          <li>
            <t>rate-limited: A flow that does not consume more than one half of cwnd and hence operates in the non-validated phase. This includes periods when an application is either idle or chooses to send at a rate less than the maximum permitted by the cwnd (based on the definition for TCP in Section 3 of <xref target="RFC7661"/>).</t>
          </li>
          <li>
            <t>initcwnd: The initial value of the congestion window, also known as the "initial window" ("IW" in <xref target="RFC5681"/>).</t>
          </li>
          <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, and at least as large as initcwnd.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="rules">
      <name>Rate-Limited Increase</name>
      <t>When FlightSize &lt; cwnd, regardless of the current state of a congestion control algorithm, the following  "Rate-Limited Increase" rules apply for senders using a congestion controlled transport protocol:</t>
      <ul spacing="normal">
        <li>
          <t>The sender <bcp14>MUST</bcp14> initialise the maxFS parameter to initcwnd when the congestion control algorithm is started. Thereafter, when the FlightSize is updated, the sender also updates the maxFS:</t>
        </li>
      </ul>
      <artwork><![CDATA[
maxFS = max(FlightSize, maxFS)
]]></artwork>
      <ul spacing="normal">
        <li>
          <t>Upon a reduction of cwnd (for any reason), maxFS <bcp14>MUST</bcp14> be reset to zero. This ensures that maxFS is reinitialized using the first FlightSize measurement taken after the cwnd reduction.</t>
        </li>
        <li>
          <t>The sender <bcp14>MUST</bcp14> cap cwnd to be no larger than limit(maxFS).</t>
        </li>
      </ul>
      <t>The function limit() returns the maximum cwnd value the congestion control algorithm would yield by increasing for all ACKs that would be produced by successfully transmitting one window of size maxFS.
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 Rate-Limited Increase applied in Congestion Avoidance, limit(maxFS)=SMSS+maxFS, such that equation 3 in <xref target="RFC5681"/> becomes:</t>
      <artwork><![CDATA[
cwnd_new = cwnd + SMSS*SMSS/cwnd
cwnd = min(cwnd_new, SMSS+maxFS)
]]></artwork>
      <t>where cwnd and SMSS follow their definitions in <xref target="RFC5681"/>.</t>
      <t>NOTE: This specification defines the current method used to increase the cwnd for a rate-limited sender. Without a way to reduce cwnd when the transport sender becomes rate-limited, maxFS can stay valid for a long time, possibly not reflecting the reality of the end-to-end Internet path in use. This can be remedied by "Congestion Window Validation" in <xref target="RFC7661"/>, which also defines a "pipeACK" variable that measures the recently acknowledged size of the network pipe when the sender was rate-limited.</t>
      <section anchor="example">
        <name>Example</name>
        <t>We illustrate the working of Rate-Limited Increase by showing the increase of cwnd in two scenarios: when the growth of cwnd is unconstrained, and when the rate-limited sender is constrained by Rate-Limited Increase. For simplicity, this example accounts for the cwnd in TCP segments (or QUIC packets), rather than bytes. In both cases, we assume the initial cwnd (initcwnd) = 10 segments, as defined for TCP in <xref target="RFC6928"/> and 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 afterward, 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, the sender transmits 10 segments and pauses. Since the sender is in the Slow Start phase, the arrival of each ACK for the 10 sent 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 per round-trip time (RTT)).</t>
        </section>
        <section anchor="sender-constrained-by-rate-limited-increase">
          <name>Sender constrained by Rate-Limited Increase</name>
          <t>Initially, cwnd = initcwnd. Therefore, using initcwnd = 10 segments, the sender transmits 10 segments and pauses; note that FlightSize and maxFS are both 10 segments at this point. Since the sender is in the Slow Start phase, the arrival of each ACK for the 10 sent segments increases the cwnd by 1 segment, resulting in the cwnd increasing to 20 segments. Subsequently, when the sender resumes and transmits 4 new segments, Rate-Limited Increase constrains the growth of the cwnd because FlightSize &lt; cwnd and therefore this caps the cwnd to be no larger than limit(maxFS) = 2 X maxFS = 2 X 10 segments = 20 segments.</t>
        </section>
      </section>
      <section anchor="discussion">
        <name>Discussion</name>
        <t>If the sending rate is less than the rate permitted by the cwnd for multiple RTTs, limited either by the sending application or by the receiver-advertised window, a continuous increase in 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 (where a sender was cwnd-limited) permits the cwnd to be increased during the immediately following RTT. This increase is allowed by Rate-Limited Increase.</t>
        <section anchor="rate-based-congestion-control">
          <name>Rate-based congestion control</name>
          <t>The present document updates congestion control specifications that use a cwnd to limit the number of unacknowledged bytes (or packets) that a sender is allowed to emit. Use of a cwnd variable to control sending rate is not the only mechanism available and not the only mechanism that is 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.ietf-ccwg-bbr"/>). The guiding principle behind Rate-Limited Increase applies to all congestion control algorithms: in the absence of a congestion indication, a sender is 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). Therefore, congestion control algorithms <bcp14>SHOULD</bcp14> implement a behavior that is equivalent to Rate-Limited Increase, irrespective of whether they use a cwnd variable 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). Rate-Limited Increase introduces a limit using "maxFS", which is based on the number of bytes in flight during a previous RTT; thus, as long as the number of bytes in flight per RTT is unaffected by pacing, Rate-Limited Increase does 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>The security considerations are the same as for other
congestion control methods.  Such methods rely on the receiver
appropriately acknowledging receipt of data.  The ability of an on-path or off-path attacker to influence congestion control depends
upon the security properties of the transport protocol being used.
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 specification of 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="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="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="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="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="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.ietf-ccwg-bbr">
          <front>
            <title>BBR Congestion Control</title>
            <author fullname="Neal Cardwell" initials="N." surname="Cardwell">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Joseph Beshay" initials="J." surname="Beshay">
              <organization>Meta</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <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 [RFC9438], 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 [RFC9293] and QUIC [RFC9000].  This document specifies
   version 3 of the BBR algorithm, BBRv3.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ccwg-bbr-06"/>
        </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 211?>

<section anchor="an-example-using-cwnd-represented-in-bytes">
      <name>An Example Using cwnd Represented in Bytes</name>
      <t>The following informative example is provided for a sender that maintains the cwnd in bytes. 36 packets (or segments in the case of TCP) are sent in this example over four rounds of transmission. This shows the initial growth of the cwnd by a rate-limited sender, followed by a transmission that uses the full available cwnd.</t>
      <t>The initial sender state is:</t>
      <artwork><![CDATA[
  Sender sequence number (seqno) = 0
  MSS = 1000 bytes
  cwnd = 10000 bytes (initcwnd)
  maxFS = 10000 bytes (initcwnd)
  FlightSize (FS) = 0 bytes
  ssthresh is infinity, i.e. the congestion control algorithm is in slow start.
]]></artwork>
      <t>The network path’s bandwidth-delay product is such that, throughout this example, all packets in each round are sent before an ACK is received for the first packet in a round.
One ACK is generated for each 2*MSS received bytes.</t>
      <t>Round 1, the sender has 4000B to send in 4 packets: MSS (QUIC MPS)=1000, cwnd=10000</t>
      <artwork><![CDATA[
  Send  seqno=0; FS=1000; maxFS=10000
  Send  seqno=1000; FS=1000; maxFS=10000
  Send  seqno=2000; FS=2000; maxFS=10000
  Send  seqno=3000; FS=3000; maxFS=10000
]]></artwork>
      <t>Received 2 ACKs; maxFS=10000, if (cwnd&lt;2*maxFS) {cwnd +=ACK’ed}</t>
      <artwork><![CDATA[
  ACK for  2000 ACK’ed=2000 : cwnd+= 2000; cwnd=12000
  ACK for  4000 ACK’ed=2000 : cwnd+= 2000; cwnd=14000
]]></artwork>
      <t>Note: This round maxFS was not increased and cwnd was increased.</t>
      <t>Round 2, the sender has 8000B to send in 8 packets: MSS=1000, cwnd=14000</t>
      <artwork><![CDATA[
  Send  seqno=4000; FS=1000; maxFS=10000
  Send  seqno=5000; FS=2000; maxFS=10000
  Send  seqno=6000; FS=3000; maxFS=10000
  Send  seqno=7000; FS=4000; maxFS=10000
  Send  seqno=8000; FS=5000; maxFS=10000
  Send  seqno=9000; FS=6000; maxFS=10000
  Send seqno=10000; FS=7000; maxFS=10000
  Send seqno=11000; FS=8000; maxFS=10000
]]></artwork>
      <t>Received 4 ACKs; maxFS=10000, if (cwnd&lt;2*maxFS) {cwnd +=ACK’ed}</t>
      <artwork><![CDATA[
  ACK for  6000 ACK’ed=2000 : cwnd+=2000; cwnd=16000
  ACK for  8000 ACK’ed=2000 : cwnd+=2000; cwnd=18000
  ACK for 10000 ACK’ed=2000 : cwnd+=2000; cwnd=20000
  ACK for 12000 ACK’ed=2000 : cwnd+=0; cwnd=20000
]]></artwork>
      <t>Note: This round maxFS was not increased and cwnd was increased to 2*maxFS.</t>
      <t>Round 3, the sender has 4000B to send in 4 packets: MSS=1000, cwnd=20000</t>
      <artwork><![CDATA[
  Send seqno=12000; FS=1000; maxFS=10000
  Send seqno=13000; FS=2000; maxFS=10000
  Send seqno=14000; FS=3000; maxFS=10000
  Send seqno=15000; FS=4000; maxFS=10000
]]></artwork>
      <t>Received 2 ACKs; maxFS=10000, if (cwnd&lt;2*maxFS) {cwnd +=ACK’ed}</t>
      <artwork><![CDATA[
  ACK for 14000 ACK’ed=2000 : cwnd+=0; cwnd=20000
  ACK for 16000 ACK’ed=2000 : cwnd+=0; cwnd=20000
]]></artwork>
      <t>Note: This round maxFS was not increased and cwnd was not increased.</t>
      <t>Round 4, the sender has 20000B to send in 20 packets: MSS=1000, cwnd=20000</t>
      <artwork><![CDATA[
  Send seqno=16000; FS= 1000; maxFS=10000
  Send seqno=17000; FS= 2000; maxFS=10000
  Send seqno=18000; FS= 3000; maxFS=10000
  Send seqno=19000; FS= 4000; maxFS=10000
  Send seqno=20000; FS= 5000; maxFS=10000
  Send seqno=21000; FS= 6000; maxFS=10000
  Send seqno=22000; FS= 7000; maxFS=10000
  Send seqno=23000; FS= 8000; maxFS=10000
  Send seqno=24000; FS= 9000; maxFS=10000
  Send seqno=25000; FS=10000; maxFS=10000
  Send seqno=26000; FS=11000; maxFS=11000
  Send seqno=27000; FS=12000; maxFS=12000
  Send seqno=28000; FS=13000; maxFS=13000
  Send seqno=29000; FS=14000; maxFS=14000
  Send seqno=30000; FS=15000; maxFS=15000
  Send seqno=31000; FS=16000; maxFS=16000
  Send seqno=32000; FS=17000; maxFS=17000
  Send seqno=33000; FS=18000; maxFS=18000
  Send seqno=34000; FS=19000; maxFS=19000
  Send seqno=35000; FS=20000; maxFS=20000
]]></artwork>
      <t>Received 10 ACKs; maxFS=20000, if (cwnd&lt;2*maxFS) {cwnd +=ACK’ed}</t>
      <artwork><![CDATA[
  ACK for 18000 ACK’ed=2000 : cwnd+=2000; cwnd=22000
  ACK for 20000 ACK’ed=2000 : cwnd+=2000; cwnd=24000
  ACK for 22000 ACK’ed=2000 : cwnd+=2000; cwnd=26000
  ACK for 24000 ACK’ed=2000 : cwnd+=2000; cwnd=28000
  ACK for 26000 ACK’ed=2000 : cwnd+=2000; cwnd=30000
  ACK for 28000 ACK’ed=2000 : cwnd+=2000; cwnd=32000
  ACK for 30000 ACK’ed=2000 : cwnd+=2000; cwnd=34000
  ACK for 32000 ACK’ed=2000 : cwnd+=2000; cwnd=36000
  ACK for 34000 ACK’ed=2000 : cwnd+=2000; cwnd=38000
  ACK for 36000 ACK’ed=2000 : cwnd+=2000; cwnd=40000
]]></artwork>
      <t>Note: In this round, maxFS was increased and cwnd was increased to 2*maxFS.</t>
    </section>
    <section anchor="the-state-of-rfcs-and-implementations">
      <name>The state of RFCs and implementations</name>
      <t>RFC-Ed Note: 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"/> suggested there was 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 Rate-Limited Increase, 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 performed 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 Rate-Limited Increase 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 Rate-Limited Increase;
in Slow Start, this limit follows the rule's upper limit, while in Congestion Avoidance, it is more conservative than Rate-Limited Increase.
The specification and the ns-2 and (older) ns-3 implementations are in conflict with Rate-Limited Increase.</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 Rate-Limited Increase;
in Congestion Avoidance, this limit is more conservative than Rate-Limited Increase,
and in Slow Start, it implements the "maxFS" upper limit of Rate-Limited Increase.</t>
        </section>
      </section>
      <section anchor="the-stream-control-transmission-protocol-sctp">
        <name>The Stream Control Transmission Protocol (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 Rate-Limited Increase, 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 Rate-Limited Increase applies to both Slow Start and Congestion Avoidance.</t>
        </section>
      </section>
      <section anchor="the-quic-transport-protocol">
        <name>The QUIC Transport Protocol</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 Rate-Limited Increase, and more conservative.</t>
        </section>
      </section>
      <section anchor="the-datagram-congestion-control-protocol-dccp-ccid2">
        <name>The Datagram Congestion Control Protocol (DCCP) CCID2</name>
        <section anchor="specification-4">
          <name>Specification</name>
          <t><xref section="5.1" sectionFormat="of" target="RFC4341"/> states:</t>
          <ul empty="true">
            <li>
              <t>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>
            </li>
          </ul>
        </section>
        <section anchor="assessment-4">
          <name>Assessment</name>
          <t>A DCCP Congestion Control ID (CCID) specifying 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 when the sender is rate-limited.</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
          </t>
          <ul spacing="normal">
            <li>
              <t>Clarified what we mean with an RTT</t>
            </li>
            <li>
              <t>rephrased example regarding initcwnd, citing RFCs 6928 and 9002</t>
            </li>
            <li>
              <t>removed the too vague rule 1 and made rule 2 (now rule 1) a <bcp14>MUST</bcp14></t>
            </li>
          </ul>
        </li>
        <li>
          <t>draft-ietf-ccwg-ratelimited-increase-02
          </t>
          <ul spacing="normal">
            <li>
              <t>Improved the last sentence of section 3.1.2.</t>
            </li>
            <li>
              <t>Removed a confusing and unnecessary sentence about pacing (as suggested at IETF-123).</t>
            </li>
          </ul>
        </li>
        <li>
          <t>draft-ietf-ccwg-ratelimited-increase-03
          </t>
          <ul spacing="normal">
            <li>
              <t>The editors checked rule 2, and found that rule 1 was sufficient, and did not depend on the ordering of rules in newCWV (RFC7661), hence rule 2 was finally removed.</t>
            </li>
            <li>
              <t>Cleaned language and improved text explaining how this complements RFC7661.</t>
            </li>
            <li>
              <t>Checked/updated definitions.</t>
            </li>
            <li>
              <t>Added an example with cwnd in bytes.</t>
            </li>
          </ul>
        </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:
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
D3lQfdDTXQAA

-->

</rfc>
