What are slow-start and congestion avoidance algorithms ?
Slow-start algorithm is part of the congestion control in TCP, designed to avoid sending more data than the network is capable of transmitting.
Slow-start algorithm works by increasing the TCP Window by one segment for each acknowledged segment. This behavior effectively doubles the TCP Window size each round trip of the network.
The algorithm continues increasing until this "congestion window" (cwnd) reaches the size of the receivers advertised TCP Receive Window (RWIN), or until packet loss occurs.
If packet loss occurs, TCP assumes this it is due to network congestion and takes steps to reduce the offered load on the network. TCP then enters the linear growth (congestion avoidance) phase. At this point, the window is increased linearly by 1 segment for each RTT.
There is a variation to the slow-start algorithm known as fast recovery. In the fast recovery algorithm, during congestion avoidance mode, when packets (detected through 3 duplicate ACKs) are not received, the congestion window size is reduced to half it's size (slow-start treshold) rather than the much smaller initial value.
See also: RFC 2001