A friend's fresh install of CentOS 5.4 is misbehaving behind his university's proxy. If he takes the machine home and connects it directly to the internet, it works fine. If he installs some other OS (even an older version of CentOS) on the machine, it works fine behind the proxy. Only when it's behind the proxy and only when it's running CentOS 5.4 does it have seemingly random connection timeouts and extremely poor throughput.
I had him take a small packet capture just to see what's happening. This is what it turned up:
9291 532.192095 10.74.88.99 126.96.36.199 TCP 40560 > ndl-aas [ACK] Seq=206 Ack=74213 Win=3328 Len=0 TSV=3733959 TSER=77264420 9292 532.193750 188.8.131.52 10.74.88.99 TCP [TCP segment of a reassembled PDU] 9293 532.193812 184.108.40.206 10.74.88.99 TCP [TCP segment of a reassembled PDU] 9295 532.234080 10.74.88.99 220.127.116.11 TCP 40560 > ndl-aas [ACK] Seq=206 Ack=77109 Win=384 Len=0 TSV=3734001 TSER=77264424 9296 532.658579 18.104.22.168 10.74.88.99 TCP [TCP Window Full] [TCP segment of a reassembled PDU] 9297 532.658666 10.74.88.99 22.214.171.124 TCP [TCP ZeroWindow] 40560 > ndl-aas [ACK] Seq=206 Ack=77493 Win=0 Len=0 TSV=3734426 TSER=77264471 9298 533.091240 126.96.36.199 10.74.88.99 TCP [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU] 9299 533.091407 10.74.88.99 188.8.131.52 TCP [TCP ACKed lost segment] 40560 > ndl-aas [ACK] Seq=206 Ack=77494 Win=2176 Len=0 TSV=3734859 TSER=77264514 9300 533.092361 184.108.40.206 10.74.88.99 TCP [TCP segment of a reassembled PDU] 9301 533.092397 220.127.116.11 10.74.88.99 HTTP HTTP/1.0 200 OK (application/x-rpm)
(18.104.22.168 is the proxy, 10.74.88.99 is the CentOS box, ndl-aas is port 3128 the port squid is running on on the proxy)
Assuming this is causing the connection timeouts in all applications (FireFox, yum update, etc.), I'm wondering why this would happen only on this CentOS 5.4 machine, and only behind the Squid proxy.
The proxy is squid/3.0.STABLE19 running on Linux 1 hop away on the network, and is explicitly configured on the client side (by setting the http_proxy env variable or the appropriate application-specific configuration).