<?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.34 (Ruby 3.4.8) -->
<?rfc sortfefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kazuho-ccwg-rapid-start-02" category="std" consensus="true" tocInclude="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title>Rapid Startup of Congestion Control</title>
    <seriesInfo name="Internet-Draft" value="draft-kazuho-ccwg-rapid-start-02"/>
    <author fullname="奥 一穂" asciiFullname="Kazuho Oku">
      <organization>Fastly</organization>
      <address>
        <email>kazuhooku@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="16"/>
    <workgroup>ccwg</workgroup>
    <keyword>internet-draft</keyword>
    <abstract>
      <?line 24?>

<t>This document defines Rapid Start, a congestion-control startup algorithm. It
starts by pacing first full flight over a full RTT, allowing an initial window
up to 2× that of classic paced slow start at a comparable sending rate. It then
grows the window by 3× per RTT until queue buildup is observed, after which it
reverts to classic 2× slow start growth. When congestion is signaled, Rapid
Start smoothly converges the window based on delivered data, avoiding bursts and
underutilization, before handing over to ordinary congestion avoidance.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Congestion Control Working Group Working Group mailing list (ccwg@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ccwg/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/kazuho/draft-kazuho-ccwg-rapid-start"/>.</t>
    </note>
  </front>
  <middle>
    <?line 35?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>New transport connections do not know the available bandwidth or the
bandwidth-delay product (BDP) of the path, so TCP and QUIC start from an initial
window and use an exponential startup (“slow start”;
<xref section="3.1" sectionFormat="of" target="RFC5681"/>, <xref section="7.3.1" sectionFormat="of" target="RFC9002"/>) to probe for the
bottleneck, often paired with pacing to reduce sender-side burstiness. In
practice, paced slow start can still leave performance on the table:</t>
      <ul spacing="normal">
        <li>
          <t>The sender typically starts by pacing packets for half an RTT and then
pausing. When the bottleneck bandwidth is higher than the paced rate, the
bottleneck can remain idle for the other half of each RTT.</t>
        </li>
        <li>
          <t>Even when the bottleneck is being utilized, utilization remains below capacity
until queueing begins.</t>
        </li>
        <li>
          <t>When the initial window is much smaller than the path BDP, many round-trips
are required to ramp up.</t>
        </li>
      </ul>
      <t>These effects are particularly detrimental to short-lived flows, which may only
have a few round-trips to send data and therefore suffer disproportionately from
underutilization during the startup.</t>
      <t>Rapid Start retains the initial-window-based probing model but mitigates these
issues. It paces the first full flight over a full estimated RTT, allowing an
initial window up to 2× that of classic slow start at a comparable pacing rate.
It then grows the congestion window by 3× per round-trip until queue buildup is
observed, after which it reverts to classic 2× growth. When congestion is
signaled, Rapid Start momentarily blocks sending to allow the bottleneck queue
to drain slightly; it then resumes sending while reducing the window gradually
in proportion to delivered and lost bytes. Doing so avoids burstiness as well as
mitigating the risk of the bottleneck buffer becoming empty and the path
becoming underutilized during recovery. After recovery, control is handed over
to ordinary congestion avoidance, such as that of NewReno (<xref target="RFC6582"/>) and
QUIC congestion control (<xref section="7" sectionFormat="of" target="RFC9002"/>).</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>
    <section anchor="algorithm">
      <name>Algorithm</name>
      <t>This section describes the algorithm used by Rapid Start.</t>
      <section anchor="full-rtt-pacing">
        <name>Full-RTT Pacing</name>
        <t>Rapid Start uses a more aggressive growth factor than classic slow start. When
such growth is used, sending the initial congestion window as a short burst can
make the sender observe a bottleneck overflow earlier than it would under evenly
paced transmission. To ensure that Rapid Start observes the path's queueing
behavior rather than sender-side burstiness, the sender <bcp14>SHOULD</bcp14> pace the packets
over a full RTT, using the current RTT estimate, when it first sends more data
than classic slow start with pacing would permit.</t>
        <t>By pacing the packets over a full RTT, Rapid Start can use an initial window up
to 2× that of classic slow start with pacing; spreading the transmission over a
full RTT (rather than half an RTT) yields a comparable pacing rate. If this more
aggressive transmission overshoots and congestion is signaled, Rapid Start
compensates by reducing the congestion window as specified in
<xref target="congestion-handling"/>.</t>
        <t>Careful Resume <xref target="CAREFUL-RESUME"/> provides a
compatible way to realize these recommendations: it can defer entry to its
Unvalidated Phase until the sender first sends more data than normal congestion
control would permit, and it requires packets sent in that phase to be paced
based on the current RTT.</t>
      </section>
      <section anchor="increasing-the-congestion-window">
        <name>Increasing the Congestion Window</name>
        <t>Like slow start, Rapid Start increases the congestion window as packets are
acknowledged. The difference is that when the path appears not to be building a
queue, the sender uses a more aggressive startup increase.</t>
        <t>The sender determines if the path is building a queue by comparing the recent
minimum RTT (<tt>rtt_floor</tt>) against a calculated threshold
(<tt>queue_buildup_thresh</tt>).</t>
        <t>Let:</t>
        <ul spacing="normal">
          <li>
            <t><tt>min_rtt</tt> be the minimum RTT for the connection so far;</t>
          </li>
          <li>
            <t><tt>rtt_floor</tt> be the smallest RTT over a recent observation window of
 approximately one round-trip. For example, an implementation might use a
 sliding time window of length <tt>min_rtt</tt>, or simply use <tt>currentRoundMinRTT</tt>
 tracked for sequence-based rounds in HyStart++ <xref target="RFC9406"/>; and</t>
          </li>
          <li>
            <t><tt>queue_buildup_thresh</tt> be <tt>min(min_rtt + 4 ms, min_rtt * 1.10)</tt>, where the
 additive term (+4 ms) and the multiplicative term (×1.10) are <bcp14>RECOMMENDED</bcp14>
 defaults.</t>
          </li>
        </ul>
        <t>If <tt>rtt_floor</tt> is no greater than <tt>queue_buildup_thresh</tt>, the sender increases
the congestion window (cwnd) by 2 bytes for every byte that is newly
acknowledged, which results in a 3× growth of cwnd per round-trip.</t>
        <t>If <tt>rtt_floor</tt> is greater than <tt>queue_buildup_thresh</tt>, the sender <bcp14>SHOULD</bcp14>
increase the congestion window as in classic slow start; i.e., by 1 byte for
every byte that is newly acknowledged, which results in a 2× growth of cwnd per
round-trip.</t>
        <t>The construction of <tt>queue_buildup_thresh</tt> follows HyStart++'s bounded
RTT-inflation approach, but uses a tighter <bcp14>RECOMMENDED</bcp14> threshold because the
threshold is used to enable a more aggressive startup increase when queue
buildup is unlikely, whereas HyStart++ uses RTT inflation to reduce growth by
exiting slow start. Consequently, HyStart++ can be used in conjunction with
Rapid Start.</t>
      </section>
      <section anchor="congestion-handling">
        <name>Congestion Handling</name>
        <t>When Rapid Start observes the first packet loss or an explicit congestion signal
(e.g., ECN-CE), the sender enters the first recovery period (TCP:
<xref section="3.2" sectionFormat="of" target="RFC5681"/>; QUIC: <xref section="7.3.2" sectionFormat="of" target="RFC9002"/>), but adjusts the
congestion window in an alternative manner to smoothly converge after the more
aggressive startup. Specifically, it briefly pauses sending to allow the
bottleneck queue to drain slightly, then gradually reduces the congestion window
during recovery.</t>
        <t>When entering the recovery period, the sender slightly scales down the current
congestion window using a silence factor. As a result of this reduction,
sending is momentarily blocked until bytes-in-flight is no greater than the
reduced congestion window, allowing the bottleneck queue to be drained by a
controlled amount.</t>
        <sourcecode type="pseudocode"><![CDATA[
cwnd *= silence_factor
]]></sourcecode>
        <t>Then, for each ACK that results in an update of acknowledged or lost bytes while
in the first recovery period, the sender reduces the congestion window in
proportion to newly acknowledged or newly declared lost bytes:</t>
        <sourcecode type="pseudocode"><![CDATA[
cwnd -= ack_factor * bytes_newly_acked
cwnd -= loss_factor * bytes_newly_lost
]]></sourcecode>
        <t>This approach is designed so that, upon exiting the recovery period, the
congestion window becomes the full BDP (the sum of the idle BDP and the
bottleneck queue size) multiplied by <tt>beta</tt>, assuming that packets are dropped
only due to bottleneck queue overflow; see <xref target="derivation"/>. At the same time, it
limits the silence period so that no more is drained from the bottleneck queue
than under congestion avoidance, reducing the risk of underutilizing the link
even when the congestion window must be reduced significantly to compensate for
the aggressive ramp-up. The gradual reduction based on newly acknowledged and
newly declared lost bytes also avoids burstiness when transmission resumes.</t>
        <t>To avoid overly sharp reduction caused by losses other than those due to
bottleneck queue overflow, the sender <bcp14>SHOULD NOT</bcp14> reduce the congestion window
below</t>
        <sourcecode type="pseudocode"><![CDATA[
pre_recovery_cwnd * beta / 3
]]></sourcecode>
        <t>where <tt>pre_recovery_cwnd</tt> is the congestion window immediately before entering
the recovery period. This lower bound corresponds to the target window size
under Rapid Start's most aggressive growth factor (3×), for which the
pre-recovery congestion window is three times the full BDP.</t>
        <t>Separately, the sender <bcp14>MUST NOT</bcp14> reduce the congestion window below the minima
specified by <xref target="RFC5681"/> or <xref target="RFC9002"/>.</t>
        <t>The sender <bcp14>MAY</bcp14> stop reducing the congestion window once it reaches the initial
window multiplied by the window decrease factor. This allows the sender to keep
the congestion window at least as large as classic slow start on paths with very
small BDPs when transitioning to congestion avoidance.</t>
        <t>Upon exiting the first recovery period, Rapid Start ends; thereafter, the
congestion window is governed by the underlying congestion controller's ordinary
rules.</t>
        <section anchor="reduction-factors">
          <name>Reduction Factors</name>
          <t>Assuming that losses are caused only by overflow of the bottleneck queue, the
recovery algorithm described in <xref target="congestion-handling"/> requires the following:</t>
          <ul spacing="normal">
            <li>
              <t>The post-recovery congestion window becomes the full BDP multiplied by <tt>beta</tt>,
independent of the loss ratio.</t>
            </li>
            <li>
              <t>The silence period drains at most <tt>1 - beta</tt> times the full BDP from the
bottleneck queue, matching congestion avoidance.</t>
            </li>
          </ul>
          <t>These requirements make Rapid Start match congestion avoidance in the
post-recovery congestion window and in the maximum amount drained from the
bottleneck queue.</t>
          <t>The first requirement implies:</t>
          <sourcecode type="pseudocode"><![CDATA[
loss_factor = silence_factor = beta + ack_factor
]]></sourcecode>
          <t>Taken together, these requirements yield:</t>
          <sourcecode type="pseudocode"><![CDATA[
K               = 2/3
silence_factor  = beta + K * (1 - beta)
ack_factor      = K * (1 - beta)
loss_factor     = beta + K * (1 - beta)
]]></sourcecode>
          <t>When <tt>beta</tt> is 0.5, the values are:</t>
          <sourcecode type="pseudocode"><![CDATA[
silence_factor  = 5/6
ack_factor      = 1/3
loss_factor     = 5/6
]]></sourcecode>
          <t>When <tt>beta</tt> is 0.7 (i.e., that of CUBIC <xref target="RFC9438"/>), the values are:</t>
          <sourcecode type="pseudocode"><![CDATA[
silence_factor  = 9/10
ack_factor      = 1/5
loss_factor     = 9/10
]]></sourcecode>
          <t><xref target="derivation"/> derives these formulas.</t>
        </section>
        <section anchor="interaction-with-ecn">
          <name>Interaction with ECN</name>
          <t><xref target="reduction-factors"/> provides the rationale for the recovery behavior in terms
of the full BDP (which, under loss-based detection, is estimated by probing
until the bottleneck queue overflows and packets are dropped). However, when
congestion happens on an ECN-capable path, it can be reported via CE marks
without requiring packet loss. If Rapid Start enters a recovery period due to a
CE mark but no packets are lost, then it exits recovery with a congestion window
that is beta times its size immediately before entering recovery.</t>
          <t>If the growth factor in the last round-trip was 3×, the congestion window upon
entering recovery can be larger than with 2×, and therefore the congestion
window at the end of recovery (beta times the entry size) can also be larger.
This makes the next recovery period start sooner, but otherwise does not change
the flow's behavior under ECN-signaled congestion pressure.</t>
          <t>The other concern is buffer overflow before CE feedback is observed. Under 3×
growth, the sender might build up a bottleneck queue that is twice as large as
under 2× growth. However, even in the extreme case where a network’s buffering
margin is tightly provisioned for a target maximum RTT under conventional slow
start (i.e., 2× growth), this larger queue buildup under 3× growth simply halves
the loss-free RTT range: only connections with RTTs above half of that target
maximum would be affected. In practice, networks do not generally provision
buffers that tightly; with ECN, they can signal congestion without relying on
drop, so leaving extra buffering margin typically has little downside. For these
reasons, this overflow risk is limited in practice.</t>
          <t>On loss-based paths, a more aggressive startup increases the likelihood of
overflowing the bottleneck buffer and triggering packet drops, which delays
delivery to the application due to retransmission. In contrast, on ECN-capable
paths, congestion is typically signaled without relying on packet drops, so this
loss-induced delivery delay mode is largely avoided. The benefits of faster
growth of the congestion window are thus more reliable.</t>
        </section>
      </section>
    </section>
    <section anchor="considerations">
      <name>Considerations</name>
      <t>Rapid Start's startup and recovery behavior is driven by feedback from ACKs and
loss detection. In practice, packet transmission and ACK reception can be
affected by scheduling delays and buffering within the host network stack and
along the path, which can make observed RTT signals noisier and reduce the
smoothness of the algorithm's response compared to an idealized per-packet
model.</t>
      <section anchor="considerations-for-tcp">
        <name>Considerations for TCP</name>
        <t>Rapid Start's recovery behavior is based on the QUIC-style model of tracking
newly delivered and newly declared lost bytes as ACKs are processed. In QUIC,
these quantities can be computed directly from acknowledged packet ranges and
loss declarations over packet numbers. TCP implementations vary in how delivery
and loss information is represented and exposed to congestion control; loss may
be declared in multiple waves as the SACK scoreboard evolves, and accurately
accounting newly declared lost bytes can be implementation-dependent (e.g.,
avoiding double-counting across reordering and retransmission heuristics);
RTO-driven recovery can further reduce the timeliness and fidelity of these
signals. As a result, TCP implementations might not be able to produce a
reliable estimate of delivered and newly declared lost bytes during the first
recovery period, especially when loss is high.</t>
        <t>Therefore, it is up to each TCP implementation to determine whether and how the
required delivered/lost byte accounting can be approximated robustly.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6582">
          <front>
            <title>The NewReno Modification to TCP's Fast Recovery Algorithm</title>
            <author fullname="T. Henderson" initials="T." surname="Henderson"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="A. Gurtov" initials="A." surname="Gurtov"/>
            <author fullname="Y. Nishida" initials="Y." surname="Nishida"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>RFC 5681 documents the following four intertwined TCP congestion control algorithms: slow start, congestion avoidance, fast retransmit, and fast recovery. RFC 5681 explicitly allows certain modifications of these algorithms, including modifications that use the TCP Selective Acknowledgment (SACK) option (RFC 2883), and modifications that respond to "partial acknowledgments" (ACKs that cover new data, but not all the data outstanding when loss was detected) in the absence of SACK. This document describes a specific algorithm for responding to partial acknowledgments, referred to as "NewReno". This response to partial acknowledgments was first proposed by Janey Hoe. This document obsoletes RFC 3782. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6582"/>
          <seriesInfo name="DOI" value="10.17487/RFC6582"/>
        </reference>
        <reference anchor="CAREFUL-RESUME">
          <front>
            <title>Convergence of Congestion Control from Retained State</title>
            <author fullname="Nicolas Kuhn" initials="N." surname="Kuhn">
              <organization>Thales Alenia Space</organization>
            </author>
            <author fullname="Emile Stephan" initials="E." surname="Stephan">
              <organization>Orange</organization>
            </author>
            <author fullname="Gorry Fairhurst" initials="G." surname="Fairhurst">
              <organization>University of Aberdeen</organization>
            </author>
            <author fullname="Raffaello Secchi" initials="R." surname="Secchi">
              <organization>University of Aberdeen</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="1" month="October" year="2025"/>
            <abstract>
              <t>   This document specifies a cautious method for Internet transports
   that enables fast startup of congestion control for a wide range of
   connections, known as "Careful Resume".  It reuses a set of computed
   congestion control parameters that are based on previously observed
   path characteristics between the same pair of transport endpoints.
   These parameters are saved, allowing them to be later used to modify
   the congestion control behaviour of a subsequent connection.

   It describes assumptions and defines requirements for how a sender
   utilises these parameters to provide opportunities for a connection
   to more rapidly get up to speed and rapidly utilise available
   capacity.  It discusses how use of this method impacts the capacity
   at a shared network bottleneck and the safe response that is needed
   after any indication that the new rate is inappropriate.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-careful-resume-24"/>
        </reference>
        <reference anchor="RFC9406">
          <front>
            <title>HyStart++: Modified Slow Start for TCP</title>
            <author fullname="P. Balasubramanian" initials="P." surname="Balasubramanian"/>
            <author fullname="Y. Huang" initials="Y." surname="Huang"/>
            <author fullname="M. Olson" initials="M." surname="Olson"/>
            <date month="May" year="2023"/>
            <abstract>
              <t>This document describes HyStart++, a simple modification to the slow start phase of congestion control algorithms. Slow start can overshoot the ideal send rate in many cases, causing high packet loss and poor performance. HyStart++ uses increase in round-trip delay as a heuristic to find an exit point before possible overshoot. It also adds a mitigation to prevent jitter from causing premature slow start exit.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9406"/>
          <seriesInfo name="DOI" value="10.17487/RFC9406"/>
        </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="RFC9937">
          <front>
            <title>Proportional Rate Reduction (PRR)</title>
            <author fullname="M. Mathis" initials="M." surname="Mathis"/>
            <author fullname="N. Cardwell" initials="N." surname="Cardwell"/>
            <author fullname="Y. Cheng" initials="Y." surname="Cheng"/>
            <author fullname="N. Dukkipati" initials="N." surname="Dukkipati"/>
            <date month="December" year="2025"/>
            <abstract>
              <t>This document specifies a Standards Track version of the Proportional Rate Reduction (PRR) algorithm that obsoletes the Experimental version described in RFC 6937. PRR regulates the amount of data sent by TCP or other transport protocols during fast recovery. PRR accurately regulates the actual flight size through recovery such that at the end of recovery it will be as close as possible to the slow start threshold (ssthresh), as determined by the congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9937"/>
          <seriesInfo name="DOI" value="10.17487/RFC9937"/>
        </reference>
      </references>
    </references>
    <?line 352?>

<section anchor="derivation">
      <name>Deriving the Reduction Factors</name>
      <t>This appendix derives the reduction factors specified in <xref target="reduction-factors"/>
and used by the recovery algorithm in <xref target="congestion-handling"/>.</t>
      <t>For the derivation, consider a tail-drop model in which packets are lost only
due to overflow of the bottleneck queue, and assume that the sender is
congestion-window-limited when entering recovery. Let <tt>full_bdp</tt> be the path's
full bandwidth-delay product. Let <tt>bytes_acked</tt> and <tt>bytes_lost</tt> denote the
number of bytes newly acknowledged and newly declared lost during a recovery
period.</t>
      <t>Immediately before entering the recovery period, the congestion window equals
the bytes in flight. By the end of the recovery period, those bytes are either
newly acknowledged or newly declared lost. Therefore:</t>
      <sourcecode type="pseudocode"><![CDATA[
pre_recovery_cwnd = bytes_acked + bytes_lost
]]></sourcecode>
      <t>The congestion window after processing all acknowledgements and losses in the
recovery period is:</t>
      <sourcecode type="pseudocode"><![CDATA[
post_recovery_cwnd = pre_recovery_cwnd * silence_factor
                     - bytes_acked * ack_factor
                     - bytes_lost * loss_factor
]]></sourcecode>
      <t>The first requirement of <xref target="reduction-factors"/> is that the post-recovery
congestion window becomes <tt>full_bdp * beta</tt>, independent of the loss ratio.
Under the derivation assumptions, the bytes newly acknowledged during recovery
equal one full BDP, i.e., <tt>bytes_acked = full_bdp</tt>. Substituting these relations
into the expression for <tt>post_recovery_cwnd</tt> gives:</t>
      <sourcecode type="pseudocode"><![CDATA[
full_bdp * beta
    = pre_recovery_cwnd * silence_factor
        - bytes_acked * ack_factor
        - bytes_lost * loss_factor
    = bytes_acked * (silence_factor - ack_factor)
        + bytes_lost * (silence_factor - loss_factor)
]]></sourcecode>
      <t>For this expression to equal <tt>full_bdp * beta</tt> independent of the loss ratio,
the coefficient of <tt>bytes_lost</tt> must be zero, and the coefficient of
<tt>bytes_acked</tt> must equal <tt>beta</tt>. Therefore:</t>
      <sourcecode type="pseudocode"><![CDATA[
silence_factor - loss_factor = 0
silence_factor - ack_factor = beta
]]></sourcecode>
      <t>or equivalently:</t>
      <sourcecode type="pseudocode"><![CDATA[
loss_factor = silence_factor = beta + ack_factor
]]></sourcecode>
      <t>To derive factors satisfying the second requirement — that the silence period
drains at most <tt>1 - beta</tt> times the full BDP from the bottleneck queue, matching
congestion avoidance — it is sufficient to consider the case that yields the
longest silence period. In the recovery algorithm of <xref target="congestion-handling"/>,
the sender resumes transmission when the congestion window catches up with bytes
in flight. Under this recovery rule, the silence period becomes longer as the
loss ratio increases. Because Rapid Start uses at most a growth factor of 3, the
largest possible loss ratio is <tt>2/3</tt>, at which point the silence period is the
longest.</t>
      <t>Because the loss ratio is <tt>2/3</tt>, the congestion window immediately before
entering recovery is three times the full BDP:</t>
      <sourcecode type="pseudocode"><![CDATA[
pre_recovery_cwnd = 3 * full_bdp
]]></sourcecode>
      <t>Let <tt>x</tt> be the number of newly acknowledged bytes, normalized by the full BDP,
measured from the start of the recovery period. Because two bytes are newly
declared lost for every byte that is newly acknowledged, after <tt>x * full_bdp</tt>
bytes are acknowledged, bytes in flight is:</t>
      <sourcecode type="pseudocode"><![CDATA[
bytes_in_flight = 3 * (1 - x) * full_bdp
]]></sourcecode>
      <t>Over the same interval, the congestion window is:</t>
      <sourcecode type="pseudocode"><![CDATA[
cwnd = 3 * full_bdp * silence_factor
       - x * full_bdp * ack_factor
       - 2 * x * full_bdp * loss_factor
]]></sourcecode>
      <t>The sender resumes transmission once the congestion window catches up with bytes
in flight. Satisfying the second requirement is therefore equivalent to
requiring that transmission resumes when:</t>
      <sourcecode type="pseudocode"><![CDATA[
x = 1 - beta
]]></sourcecode>
      <t>At that point, <tt>cwnd = bytes_in_flight</tt>, therefore:</t>
      <sourcecode type="pseudocode"><![CDATA[
3 * (1 - x) * full_bdp
    = 3 * full_bdp * silence_factor
        - x * full_bdp * ack_factor
        - 2 * x * full_bdp * loss_factor
]]></sourcecode>
      <t>Dividing by <tt>full_bdp</tt> and substituting <tt>x = 1 - beta</tt>:</t>
      <sourcecode type="pseudocode"><![CDATA[
3 * beta
    = 3 * silence_factor
        - (1 - beta) * ack_factor
        - 2 * (1 - beta) * loss_factor
]]></sourcecode>
      <t>Substituting:</t>
      <sourcecode type="pseudocode"><![CDATA[
loss_factor = silence_factor = beta + ack_factor
]]></sourcecode>
      <t>into the previous equation yields:</t>
      <sourcecode type="pseudocode"><![CDATA[
3 * beta
    = 3 * (beta + ack_factor)
       - (1 - beta) * ack_factor
       - 2 * (1 - beta) * (beta + ack_factor)
]]></sourcecode>
      <t>which simplifies to:</t>
      <sourcecode type="pseudocode"><![CDATA[
ack_factor = (2 / 3) * (1 - beta)
]]></sourcecode>
      <t>Equivalently, using a constant <tt>K</tt>, the resulting formulas are:</t>
      <sourcecode type="pseudocode"><![CDATA[
K               = 2/3
silence_factor  = beta + K * (1 - beta)
ack_factor      = K * (1 - beta)
loss_factor     = beta + K * (1 - beta)
]]></sourcecode>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Rapid Start combines three ideas: (1) pacing the first full flight over a full
RTT, (2) a more aggressive startup increase when queue buildup is not observed,
and (3) a recovery behavior that smoothly converges the congestion window.</t>
      <t>Careful Resume <xref target="CAREFUL-RESUME"/> provides a predecessor for (1): it paces the
first flight over a full RTT, based on a current RTT estimate, to avoid bursts
when (re)starting. Rapid Start applies the same full-RTT pacing principle when
starting.</t>
      <t>"SUSS: Improving TCP Performance by Speeding Up Slow-Start" (Mahdi Arghavani et
al.) advocates a similar approach for (2), built on top of HyStart that
increases the congestion window by up to 4× per round-trip based on ACK
dispersal and RTT.</t>
      <t>Compared to SUSS, Rapid Start bases the (2) decision solely on RTT-based queue
buildup detection, making it easier to integrate with other mechanisms and
specifications such as HyStart++ <xref target="RFC9406"/>.</t>
      <t>For (3), Proportional Rate Reduction <xref target="RFC9937"/> is related work in that it
regulates sending during recovery to avoid bursts and underutilization. Rapid
Start differs by defining a startup-specific recovery behavior, allowing the
congestion window to smoothly converge before handing over to congestion
avoidance.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81c3Y4bR3a+r6eoyBeesUhaM/LvaL3OeCTDA0mWohlhYSwW
miK7SPZOs5vb1T0UV5Bh7DMEWARIgNzsRd4g19k3MRLkNXK+c6q6q9nNkbzY
i/jGGrK76tT5/c5PcTweqyqtMnui77ww6zTRF5Upq3qti7k+K/KFdVVa5Phn
VRbZHTUzlV0U5fZEuypRSTHLzYpeTkozr8bX5o/1shjPZpvFuMRqY4fVxveO
1WZxovG5Stflia7K2lXH9+59Sd9c2+2mKJMTneaVLXNbjXkxRa/mySuTFTmt
v7VOrdMT/duqmI20K8pqbueO/rVdlfSP3ylTV8uiPFF6rDT9N6+zjCnjv7Q+
OdH/85e/6P/+z5/+9z/+5D8zbpbSko+ZaP3suubPi5Io/da4Ktvy33Zl0uxE
y9GK6/ofF/hgMitWSuVFuTJVekPbqDSfR39NJhOlxuOxNlNXlWZWKXW5TJ0m
htUrm1c6sfM0t05HTB9po2cNy8czYbl2XiAmI76n1XI10efMnbJyerrVazNL
84Wep6Wr+Nx6nqWLZaWLG1vSkvzRi8tLWj7Lig2eNTkxO61Sk2n6Oyk2itav
Cn381z/ramkqCH+WGefSGZa3iXb0plCi6WvQuVqb0kwzq53NEyxakmaANFrB
5mpRFhuHf/odQOl9Wn5NNBExus6rNNN/qG1t9bROs4QoIP4UU2fLG5sQsXPS
Br1ZprOlTitVWjoNHZioDJSB2ogu7FgtJ/o3tH3ER6zq0kVuMqzK7FbMbu1W
RVEtsy0epsXp+Q69xtG56f3EZiTTkv5ITGWIsJsi5QNPa+K4I2Ymqs4TW9Z0
ovSPBpuO9NSSOli9NMIclgXRToqe5qbcxgTygiafWVIZ1plVmiSZVeoDfQ4V
SOoZnlPqe7shyzG5W5P+Y4Xc8jdQK50Xlb7OiXCcwdyQjrJ0pkTAJk2qJW2N
r1TzwZgOZkh9ZAN98M3D54cQPN5fm2oJM9OXZ89xQP1PL8/PPJ/nZbGKNEh5
fuGp2ll8Y1+vyWhz1q+gvQc///SvrbB+/unfHqg3by6Efn1/coSd/+HFt2ef
fvbF0du3I91++fkk+vrLe/eO3749BCuJ8KnV83CsoiIvRgy5HtGzFanA2qQQ
2oZMJtgIvUUf1TNRWluOXZpYkSOM0ZH65moNc01ndtRX/Rkdjh4le8qsubFQ
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
3csqA2WgwatJe35vLBpqiaYX/w+SE3rF9k8AAA==

-->

</rfc>
