<?xml version='1.0' encoding='ascii'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.24 -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc docmapping="yes"?>
<rfc ipr="trust200902" docName="draft-scheffenegger-tcpm-lrd-00" category="exp" obsoletes="" updates="" submissionType="IETF" xml:lang="en">

  <front>
    <title abbrev="LRD">Simple Lost Retransmission Detection with SACK TCP</title>

    <author initials="R." surname="Scheffenegger" fullname="Richard Scheffenegger">
      <organization>NetApp</organization>
      <address>
        <postal>
          <street>Am Europlatz 2</street>
          <city>Vienna</city>
          <code>1120</code>
          <country>AT</country>
        </postal>
        <email>rs.ietf@gmx.at</email>
      </address>
    </author>

    <date/>

    <area>Transport</area>
    <workgroup>TCPM</workgroup>
    

    <abstract>


<t>Lost Retransmissions are a major source of latency for TCP transfers.
This note specifies how selective acknowledgment (SACK) information
can be used to timely recover from lost retransmissions.  In
addition, it codifies the congestion control reaction on lost
retransmissions.</t>




    </abstract>


    <note title="Note to Readers">


<t>Discussion of this draft takes place on the <eref target="mailto:tcpm@ietf.org">TCPM working group
mailing list</eref>, which is archived at
<eref target="https://mailarchive.ietf.org/arch/browse/tcpm/"/>.</t>

<t>Working Group information can be found at
<eref target="https://datatracker.ietf.org/wg/tcpm/"/>; 
</t>


    </note>


  </front>

  <middle>


<section anchor="introduction" title="Introduction" numbered="true" toc="default">

<t>Selective Acknowledgement (SACK) is widely used to identify exactly
which TCP segment was lost and only send these missing segments
during a recovery episode.  This helps improve the effectiveness of
loss recovery and aligns with the principle of packet conservation.
In addition, SACK information can also be used to infer about lost
retransmissions.  When this information is not used, TCP senders
revert to the retransmission timeout (RTO) scheme to recover from
lost retransmissions.</t>

<t>Current SACK implementations, with one widely deployed exception, do
not perform lost retransmission detection.  Lost retransmission
detection (LRD) in the one implementation that performs it was
described as an emergent feature due to the way the sender is
handling SACK.  Therefore, LRD is handled in that stack within the
current regime of loss recovery, but without any additional
congestion control reaction.</t>

<t>This note specifies the use of SACK to detect and recover from lost
retransmissions.  Using this scheme, a RTO is only required to recover 
from excessive loss of segments, or ACKs.  The intention of this note
is to enhance SACK loss recovery so that most RTO events can be mitigated.
Only during episodes of pathological network impediments, RTO are still
necessary to achieve forward progress.</t>

<t>The mechanism described adheres strictly to the principle of packet
conservation.  It also requires the use of the forward
acknowledgement (FACK) mechanism, described in more detail in <xref target="MM96a" pageno="false" format="default"/> and
<xref target="TLP" pageno="false" format="default"/>.</t>

</section>
<section anchor="conventions" title="Conventions" numbered="true" toc="default">

<t>The key words &#8220;MUST&#8221;, &#8220;MUST NOT&#8221;, &#8220;REQUIRED&#8221;, &#8220;SHALL&#8221;, &#8220;SHALL
NOT&#8221;, &#8220;SHOULD&#8221;, &#8220;SHOULD NOT&#8221;, &#8220;RECOMMENDED&#8221;, &#8220;NOT RECOMMENDED&#8221;,
&#8220;MAY&#8221;, and &#8220;OPTIONAL&#8221; in this document are to be interpreted as
described in BCP&#160;14 <xref target="RFC2119" pageno="false" format="default"/> <xref target="RFC8174" pageno="false" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>

</section>
<section anchor="overview" title="Overview" numbered="true" toc="default">

<t>TCP Selective Acknowledgement <xref target="RFC2018" pageno="false" format="default"/> was designed to provide
detailed information to the sender about the segements already
received.  Based on this information, a sender can reduce the number
of unnecessary retransmissions to close to zero and also recover
from a loss of multiple segments within a single round trip time (RTT), 
and without reverting to a retransmission timeout (RTO).</t>

<t>To that end, <xref target="RFC6675" pageno="false" format="default"/> describes the necessary data structures a
sender has to maintain to keep track of incoming SACK information.
However, no explicit attempt was made to specify how to use the
information gained during the recovery episode to detect lost
retransmissions.</t>

<t>In addition, <xref target="RFC2018" pageno="false" format="default"/> specifically stipulated up to which point a
SACK enabled sender may promote segments to become eligible for
retransmission under the SACK scheme.  This heuristic works very well
during bulk transfers, where the sender always has additional data to
send.  Close to the end of a stream, when there is no more data in
the socket to send, current SACK implementations fail to promote
still outstanding and never acknowledged segments to become eligible
for retransmission.  When this happens, the performance of a TCP SACK
implementation adhereing to <xref target="RFC3517" pageno="false" format="default"/> degrades and is lower than the
performance of TCP NewReno <xref target="RFC3782" pageno="false" format="default"/>, which can recovery this
particular event without an RTO.</t>

<t>The introduction of a rescue retransmission, as described in
<xref target="RFC6675" pageno="false" format="default"/>, addresses this particular issue.</t>

<t>This document is concerned with the behavior of a TCP SACK sender,
when after retransmission of all ourstanding segments, and the
transmission of new data, the recovery state persists (SND.UNA does
not advance to SND.MAX at the time of loss recovery initiation, also 
known as Recovery Point).</t>

</section>
<section anchor="definitions" title="Definitions" numbered="true" toc="default">

<t>This document uses the terms SND.UNA, SND.NXT, SND.MAX as defined in
<xref target="RFC5681" pageno="false" format="default"/>.</t>

<t>SND.FACK (forward acknowledgment) is used to describe the
highest sequence number that has been SACKed by the receiver and
subsequently seen by the sender.  The full definition can be found in
<xref target="MM96a" pageno="false" format="default"/> and <xref target="MM96b" pageno="false" format="default"/>. The FACK mechanism is further described in <xref target="TLP" pageno="false" format="default"/>.</t>

</section>
<section anchor="design-considerations" title="Design Considerations" numbered="true" toc="default">

<t>The algorithm described in this document has to adhere to the
principle of packet conservation. Detection and recovery from lost
retransmissions is plagued with the same set of problems that can
become worrysome during regular loss detection and loss recovery.
Especially heavy reordering and recovery at the end-of-stream can
make it hard to achive good efficiency during loss recovery.</t>

<section anchor="recovery-initiation" title="Recovery Initiation" numbered="true" toc="default">

<t>The algorithm outlined does not speak about the engagement of the
loss recovery state by the sender TCP.  It is assumed, that the
methods outlined in Congestion Control <xref target="RFC5681" pageno="false" format="default"/>, Early Retransmit <xref target="RFC5827" pageno="false" format="default"/> and 
<xref target="SRE" pageno="false" format="default"/>, now incorporated into <xref target="RFC6675" pageno="false" format="default"/>
are used to engage in loss recovery.

This leaves only the case where all segments
between SND.UNA and SND.MAX are lost to be recovered from by means of
retransmission timeout.</t>

</section>
<section anchor="detection-of-lost-retransmissions" title="Detection of lost retransmissions" numbered="true" toc="default">

<t>The intuition behind the scheme is that if a retransmission succeeds,
then the cumulative ack should increase one round trip time after the
retransmission was sent.  Otherwise, the retransmission must have
been lost.  The key is to have a unambiguous signal which indicates
that at least one RTT has passed after a retransmission was sent out.</t>

<t>As long as the sending TCP has still unsent data available, an
unabigious signal can be deducted by using the FACK mechanism.  After
the first round of sending retransmissions, the sender MAY send
previously unsent data.  Once SND.FACK advances and encompasses this
newly sent data, the sender can deduct with high probability, that
any still outstanding packets have been dropped by the network.  The
sender MAY start retransmitting all still outstanding packets.  If
the sender chooses to do so, it MUST take an appropriate congestion
control action.  This action is prudent, as the loss of retransmitted
packets can be a signal of persistent congestion in the network, that
lasts even after the initial congestion control reaction at least one
RTT before.</t>

<t>Note that the one popular stack performing LRD already does not react
by reducing the congestion window before starting the next cycle of
retransmissions.  It is therefore more aggressive that the mechanism
described herein.  Nevertheless, no network instabilities have been
reported since that stack started using LRD more than two decades ago.</t>


</section>
<section anchor="reordering" title="Reordering" numbered="true" toc="default">

<t>Without making use of additional information not contained in the
SACK entries, only reordered ACKs can be discriminated.</t>

<t>If a single data segment is delayed, and later resent, it is not
possible by using only information available within SACK entries to
distinguish if the original or retransmitted segment was SACKed.
Thus lost retransmission detection can fall victim to reordered data
segments, if it were to use retransmitted segments as
signal to detemine lost retransmissions.</t>

<t>The use of an SACK acknowledging data that was not sent at the
initiation of the recovery episode prevents this issue.</t>

<t>On the return path, reordered ACKs may be recognized, by comparing
the SACK entries contained in the ACK.  The original ACK from the in-
sequence, original transmission does not contain any SACK entries
beyond SND.FACK, while the ACK for a retransmitted segment would
likely contain SACK blocks of segments higher than the newly SACKed
segment.</t>

<t>Also, if an ACK does not contain any newly SACKed
segments than already known in the senders scoreboard, ACK reordering
is likely to have occured.  For example, the SACK entry may contain
only a part of an entry already in the scoreboard.  However, such a
simple heuristic is not enough to discriminate properly the ACK for a
retransmitted data segment from the ACK of the original data segment.</t>


</section>
<section anchor="ordering-of-retransmitted-segments" title="Ordering of retransmitted segments" numbered="true" toc="default">

<t>There are a number of choices when it comes to deciding which packet
to transmit at what time and also in what order.  With TCP SACK, the
decision of what to send has been decoupled from the decision when
(and how much) to send.</t>

<t>In the context of lost retransmission detection, there are at least
four broad approaches, each of which has a different figure of merit:</t>

<t><list style="symbols">
  <t>Stricty enqueue all known lost segments first in the range
[SND.UNA &#8230; SND.FACK].  Only when the last enqueued segment has
been retransmitted at least once, segments which are found to be
still missing may be enqueued for a 2nd cycle, again from the
newer [SND.UNA &#8230; SND.FACK].  This is the most conservative
approach, and would ensure the least amount of spurious
(unnecessary) retransmissions.</t>
  <t>A second approach would be for the sender to re-enqueue an
already retransmitted segment as soon as it receives positive
proof that at least 3 segments have been received, which were
sent after the segment in question.  This is the approach choosen
by one popular stack.  However, it assumes a continous data
stream so that at any later time, there will still be enough data
segments around that the criteria can be matched for a lost
retransmission.  The delay on the receiver side, before some new
data can be delivered up the stack to the application can be
reduced somewhat over option 1.  This approach still maintains
nearly optimal efficiency and very few spurious retransmissions.</t>
  <t>Third, a slightly more relaxed criteria for detection of lost
retransmissions can be applied.  As soon as any data segment is
positively acknowledged (SACKed), that was sent at least
dupthresh segments later, a retransmitted segment can be
considered lost.  Note that dupthresh is not necessarily constant
in this approach, as the same guidelines as defined in Early
Retransmit <xref target="RFC5827" pageno="false" format="default"/> may be applied once the retransmitted
segment closes in on SND.FACK.</t>
  <t>Last, a sender could assume strictly in-sequence delivery of
retransmitted segments.  During loss recovery, the transmission rate of the
sent segments is slower than just prior to the detection of the
loss, in particular when PRR <xref target="RFC6937" pageno="false" format="default"/> is in use. This may reduce
load-induced reordering to some extent.  This
approach would allow the most timely delivery of data only
blocked by a few lost segments on the receiver side, but would
also have the least efficiency in terms of packet conversation.</t>
</list></t>

<t>Furthermore, the senders congestion window might not allow for
many re-retransmissions before a stall.  Therefore, additional
steps would be necessary on the sender side, to ensure continous,
paced transmission even after the ACK clock has stopped.  This
limits the usefulness of this approach, and addressing congestion
control and timing related issues are outside the scope of this
note. However, this is effectively implemented when using RACK <xref target="RFC8985" pageno="false" format="default"/>.</t>


</section>
</section>
<section anchor="algorithm" title="Algorithm" numbered="true" toc="default">

<t>Section 5 in <xref target="RFC2018" pageno="false" format="default"/> seems to have been interpreted as an exlusive
list of which segments may become elegible for retransmission, but
can also be interpreted as an inclusive list:</t>

<figure title="" suppress-title="false" align="left" alt="" width="" height=""><artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height="">
After the SACKed bit is turned on (as the result of processing a
received SACK option), the data sender will skip that segment
during any later retransmission.  Any segment that has the SACKed
bit turned off and is less than the highest SACKed segment is
available for retransmission.
</artwork></figure>

<section anchor="lost-retransmission-detection" title="Lost Retransmission Detection" numbered="true" toc="default">

<t>In order to track if a retransmitted segment might have been lost,
the sender requires additional state while in the recovery state.</t>

<t>Once TCP has established that genuine loss exists in the network, it
enters loss recovery.  At this point, the current value of SND.MAX is
stored (&#8220;Recover&#8221; in NewReno <xref target="RFC6582" pageno="false" format="default"/>).  Thus it is enough to check
if SND.FACK advances beyond &#8220;Recover&#8221;.  Once that becomes true, some
previously unsent data was acknowledged by the receiver.  By that
time, any outstanding retransmissions should have been received as
well.  Thus the sender MAY retransmit the outstanding data from the
SACK scoreboard again, after taking appropriate congestion control
action (i.e. reducing the congestion window).</t>

<t>The retransmission SHOULD proceed in order of ascending sequence
numbers across the unfilled holes of the SACK scoreboard, to maximize
the chance that a delayed segment closes still outstanding holes.</t>

<t>Note that implementations tracking sequence-number ranges in their
scoreboard only need to track a single sequence number per recovery
episode.  Multiple cycles of SACK loss recover, without leaving loss
recovery in between, are possible by tracking the relevant &#8220;Recovery&#8221;
in the scoreboard data structure.</t>

<t>Implicitly, this rule will also make sure, that all the segments
which had become elegible for retransmission will have been sent at
least one time, before any additional round of retransmissions is
initiated.  If the entire flight of data except a small number of
segments at the end were lost, it takes at least one RTT for the
information about successfully received segments to reach the sender.
By that time, the first round of retransmissions is already completed
(and additional data segments with sequence numbers higher than
SND.MAX at the start of the recovery episode start may have been
already been sent.)</t>

<t>In order to guarantee a timely delivery at end-of-stream, a TCP
sender implementing LRD SHOULD also make use of the &#8220;Rescue
Retransmission&#8221; as defined in <xref target="RFC6675" pageno="false" format="default"/>.</t>

</section>
<section anchor="lrd-algorithm-detail" title="LRD Algorithm Detail" numbered="true" toc="default">

<t><list style="hanging">
  <t hangText="1.:">
  On entering Loss Recovery, store SND.MAX to Recover</t>
  <t hangText="2.:">
  After retransmission of the last segment of a hole in the
scoreboard, store Recover to Hole.Rxmit</t>
  <t hangText="3.:">
  Once SND.FACK advances beyond Recover, while there are holes in
the scoreboard:</t>
  <t hangText="3.1.:">
  store SND.MAX to Recover</t>
  <t hangText="3.2.:">
  perform adequate congestion control reaction (i.e. reduce the
congestion window)</t>
  <t hangText="3.3.:">
  retransmit each hole in the scoreboard, where Hole.Rxmit &lt;
Recover, when appropriate to do so.</t>
</list></t>

</section>
</section>
<section anchor="security-considerations" title="Security Considerations" numbered="true" toc="default">

<t>The algorithm presented in this paper shares security considerations
with <xref target="RFC2018" pageno="false" format="default"/> and <xref target="RFC6675" pageno="false" format="default"/>.</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations" numbered="true" toc="default">

<t>This document does not require any IANA actions.</t>

</section>
<section anchor="acknowledgements" title="Acknowledgements" numbered="true" toc="default">

<t>The author would like to thank Matt Mathis for the insightful
discussions about SACK and it&#8217;s intended behavior and the spirit
driving the design of SACK.</t>

<t>Dragana Damjanovic was very helpful in reviewing an earlier version 
of this text and point out numerous clarifications.</t>

<t>Furthermore, valuable feedback was received from John Heffner, Jeff
Prem and Anumita Biswas.</t>

</section>


  </middle>

  <back>

    <references title="Normative References">





<reference anchor="RFC2018" target="https://www.rfc-editor.org/info/rfc2018" quote-title="true">
<front>
<title>TCP Selective Acknowledgment Options</title>
<author initials="M." surname="Mathis" fullname="M. Mathis"><organization/></author>
<author initials="J." surname="Mahdavi" fullname="J. Mahdavi"><organization/></author>
<author initials="S." surname="Floyd" fullname="S. Floyd"><organization/></author>
<author initials="A." surname="Romanow" fullname="A. Romanow"><organization/></author>
<date year="1996" month="October"/>
<abstract><t>This memo proposes an implementation of SACK and discusses its performance and related issues.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name="RFC" value="2018"/>
<seriesInfo name="DOI" value="10.17487/RFC2018"/>
</reference>



<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quote-title="true">
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials="S." surname="Bradner" fullname="S. Bradner"><organization/></author>
<date year="1997" month="March"/>
<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" target="https://www.rfc-editor.org/info/rfc8174" quote-title="true">
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials="B." surname="Leiba" fullname="B. Leiba"><organization/></author>
<date year="2017" month="May"/>
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name="BCP" value="14"/>
<seriesInfo name="RFC" value="8174"/>
<seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



<reference anchor="RFC6675" target="https://www.rfc-editor.org/info/rfc6675" quote-title="true">
<front>
<title>A Conservative Loss Recovery Algorithm Based on Selective Acknowledgment (SACK) for TCP</title>
<author initials="E." surname="Blanton" fullname="E. Blanton"><organization/></author>
<author initials="M." surname="Allman" fullname="M. Allman"><organization/></author>
<author initials="L." surname="Wang" fullname="L. Wang"><organization/></author>
<author initials="I." surname="Jarvinen" fullname="I. Jarvinen"><organization/></author>
<author initials="M." surname="Kojo" fullname="M. Kojo"><organization/></author>
<author initials="Y." surname="Nishida" fullname="Y. Nishida"><organization/></author>
<date year="2012" month="August"/>
<abstract><t>This document presents a conservative loss recovery algorithm for TCP that is based on the use of the selective acknowledgment (SACK) TCP option.  The algorithm presented in this document conforms to the spirit of the current congestion control specification (RFC 5681), but allows TCP senders to recover more effectively when multiple segments are lost from a single flight of data. This document obsoletes RFC 3517 and describes changes from it.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name="RFC" value="6675"/>
<seriesInfo name="DOI" value="10.17487/RFC6675"/>
</reference>



<reference anchor="RFC5681" target="https://www.rfc-editor.org/info/rfc5681" quote-title="true">
<front>
<title>TCP Congestion Control</title>
<author initials="M." surname="Allman" fullname="M. Allman"><organization/></author>
<author initials="V." surname="Paxson" fullname="V. Paxson"><organization/></author>
<author initials="E." surname="Blanton" fullname="E. Blanton"><organization/></author>
<date year="2009" month="September"/>
<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="RFC5827" target="https://www.rfc-editor.org/info/rfc5827" quote-title="true">
<front>
<title>Early Retransmit for TCP and Stream Control Transmission Protocol (SCTP)</title>
<author initials="M." surname="Allman" fullname="M. Allman"><organization/></author>
<author initials="K." surname="Avrachenkov" fullname="K. Avrachenkov"><organization/></author>
<author initials="U." surname="Ayesta" fullname="U. Ayesta"><organization/></author>
<author initials="J." surname="Blanton" fullname="J. Blanton"><organization/></author>
<author initials="P." surname="Hurtig" fullname="P. Hurtig"><organization/></author>
<date year="2010" month="May"/>
<abstract><t>This document proposes a new mechanism for TCP and Stream Control Transmission Protocol (SCTP) that can be used to recover lost segments when a connection's congestion window is small.  The "Early Retransmit" mechanism allows the transport to reduce, in certain special circumstances, the number of duplicate acknowledgments required to trigger a fast retransmission.  This allows the transport to use fast retransmit to recover segment losses that would otherwise require a lengthy retransmission timeout.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name="RFC" value="5827"/>
<seriesInfo name="DOI" value="10.17487/RFC5827"/>
</reference>



<reference anchor="RFC6582" target="https://www.rfc-editor.org/info/rfc6582" quote-title="true">
<front>
<title>The NewReno Modification to TCP's Fast Recovery Algorithm</title>
<author initials="T." surname="Henderson" fullname="T. Henderson"><organization/></author>
<author initials="S." surname="Floyd" fullname="S. Floyd"><organization/></author>
<author initials="A." surname="Gurtov" fullname="A. Gurtov"><organization/></author>
<author initials="Y." surname="Nishida" fullname="Y. Nishida"><organization/></author>
<date year="2012" month="April"/>
<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>




    </references>

    <references title="Informative References">

<reference anchor="DAC" quote-title="true">
  <front>
    <title>Retransmission Loss Recovery by Duplicate Acknowledgement Counting</title>
    <author initials="." surname="Beomjoon Kim">
      <organization/>
    </author>
    <author initials="." surname="Jaiyong Lee">
      <organization/>
    </author>
    <date year="2004" month="January"/>
  </front>
  <seriesInfo name="IEEE Communications Letters, vol. 8, no. 1, pp. 69-71" value=""/>
</reference>
<reference anchor="LRD" quote-title="true">
  <front>
    <title>Lost Retransmission Detection for TCP SACK</title>
    <author initials="." surname="Beomjoon Kim">
      <organization/>
    </author>
    <author initials="." surname="Dongmin Kim">
      <organization/>
    </author>
    <author initials="." surname="Jaiyong Lee">
      <organization/>
    </author>
    <date year="2004" month="September"/>
  </front>
  <seriesInfo name="IEEE Communications Letters, vol. 8, no. 9, pp. 600-602" value=""/>
</reference>
<reference anchor="LRD2" quote-title="true">
  <front>
    <title>["Lost Retransmission Detection for TCP Part 2", "TCP using SACK option"]</title>
    <author initials="." surname="Beomjoon Kim">
      <organization/>
    </author>
    <author initials="." surname="Yong-Hoon Choi">
      <organization/>
    </author>
    <author initials="." surname="Jaiyong Lee">
      <organization/>
    </author>
    <author initials="." surname="Min-Seok Oh">
      <organization/>
    </author>
    <author initials="." surname="Jin-Sung Choi">
      <organization/>
    </author>
    <date year="2004" month="May"/>
  </front>
  <seriesInfo name="Proceedings of IFIP-TC6 Networking 2004, LNCS 3042, Springer-Verlag, vol. 3042, pp. 88-99" value=""/>
</reference>
<reference anchor="LRSF" quote-title="true">
  <front>
    <title>Loss Recovery in Short TCP/SCTP Flows</title>
    <author initials="." surname="Hurtig, P">
      <organization/>
    </author>
    <author initials="." surname="Garcia, J">
      <organization/>
    </author>
    <author initials="A." surname="Brunstrom">
      <organization/>
    </author>
    <date year="2006" month="December"/>
  </front>
  <seriesInfo name="Karlstad University Studies 2006:71" value=""/>
</reference>
<reference anchor="MM96a" quote-title="true">
  <front>
    <title>["Forward Acknowledgment", "Refining TCP Congestion Control"]</title>
    <author initials="." surname="Mathis, M">
      <organization/>
    </author>
    <author initials="J." surname="Mahdavi">
      <organization/>
    </author>
    <date year="1996" month="August"/>
  </front>
  <seriesInfo name="Proceedings of SIGCOMM 1996" value=""/>
</reference>
<reference anchor="MM96b" target="http://www.psc.edu/networking/papers/FACKnotes/current" quote-title="true">
  <front>
    <title>TCP Rate-Halving with Bounding Parameters</title>
    <author initials="." surname="Mathis, M">
      <organization/>
    </author>
    <author initials="J." surname="Mahdavi">
      <organization/>
    </author>
    <date year="2004" month="September"/>
  </front>
</reference>
<reference anchor="SACKPerf" target="http://projects.itri.aist.go.jp/gnet/sack-bug.html" quote-title="true">
  <front>
    <title>Improvement of Communication Performance of Linux TCP/IP by Fixing a Problem in Detection of Loss of Retransmission</title>
    <author initials="." surname="Kodama, Y">
      <organization/>
    </author>
    <author initials="." surname="Takano, R">
      <organization/>
    </author>
    <author initials="." surname="Okazaki, F">
      <organization/>
    </author>
    <author initials="T." surname="Kudoh">
      <organization/>
    </author>
    <date year="2008" month="March"/>
  </front>
</reference>
<reference anchor="TCPLat" quote-title="true">
  <front>
    <title>Modeling TCP Latency</title>
    <author initials="." surname="Cardwell, N">
      <organization/>
    </author>
    <author initials="." surname="Savage, S">
      <organization/>
    </author>
    <author initials="T." surname="Anderson">
      <organization/>
    </author>
    <date year="2000" month="March"/>
  </front>
  <seriesInfo name="Proceedings IEEE INFOCOM" value=""/>
</reference>
<reference anchor="sack-recovery-entry" target="http://tools.ietf.org/html/draft-ietf-tcpm-sack-recovery-entry-01" quote-title="true">
  <front>
    <title>Using TCP Selective Acknowledgement (SACK) Information to Determine Duplicate Acknowledgements for Loss Recovery Initiation</title>
    <author initials="." surname="Jarvinen, I">
      <organization/>
    </author>
    <author initials="M." surname="Kojo">
      <organization/>
    </author>
    <date year="2010" month="March"/>
  </front>
</reference>




<reference anchor="RFC8985" target="https://www.rfc-editor.org/info/rfc8985" quote-title="true">
<front>
<title>The RACK-TLP Loss Detection Algorithm for TCP</title>
<author initials="Y." surname="Cheng" fullname="Y. Cheng"><organization/></author>
<author initials="N." surname="Cardwell" fullname="N. Cardwell"><organization/></author>
<author initials="N." surname="Dukkipati" fullname="N. Dukkipati"><organization/></author>
<author initials="P." surname="Jha" fullname="P. Jha"><organization/></author>
<date year="2021" month="February"/>
<abstract><t>This document presents the RACK-TLP loss detection algorithm for TCP. RACK-TLP uses per-segment transmit timestamps and selective acknowledgments (SACKs) and has two parts. Recent Acknowledgment (RACK) starts fast recovery quickly using time-based inferences derived from acknowledgment (ACK) feedback, and Tail Loss Probe (TLP) leverages RACK and sends a probe packet to trigger ACK feedback to avoid retransmission timeout (RTO) events. Compared to the widely used duplicate acknowledgment (DupAck) threshold approach, RACK-TLP detects losses more efficiently when there are application-limited flights of data, lost retransmissions, or data packet reordering events. It is intended to be an alternative to the DupAck threshold approach.</t></abstract>
</front>
<seriesInfo name="RFC" value="8985"/>
<seriesInfo name="DOI" value="10.17487/RFC8985"/>
</reference>



<reference anchor="TLP" quote-title="true">
<front>
<title>Tail Loss Probe (TLP): An Algorithm for Fast Recovery of Tail Losses</title>

<author initials="N" surname="Dukkipati" fullname="Nandita Dukkipati">
    <organization/>
</author>

<author initials="N" surname="Cardwell" fullname="Neal Cardwell">
    <organization/>
</author>

<author initials="Y" surname="Cheng" fullname="Yuchung Cheng">
    <organization/>
</author>

<author initials="M" surname="Mathis" fullname="Matt Mathis">
    <organization/>
</author>

<date month="February" day="25" year="2013"/>

<abstract><t>Retransmission timeouts are detrimental to application latency, especially for short transfers such as Web transactions where timeouts can often take longer than all of the rest of a transaction. The primary cause of retransmission timeouts are lost segments at the tail of transactions.  This document describes an experimental algorithm for TCP to quickly recover lost segments at the end of transactions or when an entire window of data or acknowledgments are lost.  Tail Loss Probe (TLP) is a sender-only algorithm that allows the transport to recover tail losses through fast recovery as opposed to lengthy retransmission timeouts.  If a connection is not receiving any acknowledgments for a certain period of time, TLP transmits the last unacknowledged segment (loss probe).  In the event of a tail loss in the original transmissions, the acknowledgment from the loss probe triggers SACK/FACK based fast recovery.  TLP effectively avoids long timeouts and thereby improves TCP performance.</t></abstract>

</front>

<seriesInfo name="Internet-Draft" value="draft-dukkipati-tcpm-tcp-loss-probe-01"/>
<format type="TXT" target="http://www.ietf.org/internet-drafts/draft-dukkipati-tcpm-tcp-loss-probe-01.txt"/>
</reference>



<reference anchor="RFC3517" target="https://www.rfc-editor.org/info/rfc3517" quote-title="true">
<front>
<title>A Conservative Selective Acknowledgment (SACK)-based Loss Recovery Algorithm for TCP</title>
<author initials="E." surname="Blanton" fullname="E. Blanton"><organization/></author>
<author initials="M." surname="Allman" fullname="M. Allman"><organization/></author>
<author initials="K." surname="Fall" fullname="K. Fall"><organization/></author>
<author initials="L." surname="Wang" fullname="L. Wang"><organization/></author>
<date year="2003" month="April"/>
<abstract><t>This document presents a conservative loss recovery algorithm for TCP that is based on the use of the selective acknowledgment (SACK) TCP option.  The algorithm presented in this document conforms to the spirit of the current congestion control specification (RFC 2581), but allows TCP senders to recover more effectively when multiple segments are lost from a single flight of data.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name="RFC" value="3517"/>
<seriesInfo name="DOI" value="10.17487/RFC3517"/>
</reference>



<reference anchor="RFC3782" target="https://www.rfc-editor.org/info/rfc3782" quote-title="true">
<front>
<title>The NewReno Modification to TCP's Fast Recovery Algorithm</title>
<author initials="S." surname="Floyd" fullname="S. Floyd"><organization/></author>
<author initials="T." surname="Henderson" fullname="T. Henderson"><organization/></author>
<author initials="A." surname="Gurtov" fullname="A. Gurtov"><organization/></author>
<date year="2004" month="April"/>
<abstract><t>The purpose of this document is to advance NewReno TCP's Fast Retransmit and Fast Recovery algorithms in RFC 2582 from Experimental to Standards Track status.  The main change in this document relative to RFC 2582 is to specify the Careful variant of NewReno's Fast Retransmit and Fast Recovery algorithms.  The base algorithm described in RFC 2582 did not attempt to avoid unnecessary multiple Fast Retransmits that can occur after a timeout.  However, RFC 2582 also defined "Careful" and "Less Careful" variants that avoid these unnecessary Fast Retransmits, and recommended the Careful variant.  This document specifies the previously-named "Careful" variant as the basic version of NewReno TCP.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name="RFC" value="3782"/>
<seriesInfo name="DOI" value="10.17487/RFC3782"/>
</reference>



<reference anchor="SRE" quote-title="true">
<front>
<title>Using TCP Selective Acknowledgement (SACK) Information to Determine Duplicate Acknowledgements for Loss Recovery Initiation</title>

<author initials="I" surname="Jarvinen" fullname="Ilpo Jarvinen">
    <organization/>
</author>

<author initials="M" surname="Kojo" fullname="Markku Kojo">
    <organization/>
</author>

<date month="March" day="8" year="2010"/>

<abstract><t>This document describes a TCP sender algorithm to trigger loss recovery based on the TCP Selective Acknowledgement (SACK) information gathered on a SACK scoreboard instead of simply counting the number of arriving duplicate acknowledgements (ACKs) in the traditional way.  The given algorithm is more robust to ACK losses, ACK reordering, missed duplicate acknowledgements due to delayed acknowledgements, and extra duplicate acknowledgements due to duplicated segments and out-of-window segments. The algorithm allows not only a timely initiation of TCP loss recovery but also reduces false fast retransmits.  It has a low implementation cost on top of the SACK scoreboard defined in RFC 3517.</t></abstract>

</front>

<seriesInfo name="Internet-Draft" value="draft-ietf-tcpm-sack-recovery-entry-01"/>
<format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-tcpm-sack-recovery-entry-01.txt"/>
</reference>



<reference anchor="RFC7323" target="https://www.rfc-editor.org/info/rfc7323" quote-title="true">
<front>
<title>TCP Extensions for High Performance</title>
<author initials="D." surname="Borman" fullname="D. Borman"><organization/></author>
<author initials="B." surname="Braden" fullname="B. Braden"><organization/></author>
<author initials="V." surname="Jacobson" fullname="V. Jacobson"><organization/></author>
<author initials="R." surname="Scheffenegger" fullname="R. Scheffenegger" role="editor"><organization/></author>
<date year="2014" month="September"/>
<abstract><t>This document specifies a set of TCP extensions to improve performance over paths with a large bandwidth * delay product and to provide reliable operation over very high-speed paths.  It defines the TCP Window Scale (WS) option and the TCP Timestamps (TS) option and their semantics.  The Window Scale option is used to support larger receive windows, while the Timestamps option can be used for at least two distinct mechanisms, Protection Against Wrapped Sequences (PAWS) and Round-Trip Time Measurement (RTTM), that are also described herein.</t><t>This document obsoletes RFC 1323 and describes changes from it.</t></abstract>
</front>
<seriesInfo name="RFC" value="7323"/>
<seriesInfo name="DOI" value="10.17487/RFC7323"/>
</reference>



<reference anchor="RFC8312" target="https://www.rfc-editor.org/info/rfc8312" quote-title="true">
<front>
<title>CUBIC for Fast Long-Distance Networks</title>
<author initials="I." surname="Rhee" fullname="I. Rhee"><organization/></author>
<author initials="L." surname="Xu" fullname="L. Xu"><organization/></author>
<author initials="S." surname="Ha" fullname="S. Ha"><organization/></author>
<author initials="A." surname="Zimmermann" fullname="A. Zimmermann"><organization/></author>
<author initials="L." surname="Eggert" fullname="L. Eggert"><organization/></author>
<author initials="R." surname="Scheffenegger" fullname="R. Scheffenegger"><organization/></author>
<date year="2018" month="February"/>
<abstract><t>CUBIC is an extension to the current TCP standards.  It differs from the current TCP standards only in the congestion control algorithm on the sender side.  In particular, it uses a cubic function instead of a linear window increase function of the current TCP standards to improve scalability and stability under fast and long-distance networks.  CUBIC and its predecessor algorithm have been adopted as defaults by Linux and have been used for many years.  This document provides a specification of CUBIC to enable third-party implementations and to solicit community feedback through experimentation on the performance of CUBIC.</t></abstract>
</front>
<seriesInfo name="RFC" value="8312"/>
<seriesInfo name="DOI" value="10.17487/RFC8312"/>
</reference>



<reference anchor="RFC6937" target="https://www.rfc-editor.org/info/rfc6937" quote-title="true">
<front>
<title>Proportional Rate Reduction for TCP</title>
<author initials="M." surname="Mathis" fullname="M. Mathis"><organization/></author>
<author initials="N." surname="Dukkipati" fullname="N. Dukkipati"><organization/></author>
<author initials="Y." surname="Cheng" fullname="Y. Cheng"><organization/></author>
<date year="2013" month="May"/>
<abstract><t>This document describes an experimental Proportional Rate Reduction (PRR) algorithm as an alternative to the widely deployed Fast Recovery and Rate-Halving algorithms.  These algorithms determine the amount of data sent by TCP during loss recovery.  PRR minimizes excess window adjustments, and the actual window size at the end of recovery will be as close as possible to the ssthresh, as determined by the congestion control algorithm.</t></abstract>
</front>
<seriesInfo name="RFC" value="6937"/>
<seriesInfo name="DOI" value="10.17487/RFC6937"/>
</reference>




    </references>


<section anchor="lost-retransmission-detection-example" title="Lost Retransmission Detection Example" numbered="true" toc="default">

<t>The following lengthy graph shows the intended behavior under
pathological packet loss, where every third segment is lost.  Note
that SACK LRD will not be able to recover, if the loss ratio during
recovery is higher than about 50%, due to the congestion window
reduction.</t>

<t>For clarity, each segment is denoted only via a single number.  Note
that the ACKs are also given with the segement they ack, not the next
sequence number.</t>

<section anchor="lost-retransmission-mid-stream" title="Lost Retransmission, Mid-Stream" numbered="true" toc="default">
<figure anchor="Fig1" title="" suppress-title="false" align="left" alt="" width="" height=""><artwork align="center" xml:space="preserve" name="" type="" alt="" width="" height="">
   ACK          Transmitted  Received    ACK Sent
   Received     Segment      Segment     (Including SACK Blocks)

   1000
                5000-5499    5000-5499   (delayed ACK)
                5500-5999    5500-5999
                                         6000
   2000
                6000-6499    (dropped)
                6500-6999    (dropped)
   3000
                7000-7499    (dropped)
                7500-7999    (dropped)
   4000
                8000-8499    (dropped)
                8500-8999    (dropped)
   5000
                9000-9499    9000-9499
                                         6000; 9000-9500
                9500-9999    9500-9999
                                         6000; 9000-10000
   6000
                10000-10499  10000-10499
                                         6000; 9000-10500
                10500-10999  10000-10999
                                         6000; 9000-11000

   6000; 9000-9500
   (lim. tr.)   11000-11499  11000-11499
                                         6000; 9000-11500
   6000; 9000-10000
   (lim. tr.)   11500-11999  11500-11999 (end-of-stream)
                                         6000; 9000-12000

   6000; 9000-10500
   (fast retr.) 6000-6499    (dropped)   [^1]

   6000; 9000-11000

   6000; 9000-11500
                6500-6999    6500-6999   [^2]
                                         6000; 6500-7000,9000-12000
   6000; 9000-12000

   6000; 6500-7000,9000-12000
                7000-7499    7000-7499   [^2]
                                         6000; 6500-7500,9000-12000
   6000; 6500-7500,9000-12000
                7500-7999    7500-7999   \[mark 8999*\]
                                         6000; 6500-8000,9000-12000
   6000; 6500-8000,9000-12000            (trigger 6000-6499)
                6000-6499    6000-6499   \[mark 8999*\]
                                         8000; 9000-12000
   8000; 9000-12000
                8000-8499    8000-8499   \[mark 8999*\]
                                         8500; 9000-12000
   8500; 9000-12000
                8500-8999    8500-8999   \[mark 12499**\]
                                         12000
   12000                                 (exit loss recovery)
</artwork></figure>


</section>
</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>
