The short answer
- It makes your pipe full and improve your throughput.
The long answer
TCP Tahoe, which has only two state
Slow Start and
TCP Reno has another state called
On a triple duplicate
TCP Reno transitions to
Fast Recovery state, it transitions back to
Avoidance when it receives a new
Ack, resetting the congestion
window to be half of the congestion window size when it transitioned
Fast Recovery state.
On a timeout, it returns to
Slow Start just as in
On receiving a duplicate
Ack, it increments the
congestion window by 1. (Congestion Window Inﬂation)
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
in this link.