Subject: What is so special about 2*MSL?

From: "Ramesh Shankar" <[email-masked]>
Date: Mon, 22 May 2000 17:45:23 -0600

It is not very clear to me what is the purpose of selecting 2*MSL to be the duration a connection which has performed active close has to be in the TIME_WAIT state instead of MSL.

TIME_WAIT serves two different purposes:

1. Rejection old duplicates of a connection from previous incarnation(s).
2. Retransmission of last ACK if ACK sent during connection close got lost. This ensures reliable connection close.

If we were to consider 1, then it is quite clear that waiting for 1 MSL is more than enough for old duplicates to die off.

Now, 2 really depends on the RTT of the connection. If one imagines that it takes 1MSL (i.e. extreme case) for our ACK to reach peer, then in the case our ACK does get lost, by the time the peer retransmits the FIN, we would have anyway exited the TIME_WAIT state. RFC 1185, Appendix A has some insight into the details of the choice, but doesn't go far enough to tell why 2MSL and why not 1MSL or 1.5 MSL etc.

I am pretty sure that there is some historical reason also associated with the choice of this specific value. Some of the references of Appendix A of RFC 1185 are probably very hard to get now (Any idea how I can get them)?

May be the answer is simple like: Be paranoid and wait for more than 1 MSL and it is easy to implement 2 * MSL in programming rather than 1.75 * MSL :-))).

Thanks in advance,

S.R.