■ ICMP
エラーを通知したり、通信状態を管理したりするプロトコルが、ICMPだ。
いんたーねっと・こんとろーる・めっせーじ・ぷろとこる、でしたっけ。
そうだ。
インターネット制御メッセージプロトコルってところだな。
「コントロール」を「制御」に訳しただけですね。
(ギロリ)
いえ、なんでもないッス。
うむ。ICMPには、その機能において、いくつかのメッセージのタイプに分かれている。
よく使われるものは以下の5つだ。
タイプ | 説明 | 意味 |
---|---|---|
0 | Echo Reply | Echo応答 |
3 | Destination Unreachable | 宛先到達不能 |
5 | Redirect | 最適経路通知 |
8 | Echo Request | Echo要求 |
11 | Time Exceeded | 時間超過によるパケット破棄 |
[Table35-01:ICMPのタイプ]
タイプ3・Destination Unreachableと、タイプ5・Redirectは前回やりましたね。
うむ、それぞれタイプ3・Destination Unreachableは「宛先に届かなかった」というメッセージ。
タイプ5・Redirectは「よりよい経路はこちらですよ」というメッセージだったな。
はい。
というわけで、今回は。
タイプ8・Echo Requestとタイプ0・Echo Replyについて説明する。
えちょー?
■ Echo
なんだその怪音は?
莫迦者、エコーと読め。エコーと。
えこー?
エコーっていうと、あれですか。反響音というか、こだまというか。
そうだ。
山に向かって、「やっほ〜」と言ったら、しばらくしてから「やっほ〜」と返ってくるアレだ。
それは山彦では?
そうとも言う。
木霊も山彦も、英語では同じ「Echo」だがな。声を返してくるのが、「山の精」か「木の精」かの違いだ。
ははぁ。
美しい日本語という奴だ。
ともかく、その「Echo」がタイプ8とタイプ0だ。
RequestとReplyでしたっけ。
うむ。
訳すと、タイプ8が「エコー要求」[Echo Request]で。
タイプ0が「エコー応答」[Echo Reply]になる。
「要求」と「応答」…。
どっかで聞いたような。
そうだな。
ARPの説明ででてきたな。
あぁ、そうそう。
「ARP要求」と「ARP応答」でしたよね。
「ARP要求」を送ると、「ARP応答」が帰ってくる、でしたよね。
そうだ。
それと同じように、エコー要求を送り、それを受け取ったホストはエコー応答を返す。
[Figure35-01:ICMP ECHO]
ははぁ。
まさしく、「エコー」なんですね。要求すると、返答する。
そうだ。
たったコレだけの仕組みだ。
はぁ。
これ、なんかの役に立つんですか?
もの凄く役に立つ。
わ、なんか断言しましたね。
うむ。
この「Echo」の仕組みを利用したもので、pingというコマンドがある。
ぴんぐ?
ペンギンですか?
それはピングー。▼ link
読みはピンだ。「g」は発音しない。
ぴん。
このコマンドはネットワーク管理者御用達。
このコマンドを使わない管理者はいないとまで断言できるシロモノだ。
へへぇ。すごそうですね。
■ ping
pingという名前だが。もともとは、卓球[ping-pong]とかでわかるとおり、擬音語だ。
何かが、何かに当たった時にでる音だな。
ピンポンの「ピン」ですか。
そうだ。
それで水中にある物体を探すソナーが出す信号音の事を探信音[ping]という。このコマンドの名前の由来はそれらしい。
探信音…。
うむ。
探信音を出すと、音が物体に当たって跳ね返ってくる。そこから擬音の[ping]が使われているのではないかな。
…。
…!!
…沈黙の艦隊かよ。
しかもそれ探信音じゃないし。
あの男も…、海から来た…。
いや、それはもういいから。
なんだ、ノリが悪いですね博士。
そんなんじゃ立派な海江田四郎になれませんよ。
おお、それはちょっと悲しいな。
だがしかし、立派じゃない海江田四郎というのも想像つかないが。
ははぁ。
確かに安酒で酔っ払ってクダをまく海江田四郎なんてのは想像の埒外にありますね。
うむ、そうだろう。
それはともかく、pingだ。ping自体は、デフォルトゲートウェイの話の時に使って見せているな。
デフォルトゲートウェイの話…。
ネット君の記憶力に頼るよりは、もう一度説明した方が早い。
pingは、任意の宛先へエコー要求を送りつけるコマンドだ。
任意の宛先へエコー要求を送りつける?
エコー要求を送りつけると、それを受け取った宛先はエコー応答を返してきますよね。
その通り。エコー要求を受け取った宛先は、エコー応答を返してくる。
エコー要求を送った送信元はエコー応答を受け取る。これは何をあらわしている?
何と言われても。
つまり、エコーの要求と応答が受け渡し可能。
送信元と宛先は接続されているという意味だ。
あ〜、なるほど。
ICMPパケットが送信元と宛先の間を行き来できるんですものね。
そうだ。さらに、エコーの要求と応答にかかる時間を計ることにより、ネットワークの状態を調べることもできる。
状態を調べる?
うむ。
どこかがボトルネックになっていたり、回線が混雑していたり、宛先が遠かったりすると、応答までにかかった時間が長くなる。
ははぁ。
簡単に動きを示すと、以下のようになる。
[Figure35-02:ping]
ふ〜ん。
ホントにソナーみたいですね。
送ったEcho Requestに反応があるかどうか確かめるんだ。
■ ping・実際例
では実際に、Windowsでpingを行ってみよう。
はい。
コマンドは簡単だ。
コマンド(MS-DOS)プロンプトで以下のように打ちたまえ。
- c:\> ping 宛先IPアドレス(宛先ドメイン名)
ふむふむ。
そうすると、以下のような画面が表示される。
例えば、192.168.0.1にpingを行ってみた。
[Figure35-03:ping実行結果]
はぁ。
まずは(1)の部分。Pinging 192.168.0.1 with 32 bytes of dataの部分。
192.168.0.1に32バイトのデータでpingを行っています、だ。
32バイトのデータで、ってのは?
[Figure35-04:pingパケット]
これはさきほど出てきたICMP Type8の中身だが。
「データ」の所に「任意」とあるだろう?ここのサイズのことだ。これは-l のオプションで変更可能だ。
変更すると、なにかあるんですか?
pingは接続を確かめる以外に、ネットワークの調査をする、と先ほど言ったな。
つまり。大きいサイズのデータの時、小さいサイズのデータの時、と送るデータのサイズを変えることで調査を行うのだよ。
あ〜、なるほど。色々試してみるんですね。
うむ、そうだ。
続いて(2)は、Reply from 192.168.0.1 : bytes=32 time<10ms TTL=30。これはReplyが返ってきたことを示す。
4回あるのは?
それは1回のpingコマンドで、4回requestを送るからだ。
なので、replyも4回帰ってくる。
ふむふむ。
Reply from 192.168.0.1 : bytes=32ってのは、192.168.0.1から32バイトのEcho Replyが返ってきたってことですよね。timeとTTLは?
timeは返るまでにかかった時間だ。
ここの数値が予想より大きいと、なにかしらネットワークで障害が発生している可能性がある、と判断できる。「time<10ms」は10ミリ秒以下ってことだな。
ははぁ。TTLは?
とある数からこの数字を引くと途中で経過したルータ(ゲートウェイ)の数になる値だ。ただし、とある数ってのはReplyを返してきた相手のOSに依存する。
TTLについては次回説明する。
はい。
(3)と(4)は結果報告だ。
(3)は、Requestをいくつ送って、いくつReplyが返ってきたか。(4)は、返ってくるまでの最小・最大・平均時間だ。
え〜っと、Sent = 4, Received = 4, Lost = 0だから、Request4つ送って、Reply4つ受け取って、損失0ってことですね。
そうだ。
Minimum = 0ms,Maximum = 0ms,Average = 0msってのは、相手がLAN内のデバイスなので、ミリ秒以下で反応があったということだ。
なるほど。
情報が満載ですね。
うむ。
ネットワーク管理者御用達と言った意味がわかるだろう。
これらの情報を見て、ネットワークの状態を判断するのだよ。
なるほど。
■ ping・エラー例
では、pingのエラー例を見て、pingから何がわかるか、を話そう。
[Figure35-05:pingエラー・1]
これは、Requestに対して、Replyが返ってこなかったことを指す。
理由には以下のようなことが考えられる。
- 相手先デバイスがダウン(電源OFF)していた。
- そのIPアドレスを持つデバイスは存在しない(IPアドレスのミス)。
- 途中のルータがICMPを禁止していた。
- 途中のルータのルーティングが間違っていた。
- 途中のケーブルが断線・繋がっていなかった。
- スイッチやハブなどの故障。
- NICの故障。
ははぁ。
さて、上の理由をみて気がつくところがないか?
気がつくところ?
なんか、いろいろ原因があるということはわかりましたが。
もうちょっと考えろ。
これは、レイヤ3以下の障害だ。IPアドレスも、ルーティングも、ケーブルも、スイッチ・ハブも、すべてそうだ。
そう言われればそうですね。
ICMPメッセージを見てもわかるとおり、ICMPはレイヤ4以上のデータを使わない。
つまり、基本的にレイヤ3以下のみで動くのだよ。
[Figure35-06:pingパケットの中身]
レイヤ4以上のエラーが入り込まない…。
そうだ、つまりpingが成功したのに繋がらないのはレイヤ4以上に障害があることを示すし。
pingが失敗したならレイヤ3以下に障害があることになる。
なるほど。pingはレイヤ3以下の障害を見つけてくれるってことですね。
そうだ。
では、他のエラーも見てみよう。
[Figure35-07:pingエラー・2]
これは、ドメイン名でpingを行った際に出るエラーだ。
pingが実行される前の段階、DNSで出るエラーだな。そのドメインネームは存在しません、というエラーだ。
DNSはレイヤ7では? pingにレイヤ7が影響するのですか?
いやいや。
これはpingの責任ではない。ドメインネーム→IPアドレスの変換はpingが実行される前に実行されるからな。
[Figure35-08:pingエラー・3]
こっちは、パケットの生存時間切れだ。
TTLの設定ミスか、ルーティングループでも発生しているか。
上の画像の場合は?
これはエラーを出すために、意図的にTTLを低く設定した。
それゆえのエラーだな。
[Figure35-09:pingエラー・4] ▼
これは、Destination host unreachableつまり、ICMP タイプ3が返ってきたエラーだ。
Destination host unreachable、宛先到達不能ですよね。
うむ、途中のルータで宛先へのルートがない時に出てきたエラーだったな。
他にもデフォルトゲートウェイが設定されていないのに、他ネットワークへpingを行った時などに起きる。
デフォルトゲートウェイがないと、他ネットワークにはデータ転送できないですからね。
あれ?
これって、デフォルトゲートウェイの回ででてきましたよね。
うむ。
pingが何故繋がらなかったかという理由は覚えておくと役に立つので覚えておくように。
はい。
■ ping・使い方
実際、pingはネットワークへの接続ができなくなった場合に、障害の確認方法として使われることが多い。
簡単だし、便利だしな。
そうみたいですね。
障害を確認するから、といってもやみくもにpingを行ってもしょうがない。
一応、pingを行う順番というものが、経験則としてある。
- >ping 127.0.0.1
- >ping 自分のNICのIPアドレス
まず、ループバックアドレス(127.0.0.1)で、TCP/IPが動作しているかどうか確かめる。
次に自分のIPアドレスで、IPアドレス設定が間違っていないかを確認する。
ループバックアドレスと、自分自身のIPアドレスは同じなのではないのですか?
似てるようで、ちょっと違う。ループバックアドレスは、自分自身のIPアドレスの設定が間違っていても使えるのだよ。なので、TCP/IPの動作確認として使う。
へぇ。
- >ping 同じハブ・スイッチに接続されているデバイスのIPアドレス
- >ping 違うハブ・スイッチに接続されているデバイスのIPアドレス
LAN内のネットワーキングデバイスの障害を確認して。
- >ping デフォルトゲートウェイのIPアドレス
- >ping DNSサーバのIPアドレス
LAN外へ出るための、デバイス・サービスの確認をする。
- >ping 目的のサーバのIPアドレス
最後に目的に対してpingを行う。
つまり、自分に近いところから確かめていくのがよいだろう。
足場を固めつつ、前へいくんですね。
うむ。ただ、pingだけではLAN外へ出た後の、目的とのサーバとを繋ぐ途中のルータの障害を確かめるのはなかなか難しい。
その場合は、tracerouteを使う。
とれーするーと?
ちょっと今回は長くなったな。
tracerouteと、ICMP タイプ11、Time Exceededはまた次回だ。
了解です。
3分間ネットワーキングでした〜♪
- エコー
-
[echo]
こだま、反響。
- ピングー
-
[PINGU]
ピングーB.V.社のクレイアニメーションのキャラクター。
- ソナー
-
[sonar]
潜水艦や、対潜水艦の艦艇などが持つ音響探知機。
自ら信号音を出して反響音で場所を探るのをアクティブソナー、物体が出す音のみを拾うのをパッシブソナーという。
魚群探知機などでも使用される。
- Windowsで…
-
UNIX系のOSの場合、ping自体はほとんど変わりありませんが、オプションの指定の仕方が異なります。
- -l のオプション
-
>ping -l サイズ IPアドレス
になる。
わかりづらいかもしれませんが、小文字の「L」です。
- 4回
-
Windowsのpingでの、デフォルトのrequest送信回数。
>ping -n 回数 IPアドレス
で変更が可能。
>ping -t IPアドレス
にすれば、Ctrl+Cを押すまでrequestを送り続ける。
- とある数
-
大体は、2の累乗の数です。
32、64、128、255が多い。
上の画像の場合は多分32。
- TTL
-
TTLの数は。
>ping -i 回数 IPアドレス
で変更が可能。
- ICMPを禁止
- セキュリティ上の問題から、ICMPに対する返答を行わないルータもあります。
- 左画像
- 210.81.153.70はYahoo!です。
- 経験則
-
管理人の経験則です。
絶対にこの順番でなければならない、というわけではありません。
- ネット君の今日のポイント
-
- ICMP タイプ8と0はエコー要求とエコー応答。
- エコー要求を受け取ったデバイスは、エコー応答を返す。
- エコー要求に対し、エコー応答が返ってこれば、その相手とは接続されていることを示す。
- エコー要求はpingを使って実行する。
- pingにより、レイヤ3以下の障害を確認することが出来る。
- pingは近い場所のデバイスから行った方が、障害を確認しやすい。