【问题标题】:SYN packets dropped occasionally on Linux在 Linux 上偶尔会丢弃 SYN 数据包
【发布时间】:2008-10-19 15:34:56
【问题描述】:

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

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

有时,ISA 会向我们发送一个 SYN 数据包,但没有向该数据包发送 SYN-ACK。 3秒后会再试,6秒后会再试第三次,之后会报告proxy down,并切换到直连。在此期间,即在这 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 是罪魁祸首,但欢迎提供任何其他反馈。

【问题讨论】:

    标签: linux networking iptables


    【解决方案1】:

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

    【讨论】:

    • 这并不能说明对同一端口的其他请求成功,而这些失败。
    • 其他请求可能很幸运,并且在队列稍微清空之后(即在服务器接受了一些挂起的连接之后)。
    • 那么下一个 SYN 会进入,或者后面的那个 - 但如果一个没有回答,那么三个都没有回答。我发现很难靠运气来解释它。
    • “......很难用愚蠢的运气来解释”。所以,增加监听队列的深度,你就会发现。
    【解决方案2】:

    确实,iptables 原来是罪魁祸首,其规则是丢弃 INVALID 数据包。我们仍然不确定是什么让 iptables 认为这些 SYN 无效(肯定没有 TIME_WAIT,因为在丢弃之前至少 30 分钟我们没有任何具有相同源端口的流量)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 2020-05-02
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多