LANが遅い

1年位前から遅いような気がすると思っていたが、ちょっと前から家のLANがとても遅くなった。ADSL なのに、速度を計測すると600kbps くらいしか出てない。
ちなみに家のLANは以下のような構成。

                +----------+      +------+       +-----+
 - (internet) --+ PCルータ +------+ ハブ +-------+ PC1 |
                | (Debian) |      +-+----+       +-----+
                +----------+        |
                                    |            +-----+
                                    +------------+ PC2 |
                                    |            +-----+
                                    :

これはおかしいと思い原因を探ってみた。


まず考えられるのが、ケーブルにノイズが乗り、元の回線から遅くなっているケース。しかしPCルータから計測すると6〜7Mbps くらい出ている。
となると、おかしいのはPCルータから各PCのどこかで遅くなっていることになる。

PC1-PCルータ、PC2-internet、PC1-PC2 など色々な組み合わせで測定してみたが、いまいちどこで遅くなっているかつかめない。

PCルータや、LAN 内のPCのTCPウィンドウサイズや、MTU など色々調整してみるが、変化はない。


仕方がないので、tcpdump でパケットをキャプチャしてみた。すると、何か LAN 内のPCからの ack がおかしい。

09:24:02.639406 IP storage1.flickr.vip.mud.yahoo.com.www > 192.168.0.38.38347: . 518:1542(1024) ack 143 win 5840
09:24:02.639738 IP 192.168.0.38.38347 > storage1.flickr.vip.mud.yahoo.com.www: . ack 1542 win 9216
09:24:02.785027 IP storage1.flickr.vip.mud.yahoo.com.www > 192.168.0.38.38347: . 1542:2566(1024) ack 143 win 5840
09:24:02.785702 IP storage1.flickr.vip.mud.yahoo.com.www > 192.168.0.38.38347: P 2566:3590(1024) ack 143 win 5840
09:24:02.786033 IP 192.168.0.38.38347 > storage1.flickr.vip.mud.yahoo.com.www: . ack 1542 win 9216
09:24:02.821451 IP storage1.flickr.vip.mud.yahoo.com.www > 192.168.0.38.38347: P 3590:4614(1024) ack 143 win 5840
09:24:02.821772 IP 192.168.0.38.38347 > storage1.flickr.vip.mud.yahoo.com.www: . ack 1542 win 9216
09:24:02.822187 IP storage1.flickr.vip.mud.yahoo.com.www > 192.168.0.38.38347: . 4614:5638(1024) ack 143 win 5840
09:24:02.822466 IP 192.168.0.38.38347 > storage1.flickr.vip.mud.yahoo.com.www: . ack 1542 win 9216
09:24:02.967361 IP storage1.flickr.vip.mud.yahoo.com.www > 192.168.0.38.38347: . 5638:6662(1024) ack 143 win 5840
09:24:02.967691 IP 192.168.0.38.38347 > storage1.flickr.vip.mud.yahoo.com.www: . ack 1542 win 9216
09:24:03.003777 IP storage1.flickr.vip.mud.yahoo.com.www > 192.168.0.38.38347: P 6662:7686(1024) ack 143 win 5840
09:24:03.004105 IP 192.168.0.38.38347 > storage1.flickr.vip.mud.yahoo.com.www: . ack 1542 win 9216
09:24:03.004503 IP storage1.flickr.vip.mud.yahoo.com.www > 192.168.0.38.38347: . 1542:2566(1024) ack 143 win 5840
09:24:03.004784 IP 192.168.0.38.38347 > storage1.flickr.vip.mud.yahoo.com.www: . ack 7686 win 12288

1行目で、internet 側から1542 バイト目までのパケットを受けている。2行目でその ack を返している。ここまでは問題ない。
問題は次の行から。internet 側から2566バイト目までを受取ったはずだが、ack は 1542 で返しており、それがその後も続いている。

これは、どこかで 1452:2566 のパケットが落ちてることを示している。


試しにPC1 - PCルータ間である程度大きなパケットを ping で送ってみた。するとやはりパケットロスしていた。

$ ping 192.168.0.1 2000 5
2008 bytes from 192.168.0.1: icmp_seq=0 ttl=64 time=0 ms
2008 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=0 ms

----192.168.0.1 PING Statistics----
5 packets transmitted, 2 packets received, 60.0% packet loss

他のPCから試しても同じ結果だった。また念のためPCルータ上でパケットをキャプチャしてみると、送受信は5パケットとも処理しているが、PC1上でキャプチャすると、2パケットしか返答がない。
これらの結果から、どうやらPCルータの LAN 向けの NIC の送信バッファがいかれているのが原因のようだ。


NIC を差換えて再度速度を計測するとLAN 内のPCからも6〜7Mbps 出るようになった。


昔、先輩から「ネットワークの障害は、物理層から調べろ」と言われたが、今回のケースは正にそれだったなぁ。