3 Minutes NetWorking
No.35

3Minutes NetWorking

第35回レイヤ3 ICMP(ping)

■ ICMP

インター博士

エラーを通知したり、通信状態を管理したりするプロトコルが、ICMPだ。

ネット助手

いんたーねっと・こんとろーる・めっせーじ・ぷろとこる、でしたっけ。

インター博士

そうだ。
インターネット制御メッセージプロトコルってところだな。

ネット助手

「コントロール」を「制御」に訳しただけですね。

インター博士

(ギロリ)

ネット助手

いえ、なんでもないッス。

インター博士

うむ。ICMPには、その機能において、いくつかのメッセージのタイプに分かれている。
よく使われるものは以下の5つだ。

タイプ説明意味
0Echo ReplyEcho応答
3Destination Unreachable宛先到達不能
5Redirect最適経路通知
8Echo RequestEcho要求
11Time 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を行ってみた。

ping実行結果

[Figure35-03:ping実行結果]

ネット助手

はぁ。

インター博士

まずは(1)の部分。Pinging 192.168.0.1 with 32 bytes of dataの部分。
192.168.0.1に32バイトのデータでpingを行っています、だ。

ネット助手

32バイトのデータで、ってのは?

pingパケット

[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から何がわかるか、を話そう。

pingエラー・1

[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以下の障害を見つけてくれるってことですね。

インター博士

そうだ。
では、他のエラーも見てみよう。

pingエラー・2

[Figure35-07:pingエラー・2]

インター博士

これは、ドメイン名でpingを行った際に出るエラーだ。
pingが実行される前の段階、DNSで出るエラーだな。そのドメインネームは存在しません、というエラーだ。

ネット助手

DNSはレイヤ7では? pingにレイヤ7が影響するのですか?

インター博士

いやいや。
これはpingの責任ではない。ドメインネーム→IPアドレスの変換はpingが実行される前に実行されるからな。

pingエラー・3

[Figure35-08:pingエラー・3]

インター博士

こっちは、パケットの生存時間切れだ。
TTLの設定ミスか、ルーティングループでも発生しているか。

ネット助手

上の画像の場合は?

インター博士

これはエラーを出すために、意図的にTTLを低く設定した。
それゆえのエラーだな。

pingエラー・4

[Figure35-09:pingエラー・4] 

インター博士

これは、Destination host unreachableつまり、ICMP タイプ3が返ってきたエラーだ。

ネット助手

Destination host unreachable、宛先到達不能ですよね。

インター博士

うむ、途中のルータで宛先へのルートがない時に出てきたエラーだったな。
他にもデフォルトゲートウェイが設定されていないのに、他ネットワークへpingを行った時などに起きる。

ネット助手

デフォルトゲートウェイがないと、他ネットワークにはデータ転送できないですからね。
あれ?
これって、デフォルトゲートウェイの回ででてきましたよね。

インター博士

うむ。
pingが何故繋がらなかったかという理由は覚えておくと役に立つので覚えておくように。

ネット助手

はい。

■ ping・使い方

インター博士

実際、pingはネットワークへの接続ができなくなった場合に、障害の確認方法として使われることが多い。
簡単だし、便利だしな。

ネット助手

そうみたいですね。

インター博士

障害を確認するから、といってもやみくもにpingを行ってもしょうがない。
一応、pingを行う順番というものが、経験則としてある。

  1. >ping 127.0.0.1
  2. >ping 自分のNICのIPアドレス
インター博士

まず、ループバックアドレス(127.0.0.1)で、TCP/IPが動作しているかどうか確かめる。
次に自分のIPアドレスで、IPアドレス設定が間違っていないかを確認する。

ネット助手

ループバックアドレスと、自分自身のIPアドレスは同じなのではないのですか?

インター博士

似てるようで、ちょっと違う。ループバックアドレスは、自分自身のIPアドレスの設定が間違っていても使えるのだよ。なので、TCP/IPの動作確認として使う。

ネット助手

へぇ。

  1. >ping 同じハブ・スイッチに接続されているデバイスのIPアドレス
  2. >ping 違うハブ・スイッチに接続されているデバイスのIPアドレス
インター博士

LAN内のネットワーキングデバイスの障害を確認して。

  1. >ping デフォルトゲートウェイのIPアドレス
  2. >ping DNSサーバのIPアドレス
インター博士

LAN外へ出るための、デバイス・サービスの確認をする。

  1. >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は近い場所のデバイスから行った方が、障害を確認しやすい。

3 Minutes NetWorking No.35

管理人:aji-ssz(at)selene.is.dream.jp