次のpingを実行する前にpingが1秒待つのはなぜですか?

次のpingを実行する前にpingが1秒待つのはなぜですか?

pingUbuntu 20.04.4で次のコマンドを実行しました。

sudo ping -l 2000 -c 200  domain.com

最初の12個のpingをすぐに実行しますが、1秒遅れてから別のpingの後に1個のpingのみを実行します。

正確に言えば、次のように出力されます。

64 bytes from my.domain.com (1.2.3.4): icmp_seq=65 ttl=62 time=0.392 ms
64 bytes from my.domain.com (1.2.3.4): icmp_seq=66 ttl=62 time=0.398 ms

各行(icmp_seq)は1秒間隔です。だから200のpingを完了するには20分待つ必要があります。 200秒。

localhostMacでこのコマンドを実行すると、200個のpingがpingの間に待機時間なしで1秒以内に実行されることを確認しました。

この行動の理由は何ですか? pingコマンドをより速く実行する方法はありますか?

答え1

この行動の理由は何ですか?

ping速度の基本的な問題は次のとおりです。洪水その接続を介して接続すると、DOSが発生します。これらの問題を軽減(防止)するには、ping作成(送信)のみを実行してください。一つデフォルトでは、1秒あたりのパケット数です。

この-lオプションは、パケットの送信にかかる時間を制御するためのものではありません。使用されます今後エルジムネットワーク。つまり、応答を待たずに最初にネットワークに送信されたパケットの数です。その後、再(応答)受信した各(検出された)パケットに対して1秒のデフォルト時間を使用してパケットが送信されます。ただし、一般ユーザーにはプリロードが制限されます。一般ユーザーの場合、プリロードされるデータパッケージの数は3つに制限されます。 iputils-pingバージョンでは、各パケットがいつ送信されるかを確認するために202102021つを追加できます。-D

$ sudo ping -c 5   -l 3   -D   127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
[1655501483.063447] 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.134 ms
[1655501483.063488] 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.019 ms
[1655501483.063510] 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.017 ms
[1655501484.094896] 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.156 ms
[1655501485.065238] 64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.153 ms

--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.017/0.095/0.156/0.063 ms, pipe 3

これはできるだけ早く3つのパケットのみを送信し、残りは1秒間待機することを示します。

ローカルアドレスを使用しています127.0.0.1。これは正確に一致するため、使用できる最速のアドレスです。地元の

別のアドレスを確認するか、悪い場合は、ドメインを確認すると追加の遅延が発生する可能性があります。

200パケットより2000パケットを事前ロードすると、すべてのパケットが事前ロードされ、送信遅延が発生せず、応答遅延のみが問題になります。

pingコマンドをより速く実行する方法はありますか?

しかし、上記のいずれもパケット転送速度を制御する正しい方法ではありません。

-私

これを行うには、次の2つのオプションがあります-i

$ sudo ping -D -c 5 -i 0.2 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
[1655501954.082366] 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.131 ms
[1655501954.286594] 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.151 ms
[1655501954.490564] 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.127 ms
[1655501954.694608] 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.147 ms
[1655501954.898607] 64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.151 ms

--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 816ms
rtt min/avg/max/mdev = 0.127/0.141/0.151/0.010 ms

これは一定速度のpingコマンドです。ローカルアドレスの場合でも応答を受信するのに0.13ミリ秒以上かかります。通常、0.1秒未満のping時間はお勧めできません。

- F

このオプションは、-f正確に次の目的に使用されます。洪水ネットワークはできるだけ高速です。ただし、これにより、これを使用する他のプロセスが確実にブロックされます。

なぜ

実際、質問は次のとおりです。なぜ速いpingをしたいのですか?

最速の答えを得るには?

pingこれは、ネットワークが安定していて有用であることを確認するために合理的な期間にわたってネットワークをテストすることが目的であるため、実際には役に立ちません。 「高速」テストでは、特定の時点(ネットワークが稼働している)にのみネットワークをテストしますが、時間が経っても問題が見つかりません(ネットワークが誤動作する可能性があります)。また、同じネットワーク上の他のユーザーにも影響します。 「一度だけ」テストをしたい場合は、カウントパケットを受信した後または遅延後に終了するオプションと一緒にこのオプションを使用してください-c count-w delay

$ sudo ping -D -c 3 -w 5 example.com ; echo "$?"

$ sudo ping -D -c 3 -w 5 examples.com ; echo "$?"

最初は3つのパケットを計算し、正常に終了します。 2番目は5秒後に失敗します。

これは接続をテストする適切な方法です。

関連情報