网络编程(26)—— TIME_WAIT、FIN_WAIT1、FIN_WAIT2和CLOSE_WAIT状态的区别

下面接着《详解TCPIP断开连接后的Time-wait状态》一文的内容,我们讨论下socket在断开连接中的另外三种状态FIN_WAIT1、FIN_WAIT2状态和CLOSE_WAIT状态。

首先启动socket服务端,然后用客户端进行连接,用netstat –ant命令查看目前套接字的状态:

网络编程(26)—— TIME_WAIT、FIN_WAIT1、FIN_WAIT2和CLOSE_WAIT状态的区别_第1张图片

   发现客户端和服务器的套接字都进入了established状态,说明客户端和服务端都正常工作,此时我们在服务端输入Ctrl+C终端服务端程序,再次输入netstat–ant命令,这是就看到了服务端进入了FIN_WAIT2状态,而客户端进入了CLOSE_WAIT状态。

网络编程(26)—— TIME_WAIT、FIN_WAIT1、FIN_WAIT2和CLOSE_WAIT状态的区别_第2张图片


          关于断开套接字断开连接时的四次握手在这里不再赘述,而这个FIN_WAIT2状态就是服务端在主动发起断开的连接请求时,发送FIN并收到客户端的ACK进入的等待客户端FIN的状态;而与FIN_WAIT2相对的FIN_WAIT1就是服务端发送完成FIN后还未接收到客户端返回的ACK时进入的状态,这个状态时长很短,在我本机上无法捕捉;这个CLOSE_WAIT状态是客户端接受到服务端的FIN并发送ACK后,等待用户手动关闭套接字的状态。

   此时如果关闭客户端的套接字,直接在客户端输入Ctrl+C,服务端就会进入我们熟悉的TIME_WAIT状态:

网络编程(26)—— TIME_WAIT、FIN_WAIT1、FIN_WAIT2和CLOSE_WAIT状态的区别_第3张图片

你可能感兴趣的:(网络通信编程,网络通信编程)