linux - Nginx 没有正确释放 TCP 套接字?

标签 linux sockets nginx tcp

我正在使用 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/

相关文章:

node.js - 打开几个网络套接字后 Internet Explorer 卡住

linux - 水平显示多个 bash 输出

linux - shell 命令 ls [abc]*e* 是什么?搜索?

java - 如何创建套接字以接收文本和图像

reactjs - 通过nginx请求api server(Golang)失败返回404错误

node.js - Node : Set different domain name on different port

php - 无法通过phpmyadmin导入数据库

ios - 从 iPhone 控制笔记本电脑上的 mpd/ncmpcpp

linux - 使用gunzip计算一个字符串的crc32码

c++ - 使用 "ctrl c"终止程序时程序不会停止