TCP四次挥手中,主动关闭方最后为什么要等待2MSL之后才能关闭连接?

Posted 杨龙飞的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP四次挥手中,主动关闭方最后为什么要等待2MSL之后才能关闭连接?相关的知识,希望对你有一定的参考价值。

和TCP三次同步握手不一样的是,TCP关闭连接用四次挥手来实现,即A—–>B Fin,B—->A ACK, B—–>A Fin,A—-B ACK
A—-B Fin, B—->A ACK,A属于主动关闭方,收到B的ACK之后,A到B的方向连接关闭,即half shutdown,这时不能再发送数据了.
这种状态下B还是可以单向发送数据的,B的数据发送完毕,也可以做关闭动作了,
B——>A Fin,A——> B ACK
B收到ACK,关闭连接,但是A无法知道ACK是否已经到达B,于是开始等待?等待什么呢,假如ACK没有到达B,B会为FIN这个消息超时重传,那如果A等待时间足够,又收到FIN消息,说明ACK没有到达B,于是再发送ACK,知道在足够的时间内没有收到FIN,说明ACK成功到达,这个等待时间至少是:B的timeout+FIN的传输时间,为了保证可靠,采用更加保守的等待时间2MSL.
MSL:报文段最大生存时间MSL.它是任何报文段被丢弃前网络内的最长时间。
TTL:IP对IP 数据报生存时间限制,255秒,所以MSL一般=TTL = 255 秒
A发出ACK,等待ACK到达对方的超时时间MSL,等待FIN的超时重传,也是MSL,所以如果2MSL时间内没有收到FIN,说明对方安全收到FIN。

以上是关于TCP四次挥手中,主动关闭方最后为什么要等待2MSL之后才能关闭连接?的主要内容,如果未能解决你的问题,请参考以下文章

TCP四次挥手客户端关闭链接为什么要等待2倍MSL

TCP为什么要四次挥手(3分钟你看不懂找我)

TCP

对于tcp的一点点解读,不止是三次握手四次挥手

对于tcp的一点点解读,不止是三次握手四次挥手

tcp四次挥手为什么要等待2MSL