pingコマンドのオプションを試してみた

other Other

宛先のICMP応答を確認するpingコマンドですが、様々なオプションがあります。
今回はそのオプションについて試してみました。

環境としてはWindowsOSで実施しています。
Linux環境だと少しオプションなどが異なるので注意してください。

広告

pingコマンド(オプションなし)

オプションなしの場合は以下のように利用できます。

 #8.8.8.8に対して疎通確認をする
ping 8.8.8.8

 #FQDNに対して疎通確認をする
ping www.yahoo.co.jp

 #IPv6に対して疎通確認をする(8.8.8.8のIPv6)
ping ::ffff:0808:0808

・実行結果(IPv6)

C:\>ping ::ffff:0808:0808

8.8.8.8 に ping を送信しています 32 バイトのデータ:
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =1ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =1ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56

8.8.8.8 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 1ms、最大 = 2ms、平均 = 1ms

C:\>

尚、「::ffff:0808:0808」は「0000:0000:0000:0000:0000:ffff:0808:0808」の省略表記です。
省略しない値で実行しても同じ結果となります。

オプションの種類

オプションの種類は以下のコマンドで確認することができます。

ping --h
使用法: ping [-t] [-a] [-n 要求数] [-l サイズ] [-f] [-i TTL] [-v TOS]
            [-r ホップ数] [-s ホップ数] [[-j ホスト一覧] | [-k ホスト一覧]]
            [-w タイムアウト] [-R] [-S ソースアドレス] [-c コンパートメント]
            [-p] [-4] [-6] ターゲット名

オプション:
    -t             中断されるまで、指定されたホストを Ping します。
                   統計を表示して続行するには、Ctrl+Break を押してください。
                   停止するには、Ctrl+C を押してください。
    -a             アドレスをホスト名に解決します。
    -n 要求数      送信するエコー要求の数です。
    -l サイズ      送信バッファーのサイズです。
    -f             パケット内の Don't Fragment フラグを設定します (IPv4 のみ)。
    -i TTL         Time To Live です。
    -v TOS         Type Of Service (IPv4 のみ。この設定はもう使用されておらず、
                   IP ヘッダー内のサービス フィールドの種類に影響しません)。
    -r ホップ数    指定したホップ数のルートを記録します (IPv4 のみ)。
    -s ホップ数    指定したホップ数のタイムスタンプを表示します (IPv4 のみ)。
    -j ホスト一覧  一覧で指定された緩やかなソース ルートを使用します
                   (IPv4 のみ)。
    -k ホスト一覧  一覧で指定された厳密なソース ルートを使用します
                   (IPv4 のみ)。
    -w タイムアウト
                   応答を待つタイムアウトの時間 (ミリ秒) です。
    -R             ルーティング ヘッダーを使用して逆ルートもテストします
                   (IPv6 のみ)。
                   RFC 5095 では、このルーティング ヘッダーは使用されなくなり
                   ました。このヘッダーが使用されているとエコー要求がドロップ
                   されるシステムもあります。
    -S ソースアドレス
                   使用するソース アドレスです。
    -c コンパートメント
                   ルーティング コンパートメント識別子です。
    -p             Hyper-V ネットワーク仮想化プロバイダー アドレスを
                   ping します。
    -4             IPv4 の使用を強制します。
    -6             IPv6 の使用を強制します。

今回は上記の中でも利用することが多い5つのオプションについて試してみました。

継続してpingを打つ([-t] オプション)

[-t] オプションを利用することで継続してpingを打つことが可能です。
このオプションを指定しないで実行した場合には通常4回施行されます。

C:\>ping -t 8.8.8.8

8.8.8.8 に ping を送信しています 32 バイトのデータ:
8.8.8.8 からの応答: バイト数 =32 時間 =1ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =3ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =1ms TTL=56

8.8.8.8 の ping 統計:
    パケット数: 送信 = 11、受信 = 11、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 1ms、最大 = 3ms、平均 = 1ms
Ctrl+C
^C
C:\>

停止する場合には「Ctrl+C」を押して停止させます。

実行する回数を指定する([-n] オプション)

[-n] オプションを利用することで、実行する回数を指定してpingを実行できます。

C:\>ping -n 7 8.8.8.8

8.8.8.8 に ping を送信しています 32 バイトのデータ:
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =1ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =1ms TTL=56

8.8.8.8 の ping 統計:
    パケット数: 送信 = 7、受信 = 7、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 1ms、最大 = 2ms、平均 = 1ms

C:\>

[-t] オプションと同様で途中で中断したい場合には「Ctrl+C」を押して停止させることが可能です。

名前解決する([-a] オプション)

[-a] オプションを利用することで、IPアドレスをホスト名に名前解決してpingを実行できます。

C:\>ping -a 8.8.8.8

dns.google [8.8.8.8]に ping を送信しています 32 バイトのデータ:
8.8.8.8 からの応答: バイト数 =32 時間 =1ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =32 時間 =2ms TTL=56

8.8.8.8 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 1ms、最大 = 2ms、平均 = 1ms

C:\>

また、逆にFQDN(ホスト名)を解決することも可能ですが、ホスト名は[a]を利用しなくても自動的にIPに変換されるようなのでホスト名を宛先とする場合には不要になるかと思います。

・[-a]を利用した結果

C:\>ping -a www.yahoo.co.jp

edge12.g.yimg.jp [182.22.25.252]に ping を送信しています 32 バイトのデータ:
182.22.25.252 からの応答: バイト数 =32 時間 =2ms TTL=54
182.22.25.252 からの応答: バイト数 =32 時間 =2ms TTL=54
182.22.25.252 からの応答: バイト数 =32 時間 =2ms TTL=54
182.22.25.252 からの応答: バイト数 =32 時間 =2ms TTL=54

182.22.25.252 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 2ms、最大 = 2ms、平均 = 2ms

C:\>

・[-a]を利用しない結果

C:\>ping www.yahoo.co.jp

edge12.g.yimg.jp [182.22.25.252]に ping を送信しています 32 バイトのデータ:
182.22.25.252 からの応答: バイト数 =32 時間 =2ms TTL=54
182.22.25.252 からの応答: バイト数 =32 時間 =3ms TTL=54
182.22.25.252 からの応答: バイト数 =32 時間 =2ms TTL=54
182.22.25.252 からの応答: バイト数 =32 時間 =2ms TTL=54

182.22.25.252 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 2ms、最大 = 3ms、平均 = 2ms

C:\>

送信バッファのサイズを指定する([-l] オプション)

[-l] オプションを利用することで、送信バッファーのサイズを指定してpingを実行できます。
このオプションを指定しないで実行した場合には通常32バイトで実行されます。

C:\>ping -l 50 8.8.8.8

8.8.8.8 に ping を送信しています 50 バイトのデータ:
8.8.8.8 からの応答: バイト数 =50 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =50 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =50 時間 =2ms TTL=56
8.8.8.8 からの応答: バイト数 =50 時間 =2ms TTL=56

8.8.8.8 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 2ms、最大 = 2ms、平均 = 2ms

C:\>

また、サイズを約1500バイト以上を指定すると以下のように応答が返ってきません。

C:\>ping -l 1500 8.8.8.8

8.8.8.8 に ping を送信しています 1500 バイトのデータ:
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。

8.8.8.8 の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、

C:\>

これはMTU値に制約を受けるためです。

[-f]オプションを利用すると「Don’t Fragment フラグを設定」してpingを打つので、以下のような値が返ってきます。

C:\>ping -f -l 1500 8.8.8.8

8.8.8.8 に ping を送信しています 1500 バイトのデータ:
パケットの断片化が必要ですが、DF が設定されています。
パケットの断片化が必要ですが、DF が設定されています。
パケットの断片化が必要ですが、DF が設定されています。
パケットの断片化が必要ですが、DF が設定されています。

8.8.8.8 の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、

C:\>

MTUの値の確認方法などについては以下の記事で記載しているので参考にしていただければ幸いです。

WindowsでMTUの値を確認してみた
WindowsOSの端末でMTUの設定値を確認してみました。 MTUとは MTUとは「Maximum Transmission Unit」の略称で、最大伝送単位を表しています。言い換えると「一度の通信で転送可能なデータサイズの制限値」のこと...

タイムアウトの時間を指定する([-w] オプション)

[-w] オプションを利用することで、タイムアウトの時間を指定してpingを実行できます。

このオプションを利用しない場合には、約4000msで実行されます。

C:\>ping -w 1000 10.10.10.10

10.10.10.10 に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。

10.10.10.10 の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、

C:\>

上記の結果だけだとわかりづらいですが、疎通できない宛先に対して4000以下の値を設定すると、この設定値によって返ってくる速度がどのくらい変わるのかが分かるかと思います。

タイトルとURLをコピーしました