tcp msl timeout implementation in linux
- by iamrohitbanga
The following is given in the book TCP IP Illustrated by Stevens
Quiet Time Concept The 2MSL wait
provides protection against delayed
segments from an earlier incarnation
of a connection from being interpreted
as part of a new connection that uses
the same local and foreign IP
addresses and port numbers. But this
works only if a host with connections
in the 2MSL wait does not crash.
What if a host with ports in the 2MSL
wait crashes, reboots within MSL
seconds, and immediately establishes
new connections using the same local
and foreign IP addresses and port
numbers corresponding to the local
ports that were in the 2MSL wait
before the crash? In this scenario,
delayed segments from the connections
that existed before the crash can be
misinterpreted as belonging to the new
connections created after the reboot.
This can happen regardless of how the
initial sequence number is chosen
after the reboot.
To protect against this scenario, RFC
793 states that TCP should not create
any connections for MSL seconds after
rebooting. This is called the quiet
time
Few implementations abide by this
since most hosts take longer than MSL
seconds to reboot after a crash.
Do operating systems wait for 2MSL seconds now after a reboot before initiating a TCP connection. The boot times are also less these days. Although the ports and sequence numbers are random but is this wait implemented in Linux?
Also RFC 793 says that this wait is not required if history is maintained.
Does linux maintain any history of used sequence numbers for connections to handle this case?