TCP四次握手断开连接的客户端TIME_WAIT问题
程序员文章站
2022-04-24 13:36:47
...
TCP四次握手断开连接的客户端TIME_WAIT问题
了解TCP四次握手断开连接可知:
==客户端最后一次发送ACK包后进入TIME_WAIT状态,而不是直接进入closed状态==
为什么呢?
- TCP是面向连接的传输方式,必须保证数据能够正确到达目标文件,不能丢失或者出错,而网络是不稳定的,随时都可能回毁坏数据,所以每一次客户端向服务端发送数据包后,都要求服务端进行确认,回传ACK包,告诉客户端已收到数据,这样客户端才能知道数据传送成功了。
- 如果客户端没有收到确认包,客户端回重新发送,知道服务端回传ACK包。
但是,在四次握手断开连接过程中,客户端最后一次向服务端回传ACK包时,又可能因为网络问题导致服务器收不到,这时,服务端会再次发送FIN包,如果这时客户端完全关闭了连接,那么服务器无论如何也收不到ACK包了,所以客户端需要等待片刻,确认对方收到ACK包后才能进入CLOSED状态。
那么,这个等待的时间时多久呢?
- 数据包在网路中是有生存时间的,超过这个时间还未到达目标就会被舍弃,并通知发送源主机。
- 这个时间称为报文最大生存时间(MSL,Maximum Segment Lifetimr)。而TIME_WAIT要等待2MSL才会进入CLOSED状态。ACK包到达服务器需要MSL时间,服务器重传FIN包也需要MSL时间,2MSL时数据包往返的最大时间,如果2MSL后还未收到服务器重传的FIN包,就说明服务器已经收到了ACK包了。
上一篇: python传输大文本实战分享
下一篇: python socket 超时设置
推荐阅读
-
TCP三次握手/四次挥手,TCP连接异常中断后,服务器的Socket应什么时候关闭
-
详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”
-
TCP连接的三次握手和四次解散过程,tcp握手四次解散
-
TCP连接的三次握手和四次解散过程 什么是tcp三次握手 tcp采用三次握手 tcp三次握手分
-
TCP连接的三次握手跟四次解散过程
-
TCP连接的三次握手和四次解散过程,tcp握手四次解散_PHP教程
-
解决MySQL建立连接问题,快速回收复用TCP的TIME_WAIT
-
TCP连接的三次握手和四次解散过程 - 申申crown
-
TCP连接的三次握手和四次解散过程 什么是tcp三次握手 tcp采用三次握手 tcp三次握手分
-
TCP四次握手断开连接的客户端TIME_WAIT问题