RFC 3517 (rfc3517) - Page 2 of 13


A Conservative Selective Acknowledgment (SACK)-based Loss Recovery Algorithm for TCP



Alternative Format: Original Text Document



RFC 3517            SACK-based Loss Recovery for TCP          April 2003


1   Introduction

   This document presents a conservative loss recovery algorithm for TCP
   that is based on the use of the selective acknowledgment (SACK) TCP
   option.  While the TCP SACK [RFC 2018] is being steadily deployed in
   the Internet [All00], there is evidence that hosts are not using the
   SACK information when making retransmission and congestion control
   decisions [PF01].  The goal of this document is to outline one
   straightforward method for TCP implementations to use SACK
   information to increase performance.

   [RFC 2581] allows advanced loss recovery algorithms to be used by TCP
   [RFC 793] provided that they follow the spirit of TCP's congestion
   control algorithms [RFC 2581, RFC 2914].  [RFC 2582] outlines one such
   advanced recovery algorithm called NewReno.  This document outlines a
   loss recovery algorithm that uses the SACK [RFC 2018] TCP option to
   enhance TCP's loss recovery.  The algorithm outlined in this
   document, heavily based on the algorithm detailed in [FF96], is a
   conservative replacement of the fast recovery algorithm [Jac90,
   RFC 2581].  The algorithm specified in this document is a
   straightforward SACK-based loss recovery strategy that follows the
   guidelines set in [RFC 2581] and can safely be used in TCP
   implementations.  Alternate SACK-based loss recovery methods can be
   used in TCP as implementers see fit (as long as the alternate
   algorithms follow the guidelines provided in [RFC 2581]).  Please
   note, however, that the SACK-based decisions in this document (such
   as what segments are to be sent at what time) are largely decoupled
   from the congestion control algorithms, and as such can be treated as
   separate issues if so desired.

2   Definitions

   The reader is expected to be familiar with the definitions given in
   [RFC 2581].

   The reader is assumed to be familiar with selective acknowledgments
   as specified in [RFC 2018].

   For the purposes of explaining the SACK-based loss recovery algorithm
   we define four variables that a TCP sender stores:

      "HighACK" is the sequence number of the highest byte of data that
      has been cumulatively ACKed at a given point.

      "HighData" is the highest sequence number transmitted at a given
      point.





Blanton, et al.             Standards Track