The short answer
- It makes your pipe full and improve your throughput.
The long answer
Compare to TCP Tahoe
, which has only two state Slow Start
and
Congestion Avoidance
, TCP Reno
has another state called Fast Recovery
.
On a triple duplicate Ack
,TCP Reno
transitions to Fast Recovery
.
In the Fast Recovery
state, it transitions back to Congestion
Avoidance
when it receives a new Ack
, resetting the congestion
window to be half of the congestion window size when it transitioned
to the Fast Recovery
state.
On a timeout, it returns to Slow Start
just as in Congestion
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 duplicate Ack
tells TCP more than just a packet has been lost. The receiver can only generate the duplicate Ack
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
and TCP Tahoe
in this link.