Slow-start
From Wikipedia, the free encyclopedia
Slow-start is part of the congestion control strategy used by TCP, the data transmission protocol used by many Internet applications, such as HTTP and Secure Shell. Slow-start is used in conjunction with other algorithms to avoid sending more data than the network is capable of transmitting, that is, network congestion.
Contents |
[edit] Algorithm
Slow-start works by increasing the TCP congestion window size until acknowledgements are not received for some segments[disambiguation needed]. TCP assumes this loss is due to network congestion, and takes steps to reduce the offered load on the network. A slow-start algorithm consists of two distinct phases: the exponential growth phase, and the linear growth phase.
Although the strategy is referred to as "slow-start", its congestion window growth is quite aggressive. (Jacobsen, 1988)
[edit] Basic Slow-Start
The algorithm begins in the exponential growth phase initially with 1 or 2 segments (depending on the variant), and increases the congestion window size exponentially (cwnd = cwnd * 2) until a predefined slow-start threshold is reached. Once the threshold is reached, the congestion window size is increased linearly (cwnd = cwnd + (1÷cwnd)). When segment acknowledgements are not received, the slow-start threshold is set to half of the current congestion window size, and the algorithm restarts.
[edit] Fast Recovery
There is a variation to the slow-start algorithm known as fast recovery. In the fast recovery algorithm, when packets (detected through 3 duplicate ACKs) are not received, the congestion window size is reduced to the slow-start threshold, rather than the smaller initial value.
[edit] Problems
Slow-start assumes that unacknowledged segments are due to network congestion. While this is an acceptable assumption for many networks, segments may be lost for other reasons, such as poor data link layer transmission quality. Thus, slow-start can perform poorly in situations with poor reception, such as wireless networks.