【问题标题】:Continue to use the same connection after receiving [FIN, ACK]收到[FIN,ACK]后继续使用同一个连接
【发布时间】:2016-04-27 04:56:54
【问题描述】:

我看到一些服务器会通过发送 [FIN, ACK] 完成单个请求后停止连接

来自维基,

一个连接可以是“半开”的,在这种情况下,一侧已经终止了它的末端,但另一侧没有。已终止的一方不能再向连接发送任何数据,但另一方可以。终止端应继续读取数据,直到另一端也终止。

如果我想通过避免每个请求重复握手来加快请求速度。即使服务器终止了客户端,客户端是否有可能继续通信?会不会有来自服务器的响应或服务器只是读取我的请求而没有响应?

【问题讨论】:

  • 来自维基百科的常见垃圾。除非您的应用程序协议另有要求,否则您可以忽略最后一句。

标签: sockets networking tcp wireshark


【解决方案1】:

通常,当你终止 write 一半的 TCP 连接时,这意味着你已经完成了通信,你只需等待你的合作伙伴(无论是服务器、客户端还是同等的对手)完成它的传输。当你的伙伴准备好时,他会终止他的 write 一半,然后关闭 TCP 连接。

因此,如果服务器终止了它的结束,您仍然能够可靠地发送数据,但无法接收任何结果。

如果您不想在 TCP 中进行任何握手,为什么不采用没有握手的协议呢?例如 UDP,尤其是在消息不繁重和密集的情况下。

【讨论】:

  • 如果我仍然可以发送数据而没有任何响应,服务器会处理我发送的内容吗?
  • 我无法控制协议。当服务器关闭每个请求的连接时,我想尝试加快 TCP 连接速度
  • @IsoletChan 它依赖于服务器。它可以继续阅读,直到您不关闭您身边的连接。它可以在关闭其写入端后立即销毁相关的套接字结构。它可以继续阅读,但当它意识到它无法回答你时会破坏连接。完全取决于实施。试试吧。
猜你喜欢
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
相关资源
最近更新 更多