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



