私はいくつかの奇妙な行動を経験しています。混雑したワイヤレスネットワーク上で実行している間
$ ping google.com
毎秒1つのパケットが送信され、そのうちの一部だけがさまざまなラウンドトリップ時間で返されると予想しています。これはほとんどの場合の動作です。しかし、この非常に混雑したワイヤレスネットワークでは、次のようなものが表示されます。
PING google.com (74.125.224.228) 56(84) bytes of data.
64 bytes from lax04s08-in-f4.1e100.net (74.125.224.228): icmp_req=1 ttl=53 time=193 ms
64 bytes from lax04s08-in-f4.1e100.net (74.125.224.228): icmp_req=2 ttl=53 time=238 ms
64 bytes from lax04s08-in-f4.1e100.net (74.125.224.228): icmp_req=3 ttl=53 time=96.8 ms
64 bytes from lax04s08-in-f4.1e100.net (74.125.224.228): icmp_req=4 ttl=53 time=12.9 ms
64 bytes from lax04s08-in-f4.1e100.net (74.125.224.228): icmp_req=5 ttl=53 time=219 ms
64 bytes from lax04s08-in-f4.1e100.net (74.125.224.228): icmp_req=9 ttl=53 time=1105 ms
64 bytes from lax04s08-in-f4.1e100.net (74.125.224.228): icmp_req=8 ttl=53 time=2339 ms
64 bytes from lax04s08-in-f4.1e100.net (74.125.224.228): icmp_req=17 ttl=53 time=881 ms
64 bytes from lax04s08-in-f4.1e100.net (74.125.224.228): icmp_req=18 ttl=53 time=1200 ms
...
--- google.com ping statistics ---
57 packets transmitted, 41 received, 28% packet loss, time 113307ms
rtt min/avg/max/mdev = 5.773/447.217/2339.271/496.011 ms, pipe 3
重要な行は次のとおりです。
57 packets transmitted, 41 received, 28% packet loss, time 113307ms
ご覧のとおり、pingは約113秒間実行されましたが、送信されたのは57パケットのみでした。私はこれを何度も見ました:
$ ping google.com
PING google.com (74.125.224.232) 56(84) bytes of data.
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=1 ttl=53 time=6.98 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=2 ttl=53 time=5.71 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=3 ttl=53 time=4.47 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=4 ttl=53 time=5.75 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=5 ttl=53 time=6.94 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=6 ttl=53 time=14.2 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=7 ttl=53 time=6.22 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=8 ttl=53 time=11.8 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=9 ttl=53 time=4.29 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=10 ttl=53 time=5.43 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=11 ttl=53 time=5.02 ms
64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=12 ttl=53 time=4.89 ms
^C64 bytes from lax04s08-in-f8.1e100.net (74.125.224.232): icmp_req=13 ttl=53 time=7.36 ms
--- google.com ping statistics ---
13 packets transmitted, 13 received, 0% packet loss, time 60262ms
rtt min/avg/max/mdev = 4.299/6.865/14.258/2.838 ms
すべてのRTTが妥当であり、パケットがすぐに送信されないため、これはさらに奇妙です。誰かがこれに光を当てることができますか?私はDebianテスト(wheezy)と、さらにいくつかの統計を行っています:
$ ping -V
ping utility, iputils-sss20101006
Linux 3.0.0-1-AMD64 #1 SMP Sat Aug 27 16:21:11 UTC 2011 x86_64 GNU/Linux
03:00.0 Network controller: Intel Corporation Centrino Ultimate-N 6300 (rev 35)
受信したすべてのパケットに対してDNSルックアップを実行するping
のバージョンの1つがあるようです。 DNS UDPパケットはpingパケットと同じ輻輳ネットワークを通過する必要があるため、パケットがドロップされる可能性があります。タイムアウトと再試行があると、DNS要求がデータを返すのにかなりの時間がかかる可能性があります。 ping
はシングルスレッドであり、非同期タイマーを使用して各pingを駆動しないため、DNS応答の待機にかかる時間は次のpingパケットの送信を遅らせます。
私の診断が正しければ、-n
をping
に追加することで遅延を取り除くことができます。