I'm having a hard time understanding this conceptually.
Why does TCP Reno cut its congestion window in half when it detects triple duplicate ACKs and cuts its window to 1 segment when it times out?
I understand that Reno does this, but I'm not understanding exactly why. Any help?
Best Answer
The short answer
The long answer
Compare to
TCP Tahoe
, which has only two stateSlow Start
andCongestion Avoidance
,TCP Reno
has another state calledFast Recovery
.On a triple duplicate
Ack
,TCP Reno
transitions toFast Recovery
.In the
Fast Recovery
state, it transitions back toCongestion Avoidance
when it receives a newAck
, resetting the congestion window to be half of the congestion window size when it transitioned to theFast Recovery
state.On a timeout, it returns to
Slow Start
just as inCongestion Avoidance
.On receiving a duplicate
Ack
, it increments the congestion window by 1. (Congestion Window Inflation)The reason not entering
Slow Start
state (meaning reduce the congestion window to 1) because receiving duplicateAck
tells TCP more than just a packet has been lost. The receiver can only generate the duplicateAck
when another segment is received, that segment has left the network and is in the receiver's buffer.So still having data flowing between the two ends, and
TCP Reno
doesn't want to reduce the flow suddenly.By halving the congestion window, staying in the
Congestion Avoidance
state,TCP Reno
improves network performance.You can see a simple test about perfomance of
TCP Reno
andTCP Tahoe
in this link.