In this illustration, a black arrow extends diagonally downward from right to left, and points to a blue circle labeled "Slow start." This arrow has two labels separated by a black line. On top: Captial lambda.

On bottom: "cwnd=1 MSS ssthresh=64 KB dupACKcount=0."

A small blue arrow extends from the top left side of the circle and travels in a clockwise motion to the top of the same circle. This arrow has two labels. On top: "duplicate ACK."

On bottom: "dupACKcount++."

A small blue arrow extends from the top right side of the circle and travels in a clockwise motion to the right side of the same circle. This arrow has two labels. On top: "new ACK."

On bottom: "cwnd=cwnd+MSS ?dupACKcount=0 ?transmit new segment(s), as allowed (in blue)."

A blue arrow extends horizontally rightward to a second blue circle. The arrow has two labels. On top: "cwnd (greater than) ssthresh." On bottom: Capital lambda. The second blue circle is labeled "Congestion avoidance." A blue arrow extends horizontally from this circle back to the first. This arrow has two labels. On top: "timeout."

On bottom: "ssthresh=cwnd/2 cwnd=1 MSS dupACKcount=0 retransmit missing segment (in blue)." A smaller blue arrow extends from the top of the "Congestion avoidance" circle and travels in a clockwise motion to the right side of the same circle. This arrow has two labels. On top: "new ACK."

On bottom: "cwnd=cwnd+MSS o(MSS/cwnd) dupACKcount=0 ?transmit new segment(s), as allowed (in blue)."

A smaller arrow extends from the right side of the circle and travels in a clockwise motion to the bottom right side of the same circle. This arrow has two labels. On top: "duplicate ACK."

On bottom: "dupACKcount++."

A blue arrow extends from the bottom of this circle, downward and to the left, to a third blue circle, labeled "Fast recovery." This arrow has two labels. On top: "dupACKcount==3."

On bottom: "ssthresh=cwnd/2 cwnd=ssthresh+3oMSS retransmit missing segment (in blue)."

A second arrow extends from the third circle back to the second. This arrow has two labels. On top: "new ACK."

On bottom: "cwnd=ssthresh dupACKcount=0."

A smaller blue arrow extends from the bottom right side of the third circle and travels in a clockwise motion to the bottom left side of the same circle. This arrow has two labels. On top: "duplicate ACK."

On bottom: "cwnd=cwnd+MSS transmit new segment(s), as allowed (in blue)."

A blue arrow extends from the left side of the third circle, upwards and to the left, back to the first circle (Slow start). This arrow has two labels. On top: "timeout."

On bottom: "ssthresh=cwnd/2? cwnd=1? dupACKcount=0 ?retransmit missing segment (in blue)."

A second arrow extends from the first circle back to the third. This arrow has two labels. On top: "dupACKcount==3."

On bottom: "ssthresh=cwnd/2 cwnd=ssthresh+3oMSS retransmit missing segment (in blue)."

A smaller blue arrow extends from the bottom left side of the first circle and travels in a clockwise motion to the left side of the same circle. This arrow has two labels. On top: "timeout."

On bottom: "ssthresh=cwnd/2 cwnd=1 MSS dupACKcount=0 retransmit missing segment (in blue)."