今更聞けないPingコマンド(Windows・Unix・Linux・MacなんでもOK)について語ります。
この記事ではWindowsのコマンドプロンプトを例に説明したいと思います。
サーバー系インフラにかかわる仕事をすると必ず使うコマンドと言っても良いぐらいですよね。
ITの世界に入ると、「ほらPingで確認して」とか言われることあるのですが、Pingを詳細に解説してくれるところはあまりない気がしまして、僕もそうだったのですがなんとなく使ってる人も多いかと思います。
せっかく記事にするので、ある程度分かりやすくをモットーに説明したいと思います。
Pingとは
Pingはペンギンではなくて(そりゃPinguね!)、略語なのです。
Packet INternet Groperの頭文字を取った用語で、Grope=手探りするという意味です。
要はサーバーなどを手探りで探す→ホストや通信機器などの疎通を確認するためのコマンドです。
ICMP(Internet Control Message Protocol)という、IP(インターネットプロトコル)層での制御メッセージやエラー通知を運ぶためのプロトコル上で動くコマンドの1つがPingとなります。
プロトコル云々は最初は分からなくても良いので、この部分は軽く読み飛ばしてもらっても構わないです。
要は、疎通確認をするためのコマンドと頭に入れておけば間違いありません。
Pingコマンドを使うシーン
Pingコマンドは実はかなり使えるコマンドなのです。
使うシーンとしては、
- サーバーや通信機器等の生死・存在チェックが出来る
- ノードの応答速度がザックリわかる
- 通信経路の一部が分かる(全部分かるコマンドは Tracertコマンド)
1つのコマンドでここまでわかるのはなかなか凄いですよね。
ですので、是非マスターしておきたいところでございます。
※ノードとはサーバーやPC、通信機器(ルータ・ファイヤーウォール・HUBなど)のネットワークを構成する機器のことです。
実際にPingコマンドを使ってみよう
では、実際にPingコマンドを使ってみましょう。
Pingコマンドを使用する際、確認する相手がICMP Echoが有効(ICMP応答が有効)になっている必要があります。
通信機器(端末・サーバー・ネットワーク機器)によって設定方法は異なりますので、各種リファレンスを事前に確認し設定して下さい。
セキュリティ上の理由でICMP Echoを設定しない場合も当然ありますが、その際はPingに応答しないのでご注意下さい。
実例は自分の端末(IP:192.168.0.10)から、同一セグメント上にあるサーバー(192.168.0.1)への疎通確認を行うこととします。
Windowsのコマンドプロンプト(cmd.exe)を開いて以下のようにタイピングし、Enterキーで実行します。
Ping 192.168.0.1
なお、IPアドレスでなくても、ネットワークの名前解決していればコンピューター名やURLでも実行可能です。(例はウェブサイトyahoo.co.jpへのPing)
Ping www.yahoo.co.jp
IPアドレス、ホスト名どちらでもいけますが、IPアドレスが確実かと思います。
応答結果OKの例
実行すると、以下のように結果が返ってきます。(OK例)
Ping 192.168.0.1 192.168.0.1 に ping を送信しています 32 バイトのデータ: 192.168.0.1 からの応答: バイト数 =32 時間 =2ms TTL=255 192.168.0.1 からの応答: バイト数 =32 時間 =3ms TTL=255 192.168.0.1 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.0.1 からの応答: バイト数 =32 時間 =2ms TTL=255 192.168.0.1のping統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 2ms、最大 = 2ms、平均 = 2ms
応答があると、送信したバイト(Byte)数や、応答時間(ミリ秒)、TTL(Time to live)が取得できます。
[speech_bubble type=”drop” subtype=”L1″ icon=”1.jpg” name=”端末A”]サーバーAさん、生きてますかぁぁぁ?[/speech_bubble]
[speech_bubble type=”drop” subtype=”R1″ icon=”2.jpg” name=”サーバーA”]生きてるぜぇ!![/speech_bubble]
イメージはこんな感じです。
相手ノードからの応答なし(タイムアウト)
相手からの応答がない場合は以下のように返ってきます。(タイムアウト例)
Ping 192.168.0.1 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 192.168.0.1 の ping 統計: パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、
「要求がタイムアウトしました。」となった場合は、相手先から応答がないってことになります。
応答がないとは、ノードが存在しないとか、ノードが死んでいる(電源が落ちている)ことになるので、厳密に切り分けるにはさらに別の方法で確認する必要があることに注意が必要です。
[speech_bubble type=”drop” subtype=”L1″ icon=”1.jpg” name=”端末A”]サーバーAさん、生きてますかぁぁぁ?[/speech_bubble]
[speech_bubble type=”drop” subtype=”R1″ icon=”2.jpg” name=”サーバーA”]・・・・・・[/speech_bubble]
[speech_bubble type=”drop” subtype=”L1″ icon=”1.jpg” name=”端末A”]なんだ返事なしか。[/speech_bubble]
ってことですね。
相手ノードへ到達できない(経路途中のゲートウェイが教えてくれる場合)
相手の応答がなくて、かつ、経路途中の機器(ゲートウェイなど)が経路がないよと教えてくれる場合は以下のように返ってきます。(Destination Unreachable)
Ping 192.168.0.1 宛先ホストに到達できません 宛先ホストに到達できません 宛先ホストに到達できません 宛先ホストに到達できません 192.168.0.1 の ping 統計: パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、
応答なし→タイムアウト→(ゲートウェイが応答して)経路がないよ、と教えてくれるのです。
教えてくれるゲートウェイが途中にあって経路情報を返してくれる設定(ICMPが許可されている)になってなければ「到達できません」とはなりません。(この場合は上記のタイムアウトとなる。)
[speech_bubble type=”drop” subtype=”L1″ icon=”1.jpg” name=”端末A”]サーバーAさん、生きてますかぁぁぁ?[/speech_bubble]
[speech_bubble type=”drop” subtype=”R1″ icon=”2.jpg” name=”ゲートウェイA”]サーバーAへの経路はないから応答しないよ![/speech_bubble]
[speech_bubble type=”drop” subtype=”L1″ icon=”1.jpg” name=”端末A”]え!経路なしか![/speech_bubble]
ってことですね。
Pingコマンドのパラメーターは沢山ある
pingコマンドはIPアドレス(コンピューター名)だけで利用することも勿論可能ですが、パラメーターを与えることで色んな結果を得ることが出来ます。
以下がパラメーター一覧となります。(Windows7以降)
パラメーターは組み合わせて使うことも可能です。
使用法: 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を打ち続ける「-t」や、「-l」のバッファサイズを大きめに変更するパラメーターを良く使いますのでご紹介しますね。
Ping -tオプション(ずっとPingを打ち続ける)
Ping 192.168.0.1 -t 192.168.0.1 に ping を送信しています 32 バイトのデータ: 192.168.0.1 からの応答: バイト数 =32 時間 =2ms TTL=255 192.168.0.1 からの応答: バイト数 =32 時間 =3ms TTL=255 192.168.0.1 からの応答: バイト数 =32 時間 =1ms TTL=255 192.168.0.1 からの応答: バイト数 =32 時間 =2ms TTL=255 192.168.0.1 からの応答: バイト数 =32 時間 =2ms TTL=255 192.168.0.1 からの応答: バイト数 =32 時間 =2ms TTL=255
-tを使った際は停止するまでずっとPingを打ち続けます。
コマンドプロンプトを閉じるか、Ctrlキー+Cボタンで停止が出来ます。
-tオプションは場合によっては相手先の機器の負荷を招くため悪用は厳禁です!(DoS攻撃はこのオプションと下記の-lオプションを組み合わせて使っている)
Ping -lオプション(送信パケットサイズを指定する)
Ping 192.168.0.1 -l 100 192.168.0.1 に ping を送信しています 100 バイトのデータ: 192.168.0.1 からの応答: バイト数 =100 時間 =2ms TTL=255 192.168.0.1 からの応答: バイト数 =100 時間 =3ms TTL=255 192.168.0.1 からの応答: バイト数 =100 時間 =1ms TTL=255 192.168.0.1 からの応答: バイト数 =100 時間 =2ms TTL=255 192.168.0.1のping統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 1ms、最大 = 3ms、平均 = 2ms
1回に送信するパケットはデフォルトで32byteですが、上記のように100byteとしたり変更が可能です。
機器のレスポンステストする際に意図的にパケットサイズを大きくして応答速度を簡易的に計ることができます。
Pingコマンドを使いこなそう!
Pingコマンドは原則どんな環境でも使えますから、覚えておいて損はありません。
応用すれば色んな切り分けに使えたりしますので。
さあ、どんどんPingコマンドを使ってみましょう。
但し、悪用は厳禁でお願いします。