Linux-Ping sendet nicht wirklich 1 Paket pro Sekunde

5

Ich habe ein merkwürdiges Verhalten erlebt. Während ich mich in einem überlasteten drahtlosen Netzwerk befinde, renne ich

$ ping google.com

Ich erwarte, dass jede Sekunde ein Paket verschickt wird und nur einige von ihnen mit einer Vielzahl von Umlaufzeiten zurückkommen, und dies ist die meiste Zeit der Fall. Aber in diesem überlasteten drahtlosen Netzwerk sehe ich so etwas:

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

Die Schlüsselzeile lautet:

57 packets transmitted, 41 received, 28% packet loss, time 113307ms

Wie Sie sehen, lief der Ping etwa 113 Sekunden lang, sendete aber nur 57 Pakete aus. Ich habe das schon mehrmals gesehen:

$ 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

Dieser ist noch seltsamer, weil alle RTTs angemessen sind und die Pakete nicht schnell verschickt werden. Kann jemand Licht ins Dunkel bringen? Ich bin auf debian testing (wheezy) und noch ein paar Statistiken:

$ 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)
Matt
quelle

Antworten:

6

Es sieht so aus, als hätten Sie eine der Versionen ping, die für jedes empfangene Paket eine DNS-Suche durchführt. Da ein DNS-UDP-Paket dasselbe überlastete Netzwerk wie Ping-Pakete durchlaufen muss, wird das Paket möglicherweise verworfen. Bei Zeitüberschreitungen und Wiederholungsversuchen kann es einige Zeit dauern, bis eine DNS-Anfrage Daten zurückgibt. Die Wartezeit auf eine DNS-Antwort verzögert das Senden des nächsten Ping-Pakets, da Sie pingbeide Singlethreading-Prozesse ausführen und keinen asynchronen Zeitgeber zum Ansteuern der einzelnen Pings verwenden.

Wenn meine Diagnose richtig ist, sollte das Hinzufügen -nzu pingdie Verzögerungen loswerden.

Kyle Jones
quelle
Aber sollten die DNS-Antworten nicht zwischengespeichert werden? Grundsätzlich macht -n es schneller - aber wir haben herausgefunden, dass auf Debian-Systemen die Verwendung von -n auf einem Host, der keinen umgekehrten DNS-Eintrag hat, den Prozess nicht verlangsamt. Vielleicht ist es eher ein Problem mit dem gesamten DNS-Setup unter Ubuntu?
Alex
1
@Alex Lookups werden zwischengespeichert, wenn auf dem lokalen Computer ein Caching-Server ausgeführt wird und DNS so eingerichtet ist, dass zuerst die Loopback-Adresse ermittelt wird. Ich denke, dass Ubuntu eine der am wenigsten wahrscheinlichen Distributionen ist, die standardmäßig einen Caching-Server ausführen.
Kyle Jones
Nun, es hat über ein Jahr gedauert, aber ich war endlich in einem Netzwerk, in dem ich dieses Verhalten wieder sah und in der Lage war zu überprüfen, ob es ping -ndas erwartete Verhalten ergab. Vielen Dank @KyleJones!
Matt