📜  TCP 连接终止(1)

📅  最后修改于: 2023-12-03 15:20:31.599000             🧑  作者: Mango

TCP 连接终止

TCP 连接终止是指当客户端和服务器之间的 TCP 连接结束后,双方的 socket 就会关闭。TCP 的连接终止有两种情况:主动关闭被动关闭

主动关闭

主动关闭是指主动发送 FIN 包让 TCP 连接结束。简单来说就是客户端或服务器其中一方主动发起结束连接的请求。流程如下:

  1. 客户端/服务器发送 FIN 包:表示请求结束 TCP 连接。
  2. 另一方收到 FIN 包:表示同意结束 TCP 连接。
  3. 另一方也发送 FIN 包:表示自己也请求结束 TCP 连接。
  4. 客户端/服务器收到 FIN 包:确认对方同意结束 TCP 连接。
被动关闭

被动关闭是指在 TCP 连接中某一方突然终止了该连接。通常情况下,被动关闭指服务器主机故障或客户端网络中断等问题导致连接终止。流程如下:

  1. 客户端/服务器发送 FIN 包:表示请求结束 TCP 连接。
  2. 另一方收到 FIN 包:表示同意结束 TCP 连接。
  3. 另一方发送 ACK 包:表示接受了对方的请求并结束 TCP 连接。
  4. 在某一方发出 FIN 包之后,该方突然终止,导致 TCP 连接被迫关闭。
TCP 连接终止的状态转换

在 TCP 连接终止期间,各种状态的变化如下表所示:

| 状态 | 描述 | | ---------- | ------------------------------------------------------------ | | ESTABLISHED | TCP 连接已经建立。 | | FIN-WAIT-1 | 当一方发送了 FIN 包后,它处于等待另一方发回 ACK 包确认后进入该状态。 | | FIN-WAIT-2 | 当另一方回复 ACK 包确认后进入该状态。此时,TCP 已经收到了对方结束连接的信息,但仍然可以发送数据。 | | TIME-WAIT | 在连接终止时,主动关闭方进入该状态。该状态设计的主要目的是让所有旧连接都从网络中消失,并为之后建立新连接留出空间。 | | CLOSED | 连接已经关闭。 |

总结

TCP 连接是双向的,需要双方共同协作完成连接的建立、维护、结束等操作。TCP 连接终止是 TCP 连接的重要一环,要在代码层面掌握好 TCP 连接的生命周期和状态转换,才能更好地管理和维护 TCP 连接,避免因连接终止引起的各种问题。