TCP slow start and congestion control
In short: TCP feels its way slowly toward the available bandwidth when sending and throttles immediately when packets are lost. This avoids overloading the network.
In more detail: At the start TCP sends only a few packets (small congestion window). With each acknowledgment the window grows, initially exponentially (“slow start”). On packet loss it shrinks and then grows only carefully.
In Depth
- Slow start: The window doubles per round trip until a threshold is reached.
- Congestion avoidance: After that only linear growth.
- Loss as signal: Classic algorithms (Reno, CUBIC) read loss as congestion. BBR estimates bandwidth and delay instead.
- Consequence for the web: Small files end before TCP gets fast. That is why few, small requests and reused connections matter.
- Window: The actual send window is the minimum of the congestion and receive windows.
See also: HTTP keep-alive