RFC 2001 (rfc2001) - Page 2 of 6
TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms
Alternative Format: Original Text Document
RFC 2001 TCP January 1997
The algorithm to avoid this is called slow start. It operates by
observing that the rate at which new packets should be injected into
the network is the rate at which the acknowledgments are returned by
the other end.
Slow start adds another window to the sender's TCP: the congestion
window, called "cwnd". When a new connection is established with a
host on another network, the congestion window is initialized to one
segment (i.e., the segment size announced by the other end, or the
default, typically 536 or 512). Each time an ACK is received, the
congestion window is increased by one segment. The sender can
transmit up to the minimum of the congestion window and the
advertised window. The congestion window is flow control imposed by
the sender, while the advertised window is flow control imposed by
the receiver. The former is based on the sender's assessment of
perceived network congestion; the latter is related to the amount of
available buffer space at the receiver for this connection.
The sender starts by transmitting one segment and waiting for its
ACK. When that ACK is received, the congestion window is incremented
from one to two, and two segments can be sent. When each of those
two segments is acknowledged, the congestion window is increased to
four. This provides an exponential growth, although it is not
exactly exponential because the receiver may delay its ACKs,
typically sending one ACK for every two segments that it receives.
At some point the capacity of the internet can be reached, and an
intermediate router will start discarding packets. This tells the
sender that its congestion window has gotten too large.
Early implementations performed slow start only if the other end was
on a different network. Current implementations always perform slow
start.
2. Congestion Avoidance
Congestion can occur when data arrives on a big pipe (a fast LAN) and
gets sent out a smaller pipe (a slower WAN). Congestion can also
occur when multiple input streams arrive at a router whose output
capacity is less than the sum of the inputs. Congestion avoidance is
a way to deal with lost packets. It is described in [2].
The assumption of the algorithm is that packet loss caused by damage
is very small (much less than 1%), therefore the loss of a packet
signals congestion somewhere in the network between the source and
destination. There are two indications of packet loss: a timeout
occurring and the receipt of duplicate ACKs.
Stevens Standards Track