<?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.30 (Ruby 3.4.8) -->
<?rfc sortfefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kazuho-ccwg-rapid-start-01" category="std" consensus="true" tocInclude="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>Rapid Startup of Congestion Control</title>
    <seriesInfo name="Internet-Draft" value="draft-kazuho-ccwg-rapid-start-01"/>
    <author fullname="奥 一穂" asciiFullname="Kazuho Oku">
      <organization>Fastly</organization>
      <address>
        <email>kazuhooku@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="23"/>
    <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 the transmission of the initial congestion window 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 36?>

<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 initial congestion window over the 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="sending-in-the-first-round-trip">
        <name>Sending in the First Round Trip</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 sending the first window's
worth of data.</t>
        <t>When pacing over a full RTT, Rapid Start can use an initial window up to 2× that
of classic slow start with pacing, because spreading the transmission over a
full RTT (rather than half an RTT) yields a comparable pacing rate.</t>
        <t>A sender using Careful Resume <xref target="CAREFUL-RESUME"/>
satisfies these recommendations, because it requires that all packets sent in
its Unvalidated Phase be paced based on <tt>current_rtt</tt>, regardless of prior
knowledge.</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.</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 ensures that, upon exiting the recovery period, the congestion
window becomes a fraction of the full BDP (the sum of the idle BDP and the
bottleneck queue size). At the same time, it keeps the silence period short
enough that the sender is likely to resume transmission before the bottleneck is
fully drained, even when the congestion window must be reduced significantly to
compensate for the aggressive ramp-up.</t>
        <t>To avoid overly sharp reduction caused by losses other than tail drops, the
sender <bcp14>SHOULD NOT</bcp14> reduce the congestion window below</t>
        <sourcecode type="pseudocode"><![CDATA[
pre_recovery_cwnd * (silence_factor - 1/3 * ack_factor - 2/3 * loss_factor)
]]></sourcecode>
        <t>where <tt>pre_recovery_cwnd</tt> is the congestion window immediately before entering
the recovery period. The coefficients are chosen to be consistent with the
tail-drop model, which yields a loss ratio of <tt>1 - 1 / G</tt> where <tt>G</tt> is the
growth factor, using <tt>G = 3</tt> (the largest growth factor used by Rapid Start).
With the reduction factors defined in <xref target="reduction-factors"/>, this lower bound
simplifies to <tt>pre_recovery_cwnd * beta / 3</tt>.</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>Deriving the Reduction Factors</name>
          <t>The reduction factors are constants derived from the multiplicative window
decrease factor (denoted beta) used by the congestion avoidance algorithm. They
are chosen so that the recovery behavior described in <xref target="congestion-handling"/>
has the following properties:</t>
          <ul spacing="normal">
            <li>
              <t>When the loss ratio is 2/3, the duration of the silence period is <tt>1 - beta</tt>
as a fraction of the full BDP, the same as during the congestion avoidance
phase.</t>
            </li>
            <li>
              <t>Upon exiting the recovery period, the congestion window becomes the full BDP
multiplied by beta, the same as during the congestion avoidance phase. This
holds independent of the loss ratio during the recovery period, unless limited
by the lower bounds on the congestion window.</t>
            </li>
          </ul>
          <t>Using a single constant <tt>K</tt> to distribute the window reduction across the
send-blocking step and the per-ACK reductions, the factors are calculated as:</t>
          <sourcecode type="pseudocode"><![CDATA[
K               = 11/18
silence_factor  = beta + K * (1 - beta)
ack_factor      = K * (1 - beta)
loss_factor     = beta + K * (1 - beta)
]]></sourcecode>
          <t>Specifically, when <tt>beta</tt> is 0.5, the values are:</t>
          <sourcecode type="pseudocode"><![CDATA[
silence_factor  = 29/36
ack_factor      = 11/36
loss_factor     = 29/36
]]></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  = 53/60
ack_factor      = 11/60
loss_factor     = 53/60
]]></sourcecode>
        </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 339?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Rapid Start combines three ideas: (1) pacing the initial window 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 an
initial window 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 during
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:
H4sIAAAAAAAAA6Vb3W4cR3a+r6eoyBcm7ZmxSMm2RK3WoSnJJqy/kBQMY7EQ
a6ZrZmrZ0z3b1U1qTNAw9iWMAAmQm73IG+Q6fhMjQV4j5zunqrt6ZijbiW7E
6Z+q83++c+r0cDhUtatze6DvnJily/Rpbaq6Wepyqo/KYmZ97coCf9ZVmd9R
E1PbWVmtDrSvM5WVk8Is6OWsMtN6eGG+b+blcDK5mg0rrDb0WG14d09dzQ40
riu3rA50XTW+3r979+HdfXVhV1dllR1oV9S2Kmw95MUUvVpkb01eFrT+ynq1
dAf6T3U5GWhfVvXUTj39tVpU9MeflWnqeVkdKD1Umv5NmzxnyviX1gcH+r//
/nf9X//x4//8+9/CNeMnjpb8honWry4avl5WROkz4+t8xb/twrj8QAtr5UXz
jzNcGE3KhVJFWS1M7S5pG+WKafJrNBopNRwOtRn7ujKTWqmzufOaBNYsbFHr
zE5dYb1OhD7QRk9akQ8nInLtg0JMTnJ39Xwx0scsnar2erzSSzNxxUzXc0ti
NYVfOO+hMlIgrrnC1c7kycr6yhVZeaXLS1vRlhCVOjk7o+3zvLzCWqZoXwvP
0v51qfd//onWNDXWnuSG9plge5tpT28KpZpuG0XiWZrKjHOrvS0yLFqR5YB0
UFXoWVVeeSYw7ECc3KPll0QTEaObona5/mtjG6vGjcszooDkV469rS5tRsRO
yVr01dxN5trVurLEDQmEqIyUgdqELuxYz0fqW2yfSINW9W5WmByrJurQflGW
9Txf4WFanJ7v0Ws88V0WKrM56byiH5mpDRF2WTpmeNxUnigiKyZuMls1xJH7
3mDTgR5bMher50aEw7qoS0WO4ApTrVICeUFTTCyZFNvUwmVZbpX6QB/DRLJm
gueUemmvxASW5B9YobB8B2ani7LWFwURDh7MJdkwa2dMBFy5rJ6T4eOWai8M
iTFD5iUb6J0vn7zejUa1NPUcbqjPjl4zg//05vgoyHlalYvEglSQF4vBW9yx
75bk1AXbV7TunV9+/JdOWb/8+K+P1PX1qdCv7432sPM/nDw7+vSzB3s3NwPd
3fx8lNx+ePfu/s3NLsyACB9bPY1slTVFORLIxYCerckElsZBaVfkUq0PlWRH
xK0Yra2G3mVW9Ahn9WS+hVrCnd3EDjZNf0LM0aN5rnNrLi2MmYMC6Y4sRVwU
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

-->

</rfc>
