Why timeout in TCP is not a predefined fixed value? I know there is a set value of 15 for a timeout value but I was asked why timeout in TCP is not a predefined fixed value which I couldn't find an explantion for.


2 Answers 2


the main reason for RTO to be variable is to avoid congestion collapse.

if the timer is set to a too shorter value, there is a danger that the sender starts retransmitting packets, that are still being in-flight, thus overloading the network with unnecessary packets (that may end up delivered twice). The Jackobson algorithm for calculating RTO is intended to achieve this.

unless you set an RTO to unreasonably high value, there is a danger of this happening. and if your RTO is unreasonably high, any flow that had lost a packet, especially at the end of the stream, where there are not enough ACKs for dupacks to trigger, might take forever to complete.

Also, Internet is extremely diverse. As of now, typical RTTs between network paths can vary by an order of magnitude. data center networks have extremely low (<<ms), normal paths in countries with good internet (~10ms), bad internet(~50-60ms), and satellite networks (i think about 200ms). It will be very hard to have a reasonable fixed value to accomodate all of then.

  • $\begingroup$ The absolute worst-case scenario is Internet access via TV satellites. Those are in a 36000km geostationary orbit, which means that even if it is directly overhead, the pure light speed latency without any routing or processing is already 120ms one way. Also, don't forget jitter. I worked a job once where we he had a redundant link between UK and Germany, with one side of the link having an RTT between 10ms–15ms and the other side 50ms–70ms(!!!). And that was a dedicated line, not the public Internet. $\endgroup$ Oct 17, 2021 at 7:38
  • $\begingroup$ Did you mean one-way delay of 10-15 and 50-70 respectively, or did it have different round-trip times depending on which end the sender was? $\endgroup$
    – Effie
    Oct 17, 2021 at 8:26
  • $\begingroup$ I mean the two links of the redundant pair. It was two "fibers" by two different telcos. (The behavior made it clear that they were, in fact, obviously not fibers but some sort of tunnel, but the whole organization was a mess and I never managed to find out what exactly it was. Even the people who hired me and leased those fibers couldn't tell me what they actually leased, other than "10 Gbit". I told them if they want to build a low-latency real-time link, the next time they should probably specify an SLA with at least latency, jitter, and loss, …) $\endgroup$ Oct 17, 2021 at 8:26
  • $\begingroup$ Sorry, I can't read.... :( $\endgroup$
    – Effie
    Oct 17, 2021 at 8:30

If I am running a high performance local area TCP network then I would want the timeout value to be low. On the other hand, if I am sending messages to a low performance, over loaded TCP server I would want the timeout value to be long because the server might not be able to get to my traffic right away.


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.