[Network] | ||||||||||||||||
pingでネットワーク・トラブルの原因を調査する
|
||||||||||||||||
|
解説 |
pingはTCP/IPにおける最も基本的なツールであるとともに、最も有用なツールの1つでもある(本来pingは「ピン」と読むが、日本では「ピング」と読むのが一般的なようである)。さまざまな使い方があるが、一般的には、通信相手のノードが“生きて”いるかどうかを調べたり、相手ノードまでのネットワークの経路が正しく設定され、通信が行える状態になっているかどうかを確かめたりするために使われる。ここでは、ネットワーク管理者の強い味方、pingの基本的な使い方についてまとめておこう。
pingコマンドとは
pingコマンドは、ICMP(Internet Control Message Protocol)のサブコマンドであるechoコマンドを使った、単純なパケットの通信テスト・プログラムの1つだ。TCP/IPネットワークでは、IPやTCP、UDPパケットにさまざまな情報を載せてノード(ホスト)間で通信をしているが、通信中にエラーが起こった場合、ICMPプロトコルを使ってエラーを伝えることになっている。echoはICMPでサポートされている機能の1つであり、echoの引数として受け取ったデータをそのまま送信元へ送り返すという動作をする。パケットを送り返すだけという単純な機能であるが、これが動作するということは、IPアドレスが正しくノードに割り当てられ、かつ途中の経路(ルーティング情報)などが正しく設定され、動作しているということを意味している(途中で不通になっていると応答が返ってこない)。また、パケットの往復の所要時間を測定することによって、ネットワークの混雑具合を調べたりすることもできる。
pingコマンド(PING.EXEプログラム)は、このecho機能を使って、パケットの平均応答時間を測定したり、ネットワーク経路のテストをしたりするためのコマンドである。どんなマシンでも、TCP/IPのプロトコル・スタックが起動して、IPアドレスが割り当てられ、それが正しく動作していれば、このICMPのecho機能は必ずサポートされていることになっている。そのためpingはTCP/IPネットワークの管理に欠かせない必須のツールであるといえる。Windows 95以降のWindows OS(Windows 9x/Me/NT/2000/XP)は必ずこのコマンドを持っているし、UNIXやLinuxでも必ず用意されている。オプション類が若干異なることがあるが、基本的な使い方はどれでも同じなので、ぜひともマスターしておきたい。
pingコマンドの基本的な使い方
pingコマンドの最も基本的な使い方は、次のように、引数として相手ノードのIPアドレスやホスト名を指定して起動する、というものである。
ping <相手ノード> |
例えばsomedomain.co.jpというドメインにある、wwwというホストに対してpingを実行するには、
C:\>ping www.somedomain.co.jp |
とすればよい。これを実行すると、Windows OSに含まれているpingコマンドは、デフォルトでは、32bytesのデータ部(データ内容は単なるASCII文字列)を持つICMP echoパケットを4つ生成して、1秒おきに指定されたノードに対して送信する。そして、そのホストからのecho応答メッセージを受信すると、以下のように、応答を受け取るまでの所要時間や、その平均時間などの情報を表示する。
pingコマンドの使用例 | |||||||||||||||||||||||||||||||||||||||
pingコマンドは、指定されたホスト(IPアドレスか名前で指定する)に対して、ICMPのechoコマンドを送り、それが送り返されてくるのを待つ。応答があれば、相手ノードや、そこまでの経路が“生きている”ことが分かる。また、往復時間からネットワークの混雑度もある程度分かる。応答がなければ、相手ノードがダウンしているとか、途中の経路設定が正しくないなど、さまざまな問題が発生していることになる。 | |||||||||||||||||||||||||||||||||||||||
|
最後に表示されている統計値の意味は、4回パケットを送った結果、4回応答を受け取り(パケット喪失率は0%)、その応答時間は最小15ms、最大31ms、平均19msであった、という意味である。たとえLAN上であっても、最初の1回はARPコマンド要求のために若干遅くなることがある。そのため、遅延速度を(より正確に)測定したいのならば、同じpingコマンドをもう一回実行するとよい(コマンド・プロンプトでは、上矢印キーを押して直前のコマンドを呼び出し、そのままリターン・キーを押せば簡単に再実行できる)。
ネットワーク(TCP/IPプロトコル)が正しく構成されているかどうかを調べるには、このように、相手先ノードからpingの応答が戻ってくるかどうかで判断する。もちろんローカルのネットワークと比べて、インターネット上のノードの場合は応答がはるかに遅くなるだろうが(ローカルのLAN上ならば10ms以下などが普通だが、インターネットの場合は数十ms以上になる。混雑していれば1秒以上かかる場合も珍しくない)、相手側ノードがアクティブであるかどうか、そこまでのネットワーク経路が正しく“生きている”かどうかは、“Reply from”の行があるかどうかで判断することができる。ばらつきが激しいようならば、ネットワークが混雑していると判断できる。
もし相手ノードからの応答がなければ、次のようになる。
C:\>ping www.YYYYY.co.jp |
「Request timed out.」は、ICMPの応答を指定された時間内に受け取ることができなかったということを表している。ただしデフォルト待ち時間は1秒(1000ms)なので、インターネット上のノードを調べる場合は、次のように“-w 5000”などというオプションを使って(待ち時間は1/1000秒単位で指定する)、応答待ち時間をもう少し長くして調べる必要があるだろう。
C:\>ping -w 5000 www.YYYYY.co.jp……各応答を5秒待つ指定 |
パケットが戻ってこない理由にはさまざまなものが考えられるので(相手先ノードが“死んでいる”とか、経路の途中にあるいずれかのルータがパケットを正しく中継していない、ファイアウォールでpingを禁止しているなど)、その原因を突き止めるには、もう少し順序立ててpingを使う必要がある。具体的には、pingを実行するマシンに近い方のノードから順番に応答があるかどうかを調べていくのである。遠くの方のノード(あて先ノード)の側から調べるよりも、素早くトラブルの場所を特定することができる。
■pingの引数におけるIPアドレスとホスト名
ところで、pingのあて先にホスト名やFQDN名などを使う場合、その名前の指定が間違っていると次のようなエラーが表示される。
■Windows XP以外の場合 |
相手ノードから応答が戻ってこない場合とは表示が異なることに注意されたい。
「Unknown host」とは、ホスト名が見つからないということを表している。つまり「名前解決(名前からIPアドレスを求めること)」が失敗しているわけであるが、その原因はIPアドレスなどの設定が間違っているからかもしれないし、DNSやWINS、NBTの名前解決などが何らかの原因(サーバのIPアドレス設定のミスとか、経路途中のルータのフィルタでブロックされているなど)でうまく動作していないなど、さまざまな要因が考えられる。逆にいうと、その原因を簡単に特定することはできない、ということでもある。せっかくpingを使ってトラブルシューティングを行おうとしているのに、これではさらに話が面倒になるだけだ。このようなトラブルを避けるため、pingを使うときは、最初はIPアドレスであて先を指定することが基本である。
pingを使ってネットワークをチェックする
さてそれでは、pingを使ってTCP/IPのトラブルシューティングを行う場合の方法について見ていこう。例えばインターネットへのアクセスがまったくできなくなった(メールやWebサーバへアクセスできなくなった)とすると、以下のような順番でトラブルの場所(通信が不通になっている場所)を特定していくとよい。
■ハードウェア/ドライバのチェック
ネットワークがつながらないというトラブルを解決する場合、pingを使うよりも前に、まずはケーブルが正しく接続されているかどうか、ネットワークやハブのリンク・ランプが正しく点灯しているかどうか、デバイス・ドライバが正しく導入されているかどうか、などを確認しておこう。pingとはあまり関係ないので詳細は割愛するが、これらに起因するケースも意外と多いので、まずはハードウェア・レベルの動作を確認することから始めるのが望ましい。
■ping 127.0.0.1
ハードウェアが正しく動作しているようならば、次は
C:\>ping 127.0.0.1 |
というコマンドを実行して、正しく応答があることを確認する。「127.0.0.1」というIPアドレスは「ローカル・ループバック・アドレス」といい、TCP/IPプロトコル・スタックの内部にはこのIPアドレスが必ず用意されている。このアドレスは、常に自分自身(自ノード)を表すことになっているので、127.0.0.1へpingを行うということは、自分自身に対してpingを行うということになる。
もしこのコマンドの実行が失敗するようならば、TCP/IPプロトコル・スタックが正しくインストールされていないことになる。Windows 2000やWindow XP、Windows Meでは、必ずTCP/IPプロトコルがインストールされているので、このコマンドの実行が失敗することはまずないだろうが、Windows 9xではインストールされていないこともある(もっとも、TCP/IPプロトコルがインストールされていない場合は、PING.EXEコマンドすら使えないので、すぐに気が付くだろうが)。またセーフ・モードではやはりネットワークが使えないので、このような結果になる。
■ping <自ノードのIPアドレス>
ローカル・ループバック・アドレスの次にチェックするべきことは、自ノードに割り当てられているIPアドレスに対するpingの実行である。例えば、自分のPCに割り当てられている(設定しなければならない)IPアドレスが192.168.0.123である場合、
C:\>ping 192.168.0.123 |
を実行する。ただしIPアドレスをDHCPで自動に割り当てている場合は、代わりに、IPCONFIG.EXEコマンド(Windows 9xでは、WINIPCFG.EXEコマンドも利用可能)で確認してもよいだろう。DHCPでのIPアドレスの取得に失敗していると、0.0.0.0というアドレスか、APIPAで割り当てられる169.254.???.???になっているはずである。
このpingコマンドにより、自分のノードに正しくIPアドレスが割り当てられているかどうかを確認することができる。もし失敗するようならば、IPアドレスの設定方法(手動割り当てやDHCPによる割り当て方法)に問題があることが分かる。またネットワーク・ケーブルが外れているとか、正しく接続できていない場合にも(クロス・ケーブルとストレート・ケーブルを間違えたなど)、IPアドレスの割り当ては失敗するので、これらもチェックする。
■ping <LAN上のノード>
自分のノードに正しくIPアドレスが割り当てられていることが分かったら、次はいよいよほかのノードとの通信をテストしてみる。最初にpingすべき相手は、同一のLAN(同一のイーサネット)上に存在している(同じネットワーク・アドレスを持つ)ノードである。できることなら、現在稼働していることが確実で、IPアドレスが固定的に割り当てられているノード、例えば全員で共有している(Windows 2000の)ファイル・サーバやゲートウェイなどが望ましい。
これが成功するようならば、IPアドレスの割り当てが正しく行われ、ハードウェアやデバイス・ドライバ、TCP/IPプロトコル・スタックなども正しく動作しているということになる。もし失敗するようならば、デバイス・ドライバなどが正しく動作していない/インストールされていないとか、ハードウェア的なトラブルである可能性が高い。例えば、IRQの割り当てが間違っているとか(イーサネット・カードのハードウェア割り込みが間違っていても、デバイスやドライバは特に問題なく動作したりするから)、ハブのオート・ネゴシエーション(10Mbps/100Mbpsと半二重/全二重の自動切り換え)が失敗している、などが考えられる。
■ping <ルータのIPアドレス>
LAN上のノードに対してpingが成功するようならば、次はインターネットとの接続に使っているルータ(ゲートウェイ)に対してpingを実行してみる(ローカルのLAN上ではなく、ルータを介して接続されているネットワーク機器に対して実行する)。これが失敗するようなら、デフォルト・ゲートウェイのIPアドレスや(サブ)ネットマスクの設定などがおかしい(もしくは、設定するのを忘れている)ということが考えられる。また逆に、ping先の機器からの逆向きのルートの設定がどこかで間違っていても、やはり応答が戻ってこなくなる。
■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 <インターネット上のノード>
以上のチェックがすべてパスするようなら、通信できない理由は、インターネットのサービスに接続するための(社内の)ルータやProxyサーバがダウンしているとか、プロバイダのネットワークがダウンしている、インターネット上の目的のサーバそのものがダウンしている、などが考えられる。あとはケース・バイ・ケースで、これらのホストに順次pingを実行して、不通となっている場所を特定すればよい。
関連記事(Windows Server Insider) | ||
Windows TIPS:tracertでネットワークの経路を調査する |
|
更新履歴 | |
|
「Windows TIPS」 |
- 第127話 手荷物検査 (2008/6/10)
「すべての情報はビット化する」。10年前、遠くに輝いてた「デジタル革命」は、気付けばカバンの中で起こっていた - Windows TIPS (2008/6/6)
− RSATツールでWindows Server 2008をリモート管理する
− 自動更新サービスを一時的に停止する
− PowerShellで発生したエラーをイベントログに記録する - System Center Essentials 2007による運用管理2 (2008/6/5)
システムの管理工数を削減するSCE。今回はシステムの自動更新やソフトウェア配信、アプリの動作監視などについて解説 - 第126話 検疫システム導入 (2008/6/3)
検疫システム=ウイルスなどによるネットワーク汚染を防ぐため、検査でクリーンだと確認されたPCしかネットに接続させないシステム
|
|
スポンサーからのお知らせ
- - PR -
お勧め求人情報
**先週の人気講座ランキング**
〜ITIL編〜
◆ | New! 誰もが満足するシステムへ 10年前にSOA実現を可能にしたサーバは? |
◆ | New! 初めての製品に不安を感じる甲山たち ――26年の歴史が物語る信頼性と実績 |
◆ | New! サーバ担当者を物理的な作業から開放する ホスティングの“パターンオーダー”とは |
◆ | New! スループットは従来機の“2〜3倍”を発揮 CoolThreadsのDBサーバとしての威力とは |
◆ | New! 【24時間365日】無償サポートを実現する 専用ホスティング、その秘訣とは? |
◆ | ■ 高パフォーマンス 『 UltraSPARC 』 仮想化も併用し、サーバ統合効果を検証! |
◆ | 「1秒、切れてました」は、通用しない! 堅牢性・信頼性に優れた“国産”通信機器 |
◆ | 市場の変化と淘汰されるERPエンジニアとは 〜エンジニア・キャリア進化論(第7回)〜 |
◆ | こんな便利な開発ツールがあるならもっと 早く教えてくれよ!おれの青春を返せ〜! |
◆ | 『もう1つの外資系』を選ぶワケ…… 読んでわかる、驚きの採用状況と人材育成法 |
◆ | 『家族持ち』ITエンジニアの方、必見! 経験者が語る、U/Iターン転職の実状と魅力 |
◆ | 業務アプリの開発効率向上と顧客満足の 向上を両立するアウトプットの“疎連携” |
◆ | 自分のスキル、限界を感じていませんか? 『IT専門教育』で独学の限界を超えろ! |
◆ | トレンドは常に動き続ける!時代の変化に 対応する――ベンダーからのメッセージ! |
◆ | 【実践!SOA】手作業をシステム化で改善 作業ミスが従来の60%から1%にまで激減! |
◆ | BI導入が失敗する『3つの理由』と データ・情報活用を成功させる解決ツール |