(一)四次挥手的过程:
1、客户端发送一个FIN报文给服务端,表示自己要断开数据传送,报文中会指定一个序列号 (seg=x)。然后,客户端进入FIN-WAIT-1 状态。
2、服务端收到FIN报文后,回复ACK报文给客户端,且把客户端的序列号值+1,作为ACK报文的序列号(seq=x+1)。然后,服务端进入CLOSE-WAIT状态,客户端进入FIN-WAIT-2状态。
3、服务端也要断开连接时,发送 FIN 报文给客户端,且指定一个序列号(seq=y+1),随后服务端进入LAST-ACK状态。
4、客户端收到FIN报文后,发出ACK报文进行应答,并把服务端的序列号值+1作为ACK报文序列号(seq=y+2)。此时客户端进入TIME-WAIT状态。服务端在收到客户端的ACK 报文后进入CLOSE 状态。如果客户端等待2MSL没有收到回复,才关闭连接。
(二)为什么是四次挥手?
TCP是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。
当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后才会完全关闭了 TCP 连接。
总结:两次握手可以释放一端到另一端的 TCP 连接,完全释放连接一共需要四次握手。