コマンドプロンプトなどで使用できる、ネットワーク診断プログラムの中で最も基本的なコマンドである「ping」のご紹介です。
パソコンを使用しているとよく遭遇する「ネットワークに繋がらない」という不具合がありますが、このような問題に対して「ping」コマンドを使用しますと、TCP/IPを使ったネットワークで通信の疎通を確認することができます。
通信したい相手(端末やWebサーバーなど)に対してパケットを送信し、そこから無事に応答が帰ってくるかどうかを確認できますので、正しく通信ができているかどうかを簡単にチェックすることができます。
ネットワーク診断プログラムの中では最も基本的なコマンドです。ネットワーク関連の不具合に対して便利に使えるコマンドですので、ぜひ使い方を覚えてみてください。
ping について
正式名称は「Packet InterNet Groper」で、略称を「ping」と呼んでいます。
日本語にはない発音(発音記号はpɪŋ)をしますので、カタカタ表記にすると「ピン」または「ピング」と書くことが多いです。私の経験上は「ピン」と読んでいる方が多い印象です。
「TCP/IP」というネットワークの約束事(プロトコル)を決めた規格があります。世の中の様々なネットワーク通信は、通常この規格に則って通信をしていますが、その規格に則って正しく通信がされているのかどうかを確認するためのコマンドが「ping」です。
専門的に言いますと、ノードまでの到達性を「ICMP」の「Echo Request パケット」と呼ばれるエコー要求パケットを送信することで確認するプログラムです。
詳細な動作
ICMP【Internet Control Message Protocol:インターネット制御通知プロトコル】は、TCP/IPが動作するために必要な通信の情報を通知するための補助的なプロトコルです。エラーや誤りなどを通知してくれます。IPv4のためのICMPは「ICMPv4(RFC 792等によって規定)」、IPv6のためのICMPは「ICMPv6(RFC 4443によって規定)」となっています。
ICMPは、メッセージの機能や種類によって「タイプ(Type)」分けされており、「Type 0」から「Type 18」ほどまであります。
pingは、このICMPのタイプのうち「ICMP Type 8」である「Echo Request」と呼ばれるエコー要求パケットをノードへ送り、「ICMP Type 0」である「Echo Reply」というエコー応答が帰ってくるような構造になっています。
エコー要求とは、送ったパケットをそのまま改変せずに返送してくれという要求のことです。送ったパケットを送り返すだけの単純な構造をしていますが、正しく要求が帰ってくるのであれば、パケットにしっかりと情報が記録され、IPアドレスも正しく割り当てられ、途中経路のルーティングも正しく設定されていることが確認できます。
このように、pingコマンドはネットワークの疎通を確認する最も簡単な方法で、かつよく利用される便利なコマンドなのです。
実際にpingを送ってみよう
難しい話はここで終わりにしまして、実際にpingを送ってみましょう。
pingコマンドは、Windowsに限らずIPが実装されている環境であれば、何らかの形で似たものが実装されていますが、今回はWindows環境にて解説します。操作はWindows 11で行っていますが、過去のバージョンでも操作はほとんど同じです。
「コマンド プロンプト」または「ターミナル(PowerShell)」を起動します。
一番簡単な起動方法は、Windowsのスタートボタンを右クリックして、メニューから「コマンド プロンプト」「PowerShell」「ターミナル」いずれかを選択することです。pingコマンドに「管理者」権限は必要ありませんので、どちらでも大丈夫です。
あるいは、[Windows]キーと[R]キーを同時に押して「ファイル名を指定して実行」を表示し、「cmd」「powershell」または「wt」と入力することで「コマンド プロンプト(cmd)」「ターミナル(wt)」「PowerShell(powershell)」が起動します。
pingの構文は非常に単純です。下記の通りコマンドを打ってください。
ping [オプション] [宛先]
オプションは省略しても標準設定で送信可能できますので、最初はオプションを付けずに宛先だけを指定して送ってみましょう。
宛先には「ホスト名」または「IPアドレス」を入力してください。「http://」が付くとダメなので注意してください。これは自宅にあるルーターに対しても送れますが、今回はメジャーなホストである「google.co.jp」へ送ってみましょう。Googleのホストはpingを受け付けており返答をしてくれます。(pingを受け付けておらず返答してくれないサーバーもあるので注意。)
Googleのホストに対して送るために、下記のようなコマンドを打ちます。
ping google.co.jp
コマンドを送信して、通信が正常であると下記のような表示がでます。
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\ユーザー名> ping google.co.jp
google.co.jp [142.250.207.3]に ping を送信しています 32 バイトのデータ:
142.250.207.3 からの応答: バイト数 =32 時間 =11ms TTL=128
142.250.207.3 からの応答: バイト数 =32 時間 =11ms TTL=128
142.250.207.3 からの応答: バイト数 =32 時間 =11ms TTL=128
142.250.207.3 からの応答: バイト数 =32 時間 =11ms TTL=128
142.250.207.3 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 11ms、最大 = 11ms、平均 = 11ms
ホスト「google.co.jp」がDNSによってIPアドレス「142.250.207.3」へ変換(リゾルブ)されました。ですので、「142.250.207.3」と入力しても同じ場所へpingを送信します。なぜ変換されるのか、という疑問に関しては下記の記事を参考にしてください。
32 バイトの ping が合計で4回送信されています。そして相手からの応答が4回とも返信されているため、損失は0(0%)となりました。
ラウンドトリップタイム(応答時間:データを送信してから返事が返ってくるまでの時間、いわゆるping値)も長くて11ミリ秒と結構早いので、ネットワークの接続状況は良好であることがわかります。TTLとは「Time To Live」の略で、ルーターを通過するごとに1ずつ減算される値です。これが0になると、データは経路上で破棄されます。
コマンドにオプションを付けないと、32バイトのデータを4回送信するようです。
逆に、通信が正常でない場合は以下の様な表示になります。
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\ユーザー名> ping google.co.jp
www.google.co.jp [142.250.207.3]に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
142.250.207.3 の ping 統計:
パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)
pingの要求をしても応答せずにタイムアウトしています。
4回送信したにも関わらず、受信数は「0」、損失が「4」で損失100%となっています。この状態はネットワークの接続が正常でないということになります。原因を探り解決させる必要があります。
このように、相手のホストに対してpingを送ってその応答状況をみることで、正常にネットワークへ接続できているかを確認できます。
例えば、WebブラウザでWebページが表示されないという不具合があったとき、インターネットへの接続ができていないのか、Webブラウザ自体が問題なのかを切り分けるため、pingを送信します。pingの送信がうまくいった場合はインターネットとの接続に問題は無さそうとなり、Webブラウザなど別のところが問題であるとわかります。
また、もっと細かく切り分けるために、ルーターごとにpingを送信してみて問題となっている箇所を特定する方法もあります。状況に応じて柔軟にチェックができるかと思います。
オプション
PS C:\Users\ユーザー名> ping -?
使用法: 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 の使用を強制します。
以上がpingコマンドのオプションです。「ping -?」と入力するとコマンドの詳細が表示されます。
例えば、「ping -n 8 [宛先]」と指定すると「8回」pingを送信します。「ping -l 512 [宛先]」とすれば「512バイト」のデータを送信します。
IPv6アドレスでの送信を強制したい場合は「ping -6 [宛先]」とすればIPv6アドレスで接続を試みます。
ネットワークの経路が非常に多い場合、TTLの値が少ないと対象ホストへ到達する前に消失してしまう可能性がありますので、その場合は「-i」にて多めに設定するとうまくいきます。上限は「255」です。
まとめ
これで簡単なpingコマンドの解説は終わりです。
pingコマンドはネットワーク診断をする際の基本的なコマンドです。そこまで正確な診断はしないのでいくらかの誤差はでてしまうのですが、それでもこのpingから分かることは多いです。インターネットと通じての対戦ゲームを楽しみたい場合は、ラウンドトリップタイム(ping値)が短い方が有利になるので、この確認もpingで可能です。
使い方もそこまで難しくないのでぜひ覚えていただいて、今後起きるかもしれない不具合等の解決に役立ててみてください。
- 2023年2月26日:改訂
- 2014年3月9日:初出
コメント
コメント欄を開く