TCP连接中除了报文段发送以外,还涉及到客户端和服务端(连接的两端)的TCP状态变化

三次握手

TCP三次握手四次挥手详细过程

四次挥手

TCP三次握手四次挥手详细过程

客户端TCP状态变化

TCP三次握手四次挥手详细过程

服务器端TCP状态变化

TCP三次握手四次挥手详细过程

问题

  • 为什么连接三次握手,关闭四次挥手?
    答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
  • 为什么TIME_WAIT需要一段时间才能返回CLOSED?
    答:在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文

参考

https://blog.csdn.net/whuslei/article/details/6667471

相关文章: