我正在使用 Nginx,听起来 Nginx 没有正确释放 TCP 套接字。连接到我的 Nginx 的客户端正在使用代理,到目前为止,相同的 4 元组 ip 源、端口源、ip dest、端口 dest 可以在很短的时间内(不到 1 分钟)重新使用。当它发生时,Nginx 似乎丢失了。
这是我在 tcpdump 跟踪中看到的内容: - Nginx发起的FIN,ACK关闭 session - 来自客户端的ACK - 来自客户端的 FIN,ACK - 服务器的ACK
如果客户端尝试非常快速地(不到 1 分钟)重新连接相同的 4 连音,它将失败。客户端发送 SYN TCP 数据包,但 Nginx 回复一个包含未知序列的 ACK(序列号如果非常高并且对之前的 TCP session 没有任何意义)。
如果超过 1 分钟后再次使用相同的 4-tuplet,则没有问题。
在此先感谢任何有解决此问题想法的人 奥雷连
最佳答案
我对 Nginx 不熟悉,但一般来说,TCP 套接字在关闭后可以保持 TIME_WAIT 状态长达几分钟,以捕获杂散的无序数据包。在 TIME_WAIT 状态到期之前,不能重用 4 元组。
参见:
关于linux - Nginx 没有正确释放 TCP 套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33186589/