始めに
・授業でICMPという単語が出てきて、今一度復習したかった。
・ネットワーク興味あるのに、これ忘れてるのまずいと感じたから。
自分なりの言葉でまとめてみる。
どんな用途?
情報ネットワークにおいて、通信エラーの通知やネットワークの状態確認を行うためのプロトコルである。
例えば、あるコンピューターから別のコンピューターにデータを送信する際に、途中で何かしらの問題が発生すると、ICMPがエラーメッセージを送信元に返し、問題の存在を知らせる。
pingやtracerouteはこのプロトコルを利用している。
仕組み(データの流れなイメージ)
大前提このプロトコルはIPの動作補助のようなものである。パケットがホストに到達出来ないときや何らかの原因でパケットが破棄されてしまった場合パケットのエラー通知などを行ってくれるプロトコルである。
そうなると、信頼性を担保するものだからOSI参照モデルでいうところのトランスポートモデルなんじゃないの?と自分は思ったが、飽くまでもネットワーク層のプロトコルらしい。実際見かけ上のパケットの形式はTCPやUDPと同じようにIPによって運ばれている。
図1.ICMPの流れ(マスタリングTCP/IPを参考にしました。)
Qiitaのtableが大きなレコード数に対応していないので箇条書きで書いてますが、ご了承ください。
ICMPメッセージのタイプ(タイプ番号(10進数):メッセージ内容)
0:エコー応答
3:到達不能
5:リダイレクト
8:エコー要求
9:ルーター広告
10:ルーター請願
11:時間超過
12:パラメータ以上
13:タイムスタンプ要求
14:タイムスタンプ応答
42:拡張エコー要求
43:拡張エコー応答
pingの正体:ICMPエコーメッセージ(タイプ0,8)
ホストAからホストBに対して、IPパケットが到達するかどうかを確認したいときに使う。相手先に、ICMPエコー要求メッセージを送信、そして相手先ホストからエコー応答メッセージが返ってくれば到達可能である。
pingの拡張:ICMP拡張エコーメッセージ(タイプ42,43)
前述のICMP拡張エコーメッセージに加えて以下の機能が搭載されている。
・パケットの宛先ノードの、別のインターフェースの状態の確認。(IPv4かIPv6どっち対応?)
・パケットの宛先ノードから、別のノードに通信可能か確認。(ARPや近隣テーブルを参照)
ICMP到達不能メッセージ(コード番号:メッセージ内容)
0:ネットワーク到達不能
1:ホスト到達不能
2:プロトコル到達不能
3:ポート到達不能
4:分割処理が必要だが、分割禁止フラグが設定されている
5:ソースルートに失敗
6:宛先ネットワーク不明
7:宛先ホスト不明
8:送信元ホストは孤立している
9:宛先ネットワークとの通信は管理上禁止
10:宛先ホストとの通信は管理上禁止
ICMPv6
一言でいうと、IPv6に対応したICMPプロトコルである。
従来のIPアドレスからMACアドレスを名前解決するARPではなく、近隣探索(Neighbor Discovery)メッセージに変更されている。
近隣探索=(ARP+ICMPリダイレクト+ICMPルーター)
近隣探索をちょっと深堀り
まず、ICMPv6のメッセージ体系について知る必要がある。
ICMPv6のメッセージはかなり多く。256種類存在している。
内訳:
0~127:エラーメッセージ
128~255:情報メッセージ(要は、正常なメッセージってこと)
ICMPv6におけるメッセージ(長いのでURLで各自参照お願いします。)
この中でも、近隣探索は、タイプ133~137までのメッセージを指す。
IPv6アドレスとMACアドレスの対応関係を調べるときには、近隣要請メッセージを使ったり、近隣告知メッセージでMACアドレスで通知してもらったり出来る。他にもデバイス(PCやルーター)の発見やエラーの検知も出来たりする。
参考文献(参照日2024年12月17日)
・マスタリングTCP/IP―入門編―(第6版)
井上 直也 (著), 村山 公保 (著), 竹下 隆史 (著), 荒井 透 (著), 苅田 幸雄 (著)
ISBN-13:978-4274224478 出版社:オーム社