■ エラーメッセージ
さて、ネット君。
ルータの動作はわかってくれたと思う。
えぇ、まぁ。たぶん。
ふむ。相変わらず自信なさ気だな。
まぁ、正直でよろしい。
それは褒めていただいてるんですか?
そうだな。
他に取り柄もないしな。
ぐぅ。
ともかく。
ルータの動作、つまりネットワーキングでのデータ転送の仕組みがわかったところで、質問だが。データ転送って、これだけじゃないよな?
はい?
どういう意味です?
宛先を決めて、データを送る。
これはこれでいいが、ホスト間で行われるデータ転送というものはそれだけなのか?
他にはないのか?
え、えっと。
ないんじゃないんですか。
まぁ、普通はそう考える。
だがしかし、エラーメッセージというものを忘れてはいかんな。
えらーめっせーじ?
例えば、こんなのですか?
[Figure34-01:エラーメッセージ]
あぁ、確かにこれもエラーメッセージだといえば、そうだが。
このブラウザが表示するエラーメッセージは、エラーが発生したことを教えてくれるが、実際どのようなエラーかわからない。
どのようなエラー?
うむ。このブラウザのエラー表示の原因としてはいくつか考えられる。
アドレスを間違えて打った、DNSが上手く動いてない、そのページが存在しない、ホスト側の設定ミス、メディアが接続されていない…。
ははぁ。同じ表示でも原因はいくつかあるんですねぇ。
そうだ。
だが、「なんだかわかんないけど繋がりませんでした」では通用しない。そのため、エラーを通知するプロトコルを知っておく必要がある。
エラーを通知するプロトコル…。
そのプロトコルは、ICMPというプロトコルだ。 ▼ link
あいしーえむぴー?
■ ICMP
Internet Control Message Protocol。
直訳すれば、インターネット制御メッセージプロトコル。役割的に翻訳すると、エラー報告プロトコルってところだな。
制御メッセージ。
エラー報告。
いくつか機能があるのだが、例えばこんな風に使われる。
[Figure34-02:ICMP]
「送信不能メッセージ」を受け取ったホストはどうするんです?
それは個々のアプリケーションによって対応が異なる。
ははぁ。
このように、ネットワークの制御・管理に使用される、ということがわかってもらえたと思う。
さて、どのようなデータをやりとりするかというと、ちょっと特殊で普通のIPパケットと違う。
普通と違う?
そういえば、ARPのパケットも普通と違いましたよね。
[Figure26-03:ARPパケット]
うむ。確かにARPパケットも普通と違う。
だが、ICMPはもうちょっとIPパケットに近い。というよりも、ICMPはIPに含まれているのだ。
含まれている?
そうだ、以下のような形になる。
[Figure34-03:ICMPパケット]
え〜。
レイヤ4のセグメントの代わりに、ICMPのメッセージが入るってことですか?
まあ、そう考えるのが楽だな。
実際は、IPヘッダ+ICMPメッセージの形になる、ということだ。
ふむふむ。
ICMPメッセージの構造はこうなっている。
1バイト | 1バイト | 2バイト | 4バイト | 64バイト |
タイプ | コード | チェックサム | オプション | データ |
[Table34-01:ICMPパケット]
このような形だ。
覚えておくべく所は、タイプのところだ。
たいぷ?
■ ICMPの種類
うむ。ICMPには大きく分けて、2種類のメッセージがある。
QueryメッセージとErrorメッセージだ。
くえり、と、えらー。
Queryは状態を調査するために使用されるメッセージ。
Errorはそのままエラーを通知するためのメッセージだ。
ははぁ、ICMPは状態の調査にも使用するんですね。
さすがInternet Controlのプロトコルですね。
うむ。
この2種類に、それぞれ複数のタイプが存在する。
先ほどのメッセージの中の「タイプ」に数字で表されている。
タイプ | 説明 | 意味 | 種類 |
---|---|---|---|
0 | Echo Reply | Echo応答 | Q |
3 | Destination Unreachable | 宛先到達不能 | E |
4 | Source Quench | 転送抑制指示 | E |
5 | Redirect | 最適経路通知 | E |
8 | Echo Request | Echo要求 | Q |
11 | Time Exceeded | 時間超過によるパケット破棄 | E |
12 | Parameter Problem | 誤ったパラメータによるエラー | E |
13 | Timestamp Request | タイムスタンプ要求 | Q |
14 | Timestamp Reply | タイムスタンプ応答 | Q |
15 | Information Request | (未使用) | Q |
16 | Information Reply | (未使用) | Q |
[Table34-02:ICMPのタイプ]
種類の[Q]はQueryメッセージ。[E]はErrorメッセージを指す。
このように11種類存在する。 ▼ link
1番とか2番とか、7番が抜けているのは何か意味があるんですか?
ふむ。
それらはもともとのRFC792でも定義されていない番号だ。私が省略したわけではない。
なんだ、そうなんですか。
0、3、5、8、11を赤くしたのは私の仕業だ。
この5種類のICMPメッセージタイプは、非常に重要だ。
重要って、どんな風に重要なんですか?
頻繁に利用される、という点でだ。
この5種類については、細かく説明していく。
はい。
■ Destination Unreachable
まずは、タイプ3、Destination Unreachableだ。
宛先到達不能と訳されることが多い。
宛先到達不能。
宛先に届かなかったんですね。
そのままだな。
確かにその通りだ。
ただ、何が原因で届かなかったかがこのメッセージではわかる。
へぇ、どうやってですか?
宛先にIPパケットを送り、それが何らかの原因で届かないわけだ。
そうすると、タイプ3の宛先到達不能メッセージが帰ってくる。そのICMPメッセージのコードの部分に原因が書いてある。
こーど?
あぁ、タイプの後ろにある1バイトの部分ですね。
うむ、そこに0〜12までの原因コードが入って戻ってくるわけだ。
原因は以下のように分類されている。
code | 説明 | 意味 |
---|---|---|
0 | Net Unreachable | ネットワークへ到達不能 |
1 | Host Unreachable | ホストへ到達不能 |
2 | Protocol Unreachable | そのプロトコルは使用できない |
3 | Port Unreachable | 対象ポートが閉じている |
4 | Fragmentation Needed and DF was Set | パケットサイズが大きいため分割したいが、分割が不可になっている |
5 | Source Route Failed | ソースルートが不明。 |
6 | Destination Network Unknown | 宛先ネットワークが不明 |
7 | Destination Host Unknown | 宛先ホストが不明 |
8 | Source Host Isolated | 宛先ホストがネットークから分離されている |
9 | Communication with Destination Network is Administratively Prohibited | 宛先ネットワークとの送信が禁止中 |
10 | Communication with Destination Host is Administratively Prohibited | 宛先ホストとの送信が禁止中 |
11 | Destination Network Unreachable for Type of Service | 指定したサービスタイプでは宛先ネットワークへ到達不能 |
12 | Destination Host Unreachable for Type of Service | 指定したサービスタイプでは宛先ホストへ到達不能 |
[Table34-03:ICMP Type3 Code]
わわわ。
なんかいっぱいあって、大変ッス。
まあ、細かくみると確かに13種類は多い。
だが、よくよく見るとだいたい同じだ。
そうですかぁ?
コード2、3、4を除けば。大体が宛先ネットワークや宛先ホストとの通信が不可能です、と言っている。
ちなみにICMPを規定したRFC792では、コード1〜5までしか載ってないがな。
なんですか、そりゃ?
まあ、そんなものだ。
コード0、1、4、5はIPパケットを受け取ったルータが判断してタイプ3を返す。
コード2、3は受け取ったホストが返す形になる。
[Figure34-04:Destination Unreachable]
ははぁ。
これで何故データが届かなかったのかがわかるわけですね。
■ Redirect
次は、タイプ5、Redirectの説明だ。
何故タイプの番号順に説明しないんですか?
それはねモゲタン。
大人の都合という奴なのよ。
いつの間に僕がモゲタンに?
冗談はともかく。
番号順にやらないのは講座の構成上の問題という奴だ。気にするな。
はぁ。
タイプ5はRedirect。直訳すれは方向転換だな。
さて、ネット君。ルーティングプロトコルを使用すればルータは最適な経路を選択できるな。
そうですね。それがルーティングプロトコルの役割ですから。
では、以下のような状態を考えてみてくれ。
[Figure34-05:ネットワーク構成図]
新しくルータを追加したら、172.16.0.0ネットワークへはルータBの方が最適なルートを持った。
よって、ルータAはルータB経由で172.16.0.0へパケットを送る。
はい、そうなりますね。
それはいいのだが、ネット君。
ホストXが172.16.0.0へパケットを送りたい場合、どうなる?
どうなる、って。
デフォルトゲートウェイが192.168.1.1に設定されているから、ルータAに送りますよね。
うむ、そうだ。
そうなると、ルータAは最適ルートに従って、ルータBへデータを送る。なんかおかしくないか?
おかしいっていえば、そうですけど。
ホストXが直接ルータBに送った方が早いですよね。
いいぞ、ネット君。
何故このような事が起きるかというと、ホストにはルートの変更情報は伝わらないからだ。
そうですね。
ルーティングプロトコルはルータ間で行われるから、ホストにはそういう情報が伝わりませんよね。
うむ、よって最適ルートの情報をホストへ伝える。
これがタイプ5のRedirectだ。
ははぁ。
Redirectは4つのコードがあり、さらにオプションに新しい最適ルータのIPアドレスを入れてホストへ送り返す。
code | 説明 | 意味 |
---|---|---|
0 | Redirect datagrams for the Network | 対象ネットワークへのルート変更 |
1 | Redirect datagrams for the Host | 対象ホストのみへのルート変更 |
2 | Redirect datagrams for the Type of Service and Network | ネットワークへのルート変更(特定のサービスタイプのみ) |
3 | Redirect datagrams for the Type of Service and Host | ホストへのルート変更(特定のサービスタイプのみ) |
[Table34-03:ICMP Type5 Code]
[Figure34-06:Redirect]
ホストXのルーティングテーブルのゲートウェイを変更?
…。そういえば、各パソコンもルーティングテーブルを持っていましたっけ。
その通り。
通常、パソコンのルーティングテーブルでは異なるネットワークへのパケットは、すべてデフォルトルートに従って、デフォルトゲートウェイにパケットを送るようになっている。
コマンドプロンプトで、「>route print」を使うと見えるテーブルですよね。
それの、「0.0.0.0ネットワーク宛」がデフォルトルートでしたっけ。
うむ、それだ。
そのルーティングテーブルに、この例でいえば172.16.0.0ネットワークだけは192.168.1.2をゲートウェイにするよう追加するのだ。
へぇ。
というわけで、説明すると言った0、3、5、8、11の5つのタイプのうち2つが終わったわけだ。
残り3つはまた次回。
いぇっさー。
3分間ネットワーキングでした〜♪
- ICMP
-
[Internet Control Message Protocol]
RFC792で規定。
- Query
-
[Query]
読みは「クエリー」。
本来の意味は、質問・疑問。
- 11種類
-
実際は、タイプは1バイト=8ビットですから256種類あります。
RFC950やRFC1256で他の種類のタイプも定義されています。
すべてを見たい場合は、IANAにあります。参考リンクを参照のこと。
- ソースルート
-
[source route]
通常は、送信元ホストはどのようなルートで宛先に届くかは知らなくてもよい。
だが、送信元ホストが指定することもでき、そのルートの事をソースルートという。
- コード1〜5まで
-
ルータによって、対応できるコードが違うこともあるみたいです。
コード1〜5はどのルータでも対応しているが、6以降は実装されていないものも。
UnreachableとUnknownの明確な違いと言われても…。
- モゲタン
-
ネタ元はSGGG、「モゲタンとお姉さんのゲームなぜなに講座」。
かなり駄目すぎて大好き。
- ネット君の今日のポイント
-
- エラーメッセージなどを転送するプロトコルがICMPである。
- ICMPはIPヘッダ+ICMPメッセージの形でカプセル化される。
- ICMPには大きく分けてQueryとErrorの2種類のメッセージがある。
- タイプ3はDestination Unreachable(宛先到達不能)。
- 宛先のネットワーク・ホストへパケットが届かなかった事を通知する。
- コードによってその原因がわかる。
- タイプ5はRedirect(最適経路通知)。
- より最適なルートがあった場合、ホストにそれを通知する。