📅  最后修改于: 2023-12-03 15:20:31.599000             🧑  作者: Mango
TCP 连接终止是指当客户端和服务器之间的 TCP 连接结束后,双方的 socket 就会关闭。TCP 的连接终止有两种情况:主动关闭和被动关闭。
主动关闭是指主动发送 FIN 包让 TCP 连接结束。简单来说就是客户端或服务器其中一方主动发起结束连接的请求。流程如下:
被动关闭是指在 TCP 连接中某一方突然终止了该连接。通常情况下,被动关闭指服务器主机故障或客户端网络中断等问题导致连接终止。流程如下:
在 TCP 连接终止期间,各种状态的变化如下表所示:
| 状态 | 描述 | | ---------- | ------------------------------------------------------------ | | ESTABLISHED | TCP 连接已经建立。 | | FIN-WAIT-1 | 当一方发送了 FIN 包后,它处于等待另一方发回 ACK 包确认后进入该状态。 | | FIN-WAIT-2 | 当另一方回复 ACK 包确认后进入该状态。此时,TCP 已经收到了对方结束连接的信息,但仍然可以发送数据。 | | TIME-WAIT | 在连接终止时,主动关闭方进入该状态。该状态设计的主要目的是让所有旧连接都从网络中消失,并为之后建立新连接留出空间。 | | CLOSED | 连接已经关闭。 |
TCP 连接是双向的,需要双方共同协作完成连接的建立、维护、结束等操作。TCP 连接终止是 TCP 连接的重要一环,要在代码层面掌握好 TCP 连接的生命周期和状态转换,才能更好地管理和维护 TCP 连接,避免因连接终止引起的各种问题。