I was reading a textbook which describes how TCP managing the retransmission timeout interval as:

TimeoutInterval = EstimatedRTT + 4 *DevRTT

An initial TimeoutInterval value of 1 second is recommended. Also, when a timeout occurs, the value of TimeoutInterval is doubled to avoid a premature timeout occurring for a subsequent segment that will soon be acknowledged. However, as soon as a segment is received and EstimatedRTT is updated, the TimeoutInterval is again computed using the formula above.

I don't understand why TimeoutInterval needs to be doubled, because each packet has its own timer?


TCP generally uses multiplicative back-off to slow transmission (assuming there is network congestion) and additive speed-up to increase transmission rate (assuming there is other traffic to contend with.)

Surprisingly, this isn't one of the more controversial features of TCP congestion control algorithms. Wikipedia contains a good high-level comparison of various TCP congestion control implementations. This is a good starting point to learn about them. You'll notice the authors of most alternative algorithms, in their own source code and academic papers, don't put a lot of weight on the function/multiplier used for back-off.

One reason for this is TCP gets other signals -- duplicate ACKs and SACKS -- to indicate that it should re-transmit segments. RTO definitely happens in the practical world, but not as often as you might guess.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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