Which behaviour of TCP Reno after 3 DUP ACK is correct:

I guess, it's the Italian Wikipedia that is right, since also the FSM in the book "Computer Networking: A Top-Down Approach, Kurose & Ross" shows it like that (http://www.linyibin.cn/images/Technology-ComputerNetworking-Internet-TCP-CongestionControl.png).

Is there a (good) reason why many sources neglect the term "+3*MSS"?

  • Did any answer help you? if so, you should accept the answer so that the question does not keep popping up forever, looking for an answer. Alternatively, you could post and accept your own answer.
    – Ron Maupin
    Commented Dec 23, 2021 at 20:56

2 Answers 2


When TCP Reno sender gets 3 duplicate ACKs, it enters a so called fast retransmit mode. The idea of this mode is that a) since ACKs are delivered it indicates that packets are leaving the network b) if a packet leaves a network, the sender can inject new packet in the network. Duplicate ACK indicates that a packet has left the network. Fast retransmit increases congestion window for each duplicate ACK received. This is called "inflating". The 3 MSS (3 segments) are added upon entering, because 3 duplicate ACKs were already received. Now, this increase persists only in fast retransmit. When the mode is exited, congestion window is set to sstresh (which is cwnd_old/2, i.e., congestion window before the first duplicate ACK is received/2).

So, on 3 dupacks the sender does:

  • set sstresh = cwnd/2
  • set cwnd = sstresh
  • enter fast recovery (upon entering increase cwnd by 3 segments to account for already received dupacks cwnd=cwnd + 3 MSS)
  • in fast recovery increase cwnd by 1 segment on each duplicate ack
  • when first non-duplicate ack is received exit fast recovery; set cwnd = sstresh (without 3 extra segments!)

So, technically these two sources described the state at 2 different points in time.

(fast retransmit specification here: https://datatracker.ietf.org/doc/html/rfc5681#section-3.2)


From Computer Networking A Top-Down Approach 6th Edition by Kurose & Ross linked to in English Wikipedia:

The congestion window then climbs linearly until a triple duplicate- ACK event occurs, just after transmission round 8. Note that the congestion window is 12 • MSS when this loss event occurs. The value of ssthresh is then set to 0.5 • cwnd = 6 • MSS. Under TCP Reno, the congestion window is set to cwnd = 6 • MSS and then grows linearly. Under TCP Tahoe, the congestion window is set to 1 MSS and grows exponentially until it reaches the value of ssthresh, at which point it grows linearly.

Potentially, cwnd_new = cwnd_old / 2 + 3 * MSS is counter-productive for a very small window when the value actually grows.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.