RFC 2001 (rfc2001) - Page 1 of 6


TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms



Alternative Format: Original Text Document



Network Working Group                                         W. Stevens
Request for Comments: 2001                                          NOAO
Category: Standards Track                                   January 1997


                 TCP Slow Start, Congestion Avoidance,
             Fast Retransmit, and Fast Recovery Algorithms

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   Modern implementations of TCP contain four intertwined algorithms
   that have never been fully documented as Internet standards:  slow
   start, congestion avoidance, fast retransmit, and fast recovery.  [2]
   and [3] provide some details on these algorithms, [4] provides
   examples of the algorithms in action, and [5] provides the source
   code for the 4.4BSD implementation.  RFC 1122 requires that a TCP
   must implement slow start and congestion avoidance (Section 4.2.2.15
   of [1]), citing [2] as the reference, but fast retransmit and fast
   recovery were implemented after RFC 1122.  The purpose of this
   document is to document these four algorithms for the Internet.

Acknowledgments

   Much of this memo is taken from "TCP/IP Illustrated, Volume 1:  The
   Protocols" by W. Richard Stevens (Addison-Wesley, 1994) and "TCP/IP
   Illustrated, Volume 2: The Implementation" by Gary R. Wright and W.
   Richard Stevens (Addison-Wesley, 1995).  This material is used with
   the permission of Addison-Wesley.  The four algorithms that are
   described were developed by Van Jacobson.

1.  Slow Start

   Old TCPs would start a connection with the sender injecting multiple
   segments into the network, up to the window size advertised by the
   receiver.  While this is OK when the two hosts are on the same LAN,
   if there are routers and slower links between the sender and the
   receiver, problems can arise.  Some intermediate router must queue
   the packets, and it's possible for that router to run out of space.
   [2] shows how this naive approach can reduce the throughput of a TCP
   connection drastically.



Stevens                     Standards Track