pingとは?
pingとはネットワーク機器同士がつながっているのか?を確認するためのプログラムです。pingはwindowsのコマンドプロンプトでもlinuxのbashでも使用可能です。pingを送信することをを「pingが通るか確認」といったりします。ネットワークに何か異常がある場合は「pingが通るか確認」することが基本中の基本です。
pingの詳しい仕組みは後で説明しますが、pingの仕組みは無線機の通話と同じです。送り主が「応答せよ」という通信(ping)を送って、受け取った側が受け取れば「受け取った」と応答(リプライ)してきます。応答があるかどうか?でネットワークの疎通を確認しています。
実際に下記のようにwindowsのコマンドプロンプトやlinuxのbashでpingコマンドでルータ(192.168.0.1)にpingを送信してみましょう。pingコマンドは「ping 相手IPアドレス またはホスト名」で送信できます。
Linuxのbashでも同様にpingが送信できます。
pingの結果の解釈
pingを送信すると下図のように結果がかえってきます。下の画像ではpingの応答が返ってきている=通信できたことを意味しています。
また、応答しない場合は下記のような画面が出力されます。
注意してほしいのは応答しない=ネットワークがつながっていないというわけではないことです。そこにはたくさんの可能性があります。
- 送信先が存在しない (IPアドレスが間違っている)
- 経由する場合、ルーティングがうまくいっていない(ARP障害なども)
- ネットワークが混雑していて応答に時間がかかる
- ネットワーク機器が故障
- ファイアウォールで遮断(icmpのdrop)
pingの結果画面は
- 一行目にはPINGの送信先とpingデータのサイズが記載
- 二行目以降は送信先からの応答について記載。応答があれば応答先のIPアドレスとpingのデータサイズ(64byte)と試行回数(icmp_seq=n回)、TTL(ルータ経由ごとに減る)、往復時間=ミリセカンド
- pingが終了した場合は最後にまとめの統計情報、平均時間などが表示される
ちなみにTTLは初期値が設定されていてルーターを通るごとに減って0になると廃棄されます。これはpingがネットワーク内で永遠にループするのを防ぐために設定されています。
pingの結果が不安定な場合(応答したりしなかったり)はスイッチやルーター、ケーブルなどに問題がある可能性があります。
pingコマンドのオプション
linuxではpingは設定しないと永遠にpingを送り続けます(終了したい場合はCtrl+c)。pingの回数を指定するにはオプションを使います。よく使うオプションを紹介します。
pingの基本は「ping ipアドレス」です
- -c 回数 :pingの回数を指定
- -w 時間:指定した時間の間pingを実行
- -n :名前解決しないIPアドレスで表示
- -i time:ping送信間隔、default=1s
- -s packet size:パケットサイズを指定
- -I interface:送信するインターフェースを指定eth1等
- -R :ルートを表示(tracerouteを推奨)
pingにまつわるtips
pingのTTLは機器によって変わる?
pingのTTLに着目すると場合によって64とか255となっていることに気づくかもしれません。これは送信先に機器のOSによって異なるようです。windowsでは128、Linuxでは64、ルータなどでは255になるようです。
参考 送信先の機器によって変わるTTLの話 - Qiita取得できませんでした
機器の死活監視
サーバ機器が稼働しているかどうか?を監視するためにpingを利用することができます。pingは常時送り続けてpingが途切れた場合何らかのトラブルがあるとみなせることができます。こうした用途には別のツールを使うことが多いですが、一時的にサーバが落ちていないか?落ちるか?ネットワークがつながったままか?などを確認するためにpingを打ち続けて確認するということもやられます。
並列してpingを送りたい場合はfpingを使います。具体的にはIPアドレスのリストを載せたファイルを読み込んでそのホスト先に対してpingを送信します(2>/dev/nullを入れるとエラー非表示可能)。
$ fping -f hostlist.txt
$ fping -g 192.168.0.1 192.168.0.30
というようにip1~30までのように範囲指定もできます。
pingの一発目が遅い・失敗する理由
pingの一発目だけが異様に遅かったり、失敗することを経験したことがある方も多いと思います。この原因は何があるでしょうか?
宛先の機器がルータに接続されている場合、ルータに宛先情報が無い場合ARP要求が実行されます。このARP実行中にはpingの要求が破棄されるので一発目のpingが失敗する原因になります。ARPがキャッシュされてルート情報が保存されればpingは宛先に届くようになります。pingがうまく飛ばない場合はARPキャッシュを削除して更新するとうまくいく場合があります。ルータが割り振ったIPがかぶっているという場合もあるので気を付けましょう。(DHCPと固定IPが混在していたりすると)
IPアドレスではなくホスト名でpingを送っている場合、名前解決に問題が生じている場合があります。
icmp
ICMP(internet control message protocol)はIPパケットが目的のホストに到達したがを調べる機能などを提供するプロトコルでこれをpingは利用しています。ICMPパケットはIPによって送信されます。ICMPは送信先に到達できなかった時にはエラーメッセージを表示します。Network UnreachbableやHost Unreachbableがあります。送信先までのネットワーク経路情報がなかった場合にはNetwork Unreachbableが表示され、何らかの原因で送信先がネットワークに接続されていない場合はHost unreachbableが表示されます。