【问题标题】:CLOSE_WAIT state in server服务器中的 CLOSE_WAIT 状态
【发布时间】:2014-01-09 23:08:12
【问题描述】:

在我们的一台服务器中,许多连接位于CLOSE_WAIT。我知道这意味着连接的另一端已关闭,现在由服务器发送FIN 并将状态更改为LAST_ACK 并关闭连接。

我的问题是:

  1. 如果服务器处于CLOSE_WAIT状态时客户端发送RST怎么办?
  2. 客户端发送FIN后,如果服务器还想发送更多数据,那么这种情况下服务器的状态是什么?

【问题讨论】:

    标签: tcp proxy tcpclient tcpserver


    【解决方案1】:

    如果服务器处于 CLOSE_WAIT 状态时客户端发送 RST 怎么办?

    服务器仍会打开套接字,因此状态不会改变。 CLOSE_WAIT 表示本地 TCP 正在等待本地应用程序关闭套接字。

    客户端发送了FIN之后,如果服务器还想发送更多的数据,那么这种情况下服务器的状态是什么?

    FIN 表示客户端已停止发送。这并不意味着客户端无法接收。如果服务器尝试发送,则:

    1. 会成功,也就是说客户端只是为了输出而关闭,或者

    2. 它会引发客户端的 RST,这意味着客户端关闭了套接字。由于 TCP 缓冲,RST 可能不会在第一次发送时发生,而是在后续发送时发生。

    【讨论】:

    • 感谢您的回复。那么,如果客户端已经关闭了连接,服务端收到了一个FIN,如果服务端还有数据要发送,那么服务端的TCP状态会是什么?
    • 我还有一个疑问。拓扑是 CLIENTPROXYSEVER 在 CLIENT 和 PROXY 之间连接已关闭。在 PROXY 和 SERVER 之间,连接仍处于 EST 状态,因为 SERVER 处于 CLOSE_WAIT。如果我没记错的话,一个半封闭的连接。 CLIENT 向 PROXY 发送一个 RESET,因为 SERVER 向 PROXY 发送了一个零窗口探测,然后将其发送给 CLIENT。那么,当 CLIENT 发送 RESET 时,PROXY 应该怎么做呢? RESET 双方并清理连接,还是应该忽略来自 CLIENT 的 RESET,因为连接的那一侧已经关闭?再次感谢。
    • 如果代理遇到与任一对等方进行 I/O 的“连接重置”,它别无选择,只能关闭其与该连接的端点,因为它不再存在。
    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 2016-06-17
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多