連載
» 2014年12月19日 19時00分 UPDATE

Tech TIPS:Windowsのpingコマンドでネットワークトラブルの原因を調査する

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

[打越浩幸,デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows Vista/Windows 7/Windows 8/Windows 8.1/Windows Server 2003/Windows Server 2008/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2


解説

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

●pingコマンドとは

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

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

 また、パケットの往復の所要時間を測定することによって、ネットワークの混雑具合を知ることもできる。

 pingコマンド(実体はping.exeファイル)は、このecho機能を使って、パケットの平均応答時間を測定したり、ネットワーク経路のテストをしたりするためのコマンドである。どんなシステムでも、TCP/IPのプロトコルスタックが起動していて、IPアドレスが割り当てられ、それが正しく動作していれば、このICMPのecho機能は必ずサポートされていることになっている。そのためpingはTCP/IPネットワークの管理に欠かせない必須のツールであるといえる。Windows 95以降のWindows OSは必ずこのコマンドを持っているし、UNIXやLinuxでも必ず用意されている。オプション類が若干異なることがあるが、基本的な使い方はどれでも同じなので、ぜひとも覚えておきたい。

操作方法

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

 引数なしでpingを実行するとpingのヘルプが表示される。Windows OSのバージョンによってサポートされている機能やオプションはいくらか異なるが、pingコマンドの最も基本的な使い方は、次のように、引数として通信相手のIPアドレスやホスト名を指定して起動する、というものである。

ping <宛先PC>



 例えばexample.co.jpというドメインにある、wwwというホストに対してpingを実行するには、

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



とすればよい。これを実行すると、Windows OSのpingコマンドは、デフォルトでは、32bytesのデータ部(データ内容は単なるASCII文字列)を持つICMP echoパケットを4つ生成して、1秒おきに指定された宛先に対して送信する。そして、そのホストからのecho応答メッセージを受信すると、以下のように、応答を受け取るまでの所要時間や、その平均時間などの情報を表示する。

pingコマンドの使用例 pingコマンドの使用例
pingコマンドは、指定されたホスト(IPアドレスか名前で指定する)に対して、ICMPのechoコマンドを送り、それが送り返されてくるのを待つ。応答があれば、通信相手や、そこまでの経路が“生きている”ことが分かる。また、往復時間からネットワークの混雑度もある程度分かる。応答がなければ、通信相手がダウンしているとか、途中の経路設定が正しくないなど、さまざまな問題が発生していることになる。なおWindows XP/Windows Server 2003やそれ以前のWindows OSではメッセージが英語で表示されるが、意味は同じである。
  (1)pingする宛先のホスト名。
  (2)宛先をホスト名で指定した場合、ここに宛先のIPアドレスや逆引きのDNS名が表示される。
  (3)pingで送信するデータのサイズ。デフォルトは32bytes。実際に送信されるパケットにはこの他に、ICMPのヘッダーやIPのヘッダー、さらにイーサネットのヘッダー情報なども付加される。
  (4)通信相手から制限時間以内に応答があったことを表す。
  (5)受信したデータのサイズ。送信時と違っているようならば、何らかの問題があることになる。
  (6)応答時間。Windows OSのpingコマンドでは、1ms(1/1000秒)単位でしか測定できない。ローカルのLAN上のPCなど、1msよりも小さいときは「時間 <1ms」と表示される。またプロトコル上の都合により、最初の1回は遅いことがある。
  (7)「TTL(Time To Live)」値。相手側からこちらへpingの応答が戻ってくるまでに、いくつのルーターを通過したかを表す数値。ある初期値から、ルーターを1つ通過するごとに1ずつ減少し、戻ってきたときの値がここに表示される。初期値は相手のOSや設定などによって変わり、255や128、64など、さまざまなものがある。この例にある「240」は、初期値255から始まってルーターを15台経由して戻ってきたもの、と推測される。
  (8)送信したパケットの総数。Windows OSのpingコマンドのデフォルトでは、4回送信を行う。
  (9)受信したパケットの総数。戻ってこないパケットが1個以上あるような場合は、ネットワークが相当混雑しているといえる(オンデマンドダイヤルアップ接続を使用している場合は、最初の何パケットかがロスしてしまう可能性がある)。全く戻ってこない場合は、非常に混雑しているか、途中のルートのどこかでパケットが消失している、pingへの応答を拒否するように設定されている、などの可能性がある。
  (10)パケット損失率。この例では全て戻ってきたので損失率は0%となる。
  (11)最小の応答時間。
  (12)最大の応答時間。
  (13)平均応答時間。正確に測定するためには、もう少し送信パケットの総数を多くしたり、何度か繰り返したりして測定する。

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

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

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

 もちろんローカルのネットワークと比べて、インターネット上のPCの場合は応答がはるかに遅くなるだろう。ローカルのLAN上ならば応答時間は10ms以下が普通だが、インターネットの場合は、国内なら数十ms、海外なら100ms以上になることも少なくない。

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

 もし相手からの応答がなければ、次のようになる。

※pingに応答しないホストの例
C:\>ping www.windows.com

windows.com [134.170.188.221]に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。  ……1回目の要求に対する応答が返ってこなかった
要求がタイムアウトしました。  ……2回目の要求に対する応答が返ってこなかった
要求がタイムアウトしました。  ……3回目の要求に対する応答が返ってこなかった
要求がタイムアウトしました。  ……4回目の要求に対する応答が返ってこなかった

134.170.188.221 の ping 統計:
    パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、  ……応答が全く返ってこなかった

C:\>



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

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



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

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

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

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

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

※(DNSによる)名前解決が失敗する場合の例
C:\>ping www.unknowndomain.co.jp
ping 要求ではホスト www.unknowndomain.co.jp が見つかりませんでした。ホスト名を確認してもう一度実行してください。



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

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

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

 他にもさまざまな要因が考えられるが、簡単に特定することはできない。せっかくpingを使ってトラブルシューティングを行おうとしているのに、これではさらに話が面倒になるだけだ。このような問題を避けるため、pingを使うときは、最初はIPアドレスで宛先を指定するのがよいだろう。

●pingを使ってネットワークをチェックする

 さてそれでは、pingを使ってTCP/IPのトラブルシューティングを行う方法について見ていこう。例えばインターネットへのアクセスが全くできなくなった(メールサーバーやWebサーバーへアクセスできなくなった)とすると、以下のような順番でトラブルの場所(通信が不通になっている場所)を特定していくとよいだろう。

pingでネットワークトラブルの原因を調査する pingでネットワークトラブルの原因を調査する
近くのノード(ホスト)から順にpingで応答があるかどうかを確認する。こうすると、ルーティングが通らないなどの問題のある場所を特定しやすい。
  (1)ローカルループバックアドレスへpingする。TCP/IPが正しくインストールされていれば、これは通るはず。
  (2)ネットワークインターフェースに割り当てられたIPアドレスにpingしてみる。IPアドレスが正しく割り当てられているかどうかが分かる。
  (3)ローカルのネットワークセグメント上のホストにpingしてみる。ローカルのネットワーク上のクライアント同士で通信できるかどうかが分かる(この通信にはルーターは関与しない)。
  (4)ルーター(デフォルトゲートウェイ)にpingしてみる。デフォルトゲートウェイと通信できるかどうかが分かる。
  (5)ルーターの出口側のIPアドレスにpingしてみる。ルーターが正しくルーティングしているかどうか、ルーティング設定が正しいかどうかなどが分かる。
  (6)ルーターを越えた先にあるサーバーなどにpingしてみる。IPアドレスだけでなくサーバー名やFQDN名などでもpingすること。サーバーと通信できるか、社内向けDNSサーバーの設定が正しいかどうかなどが分かる。
  (7)インターネットにアクセスしてみる。インターネットアクセスが正しく行え、名前解決やファイアウォールなども正しく動作しているかどうかが分かる。

●ネットワークインターフェースやドライバーのチェック

 ネットワークがつながらないというトラブルを解決する場合、pingを使うよりも前に、少なくとも次のことを確認しておこう(pingとはあまり関係ないので詳細な説明は割愛する)。

  • ケーブルが正しく接続されているかどうか
  • ネットワークインターフェースやハブのリンクランプが正しく点灯しているかどうか
  • デバイスドライバーが正しく導入されているかどうか
  • 無線LANが正しく接続されているかどうか

 これらに起因するケースも意外と多いので、まずはネットワークインターフェースが正しく動作しているかどうかを確認することから始めるのが望ましい。

 コマンドプロンプト上でネットワークインターフェースの状態を確認するには、ipconfigコマンドを実行する。

※3つあるインターフェースがいずれも利用できない場合のエラー例
C:\>ipconfig  ……インターフェースを確認する

Windows IP 構成


Wireless LAN adapter ローカル エリア接続* 3:  ……インターフェース1

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .:

イーサネット アダプター イーサネット 3:  ……インターフェース2

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .:

Wireless LAN adapter Wi-Fi 2:  ……インターフェース3

   メディアの状態. . . . . . . . . . . .: メディアは接続されていません
   接続固有の DNS サフィックス . . . . .:

C:\>



 この例では3つのネットワークインターフェースがあるが、そのいずれもが「メディアは接続されていません」となっている。より詳細に調べたければ、コントロールパネルでネットワーク接続の状態を確認する。

ネットワークインターフェースのチェック ネットワークインターフェースのチェック
これはWindows 8.1でネットワークアダプターの接続状態を表示させたところ。ipconfigコマンドでは単に「メディアは接続されていません」としか表示されないが、この画面では、より詳しく表示される。ネットワークのトラブルシューティングでは、最初にどのようなインターフェースがあるか、それぞれが正しく動作しているかなどを確認すること。
  (1)無線LANのSSIDなどが正しく設定されていない状態。
  (2)インターフェースが無効化されている(もしくは何らかのエラーで有効化できない)状態。
  (3)ネットワークケーブルが接続されていない状態。

■ループバックテスト「ping 127.0.0.1」

 ハードウェアが正しく動作しているようならば、次は「ping 127.0.0.1」というコマンドを実行して、正しく応答があることを確認する。「127.0.0.1」というIPアドレスは「ローカルループバックアドレス」といい、TCP/IPプロトコルスタックの内部にはこのIPアドレスが必ず用意されている(関連記事参照)。このアドレスは、常に自分自身を表すことになっているので、127.0.0.1へpingを行うということは、自分自身に対してpingを行うということになる。

 もしこのコマンドの実行が失敗するようならば、TCP/IPプロトコルスタックが正しくインストールされていないことになる。現在のWindows OSでは必ずTCP/IPプロトコルがインストールされているので、このコマンドの実行が失敗するのは、ネットワークが使えないセーフモードの場合か、(OSの復元や再インストールが必要なほど)TCP/IPプロトコルスタックに何らかの深刻なダメージがある場合だろう。

※IPv6のpingを利用する

 本TIPSではIPv4におけるpingコマンドの使い方を解説しているが、IPv6のpingを利用したい場合は、IPv6アドレスを指定するか、「-6」というオプションを付ける。例えば「ping ::1」「ping -6 mypc001」のようにする(「::1」はIPv6におけるループバックアドレス)。IPv6については連載「Windows管理者のためのIPv6入門」も参照のこと。


■ローカルIPテスト「ping <自分のIPアドレス>

 ローカルループバックアドレスの次にチェックするべきことは、自分に割り当てられているIPアドレスに対するpingの実行である。例えば、自分のPCに192.168.0.123という固定IPを割り当てている(はず)なら、次のように実行してみる。

C:\>ping 192.168.0.123 



 IPアドレスをDHCPで自動割り当てしている場合は、ipconfig.exeコマンドで確認してもよいだろう。DHCPでのIPアドレスの取得に失敗していると、「0.0.0.0」というアドレスか、APIPAで割り当てられる「169.254.〜.〜」になっているはずである。

 このpingコマンドにより、自分自身に正しくIPアドレスが割り当てられているかどうかを確認できる。もし失敗するようならば、IPアドレスの設定方法(手動割り当てやDHCPによる割り当て方法)に問題があることが分かる。

 またネットワークケーブルが外れているとか、正しく接続できていない場合にも(クロスケーブルとストレートケーブルを間違えたり、他のPCと固定IPが衝突したりした場合など)、IPアドレスの割り当ては失敗するので、これらも確認する。

※IPアドレスの割り当てが失敗している場合のエラーの例。ローカルループバック以外のIPアドレスがない場合にpingを実行しようとすると、このようなメッセージが表示される
C:\>ping 10.30.3.5

10.30.3.5 に ping を送信しています 32 バイトのデータ:
ping: 転送に失敗しました。一般エラーです。  ……IPパケットの送信ができなかった場合に表示される汎用的なエラーメッセージ
ping: 転送に失敗しました。一般エラーです。
ping: 転送に失敗しました。一般エラーです。
ping: 転送に失敗しました。一般エラーです。

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

C:\>



■ルーティングなしの通信テスト「ping <LAN上のPC>

 自分自身に正しくIPアドレスが割り当てられていることが分かったら、次はいよいよ他のPCとの通信をテストしてみる。

 最初にpingすべき相手は、同一のLAN(同一のイーサネット)上に存在している、同じネットワークアドレスを持つシステムである(もちろん相手側ではpingに応答するように設定しておくこと)。できることなら、現在稼働していることが確実で、IPアドレスが固定的に割り当てられているシステム、例えば全員で共有しているファイルサーバーやルーターなどが望ましい。

 これが成功するようなら、IPアドレスの割り当てが正しく行われ、ハードウェアやデバイスドライバー、TCP/IPプロトコルスタックなども正しく動作しているということになる。もし失敗するようならば(無応答ならば)、デバイスドライバーなどが正しく動作していない/インストールされていないとか、ハードウェア的なトラブルである可能性が高い。例えば、ハブのオートネゴシエーション(10Mbps/100Mbps/1Gbpsと半二重/全二重の自動切り替え)が失敗している、ネットワークインターフェースへのIRQの割り当てに失敗している(昔のシステムではIRQの割り当てに何らかの手動設定が必要な場合があった)、などが考えられる。

 なお、存在しないIPアドレスにpingした場合は次のようになるので、宛先のシステムから応答が返ってこない場合(ARPには応答するが、pingには応答しないホスト)とは区別できる。

※同一LAN上の存在しないホストに対してpingした場合の例。以下の10.20.2.105/16は自分自身のIPアドレス。ARPに対する応答がないので、自分自身から「宛先ホストに到達できません。」というエラー応答が返ってきているように表示される。
C:\>ping 10.20.2.93

10.20.2.93 に ping を送信しています 32 バイトのデータ:
10.20.2.105 からの応答: 宛先ホストに到達できません。  ……自分自身から応答が返ってきているように見える
10.20.2.105 からの応答: 宛先ホストに到達できません。
10.20.2.105 からの応答: 宛先ホストに到達できません。
10.20.2.105 からの応答: 宛先ホストに到達できません。

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

C:\>



■ルーティングありの通信テスト「ping <ローカルネットワーク以外のIPアドレス>

 LAN上の相手に対してpingが成功するようならば、次は(インターネットや社内の他のネットワークに接続するための)ルーターや、そのルーターの先にあるシステムに対してpingを実行してみる。これが失敗するようなら、デフォルトゲートウェイのIPアドレスや(サブ)ネットマスクの設定などがおかしい、もしくは設定するのを忘れている、などの理由が考えられる。

 また逆に、ping先の機器からの逆向きのルートの設定がどこかで間違っていても、やはり応答が戻ってこなくなる。ルーティングの設定については以下のTIPSも参照のこと。

■名前解決のテスト「ping <名前>

 ここまで成功するようなら、次はIPアドレスではなく、ホスト名を指定してpingを実行してみる。<名前> としては、ローカルのLAN上にあるシステム名(ドメイン名を含まないホスト名)や、FQDN形式のホスト名(社内にあるWebサーバーやメールサーバーなど)など、いろいろ試してみる。これに失敗するようなら、名前解決のための設定が正しく行われていないことが分かる。

 ただしセキュリティ上の理由によって、外部からのpingコマンドを受け付けないようにファイアウォールやシステムなどが設定されている場合もある。そのため、pingコマンドに対する応答がないからといって、必ず相手先との通信ができなくなっていると結論付けることはできない。

 もし単純なホスト名(FQDN形式でないホスト名)に対するpingが失敗するようならば、WINSサーバーの設定などをチェックする。Windows系OSでは、NetBIOS名による名前の登録や解決が自動的に行われるので、Windows系マシンに対するpingが失敗することはそう多くないだろう。

 しかしWINSとhostsファイルlmhostsファイルで互いに異なるようなホスト定義が行われていると、名前解決の優先度の問題によって、間違ったホストにpingしてしまう可能性がある(また、NetBIOSの名前解決方法を強制的にブロードキャスト以外に設定していたりすると失敗する可能性がある)。

 非Windows系マシンに対しては、hostsファイルやDNSなどで対応しなければならないので、その設定を間違えるとやはりpingできないことがある。

 またFQDN形式のホスト名に対するpingが失敗するようならば、DNSサーバーのアドレスやTCP/IPのドメイン名の設定などに問題があるといえる。

 ルーターを越えた先にあるホストからpingへの応答がなければ、ルーティングの設定などをチェックする。

■一般的な通信テスト「ping <インターネット上のサーバー>

 以上のチェックがすべてパスするようなら、通信できない理由は、インターネットのサービスに接続するための(社内の)ルーターやDNSサーバー、Proxyサーバーがダウンしているとか、プロバイダーのネットワークがダウンしている、インターネット上の目的のサーバーそのものがダウンしている、などが考えられる。あとはケースバイケースで、これらのホストに順次pingを実行して、不通となっている場所を特定すればよい。

■更新履歴

【2014/12/19】Windows Vista/7/8/8.1およびWindows Server 2003/2008/2008 R2/2012/2012 R2向けの記述を追記しました。

【2002/04/26】Windows XPに関する情報を加筆・修正しました。

【2000/12/01】初版公開(対象はWindows 9x/Me/Windows 2000)。


「Tech TIPS」のインデックス

Tech TIPS

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

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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