pingはTCP/IPにおける最も基本的で、かつ重要なコマンドである。pingが通るかどうかで相手先のPCが稼働しているかどうか、そこまでの通信経路が正しいかどうかを検査できる。pingに応答すれば、そのホストは正常に動作しており、そこまでのネットワークのルーティングが正しく設定されているということが分かる。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象OS:Windows 8.1/Windows 10、Windows Server 2012/Windows Server 2012 R2/Windows Server 2019/Windows Server 2016
「ping」コマンドは、TCP/IPネットワークにおける最も基本的なツールであるとともに、最も有用なツールの1つでもある(本来pingは「ピン」と読む。ただ、日本では「ピング」と読むのが一般的なようだ)。さまざまな使い方がある中で、一般的には、通信相手が「生きているかどうか」を調べたり、相手までのネットワークの経路が正しく設定され、通信が行える状態になっているかどうかを確かめたりするために使われる。本Tech TIPSでは、ネットワーク管理者の強い味方、pingの基本的な使い方についてまとめておく。
pingコマンド(実体はping.exeファイル)は、「ICMP(Internet Control Message Protocol)」の「echo request/echo reply」メッセージを使った、単純なパケットの通信テストプログラムの1つだ。TCP/IPネットワークでは、IPやTCP、UDPプロトコルのパケットにさまざまな情報を載せてホスト間で通信をしている。その通信中にエラーが起こった場合、ICMPという補助的なプロトコルを使って、エラーを伝えることになっている。echoはICMPでサポートされている機能の1つであり、echoの引数として受け取ったデータをそのまま送信元へ送り返すという動作をする。
これはパケットを送り返すだけの単純な機能である。だが、これが動作するということは、IPアドレスが正しく割り当てられ、かつ途中の経路(ルーティング情報)などが正しく設定され、動作しているということを意味している。途中で不通になっていると応答が返ってこないからだ。
pingコマンドは、このecho機能を使って、パケットの平均応答時間を測定したり、ネットワーク経路のテストをしたりするためのコマンドである。どんなシステムでも、TCP/IPのプロトコルスタックが起動していて、IPアドレスが割り当てられ、それが正しく動作していれば、このICMPのecho機能は必ずサポートされていることになっている。
引数なしでpingを実行するとpingのヘルプが表示される。Windows OSのバージョンによってサポートされている機能やオプションはいくらか異なる。それでも、pingコマンドの最も基本的な使い方は、次のように、引数として通信相手のIPアドレスやホスト名を指定して起動する、というものである。
ping <宛先PC>
例えばmicrosoft.comというドメインにある、wwwというホストに対してpingを実行するには、次のようにする。
C:\>ping www.microsoft.com
これを実行すると、Windows OSのpingコマンドは、デフォルトでは、32bytesのデータ部(データ内容は単なるASCII文字列)を持つICMP echoパケットを4つ生成して、1秒おきに指定された宛先に対して送信する。そして、そのホストからのecho応答メッセージを受信すると、以下のように、応答を受け取るまでの所要時間や、その平均時間などの情報を表示する。
最後に表示されている統計値の意味は、4回パケットを送った結果、4回応答を受け取り(パケット喪失率は0%)、その応答時間は最小3ms、最大6ms、平均4msであった、という意味である。
たとえローカルのLAN上であっても、最初の1回はARPコマンド要求のために若干遅くなることがある(ARPについては別記事参照)。そのため、遅延速度を(より正確に)測定したければ、同じpingコマンドをもう1回実行するとよい。コマンドプロンプトで[↑]キーを押して直前のコマンドを呼び出し、そのまま[Enter]キーを押せば簡単に再実行できる。
ネットワーク(TCP/IPプロトコル)が正しく構成されているかどうかを調べるには、このように、相手からpingの応答が戻ってくるかどうかで判断する。
通信相手がアクティブであるかどうか、そこまでのネットワーク経路が正しく「生きている」かどうかは、「〜〜 からの応答:」の行があるかどうかで判断できる。
pingの結果からは、次のようなことが分かる。
なお、応答結果に含まれる「TTL(Time To Live)」は、相手側からこちらへpingの応答が戻ってくるまでに何台のルータを通過したかを表す数値(ホップ数)である。上の実行例で「TTL=54」となっているのは、初期値の64(推測)から始まって(初期値は255や128、64など、システムによって異なる)、10台ほど経由して戻ってきたと考えられる(ルータを1台通過するごとに1つ減る)。正確にはtracertなどで確認すること(Tech TIPS「Windowsのtracertでネットワークの経路を調査する」参照)。
これ以外にも例えば、pingを繰り返し実行してシステムの死活管理を行ったり、より大きなサイズのデータを送信してネットワークのMTUサイズや帯域(の概算)を調査したりするなど、多くの使い道があるコマンドである。
pingを実行しても、相手からの応答がなければ次のように表示される。
「要求がタイムアウトしました。」は、ICMPの応答を指定された時間内に受け取ることができなかったということを表している。ただしデフォルト待ち時間は1秒(1000ms)なので、インターネット上の宛先を調べる場合は、次のように「-w 5000」などというオプションを使って(待ち時間は1/1000秒単位で指定する)、応答待ち時間をもう少し長くして調べる必要があるだろう。
C:\>ping -w 5000 www.example.co.jp ……各応答を5秒待つ指定
「要求がタイムアウトしました。」ではなく、次のようなメッセージが表示されることもある。
存在しないIPアドレスに対してpingを実行した場合にこのようなメッセージが表示されることが多いが(システムやファイアウォールの設定などによって異なる)、指定した相手からの応答がないという点では同じである。
応答パケットが戻ってこない原因には、さまざまな理由が考えられる。
正確な原因を突き止めるには、もう少し順序立ててpingを使う必要がある。それには、pingを実行するシステムに近い方から順に応答があるかどうかを調べていけばよい(具体的な手順は後述する)。遠くの方のノード(ホスト)から調べるよりも、素早くトラブルの場所を特定できる。
ところでpingの宛先にホスト名やFQDNなどを使う場合、その名前の指定が間違っていると次のようなエラーが表示される。
相手から応答が戻ってこない場合と表示が異なることに注意してほしい。
この「ホスト 〜〜 が見つかりませんでした。」というメッセージは、「名前解決(名前からIPアドレスを求めること)」が失敗したことを表している。
この原因は次のように幾つか考えられる。
他にもさまざまな要因が考えられるため、簡単に特定することはできない。せっかくpingを使ってトラブルシューティングを行おうとしているのに、これではさらに話が面倒になるだけだ。このような問題を避けるため、名前解決に失敗した時は、nslookupコマンドなどを使ってIPアドレスが取得できるかどうかも確認しよう。
Copyright© Digital Advantage Corp. All Rights Reserved.