slow start
When you walk into a completely dark room, you do not sprint — but you also do not creep at a snail's pace forever. You take a careful first step, and if nothing trips you, you grow bolder fast, roughly doubling your stride confidence until you sense a wall. Slow start is TCP doing exactly this at the beginning of a connection: it has no idea how much capacity the path has, so it starts small and then ramps up surprisingly quickly to find the ceiling.
Despite the name, slow start is not slow — it is exponential. The sender begins with a small congestion window (today typically about 10 packets) and, for every batch of data acknowledged in a round trip, it roughly DOUBLES the window. So the window goes 10, 20, 40, 80 packets per RTT, climbing geometrically. This continues until one of two things happens: a packet is lost (a sign the path is full), or the window reaches a stored ceiling called the slow-start threshold (ssthresh), at which point TCP switches to the gentler, linear congestion-avoidance phase. The name is historical: compared to the old behaviour of blasting a full window's worth of packets instantly, even this exponential ramp was a much slower, safer start.
Slow start runs at the start of every connection and again after a serious stall — specifically after a retransmission timeout, when TCP resets its window right down to one or a few packets and ramps up afresh. It exists because diving straight in at full speed is how the 1980s Internet collapsed; probing upward quickly but from a humble start lets TCP find a fast path in a handful of round trips without overwhelming the network on the very first burst.
A new download starts with cwnd = 10 packets. Round 1: send 10, all 10 are acknowledged, double to 20. Round 2: send 20, all acknowledged, double to 40. Round 3: 80. Round 4: 160. In just four round trips the sender has gone from 10 to 160 packets in flight — far from slow, until a loss or ssthresh stops the doubling.
Slow start doubles the window each round trip — exponential growth that ends at the first loss or at ssthresh.
The name misleads: slow start is exponential, the fastest-growing phase of TCP. What is slow is the starting point (a tiny window), not the growth rate. Short transfers like small web pages may finish entirely inside slow start, never reaching steady-state speed — one reason latency, not bandwidth, dominates the web.