What is TCP Slow Start?
Learn how TCP slow start ramps the congestion window exponentially, when it ends, and how it hands off to congestion avoidance.
Expected Interview Answer
TCP slow start is the initial phase of congestion control where a new (or recovering) connection begins sending with a small congestion window and roughly doubles it every round-trip time as ACKs confirm successful delivery, until it reaches a threshold (ssthresh) or detects loss, at which point it switches to the more conservative congestion avoidance phase.
A connection starts with cwnd set to a small initial value (historically a few segments, larger by modern RFC recommendations), and for every ACK received, cwnd increases by roughly one segment — since a full window of ACKs arrives per round-trip, this produces exponential growth, doubling cwnd approximately once per RTT. This exponential ramp exists because the sender has no information yet about how much capacity the path can actually sustain, so it probes aggressively at first rather than wasting round-trips growing linearly from nothing. Slow start ends either when cwnd reaches ssthresh (a remembered estimate of safe capacity from a prior loss event) and the connection transitions to congestion avoidance’s linear growth, or when packet loss is detected, at which point ssthresh is updated and the window is reduced. Slow start also re-triggers after a connection has been idle for a while or after a severe timeout, since the sender can no longer trust its old cwnd estimate reflects current network conditions.
- Quickly ramps up throughput from a safe starting point without prior knowledge of capacity
- Avoids wasting round-trips with a purely linear ramp from zero
- Uses ssthresh to hand off smoothly into conservative congestion avoidance
- Re-engages after idle periods or timeouts when network state is stale
AI Mentor Explanation
TCP slow start is like a new batter starting an innings by taking a single run cautiously off the first ball, then doubling their intent each subsequent over as the pitch proves safe — from one run, to roughly two, to four — rather than either standing frozen or swinging for a six immediately with no information about the bowling. This rapid-but-controlled doubling continues until either a target run rate (ssthresh) is reached, at which point they settle into a steadier accumulation, or a wicket-threatening shot forces a reset to cautious batting. The doubling is deliberately fast at first because early overs carry no information about the bowling attack, exactly why TCP ramps its congestion window exponentially before any loss data exists.
Step-by-Step Explanation
Step 1
Initial window
A new connection starts with a small congestion window (a few segments per current RFC guidance).
Step 2
Exponential growth
cwnd increases by roughly one segment per ACK, which doubles the window approximately every round-trip.
Step 3
Threshold reached
Once cwnd reaches ssthresh, the connection transitions to the slower, linear congestion avoidance phase.
Step 4
Loss or idle reset
Packet loss or a long idle period drops the window and restarts slow start with an updated ssthresh.
What Interviewer Expects
- Correct definition: exponential ramp-up phase of congestion control
- Explains why growth is exponential (roughly doubling per RTT) rather than linear
- Knows slow start ends at ssthresh or on loss, handing off to congestion avoidance
- Aware slow start can re-trigger after idle periods or a timeout
Common Mistakes
- Confusing slow start with congestion avoidance’s linear growth
- Thinking “slow” means the window stays small the whole connection
- Not knowing ssthresh determines when slow start ends
- Forgetting slow start re-engages after idle connections or severe timeouts
Best Answer (HR Friendly)
“TCP slow start is how a new connection ramps up its sending rate carefully at first, roughly doubling how much data it sends each round-trip as long as things go smoothly, because it has no idea yet how much the network can handle. Once it gets close to a known safe level, or if it hits a problem, it slows its growth down or resets, so it never blindly floods the network from the very first packet.”
Code Example
# Watch the congestion window (cwnd) grow for an active connection
watch -n 0.2 'ss -tin dst example.com'
# Example output field during slow start:
# cwnd:10 ssthresh:64 rtt:24.1/2.3
# Capture a fresh connection to observe the initial exponential ramp
sudo tcpdump -n -i any 'tcp port 443 and host example.com'Follow-up Questions
- What is ssthresh and how is it initially set versus updated after loss?
- How does slow start differ from congestion avoidance in growth rate?
- Why does TCP restart slow start after a long idle period?
- What is the initial congestion window value recommended by modern RFCs, and why was it increased?
MCQ Practice
1. During slow start, roughly how fast does the congestion window grow?
Each ACK increases cwnd by about one segment, and since a full window of ACKs returns per RTT, cwnd roughly doubles each round-trip.
2. What ends the slow start phase under normal conditions?
Slow start ends when cwnd reaches ssthresh (switching to congestion avoidance) or when loss is detected.
3. When does a TCP connection typically re-enter slow start?
A long idle period or a timeout means the sender can no longer trust its old cwnd estimate, so slow start restarts.
Flash Cards
What is TCP slow start? — The initial congestion-control phase where cwnd grows exponentially (roughly doubling per RTT) from a small starting value.
Why exponential, not linear? — The sender has no data on path capacity yet, so it probes quickly rather than wasting round-trips ramping linearly.
What ends slow start? — cwnd reaching ssthresh (moves to congestion avoidance) or detected packet loss.
When does slow start re-trigger? — After a long idle period or a severe retransmission timeout, since old cwnd is stale.