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