最近,我们发现了一个 TCP 连接问题,该问题主要限于浏览我们网站的 mac 和 Linux 用户。
从用户的角度来看,它表现为与我们网站的连接时间非常长(> 11 秒)。
我们已经设法追踪到这个问题的技术特征,但无法弄清楚它为什么会发生或如何解决它。
基本上,发生的事情是客户端的机器正在发送 SYN 数据包以建立 TCP 连接,而 Web 服务器收到它,但没有响应 SYN/ACK 数据包。在客户端发送了许多 SYN 数据包后,服务器最终以 SYN/ACK 数据包进行响应,并且连接的其余部分一切正常。
而且,当然,问题的关键是:它是间歇性的,不会一直发生(尽管它确实发生在 10-30% 的时间内)
我们使用 Fedora 12 Linux 作为操作系统,使用 Nginx 作为 Web 服务器。
Wireshark 分析截图
更新:
在客户端上关闭窗口缩放阻止了问题的发生。现在我只需要一个服务器端分辨率(我们不能让所有客户端都这样做):)
最终更新:
解决方案是关闭我们服务器上可供公众访问的TCP 窗口缩放 和 TCP 时间戳。