TCP协议的四次握手断连:
- 首先,我们要清楚在实际通信过程中,我们是不区分客户端(Client)与服务器端(Server)的,但是为了方便区分,我们将率先发起断联的一端称为客户端,将响应断连请求的称为服务器端。
- 我们知道无论是服务器段还是客户端(大家可以看我的上一篇文章),在断连之前都是ESTABLISHED状态,由客户端(Client)率先发起断连请求,客户端(Client)发送一个FIN包(表示客户端没有数据要发生了,请求与服务器端断开连接),此时客户端(Client)的状态为FIN_WAIT_1,服务器端(Server)在接收到FIN包,知道客户端(Client)要断连,发送了一个ACK应答包(表示可以断连),此时服务器端(Server)的状态为CLOSE_WAIT状态,收到ACK应答包的客户端(Client)此时状态变为了FIN_WAIT_2,但此时由于TCP协议是全双工通信,客户端(Client)不能确保没有数据通过服务器端(Server)传输,因此客户端处于半关闭状态,当服务器端(Server)准备断连时,向客户端(Client)发送一个FIN包,此时服务器端(Server)的状态为CLOSE_WAIT状态,收到FIN包的客户端(Client)发送一个ACK应答包给服务器端(Server),此时客户端(Client)处于TIME_WAIT状态,必须等待两个最长报文发送时间才能关闭,而收到ACK应答包的服务器端(Server)直接关闭了,在等待两个最长报文发送时间后,客户端(Client)也关闭了。