1. 概要

このクイックチュートリアルでは、Linux pingコマンドがネットワークの問題の診断とトラブルシューティングにどのように役立つかを探ります。

2. 構文

基本的な構文を見てみましょう。

ping [OPTIONS] DESTINATION

ping (Packet INternet Groper)コマンドは、ICMP(インターネット制御メッセージ)プロトコルを使用してサーバーにパケットを送信します。

ping コマンドを説明するために、www.baeldung.comにpingを実行してみましょう。

$ ping www.baeldung.com

PING www.baeldung.com (104.18.63.78): 56 data bytes
64 bytes from 104.18.63.78: icmp_seq=0 ttl=54 time=203.928 ms
64 bytes from 104.18.63.78: icmp_seq=1 ttl=54 time=181.025 ms
^C
--- www.baeldung.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 181.025/192.476/203.928/11.452 ms

まず、 ping コマンドは、指定されたドメイン名からIPアドレスを決定します。

次に、it はサーバーへのICMPパケットの送信を開始します。パケットが宛先に到達すると、サーバーが応答し、pingコマンドがコンソールに行を出力します。

デフォルトでは、次の情報を含む行が出力されます。

  • 送信されたバイト数、デフォルトでは64ICMPデータバイト
  • 宛先のIPアドレス、この場合は 104.18.63.78
  • ICMPパケットシーケンス番号、たとえば、 icmp_seq = 0
  • 存続時間(TTL)、パケットがドロップされるまでのホップ数を示します。ここでは54です。
  • Pingコマンドのラウンドトリップ時間、この場合は 203.928 ms

したがって、ICMPパケットを継続的に送信し、 Control + C (Windows)または Command + C (Mac)を使用してパケットの送信を手動で停止する必要があることがわかります。

また、ネットワークの問題が原因で失われたパケットの割合も表示されます。

3. 基本的な使用法

デフォルトの出力を確認したので、次にいくつかのオプションの動作を確認します。

3.1. パケット間の間隔の指定

デフォルトでは、pingコマンドは毎秒新しいパケットを送信します。

-i フラグを使用してping間隔を変更しましょう

$ ping -i 3 www.baeldung.com

PING www.baeldung.com (104.18.62.78): 56 data bytes
64 bytes from 104.18.62.78: icmp_seq=0 ttl=54 time=190.037 ms
64 bytes from 104.18.62.78: icmp_seq=1 ttl=54 time=186.061 ms
64 bytes from 104.18.62.78: icmp_seq=2 ttl=54 time=187.458 ms
^C
--- www.baeldung.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 186.061/187.852/190.037/1.647 ms

これを証明する出力はありませんが、実行すると、3秒ごとに新しい行出力が得られることがわかります。

3.2. パケット数の制御

実際には、 -cオプションを使用して、宛先サーバーに送信するICMPパケットの数を指定することがよくあります。

$ ping -c 3 www.baeldung.com

PING www.baeldung.com (104.18.63.78): 56 data bytes
64 bytes from 104.18.63.78: icmp_seq=0 ttl=54 time=191.813 ms
64 bytes from 104.18.63.78: icmp_seq=1 ttl=54 time=177.645 ms
64 bytes from 104.18.63.78: icmp_seq=2 ttl=54 time=186.750 ms

--- www.baeldung.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 177.645/185.403/191.813/5.862 ms

上記のように、パケットの連続ストリームではなく、3つのICMPパケットのみを送信しました。

3.3. パケットサイズの指定

さらに、 ping を使用すると、-sフラグを使用してパケットサイズを指定することもできます。

$ ping -s 40 -c 4 www.baeldung.com

PING www.baeldung.com (104.18.63.78): 40 data bytes
48 bytes from 104.18.63.78: icmp_seq=0 ttl=54 time=180.801 ms
48 bytes from 104.18.63.78: icmp_seq=1 ttl=54 time=181.822 ms
48 bytes from 104.18.63.78: icmp_seq=2 ttl=54 time=175.019 ms
48 bytes from 104.18.63.78: icmp_seq=3 ttl=54 time=172.405 ms

--- www.baeldung.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 172.405/177.512/181.822/3.927 ms

ここでは、上記の例で-sオプションと-cオプションの両方を一緒に使用しています。 その結果、それぞれサイズが40バイト(ICMP:48バイト)の4つのパケットしか送信しませんでした。

これを使用して、さまざまなパケットサイズでのネットワークの遅延を判断できます。 たとえば、多くの複雑なネットワークでは、パケットサイズが1500バイトを超えると問題が発生し始めます。 パケットサイズを変更することで、システムに最適なパケットサイズを決定できます。

4. 高度な使用法

次に、より高度なオプションを見てみましょう。

4.1. タイムアウトを指定する

実際には、混雑したネットワークでは、特定の時間を待った後に応答をタイムアウトすることが役立つ場合があります。これは-Wで実行できます。オプション:

$ ping -c 4 -W 2 www.baeldung.com

PING www.baeldung.com (104.18.63.78): 56 data bytes

--- www.baeldung.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss, 4 packets out of wait time
round-trip min/avg/max/stddev = 192.397/195.137/198.573/2.480 ms

まず、リクエストをサーバーに送信します。 次に、2秒間待って応答を受け取りました。

ネットワークの遅延が少ないため、パケット損失なしですべてのパケットを正常に受信しました。

4.2. Pingを使用したネットワークのフラッディング

できるだけ多くのパケットを送信して、ネットワークパフォーマンスをテストしたい場合があります。

説明のために、-fオプションを使用してpingコマンドを実行してみましょう。

$ ping -f localhost

PING localhost (127.0.0.1): 56 data bytes
..Request timeout for icmp_seq 250
.Request timeout for icmp_seq 251
.Request timeout for icmp_seq 252
.Request timeout for icmp_seq 253
...
^C
--- localhost ping statistics ---
271 packets transmitted, 250 packets received, 7.7% packet loss
round-trip min/avg/max/stddev = 0.010/0.019/0.049/0.005 ms

この特定のケースでは、0.019秒の平均ラウンドトリップ時間で271個のパケットを送信しました。

4.3. ネットワークサマリーの取得

次に、-qフラグを使用してコマンドを使用してネットワークサマリーを取得できます。

まず、-cフラグと-qフラグの両方を使用してpingコマンドを実行しましょう。

$ ping -c 4 -q www.baeldung.com

PING www.baeldung.com (104.18.62.78): 56 data bytes

--- www.baeldung.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 180.232/189.512/206.033/10.120 ms

そのため、このオプションは、コマンドをクワイエットモードで実行するために使用されます。 ここでは、要約のみを取得し、送信されている個々のパケットの詳細は表示されません。

4.4. 可聴Pingの使用法

-a フラグを使用して、pingユーティリティを可聴モードで実行してみましょう。

$ ping -a www.google.com

PING www.google.com (172.217.163.164): 56 data bytes
64 bytes from 172.217.163.164: icmp_seq=0 ttl=54 time=107.001 ms
64 bytes from 172.217.163.164: icmp_seq=1 ttl=54 time=52.143 ms
64 bytes from 172.217.163.164: icmp_seq=2 ttl=54 time=54.163 ms
^C
--- www.google.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 52.143/71.102/107.001/25.398 ms

ここでは、クライアントがホストサーバーに到達できるたびに、ビープ音が聞こえます。

5. 結論

このクイックチュートリアルでは、pingコマンドの使用方法を説明しました。

最初に、コマンドで送信するパケットの間隔、サイズ、および数を制御する方法について説明しました。

最後に、ネットワークサマリーの取得やネットワークのフラッディングなど、いくつかの高度な使用法について説明しました。