为什么我的 Http 代理在收到客户端的 [SYN] 数据包后不回复 [SYN,ACK]?

为什么我的 Http 代理在收到客户端的 [SYN] 数据包后不回复 [SYN,ACK]?

我有一个在 Linux (RHEL 5.5) 上运行的 http 代理,在收到来自客户端的 [SYN] 数据包后,它间歇性地不回复 [SYN,ACK] 数据包。此问题可以通过重新启动代理来恢复。我针对代理进程运行了 gstack,但是每个线程的堆栈没有表明任何问题(挂起)。在此问题期间,只有不到 100 个连接处于“SYN_RECV”状态。

有任何想法吗?对于这样的问题,我应该从哪里开始调试呢?

任何建议将不胜感激。

答案1

缺少SYN、ACK通常表明服务器软件没有accept连接。这可能是由于多种原因造成的,很可能是某种资源耗尽。您可以尝试strace服务器进程查看它是否在accept系统调用中,或者等效地在文件描述符中对服务器套接字执行一些select操作以供选择。poll

答案2

看起来像是防火墙问题。如果 TCP 连接收到第一个 SYN + ACK 响应,则很可能您的数据包没有发送到代理服务器。

检查服务器端和客户端。

相关内容