TCP 四次挥手(Four-way Handshake)是 TCP 协议在通信结束时,客户端与服务器之间进行的一种握手过程,用以确保双方都成功接收了对方的数据并且都同意关闭连接。这个过程包括以下四个步骤:
- 第一次挥手:客户端向服务器发送一个带有 FIN(Finish)标志位的数据包,表示客户端已经完成了数据传输,请求关闭连接。这时,客户端处于 FIN_WAIT_2 状态。
- 第二次挥手:服务器收到客户端的 FIN 数据包后,向客户端发送一个带有 ACK(Acknowledgement)标志位的确认数据包,表示服务器已收到客户端的请求,并同意关闭连接。这时,服务器处于 FIN_WAIT_2 状态。
- 第三次挥手:服务器向客户端发送一个带有 FIN 标志位的数据包,表示服务器已经完成了数据传输,请求关闭连接。这时,服务器处于 LAST_ACK 状态。
- 第四次挥手:客户端收到服务器的 FIN 数据包后,向服务器发送一个带有 ACK 标志位的确认数据包,表示客户端已收到服务器的请求,并同意关闭连接。这时,客户端处于 ESTABLISHED 状态,服务器收到 ACK 数据包后,连接最终关闭。
这个过程之所以采用四次挥手,是为了防止失效的连接请求报文段突然又传送到了服务器,导致错误地关闭连接。通过四次挥手的过程,可以确保双方都同意关闭连接,从而避免错误地关闭连接。