在收到 [FIN, ACK] 后继续使用相同的连接

3
我看到有些服务器会通过发送[FIN,ACK]来停止连接,一旦完成单个请求。
从维基百科上可以看到:
“连接可以是“半开放”的,其中一方已经终止了其端口,但另一方尚未终止。已终止的一侧不能再向连接中发送任何数据,但另一侧可以。终止的一侧应继续读取数据,直到另一侧也终止。”
如果我想通过避免每个请求重复握手来加快请求速度,客户端是否可以在服务器终止其端口后继续通信?服务器是否会有任何响应,还是只是读取我的请求而不做出响应?

1
维基百科上的常规垃圾。除非您的应用程序协议要求,否则可以忽略最后一句话。 - user207421
1个回答

3
通常情况下,当你终止TCP连接的半部分时,这意味着你已经完成了通信,只需要等待你的伙伴(无论是服务器、客户端还是对等方)完成其传输。当你的伙伴准备好后,他会终止他的半部分,然后TCP连接将被关闭。
因此,如果服务器已经终止了它的一端,你仍然可以可靠地发送数据,但无法接收任何结果。
如果你不想在TCP中使用握手,为什么不选择一种没有握手的协议呢?例如UDP,特别是如果消息不重且不密集的情况下。

如果我在没有收到任何响应的情况下仍然能够发送数据,那么服务器会处理我发送的数据吗? - Isolet Chan
我无法控制协议。当服务器每个请求关闭连接时,我想尝试加速TCP连接。 - Isolet Chan
2
@IsoletChan 这取决于服务器。它可以持续读取,直到您在本地关闭连接。它可以在关闭写侧后立即销毁相关的套接字结构。当它意识到无法回复您时,它可以继续读取,但会销毁连接。完全取决于实现。只需尝试一下即可。 - u354356007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接