TCP 连接的四次挥手是为了确保双方都完成了数据的传输,然后安全地关闭连接。
-
客户端发送 FIN:
- 客户端希望关闭连接,它发送一个 FIN(Finish)报文给服务器。
- 客户端进入 FIN_WAIT_1 状态,等待服务器的确认。
-
服务器发送 ACK:
- 服务器收到客户端的 FIN 报文后,发送一个 ACK(Acknowledgment)报文作为确认,确认序号为收到的序号加1。
- 服务器进入 CLOSE_WAIT 状态,此时服务器已经关闭了向客户端的数据传送。
-
服务器发送 FIN:
- 服务器在数据传送完毕后也希望关闭连接,向客户端发送一个 FIN 报文。
- 服务器进入 LAST_ACK 状态,等待客户端的确认。
-
客户端发送 ACK:
- 客户端收到服务器的 FIN 报文后,发送一个 ACK 报文进行确认。
- 客户端进入 TIME_WAIT 状态,等待可能出现的延迟的 ACK 报文。
-
服务器收到 ACK:
- 服务器收到客户端的 ACK 后,完成了关闭过程,进入 CLOSED 状态。
- 客户端等待一段时间(等待可能出现的延迟的 ACK 报文),确保服务器收到了确认,然后也进入 CLOSED 状态。
这个四次挥手的过程确保了双方在关闭连接前都能完成未完成的数据传输,防止数据的丢失和确保连接的正常关闭。最后,客户端和服务器都进入 CLOSED 状态,完成了连接的关闭。