2008-10-19 22 views
0

我们正在运行一个带2.6.16内核的Debian,并启用了iptables。系统正在运行一个自定义的HTTP代理,它受到轻微的负载(在其他站点上负载相同的情况下,它可以正常工作)。该系统由4台服务器组成,前面是带有虚拟IP的负载均衡器,之前是4台ISA 2004计算机,因此基本拓扑结构如下:SYN数据包偶尔在Linux上丢失

客户端 - > ISA [1-4] - >负载平衡器 - >我们的代理[1-4] - >互联网

偶尔,ISA会发送一个SYN数据包,没有发送SYN-ACK。它将在3秒后再次尝试,并在接下来的6秒后再次尝试,之后它会报告代理服务器并切换到直接连接。在此期间,意味着在这3个SYN之前,之间和之后,来自同一个ISA的其他SYN来到并成功地应答。

一个非常类似的问题正在被其他国家报告(无解,不过):

从风味的Linux CentOS的叫所有的到来。它的特点是默认启用iptables。

http://www.linuxhelpforum.com/showthread.php?t=931912&mode=linear http://www.centos.org/modules/newbb/viewtopic.php?topic_id=16147

几乎相同:但有一点不同: http://www.linuxquestions.org/questions/linux-networking-3/tcp-handshake-fails-synack-ignored-by-system.-637171/

似乎也是相关: http://groups.google.com/group/comp.os.linux.networking/browse_thread/thread/b1c000e2d65e0034

我怀疑iptables来是罪魁祸首,但任何其他反馈将受到欢迎。

回答

2

查看第二个参数来监听电话,如您在第一个发布的链接中所述。这是未决(尚未接受)连接的最大数目。根据listen(2)手册页,如果协议支持重传(TCP),当队列满时,连接请求将被丢弃(期待稍后的重传,如果队列中有足够的空间,将会创建连接)。

+0

这并不能解释对同一端口的其他请求会成功,而这些请求会失败。 – user29402 2008-10-19 15:48:12

0

事实上,iptables原来是流氓,其规则是放弃INVALID数据包。我们仍然不知道是什么让iptables认为这些SYN是无效的(当然没有TIME_WAIT,因为我们在丢弃之前至少30分钟没有任何相同源端口的流量)。