Linux
在 Squid 代理後面的 CentOS 5.4 中的 TCP 視窗全/零視窗探測
一位朋友全新安裝的 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 是 squid 在代理上執行的埠 3128)
假設這會導致所有應用程序(FireFox、yum update 等)中的連接超時,我想知道為什麼這只會發生在這台 CentOS 5.4 機器上,並且只發生在 Squid 代理後面。
代理是 squid/3.0.STABLE19 在 Linux 上執行 1 跳遠在網路上,並在客戶端顯式配置(通過設置 http_proxy 環境變數或適當的應用程序特定配置)。
幫助,有人嗎?
問題已解決。問題與代理(執行 SunOS)有關。使用執行 Linux 的備用代理解決了該問題。
您可以檢查 /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 )
ps:這更像是評論而不是“答案”嗎?我還不能評論。