SYN数据包偶尔会在Linux上丢失

时间:2008-10-19 15:34:57

标签: linux networking iptables

我们正在运行带有2.6.16内核的Debian,启用了iptables。系统正在运行一个定制的HTTP代理,它受轻度负载(它在其他站点上的负载相同时工作正常)。该系统由4个服务器组成,其前面是带有虚拟IP的负载均衡器,其前面是4台ISA 2004机器的阵列,因此基本拓扑结构如下:

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

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

其他人报告了一个非常类似的问题(但没有解决方案):

所有这些都来自一种叫做CentOS的Linux。它的特点是默认启用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 个答案:

答案 0 :(得分:2)

查看listen调用的第二个参数,如您发布的第一个链接中所述。这是挂起(未接受)连接的最大数量。根据listen(2)手册页,如果协议支持重传(TCP确实),则当队列满时,连接请求将被丢弃(如果队列中有足够的空间,则期望稍后重新传输将创建连接)。

答案 1 :(得分:0)

实际上,iptables被证明是culrpit,其规则是删除了INVALID数据包。我们仍然不确定是什么让iptables认为这些SYN无效(没有TIME_WAIT肯定,因为我们在丢弃之前至少有30分钟没有任何具有相同源端口的流量)。

相关问题