<?xml version="1.0" encoding="us-ascii"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.13 (Ruby 2.6.8) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC5681 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5681.xml">
<!ENTITY RFC7942 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml">
<!ENTITY RFC8126 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
<!ENTITY SELF "[RFCXXXX]">
]>


<rfc ipr="trust200902" docName="draft-chung-ccwg-search-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="search">SEARCH -- a New Slow Start Algorithm for TCP and QUIC</title>

    <author initials="J." surname="Chung" fullname="Jae Won Chung">
      <organization abbrev="viasat">Viasat Inc</organization>
      <address>
        <postal>
          <street>300 Nickerson Rd,</street>
          <city>Marlborough, MA</city>
          <code>1002</code>
          <country>United States of America</country>
        </postal>
        <email>jaewon.chung@viasat.com</email>
      </address>
    </author>
    <author initials="M." surname="Kachooei" fullname="Maryam Ataei Kachooei">
      <organization abbrev="WPI">Worcester Polytechnic Institute</organization>
      <address>
        <postal>
          <street>100 Institute Rd</street>
          <city>Worcester, MA</city>
          <code>01609</code>
          <country>United States of America</country>
        </postal>
        <email>mataeikachooei@wpi.edu</email>
      </address>
    </author>
    <author initials="F." surname="Li" fullname="Feng Li">
      <organization abbrev="viasat">Viasat Inc</organization>
      <address>
        <postal>
          <street>300 Nickerson Rd,</street>
          <city>Marlborough, MA</city>
          <code>1002</code>
          <country>United States of America</country>
        </postal>
        <email>feng.li@viasat.com</email>
      </address>
    </author>
    <author initials="M." surname="Claypool" fullname="Mark Claypool">
      <organization abbrev="WPI">Worcester Polytechnic Institute</organization>
      <address>
        <postal>
          <street>100 Institute Rd</street>
          <city>Worcester, MA</city>
          <code>01609</code>
          <country>United States of America</country>
        </postal>
        <email>claypool@cs.wpi.edu</email>
      </address>
    </author>

    <date year="2024" month="July" day="21"/>

    <area>Web and Internet Transport</area>
    <workgroup>ccwg</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 158?>

<t>TCP slow start is designed to ramp up to the network congestion point
quickly, doubling the congestion window each round-trip time until the
congestion point is reached, whereupon TCP exits the slow start phase.
Unfortunately, the default Linux TCP slow start implementation -- TCP
Cubic with HyStart -- can cause premature exit from slow
start, especially over wireless links, degrading link utilization.
However, without HyStart, TCP exits slow start too late, causing
unnecessary packet loss.  To improve TCP slow start performance, this
document proposes using the Slow start Exit At Right CHokepoint
(SEARCH) algorithm where the TCP sender determines the
congestion point based on acknowledged deliveries -- specifically, the
sender computes the delivered bytes compared to the expected delivered
bytes, smoothed to account for link latency variation and normalized
to accommodate link capacities, and exits slow start if the delivered
bytes are lower than expected.  We implemented SEARCH as a Linux
kernel v5.16 module and evaluated it over WiFi, 4G/LTE, and low earth
orbit (LEO) and geosynchronous (GEO) satellite links.  Analysis of the
results show that the SEARCH reliably exits from slow start after the
congestion point is reached but before inducing packet loss.</t>



    </abstract>



  </front>

  <middle>


<?line 180?>

<section anchor="problems"><name>Introduction</name>

<t>The TCP slow start mechanism starts sending data rates cautiously yet
rapidly increases towards the congestion point, approximately doubling
the congestion window (cwnd) each round-trip time (RTT).
Unfortunately, default implementations of TCP slow start, such as TCP
Cubic with HyStart <xref target="HYSTART"/> in Linux, often result in a premature
exit from the slow start phase, or, if HyStart is disabled, excessive
packet loss upon overshooting the congestion point.  Exiting slow
start too early curtails TCP&#39;s ability to capitalize on unused link
capacity, a setback that is particularly pronounced in high
bandwidth-delay product (BDP) networks (e.g., GEO satellites) where
the time to grow the congestion window to the congestion point is
substantial.  Conversely, exiting slow start too late overshoots the
link&#39;s capacity, inducing unnecessary congestion and packet loss,
particularly problematic for links with large (bloated) bottleneck
queues.</t>

<t>To determine the slow start exit point, we propose that the TCP sender
monitor the acknowledged delivered bytes in an RTT and compare that to
what is expected based on the bytes acknowledged as delivered during
the previous RTT.  Large differences between delivered bytes and
expected delivered bytes is then the indicator that slow start has
reached the network congestion point and the slow start phase should
exit.  We call our approach the Slow start Exit At Right CHokepoint
(SEARCH) algorithm.  SEARCH is based on the principle that during slow
start, the congestion window expands by one maximum segment size (MSS)
for each acknowledgment (ACK) received, prompting the transmission of
two segments and effectively doubling the sending rate each RTT.
However, when the network surpasses the congestion point, the delivery
rate does not double as expected, signaling that the slow start phase
should exit.  Specifically, the current delivered bytes should be
twice the delivered bytes one RTT ago.  To accommodate links with a
wide range in capacities, SEARCH normalizes the difference based on
the current delivered bytes and since link latencies can vary over
time independently of data rates (especially for wireless links),
SEARCH smooths the measured delivered bytes over several RTTs.</t>

<t>This document describes the current version of the SEARCH algorithm,
<strong>version 3</strong>.  Active work on the SEARCH algorithm is continuing.</t>

<t>This document is organized as follows: Section 2 provides terminology
and definitions relevant to this document; Section 3 describes the
SEARCH algorithm in detail; Section 4 provides justification for the
algorithm settings; Section 5 describes the implementation status;
Section 6 describes security considerations; Section 7 notes that
there are no IANA considerations; Section 8 closes with
acknowledgments; and Section 9 provides references.</t>

</section>
<section anchor="terminology-and-definitions"><name>Terminology and Definitions</name>

<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;,
&quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this
document are to be interpreted as described in RFC 2119, BCP 14
<xref target="RFC2119"/> and indicate requirement levels for compliant CoAP
implementations.</t>

<t>In this document, the term &quot;byte&quot; is used in its now customary sense
as a synonym for &quot;octet&quot;.</t>

<t><em>ACK:</em> a TCP acknowledgement.</t>

<t><em>bins:</em> the aggregate (total) of acknowledged delivery bytes over a
 small time window.</t>

<t><em>congestion window (cwnd):</em> A TCP state variable that limits the
 amount of data a TCP sender can send.  At any given time, a TCP flow
 MUST NOT send data with a sequence number higher than the sum of the
 highest acknowledged sequence number and the minimum of the cwnd and
 the receiver window.</t>

<t><em>norm_diff:</em> the normalized difference in current delivered bytes and
 previously delivered bytes.</t>

<t><em>round-trip time (RTT):</em> the round-trip time for a segment sent until
 the acknowledgement is received.</t>

<t><em>THRESH:</em> the norm_diff value above which SEARCH considers the
 congestion point reached and the slow start phase exits.</t>

</section>
<section anchor="search-algorithm"><name>SEARCH Algorithm</name>

<t>The SEARCH algorithm core concept is that during the slow start phase,
the delivered bytes should double each RTT until the congestion point
is reached.  In SEARCH, when the bytes delivered one RTT prior is half
the bytes delivered currently, the bitrate is not yet at capacity,
whereas when the bytes delivered prior are more than half the bytes
delivered currently, the link capacity has been reached and TCP exits
slow start.</t>

<t>One challenge in monitoring delivered data across multiple RTTs is
latency variability for some links.  Variable latency in the absence
of congestion - common in some wireless links - can cause RTTs to
differ over time even when the network is not yet at the congestion
point.  This variability complicates comparing delivered bytes one RTT
prior to those delivered currently in that a lowered latency can make
it seem like the total bytes delivered currently is too low compared
to the total delivered one RTT ago, making it seem like the link is at
the congestion point when it is not.</t>

<t>To counteract link latency variability, SEARCH tracks delivered data
over several RTTs in a sliding window to provide a more stable basis
for comparison.  Since tracking individual segment delivery times is
prohibitive in terms of memory use, the data within the sliding window
is aggregated over bins representing small, fixed time periods.  The
window then slides over bin-by-bin, rather than sliding every
acknowledgement (ACK), reducing both the computational load (since
SEARCH only triggers at the bin boundary) and the memory requirements
(since delivered bytes are kept for a bin-sized time interval instead
of for each segment).</t>

<t>The SEARCH algorithm (that runs on the TCP sender only) is shown
below.</t>

<t>The parameters in CAPS (lines 0-4) are constants.</t>

<t>The variables in Initialization (lines 5-9) are set once upon
establishment of a TCP connection.  The <em>initial_rtt</em> (line 1)
obtained via the first round-trip time measured in the TCP connection.</t>

<t>The variable <em>now</em> on lines 9, 10 and 24 is the current system time
when the code is called.</t>

<t>The variables sequence_num and rtt in the ACK_arrived() function are
obtained upon arrival of an acknowledgement from the receiver.</t>

<t>The variable <em>cwnd</em> on lines 38 and 39 is the TCP congestion window.</t>

<t>Lines 0-4 set the predefined parameters for the SEARCH algorithm.  The
window factor (WINDOW_FACTOR) is a multiple of the initial RTT, set so
as the SEARCH window will be 3.5 times the initial RTT (set upon
initialization of the TCP flow in line 5).  The delivered bytes over a
SEARCH window is approximated using 10 bins (W), with an additional 15
additional bins (EXTRA_BINS) bins (for a total of 25 (NUM_BINS)) to
allow comparison of the current delivered bytes to the previously
delivered bytes one RTT earlier.  The threshold (THRESH) is set to
0.35 and is the upper bound of the permissible difference between the
previously delivered bytes and the current delivered bytes
(normalized) above which slow start exits.</t>

<t>Lines 5-9 do one-time initialization of SEARCH variables when a TCP
connection is established.  The SEARCH window size (window_size) is
set to be the initial RTT (initial_rtt) multiplied by the window
factor (WINDOW_FACTOR).  The bin duration (bin_duration) is then the
window size divided by size (in bins) of the SEARCH window (W).</t>

<t>After initialization, SEARCH only acts when acknowledgements (ACKs) are
received and even then, only when the current time (<em>now</em>) has passed
the end of the latest bin boundary (stored in the variable bin_end).
This check happens on line 10 and if the bin boundary is passed, the
bin statistics are updated in the function update_bins(), lines 24-30.</t>

<t>In update_bins(), under most TCP connections, the time (<em>now</em>) is
within the bin immediately after the previous bin, but in some cases
(such as during an RTT spike or a TCP connection without data to
send), more than one bin boundary may have been passed.  Line 24
computes how many bins have been passed and line 25 updates the next
bin boundary accordingly.  In lines 26-28, for each bin passed, the
bin[] variable is set to the previously-delivered bytes.  In line
30, for the latest bin, the delivered bytes is updated to the latest
sequence number (from the ACK).</t>

<t>Once the bins are updated, lines 12-14 check if enough bins have been
filled to run SEARCH.  This requires at least W (10) bins (i.e., a
SEARCH window&#39;s worth of bytes-delivered data), but also enough bins to
shift back by an RTT to compute a window (10) of bins one RTT ago, too.</t>

<t>If there is enough bin data to run SEARCH, lines 15 and 17 compute the
current and previously delivered bytes over a window (W) of bins,
respectively.  This computation is done in the function
compute_delv(), lines 32-38. For previously delivered bytes, shifting
by an RTT may mean the SEARCH window lands between bin boundaries, so
the fraction of the bin is computed in line 16 and passed into
compute_delv() in line 17.</t>

<t>In the function compute_delv() over lines 31-35, idx1 and idx2 are the
indices into the bin[] array for the start and end of the window as
explained above, fraction is the proportion (from 0 to 1) of the end
bins to use in the computation.  Line 32 computes the bytes delivered
(delv) over the inner part of the window (i.e., not counting the
fractional bins on the end), and lines 33-34 compute the
fractional parts of the end bins to add to delv.</t>

<t>Once delivered byes are computed, line 18 calculates the difference
between the expected delivered bytes (2 x prev_delv) and the current
delivered bytes (curr_delv), normalized by dividing by the expected
delivered bytes.  In line 19, this normalized difference value
(norm_diff) is compared to the threshold (THRESH).  If norm_diff is
larger than THRESH, that means the current delivered bytes is lower
than expected (i.e., the delivered bytes did not double over the
previous RTT) and slow start exits.</t>

<t>Slow start exit is handled by the function exit_slow_start() on line
36.  Setting the slow start threshold (ssthresh) to the congestion
window (<em>cwnd</em>) at effectively exits slow start.</t>

<t>SEARCH 2.0 ALGORITHM
~~~~
Parameters:
0: WINDOW_FACTOR = 3.5
1: W = 10<br />
2: EXTRA_BINS = 15
3: NUM_BINS = W + EXTRA_BINS<br />
4: THRESH = 0.35</t>

<t>Initialization():
5: window_size = <em>initial_rtt</em> x WINDOW_FACTOR
6: bin_duration = window_size / W<br />
7: bin[NUM_BINS] = {}
8: curr_idx = -1 
9: bin_end = <em>now</em> + bin_duration</t>

<t>ACK_arrived(sequence_num, rtt):</t>

<t>// Check if passed bin boundary.
10: if (<em>now</em> &gt; bin_end) then<br />
11:    update_bins()</t>

<t>// Check if enough data for SEARCH.
12:    prev_idx = curr_idx - (rtt / bin_duration)
13:    if (prev_idx &gt;= W) and
14:       (curr_idx - prev_idx) &lt;= EXTRA_BINS then</t>

<t>// Run SEARCH check.
15:       curr_delv = compute_delv(curr_idx - W, curr_idx)
16:       fraction = (rtt mod bin_duration) / bin_duration
17:       prev_delv = compute_delv(prev_idx - W, prev_idx, fraction)
18:       norm_diff = (2 x prev_delv - curr_delv) / (2 x prev_delv)
19:       if (norm_diff &gt;= THRESH) then
20:          exit_slow_start()
21:       end if</t>

<t>22:    end if // Enough data for SEARCH.</t>

<t>23: end if // Each ACK.</t>

<t>// Update bin statistics, accounting for cases where more
// than one bin boundary might have been passed.
update_bins():
24: passed_bins = (<em>now</em> - bin_end) / bin_duration + 1
25: bin_end += passed_bins x bin_duration
26: for i = (curr_idx + 1) to (curr_idx + passed_bins)
27:    if (curr_idx &gt;= 0) bin[i mod NUM_BINS] = bin[curr_idx]
28: end for
29: curr_idx += passed_bins
30: bin[curr_idx mod NUM_BINS] = sequence_num</t>

<t>// Compute delivered bytes over the window of bins, interpolating a
// fraction of each bin on the end (default is 0).
compute_delv(idx1, idx2, fraction = 0):
31: delv = 0
32: delv = bin[(idx2 - 1) mod NUM_BINS] - bin[idx1 mod NUM_BINS]
33: delv += (bin[idx1 mod NUM_BINS] - bin[(idx1 - 1) mod NUM_BINS]) x (1 - fraction)
34: delv += (bin[idx2 mod NUM_BINS] - bin[(idx2 - 1) mod NUM_BINS]) x fraction
35: return delv</t>

<t>// Exit slow start by setting ssthresh.
exit_slow_start():
36: ssthresh = <em>cwnd</em>
~~~~</t>

</section>
<section anchor="search-parameters"><name>SEARCH Parameters</name>

<t>This section provides justification and some sensitivity analysis for
key SEARCH algorithm constants.</t>

<t><strong>Window Size (window_size)</strong></t>

<t>The SEARCH window smooths over RTT fluctuations in a connection that
are unrelated to congestion. The window size must be large enough to
encapsulate meaningful link RTT variation, yet small in order to allow
SEARCH to respond near when slow start reaches link capacity. In order
to determine an appropriate window size, we analyzed RTT variation
over time for GEO, LEO, and 4G LTE links for TCP during slow start.
See <xref target="KCL24"/> for details.</t>

<t>The SEARCH window size needs to be large enough to capture the
observed periodic oscillations in the RTT values. In order to
determine the oscillation period, we use a Fast Fourier Transform
(FFT) to convert measured RTT values from the time domain to the
frequency domain.  For GEO satellites, the primary frequency peak is
at 0.5 Hz, meaning there is a large, periodic cycle that occurs about
every 2 seconds.  Given the minimum RTT for a GEO connection of about
600 ms, this means an RTT cycle occurs about every 3.33 RTTs.  Thus, a
SEARCH window size of about 3.5 times the minimum RTT should smooth
out the latency variation for this type of link.</t>

<t>While the RTT periodicity for LEO links is not as pronounced as in GEO
links, the analysis yields a similar window size.  The FFT of LEO RTTs
has a dominant peak at 10 Hz, so a period of about 0.1 seconds.  With
LEO&#39;s minimum RTT of about 30 ms, the period is about 3.33 RTTs,
similar to that for GEO links. Thus, a window size of about 3.5 times
the minimum RTT should smooth out the latency variation for this type
of link, too.</t>

<t>Similarly to the LEO link, the LTE network does not have a strong RTT
periodicity.  The FFT of LTE RTTs has a dominant peak at 6 Hz, with a
period of about 0.17 seconds.  With the minimum RTT of the LTE network
of about 60 ms, this means a window size of about 2.8 times the
minimum RTT is needed.  A SEARCH default of 3.5 times the minimum RTT
exceeds this, so should smooth out the variance for this type of link
as well.</t>

<t>** Threshold (THRESH) **</t>

<t>The threshold (THRESH) determines when the difference between the
bytes delivered currently and the bytes delivered during the previous
RTT is large enough to exit the slow start phase.  A small threshold
is desirable to exit slow start close to the &quot;at capacity&quot; point
(i.e., without overshooting too much), but the threshold must be large
enough not to trigger an exit from slow start prematurely due to noise
in the measurements.</t>

<t>During slow start, the congestion window doubles each RTT.  In ideal
conditions and with an initial cwnd of 1 (1 is used as an example, but
typical congestion windows start at 10 or more), this results in a
sequence of delivered bytes that follows a doubling pattern (1, 2, 4,
8, 16, ...). Once the link capacity is reached, the delivered bytes
each RTT cannot increase despite cwnd growth.  For example, consider a
SEARCH window that is 4x the size of the RTT.  After 5 RTTs, the
current delivered window comprises 2, 4, 8, 16, while the previous
delivered window is 1, 2, 4, 8.  The current delivered bytes is 30,
exactly double the bytes delivered in the previous window.  Thus,
SEARCH would compute the normalized difference as zero.</t>

<t>Once the cwnd ramps up to meet full link capacity, the delivered bytes
plateau.  Continuing the example, if the link capacity is reached when
cwnd is 16, the delivered bytes growth would be 1, 2, 4, 8, 16, 16.
The current delivered window is 4+8+16+16 = 44, while the previously
delivered window is 2+4+8+16 = 30.  Here, the normalized difference
between 2x the previously delivered window and the current delivered
window is about (60-44)/60 = 0.27.  After 5 more RTTs, the previous
delivered and current delivered bytes would both be 16 + 16 + 16 + 16
= 64 and the normalized difference would be (128 - 64) / 64 = 0.5.</t>

<t>Thus, the norm values typically range from 0 (before the congestion
point) to 0.5 (well after the congestion point) with values between 0
and 0.5 when the congestion point has been reached but not surpassed
by the full window.</t>

<t>To generalize this relationship, the theoretical underpinnings of this
behavior can be quantified by integrating the area under the
congestion window curve over time for a closed-form equation for both
the current delivered bytes (curr_delv) and the previously delivered
bytes (prev_delv).  The normalized difference can be computed based on
the RTT round relative to the &quot;at capacity&quot; round.  While SEARCH seeks
to detect the &quot;at capacity&quot; point as soon as possible after reaching
it, it must also avoid premature exit in the case of noise on the
link.  The 0.35 threshold value chosen does this and can be detected
about 2 RTTs of reaching capacity.</t>

<t><strong>Number of Bins (NUM_BINS)</strong></t>

<t>Dividing the delivered byte window into bins reduces the sender&#39;s
memory use by aggregating data across multiple ACKs instead of
tracking each ACK.  This approach simplifies data handling and
minimizes the frequency of SEARCH window updates, enhancing sender
efficiency.  However, more bins provide more fidelity to actual
delivered byte totals and allow SEARCH to make decisions (i.e.,
compute if it should exit slow start) more often, but require more
memory for each TCP flow.  Sensitivity analysis previously
conducted aimed to identify the impact of the number of bins used by
SEARCH and the ability to exit slow start in a timely fashion.</t>

<t>Using a window size of 3.5x the initial RTT and a threshold of 0.35,
we varied the number of bins from 5 to 40 and observed the impact on
SEARCH&#39;s performance over GEO, LEO and 4G LTE downloads.  For all
three link types, a bin size of 10 provides nearly identical
performance as SEARCH running with more bins, while 10 also minimizes
early exits from slow start while having an &quot;at chokepoint&quot; percentage
that is close to the maximum.</t>

</section>
<section anchor="search-options"><name>SEARCH Options</name>

<t>This section describes optional adjustments to the SEARCH algorithm.</t>

<t>A) The interpolation code in lines 16-17 and 33-34 gives a more precise
computation of the previously delivered bytes by computing a fraction
of the adjacent bins.  If saving the computation time required for
interpolation is desired, interpolation could be disabled, effectively
&quot;rounding down&quot; the previous delivered window to the lowest bin (the
same as running SEARCH with fraction of 0).  While this would
sacrifice some accuracy for the SEARCH check computations, at least it
errs on the side of not exiting slow start too early.</t>

<t>B) In exit_slow_start(), since SEARCH had to pass the congestion point
in order to ascertain that it had, in fact, been reached, the
congestion window (<em>cwnd</em>) could be reduced to the value at the
congestion point instead of above it.  Since with a THRESHOLD setting
of 0.35, detection of the congestion point is delayed by almost
exactly two RTTs, so the extra bytes (past the congestion point) that
had been added to the congestion window could be subtracted from the
congestion window.  Code to do so is below:</t>

<figure><artwork><![CDATA[
36: cong_idx = curr_idx - 2 x *initial_rtt* / bin_duration
37: overshoot = compute_delv(cong_idx, curr_idx)
38: *cwnd* -= overshoot
]]></artwork></figure>

<t>C) If the RTT grows such that the previous window can not be computed
due to overlapping the bins used for the current window (line 14),
SEARCH cannot run and instead must wait for the RTT to decrease enough
until there is no such overlap.  Instead, SEARCH could reduce the size
of the window to prevent this overlap.  If this is done, instead of
shifting back 3.5x the initial RTT (the WINDOW_FACTOR), SEARCH could
shift back less (e.g., 2.0x).  While this smaller window has the
disadvantage of not smoothing over RTT variance as well as the default
window, it has the advantage of allowing the SEARCH check to still run
(lines 15-21), possibly with an adjusted THRESHOLD.</t>

</section>
<section anchor="deployment-and-performance-evaluation"><name>Deployment and Performance Evaluation</name>

<t>Evaluation of hundreds of downloads of TCP with SEARCH across GEO,
LEO, and 4G LTE network links compared to TCP with HyStart and TCP
without HyStart shows SEARCH almost always exits after capacity has
been reached but before packet loss has occurred.  This results in
capacity limits being reached quickly while avoiding inefficiencies
caused by lost packets.</t>

<t>Evaluation of a SEARCH implementation in an open source QUIC library
(QUICly) over an emulated GEO satellite link validates the
implementation, illustrating how SEARCH detects the congestion point
and exits slow start before packet loss occurs.  Evaluation over a
commercial GEO satellite link shows SEARCH can provide a median
improvement of up to 3 seconds (14%) compared to the baseline by
limiting cwnd growth when capacity is reached and delaying any packet
loss due to congestion.</t>

<t>Details can be found at <xref target="KCL24"/> and <xref target="CKC24"/>, respectively.</t>

</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t>This section records the status of known implementations of the
algorithm defined by this specification at the time of posting of this
Internet-Draft, and is based on a proposal described in <xref target="RFC7942"></xref>. The
description of implementations in this section is intended to assist
the IETF in its decision processes in progressing drafts to RFCs.
Please note that the listing of any individual implementation here
does not imply endorsement by the IETF.  Furthermore, no effort has
been spent to verify the information presented here that was supplied
by IETF contributors.  This is not intended as, and must not be
construed to be, a catalog of available implementations or their
features.  Readers are advised to note that other implementations may
exist.</t>

<t>According to <xref target="RFC7942"></xref>, &quot;this will allow reviewers and working groups
to assign due consideration to documents that have the benefit of
running code, which may serve as evidence of valuable experimentation
and feedback that have made the implemented protocols more mature. It
is up to the individual working groups to use this information as they
see fit&quot;.</t>

<t>As of the time of writing, the following implementations of SEARCH
have been publicly released:</t>

<t>Linux TCP</t>

<t>Source code URL:</t>

<t><eref target="https://github.com/Project-Faster/tcp_ss_search.git">https://github.com/Project-Faster/tcp_ss_search.git</eref></t>

<t>Source: WPI
Maturity: production
License: GPL?
Contact: claypool@cs.wpi.edu
Last updated: May 2024</t>

<t>QUIC</t>

<t>Source code URLs:</t>

<t><eref target="https://github.com/Project-Faster/quicly/tree/generic-slowstart">https://github.com/Project-Faster/quicly/tree/generic-slowstart</eref>
<eref target="https://github.com/AmberCronin/quicly">https://github.com/AmberCronin/quicly</eref>
<eref target="https://github.com/AmberCronin/qperf">https://github.com/AmberCronin/qperf</eref></t>

<t>Source: WPI
Maturity: production
License: BSD-style
Contact: claypool@cs.wpi.edu
Last updated: May 2024</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This proposal makes no changes to the underlying security of transport
protocols or congestion control algorithms.  SEARCH shares the same
security considerations as the existing standard congestion control
algorithm <xref target="RFC5681"></xref>.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document has no IANA actions. Here we are using that phrase,
suggested by <xref target="RFC8126"></xref>, because SEARCH does not modify or extend the
wire format of any network protocol, nor does it add new dependencies
on assigned numbers.  SEARCH involves only a change to the slow start
part of the congestion control algorithm of a transport sender, and
does not involve changes in the network, the receiver, or any network
protocol.</t>

<t>Note to RFC Editor: this section may be removed on publication as an RFC.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>Much of the content of this draft is the result of discussions with
the Congestion Control Research Group (CCRG) at WPI
<eref target="https://web.cs.wpi.edu/~claypool/ccrg">https://web.cs.wpi.edu/~claypool/ccrg</eref>. In addition, feedback and
discussions of early versions of SEARCH with the technical group at
Viasat has been invaluable.</t>

</section>
<section anchor="references"><name>References</name>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">

&RFC2119;
&RFC5681;
&RFC7942;
&RFC8126;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

<reference anchor="CKC24" target="https://web.cs.wpi.edu/~claypool/papers/quic-search-lanman-24/paper.pdf">
  <front>
    <title>Improving QUIC Slow Start Behavior in Wireless Networks with SEARCH</title>
    <author initials="A." surname="Cronin" fullname="Amber Cronin">
      <organization>Worcester Polytechnic Institute</organization>
    </author>
    <author initials="M." surname="Kachooei" fullname="Maryam Ataei Kachooei">
      <organization>Worcester Polytechnic Institute</organization>
    </author>
    <author initials="J." surname="Chung" fullname="Jae Won Chung">
      <organization>Viasat Inc</organization>
    </author>
    <author initials="F." surname="Li" fullname="Feng Li">
      <organization>Viasat Inc</organization>
    </author>
    <author initials="B." surname="Peters" fullname="Benjamin Peters">
      <organization>Viasat Inc</organization>
    </author>
    <author initials="M." surname="Claypool" fullname="Mark Claypool">
      <organization>Worcester Polytechnic Institute</organization>
    </author>
    <date year="2024"/>
  </front>
  <seriesInfo name="Proceedings of the IEEE International Symposium on Local and Metropolitan Area Networks (LANMAN), Boston, MA, USA" value=""/>
</reference>
<reference anchor="KCL24" >
  <front>
    <title>Improving TCP Slow Start Performance in Wireless Networks with SEARCH</title>
    <author initials="M." surname="Kachooei" fullname="Maryam Ataei Kachooei">
      <organization>Worcester Polytechnic Institute</organization>
    </author>
    <author initials="J." surname="Chung" fullname="Jae Won Chung">
      <organization>Viasat Inc</organization>
    </author>
    <author initials="F." surname="Li" fullname="Feng Li">
      <organization>Viasat Inc</organization>
    </author>
    <author initials="B." surname="Peters" fullname="Benjamin Peters">
      <organization>Viasat Inc</organization>
    </author>
    <author initials="J." surname="Chung" fullname="Josh Chung">
      <organization>Lexington Christian Academy</organization>
    </author>
    <author initials="M." surname="Claypool" fullname="Mark Claypool">
      <organization>Worcester Polytechnic Institute</organization>
    </author>
    <date year="2024"/>
  </front>
  <seriesInfo name="The IEEE World of Wireless, Mobile and Multimedia Networks conference (WoWMoM), Perth, Australia" value=""/>
</reference>
<reference anchor="HYSTART" target="https://doi.org/10.1016/j.comnet.2011.01.014">
  <front>
    <title>Taming the Elephants: New TCP Slow Start</title>
    <author initials="S." surname="Ha" fullname="Sangtae Ha">
      <organization></organization>
    </author>
    <author initials="I." surname="Rhee" fullname="Injong Rhee">
      <organization></organization>
    </author>
    <date year="2024"/>
  </front>
  <seriesInfo name="Computer Networks vol. 55, no. 9, pp. 2092-2110, DOI 10.1016/j.comnet.2011.01.014" value=""/>
</reference>


    </references>


<?line 718?>

<section anchor="compat"><name>Historical Note</name>

<!--  LocalWords:  SEARCH: a New Slow Start Algorithm for TCP and QUIC 
-->
<!--  LocalWords:  
-->

</section>


  </back>

<!-- ##markdown-source:
H4sIAKz9m2YAA+19+XMbR5bm7/lX5MqxYUAGIAI8JGHa3qYo6pimjiGp4Uy4
HYxCIUGUVahC10EKrfD87fu+9zKzsgqA2t0RsxM7MQyHRaIqr5fv+N6RieFw
qKqkSs1UX52fXp690cOhjvR786Cv0pz+V0VFpU/Tu7xIquVKL/JCX5991FE2
1//y6e2ZVtFsVpj7qS5NVMRLreZ5nEUr6m9eRItqGC/r7G4Yxw93Q3ljeDCm
l6KK3pgcTI6GB0+Hk7FS3+myok5vozTP6FFV1EapZF3wr2U1OTh4fjBRUWGi
qb4xM57A26wyRWYqfV1EWbnOi0o93E01BlOfH6b++fAlpqLiqKJpVnNVVtTN
ip6fX79SKs7nSUbN6nIYlXGSqHUy1fTznY6jjD41OiqKaKN7yUJHaao3puxr
IsMyKpd6aQpDc9dDXeWx/FLSPAqzKO1fmxX/ofHCFI3pV/fKlIeZm0VUp1VJ
b7jn0kheV1FdLfNiqjT/DO2/WicZvfHPI30GEmv/sVD/nyOjb/JMHvpneUEL
/dckKqOKqBP7z90m3vMj/zEIZYhohwcH+n0SfzZFSV1ezgf6u/HBgX8tTqrN
VL+LinSWF3l9txzod6fN03xO8zkYPz2eBJ/VWVVQo09ZUpk52Kwypc4X+nRl
iiSO/JtmFSXpVP8amYc8GzE3/VFmOYrz1W6avBvpP0XxMs9N0qEKzXETrfRp
FZlk+x2mzk1exKYkxtEf83RTmXiZJTERqyQxqSuzRbKbj2+36EXEaVoQvTqU
8kPspNPJwfPfTyfdJdQqwto+26X98WGdjMy83k2nVyN90aXQK0O8dJH8/88x
C1rIKE1+D7OcpdFmnefpNrN83n7234FJYruoP8blyHGIyvKCmCe5N1NoLksr
XSziyXj8vPPR8cmzceejp8+PJp2Pno0nJzT05aszdDGVX9HU/oom9le8OiWF
ny2aWWh99qezyZEoPmukHr1drYv8nhS2mJ/ASL0wy+g+IcWcZPomKUxqypIM
WfWQF59L/UDmy5q4R9xhW6vShNtscUpsUeQZ9dXhitPVjLZdnv1DTPFfoKz+
M2zGLl3S7dAqE72vL72P+i9G+qOhZZXdHl+Y7NdoRbsij//mJPUWsf9zhL0k
QTMl2Jd49GORx8YAVbAUVktDUOP83OIR4u48i1J9tVmt8zKpV5pIfpHH9BFA
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
AAA=

-->

</rfc>

