一位朋友新安装的 CentOS 5.4 在其大学的代理后面出现问题。如果他将机器带回家并直接连接到互联网,它工作正常。如果他在机器上安装其他操作系统(甚至是旧版本的 CentOS),它在代理后面工作正常。只有当它在代理后面并且运行 CentOS 5.4 时,它才会出现看似随机的连接超时和极差的吞吐量。
我让他截取了一些数据包,看看发生了什么。结果如下:
9291 532.192095 10.74.88.99 161.112.232.22 TCP 40560 > ndl-aas [ACK] Seq=206 Ack=74213 Win=3328 Len=0 TSV=3733959 TSER=77264420
9292 532.193750 161.112.232.22 10.74.88.99 TCP [TCP segment of a reassembled PDU]
9293 532.193812 161.112.232.22 10.74.88.99 TCP [TCP segment of a reassembled PDU]
9295 532.234080 10.74.88.99 161.112.232.22 TCP 40560 > ndl-aas [ACK] Seq=206 Ack=77109 Win=384 Len=0 TSV=3734001 TSER=77264424
9296 532.658579 161.112.232.22 10.74.88.99 TCP [TCP Window Full] [TCP segment of a reassembled PDU]
9297 532.658666 10.74.88.99 161.112.232.22 TCP [TCP ZeroWindow] 40560 > ndl-aas [ACK] Seq=206 Ack=77493 Win=0 Len=0 TSV=3734426 TSER=77264471
9298 533.091240 161.112.232.22 10.74.88.99 TCP [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
9299 533.091407 10.74.88.99 161.112.232.22 TCP [TCP ACKed lost segment] 40560 > ndl-aas [ACK] Seq=206 Ack=77494 Win=2176 Len=0 TSV=3734859 TSER=77264514
9300 533.092361 161.112.232.22 10.74.88.99 TCP [TCP segment of a reassembled PDU]
9301 533.092397 161.112.232.22 10.74.88.99 HTTP HTTP/1.0 200 OK (application/x-rpm)
(161.112.232.22 是代理,10.74.88.99 是 CentOS 盒,ndl-aas 是端口 3128,squid 在代理上运行该端口)
假设这导致所有应用程序(FireFox、yum update 等)的连接超时,我想知道为什么这只会发生在这台 CentOS 5.4 机器上,并且只发生在 Squid 代理后面。
代理是运行在网络上 1 跳 Linux 上的 squid/3.0.STABLE19,并在客户端明确配置(通过设置 http_proxy 环境变量或适当的特定于应用程序的配置)。
有人能帮忙吗?
答案1
您可以检查 /proc 中与 TCP 窗口缩放相关的以下值:
/proc/sys/net/core/rmem_default
/proc/sys/net/core/rmem_max
/proc/sys/net/core/wmem_default
/proc/sys/net/core/wmem_max
/proc/sys/net/ipv4/tcp_window_scaling
查看这些值在与代理配合良好的机器和您尝试设置的机器之间是否有所不同。
另外,我不知道这是否相关,但您可能需要考虑 CentOS 5 默认启用了 SELinux。这给我带来了许多难以诊断的问题,您可能需要将其设置为允许或禁用以进行测试。(参考:http://wiki.centos.org/HowTos/SELinux)
附言:这更像是评论而不是“答案”吗?我暂时无法发表评论。
答案2
问题已解决。问题与代理有关(运行 SunOS)。使用运行 Linux 的备用代理解决了该问题。