Tcp 服务器发送了FIN,但未发送';在保持活动状态后,无法从客户端接受任何数据,导致503错误

Tcp 服务器发送了FIN,但未发送';在保持活动状态后,无法从客户端接受任何数据,导致503错误,tcp,wireshark,keep-alive,Tcp,Wireshark,Keep Alive,我在wireshark数据包捕获服务器发送的FIN、ACK中观察到了这一点。客户端同时发送post请求。服务器正在发送keep alive以检查客户端是否处于活动状态。客户端还确认并重新传输失败的数据包。服务器未发送任何重新传输的数据包。在终端,服务器正在发送RST信号。这将导致503错误 我需要帮助理解为什么即使在服务器的FIN数据包之后,客户端仍会发送POST请求 让我们看看,如果FIN之后连接在服务器端仍然有效,为什么它不响应客户端的POST请求 当客户端已经发送POST请求并等待服务器

我在wireshark数据包捕获服务器发送的FIN、ACK中观察到了这一点。客户端同时发送post请求。服务器正在发送keep alive以检查客户端是否处于活动状态。客户端还确认并重新传输失败的数据包。服务器未发送任何重新传输的数据包。在终端,服务器正在发送RST信号。这将导致503错误

我需要帮助理解为什么即使在服务器的FIN数据包之后,客户端仍会发送POST请求

让我们看看,如果FIN之后连接在服务器端仍然有效,为什么它不响应客户端的POST请求

当客户端已经发送POST请求并等待服务器响应时,为什么服务器发送保持活动的数据包

我需要帮助理解为什么即使在服务器的FIN数据包之后,客户端仍会发送POST请求

我想说POST与FIN同时发生,即客户端发送POST是因为其TCP堆栈尚未处理来自服务器的FIN。请注意,数据包捕获是在系统处理数据之前完成的

当客户端已经发送POST请求并等待服务器响应时,为什么服务器发送保持活动的数据包

keep alive中的ACK编号指向POST之前的位置,即服务器TCP堆栈尚未处理POST

在终端,服务器正在发送RST信号。这将导致503错误

这就是服务器处理帖子的时间。由于数据是在(连接的发送部分)关闭后接收的,因此它将发送RST


这是正确的行为,如果这导致503,我认为客户是错误的。使用持久HTTP连接,服务器可能在完成响应后和收到下一个请求之前随时关闭,客户端必须通过使用新连接重试请求来处理这种情况。

感谢您的解释。这对我来说很有意义。。还有一个问题。。据我所知,由客户确认的有效数据包。。服务器连接当时应该是活动的吗?如果否,这意味着当服务器向客户端发送FIN时,服务器不打算发送或接收任何数据包?当服务器发送FIN时,它只宣布它将不再发送任何数据。如果它仍然愿意接收数据,则是发送方的内部状态,而不是向客户端宣布。连接本身仍然是活动的,只有当客户端确认服务器的FIN,发送它自己的FIN,并且服务器也确认这一点时,连接才会完成。看见