In the mid-1980s, the Internet experienced its first major "Congestion Collapse." So much data was being pumped into the network that routers couldn't process it all. Routers began dropping packets. Senders, noticing the lost packets, immediately retransmitted them, adding even more traffic to the already overloaded routers. Throughput dropped to near zero.
To prevent the Internet from destroying itself, Van Jacobson implemented Congestion Control into the TCP protocol.
It is vital to understand the difference between these two concepts:
cwnd).The actual amount of data a TCP sender is allowed to transmit without waiting for an acknowledgment is the minimum of the Receive Window and the Congestion Window.
TCP probes the network to see how much bandwidth is available. It does this using the AIMD principle:
cwnd every time an ACK is successfully received).cwnd by 0.5).This creates a characteristic "sawtooth" pattern in TCP throughput graphs. It slowly climbs up until a packet drops, sharply cuts in half, and slowly climbs again.
If a client connects to a server to download a file, Additive Increase is too slow. If it starts by sending 1 packet, then 2 packets, then 3 packets, it would take forever to reach a 1-Gigabit connection speed.
Slow Start is an algorithm used at the very beginning of a connection to rapidly find the network's capacity.
cwnd starts at 1 segment.cwnd by 1.Once the cwnd hits a predefined threshold (called the ssthresh), or a packet is lost, TCP switches from the exponential Slow Start phase to the linear Congestion Avoidance phase (the Additive Increase phase).
If a severe congestion event occurs (detected by a Timeout—meaning the sender waited a very long time and received absolutely no ACKs), TCP assumes the network is completely dead. It cuts the cwnd all the way back down to 1 segment and restarts the entire Slow Start process from scratch.