忽略SYN / ACK

时间:2010-11-19 16:21:17

标签: networking tcp

我正在处理的Mac OSX网络客户端有时无法连接到HTTPS端口。看一下网络跟踪,我们看到了这个:

T0.0 client:port -> server:443 SYN
T0.1 server:443 -> client:port SYN, ACK
T3.1 server:443 -> client:port SYN, ACK
T6.1 server:443 -> client:port RST

3秒延迟与TCP超时匹配,以便在失败的SYN / ACK上重试,这是预期的。但令人难以置信的是,客户端永远不会使用ACK或RST进行响应。当客户端尝试第二次登录时,它会成功。此问题在许多首次连接尝试时重现。此程序还有其他HTTPS连接同时进行,它们在网络跟踪中看起来很好。

我怀疑存在竞争条件导致套接字有时被错误地管理。但到目前为止,我一直无法在任何代码中重新创建它,但受影响的客户端(这是一个非常大而复杂的软件)。即使使用nmaphping3手工制作数据包,客户端也始终至少发送一个RST。

有没有办法在userland代码中配置(故意或错误)这样的套接字,以便它不响应SYN / ACK?

2 个答案:

答案 0 :(得分:1)

不,没有办法在用户域中配置TCP套接字以忽略SYN / ACK,除非关闭它,这将引发传出的RST以响应传入的SYN / ACK。这听起来像是一个内核错误。我想知道所有这些连接。您应该最大限度地利用HTTP keep alive来最小化每单位时间的新连接数。

答案 1 :(得分:0)

您不能忽略SYN / ACK,因为它是TCP协议的3次握手连接的一部分。在我看来,问题是服务器套接字没有正确打开。其他假设是服务器无法访问(例如,防火墙阻止服务器)。

很难提供比不知道程序更多的帮助。希望这有帮助!

编辑:检查您是否正确关闭了以前客户端的套接字。可能发生以前的套接字未正确关闭且操作系统达到允许的打开套接字的限制。在这种情况下,将发送RST数据包。