收到[FIN,ACK]后继续使用同一个连接

网络工程 通讯协议 协议理论
2021-07-06 17:46:25

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

来自维基,

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

如果我想通过避免每个请求重复握手来加速请求。即使服务器终止,客户端是否可以保持通信?服务器会不会有任何响应,或者服务器只是读取我的请求而不响应?

更新:

刚刚测试过,如果我延迟了我的 [FIN, ACK] 数据包,则没有来自服务器的 [ACK] 数据包。另一个问题,如果服务器没有响应,它会处理我的请求吗?

1个回答

我觉得你很困惑。您是否仔细阅读了您引用的内容?终止的一侧可以继续接收数据,但不能将任何内容发送回连接。

这意味着如果服务器终止连接,而客户端没有终止,则客户端可以向服务器发送数据,但服务器无法向客户端发送任何内容。如果服务器需要将任何内容发送回客户端以完成请求,则它不能。

握手是有原因的,而您希望通过消除握手来加快速度意味着您正在使用错误的传输协议来完成您想做的事情。听起来您想使用 UDP 而不是 TCP。您希望保留的任何 TCP 功能都需要由应用程序处理,但 UDP 消除了所有握手。

或者,您可以创建自己的传输协议。