連載
» 2017年12月07日 05時00分 公開

Tech TIPS:Windowsの「ping」コマンドでネットワークトラブルの原因を調査する (1/2)

pingはTCP/IPにおける最も基本的で、かつ重要なコマンドである。pingが通るかどうかで相手先のPCが稼働しているかどうか、そこまでの通信経路が正しいかどうかを検査できる。pingに応答すれば、そのホストは正常に動作しており、そこまでのネットワークのルーティングが正しく設定されているということが分かる。

[打越浩幸,デジタルアドバンテージ]

対象OS:Windows 7/Windows 8/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016


pingコマンドとは

 pingは、TCP/IPネットワークにおける最も基本的なツールであるとともに、最も有用なツールの1つでもある(本来pingは「ピン」と読むが、日本では「ピング」と読むのが一般的なようだ)。さまざまな使い方があるが、一般的には、通信相手が「生きているかどうか」を調べたり、相手までのネットワークの経路が正しく設定され、通信が行える状態になっているかどうかを確かめたりするために使われる。ここでは、ネットワーク管理者の強い味方、pingの基本的な使い方についてまとめておく。

pingの仕組み

 pingコマンドは、「ICMP(Internet Control Message Protocol)」の「echo request/echo reply」メッセージを使った、単純なパケットの通信テストプログラムの1つだ。TCP/IPネットワークでは、IPやTCP、UDPプロトコルのパケットにさまざまな情報を載せてホスト間で通信をしている。その通信中にエラーが起こった場合、ICMPという補助的なプロトコルを使ってエラーを伝えることになっている。echoはICMPでサポートされている機能の1つであり、echoの引数として受け取ったデータをそのまま送信元へ送り返すという動作をする。

 パケットを送り返すだけの単純な機能であるが、これが動作するということは、IPアドレスが正しく割り当てられ、かつ途中の経路(ルーティング情報)などが正しく設定され、動作しているということを意味している。途中で不通になっていると応答が返ってこないからだ。

 「ping」コマンド(実体はping.exeファイル)は、このecho機能を使って、パケットの平均応答時間を測定したり、ネットワーク経路のテストをしたりするためのコマンドである。どんなシステムでも、TCP/IPのプロトコルスタックが起動していて、IPアドレスが割り当てられ、それが正しく動作していれば、このICMPのecho機能は必ずサポートされていることになっている。

pingコマンドの基本的な使い方

 引数なしで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応答メッセージを受信すると、以下のように、応答を受け取るまでの所要時間や、その平均時間などの情報を表示する。

pingコマンドの実行例 pingコマンドの実行例
pingは、指定されたホスト(IPアドレスか名前で指定する)に対して、ICMPのechoメッセージを送り、それが送り返されてくるのを待つコマンド。応答があれば、通信相手や、そこまでの経路が“生きている”ことが分かる。また、往復時間からネットワークの混雑度もある程度分かる。応答がなければ、通信相手がダウンしているなど、途中の経路設定が正しくないなど、さまざまな問題が発生していることになる。

 最後に表示されている統計値の意味は、4回パケットを送った結果、4回応答を受け取り(パケット喪失率は0%)、その応答時間は最小3ms、最大6ms、平均4msであった、という意味である。

 たとえローカルのLAN上であっても、最初の1回はARPコマンド要求のために若干遅くなることがある(ARPについては別記事参照)。そのため、遅延速度を(より正確に)測定したければ、同じpingコマンドをもう1回実行するとよい。コマンドプロンプトで[↑]キーを押して直前のコマンドを呼び出し、そのまま[Enter]キーを押せば簡単に再実行できる。

 ネットワーク(TCP/IPプロトコル)が正しく構成されているかどうかを調べるには、このように、相手からpingの応答が戻ってくるかどうかで判断する。

 通信相手がアクティブであるかどうか、そこまでのネットワーク経路が正しく“生きている”かどうかは、「〜〜 からの応答:」の行があるかどうかで判断できる。

 pingの結果からは、次のようなことが分かる。

  • ネットワークの到達可能性――応答が1つでも返ってくるなら、相手先との通信経路が正しく設定されている
  • ネットワークの遅延時間――応答(ラウンドトリップ)時間から判断できる。遠くにあるホストほど遅くなる。Windowsのpingコマンドでは、1ms以下だと「時間 <1ms」と表示される
  • ネットワークの混雑度――応答が遅い、喪失率が0%でない、応答時間のばらつきが大きい、などの傾向があるなら、ネットワークがかなり混雑している

 なお、応答結果に含まれる「TTL(Time To Live)」は、相手側からこちらへpingの応答が戻ってくるまでに何台のルータを通過したかを表す数値(ホップ数)である。上の実行例では「TTL=54」となっているが、これは、初期値の64(推測)から始まって(初期値は255や128、64など、システムによって異なる)、10台ほど経由して戻ってきたと考えられる(ルータを1台通過するごとに1つ減る)。正確にはtracertなどで確認すること(TIPS「Windowsのtracertでネットワークの経路を調査する」参照)。

 これ以外にも例えば、pingを繰り返し実行してシステムの死活管理を行ったり、より大きなサイズのデータを送信してネットワークのMTUサイズや帯域(の概算)を調査したりするなど、多くの使い道があるコマンドである。

 より進んだ使い方については、今後別TIPSで紹介する。

pingに対する応答がない場合は?

 pingを実行しても、相手からの応答がなければ次のように表示される。

pingに応答しないホストの例 pingに応答しないホストの例
pingに対して(想定した時間以内に)応答がない場合は、このように「要求がタイムアウトしました。」と表示される。

 「要求がタイムアウトしました。」は、ICMPの応答を指定された時間内に受け取ることができなかったということを表している。ただしデフォルト待ち時間は1秒(1000ms)なので、インターネット上の宛先を調べる場合は、次のように「-w 5000」などというオプションを使って(待ち時間は1/1000秒単位で指定する)、応答待ち時間をもう少し長くして調べる必要があるだろう。

C:\>ping -w 5000 www.example.co.jp  ……各応答を5秒待つ指定



 「要求がタイムアウトしました。」ではなく、次のようなメッセージが表示されることもある。

同一LAN上の存在しないホストに対してpingを実行した場合の例 同一LAN上の存在しないホストに対してpingを実行した場合の例
この例では、10.20.2.107から(ネットワークアドレスは10.20.2.0/24)、存在しない10.20.2.123というIPアドレスに対してpingを実行している。pingの送信に先立って行われるARPプロトコルに対する応答がないので、自分自身から「宛先ホストに到達できません。」というエラー応答が返ってきているように表示される。

 存在しないIPアドレスに対してpingを実行した場合にこのようなメッセージが表示されることが多いが(システムやファイアウォールの設定などによって異なる)、指定した相手からの応答がないという点では同じである。

 応答パケットが戻ってこない原因には、さまざまな理由が考えられる。

  • 通信相手がダウンしている
  • 通信相手がpingパケットの送受信を禁止している(許可していない)
  • 経路途中にあるいずれかのルータがパケットを正しく中継していない
  • 経路途中のファイアウォールもしくはルータでpingパケットの送受信や中継を禁止している

 正確な原因を突き止めるには、もう少し順序立ててpingを使う必要がある。具体的な手順は後述するが、pingを実行するシステムに近い方から順に応答があるかどうかを調べていけばよい。遠くの方のノード(ホスト)から調べるよりも、素早くトラブルの場所を特定できる。

pingの引数におけるIPアドレスとホスト名の指定方法

 ところでpingの宛先にホスト名やFQDN名などを使う場合、その名前の指定が間違っていると次のようなエラーが表示される。

名前解決が失敗する場合の例 名前解決が失敗する場合の例
DNSによる名前解決ができない場合は、このようなメッセージが表示される。名前解決が失敗しているのと、pingに応答がないことは全く別の事象である。正しいトラブルシューティングのためには、この2つをきちんと区別して対処すること。

 相手から応答が戻ってこない場合とは表示が異なることに注意されたい。

 この「ホスト 〜〜 が見つかりませんでした。」というメッセージは、「名前解決(名前からIPアドレスを求めること)」が失敗したことを表している。

 この原因は次のようにいくつか考えられる。

  • pingの引数で指定したホスト名やドメイン名が間違っている
  • (ネットワークインタフェースに付けた)IPアドレスなどの設定が間違っている
  • DNSサーバやWINSサーバの設定が間違っている
  • DNSやNBTの名前解決が何らかの原因でうまく動作していない(サーバのIPアドレス設定のミス、経路途中のルータやファイアウォールなどでブロックされている、など)

 他にもさまざまな要因が考えられるが、簡単に特定することはできない。せっかくpingを使ってトラブルシューティングを行おうとしているのに、これではさらに話が面倒になるだけだ。このような問題を避けるため、名前解決に失敗した時は、nslookupなどを使ってIPアドレスが取得できるかどうかも確認しよう。

       1|2 次のページへ

Copyright© 1999-2018 Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。