ICMP

読み:あいしーえむぴー / 英語表記:Internet Control Message Protocol

IPの通信で起きたエラーの通知や、通信の確認に使うプロトコル。pingやtracerouteはICMPを利用している。

イマシルちゃんの解説

荷物が届かなかったとき、郵便局から「宛先不明で戻ってきました」ってお知らせが来ることがあるよね。
ネットワークでも、パケットが届けられなかったときに「届きませんでした」って知らせる仕組みがあるんだ。

それがICMP!
「相手は元気?」って確かめるpingも、実はICMPのメッセージを使ってるんだよ。

より深い解説

定義

ICMP(Internet Control Message Protocol)は、RFC 792で定められた、IPの制御用のプロトコルである。IPの配送で起きた問題(宛先に届かない、寿命が尽きた、など)を送信元に知らせたり、相手との疎通を確認したりするのに使う。

IPの上に載るが、トランスポート層ではない

ICMPのメッセージは、IPパケットのデータ部分に入れて運ばれる。受け取った側がデータ部分をICMPだと判別できるのは、IPヘッダーのプロトコル番号が1になっているからである。

ただし、ICMPはTCPやUDPのようにアプリケーションのデータを運ぶものではなく、IPの働きを補う「ネットワーク層の一部」として扱われる。そのため、ICMPにはポート番号がない。

主なメッセージ

タイプ名前使われる場面
8エコー要求(Echo Request)pingが送る
0エコー応答(Echo Reply)pingへの返事
3宛先到達不能(Destination Unreachable)宛先のネットワークやホスト、ポートに届けられない
5リダイレクト(Redirect)もっとよい経路のルータを教える
11時間超過(Time Exceeded)TTLが0になってパケットが捨てられた

宛先到達不能のうち、コード4(フラグメントが必要だが、DFビットが立っていて分割できない)は、経路上の最小のMTUを調べるパスMTU探索に使われる。

pingとtraceroute

セキュリティ上の注意

このため、外部からのICMPをファイアウォールで制限することが多い。ただし、宛先到達不能まで止めると、パスMTU探索が働かなくなり、大きなパケットだけが届かない障害につながるので注意が必要である。

IPv6では、ICMPv6が近隣探索などIPv6の基本的な仕組みも担うため、IPv4以上に、むやみに遮断してはいけない。

メッセージと場面の対応

どの問題が起きたときに、どのメッセージが返るのかは、取り違えやすい。

場面返るメッセージ
ルータが、受け取ったパケットの送信元に、同じネットワークのもっと適したルータを知らせ、経路の変更を求めるRedirect(タイプ5)
送信元が指定したソースルーティング(経由するルータの指定)が失敗したDestination Unreachable(タイプ3、コード5)
フラグメントの再組立て中にタイムアウトしたTime Exceeded(タイプ11、コード1)。TTLが0になったときはコード0
IPヘッダーの値に誤りがあり、処理できないParameter Problem(タイプ12)
受信側のバッファがあふれそう(送信の抑制を求める)Source Quench(タイプ4)。現在は廃止されている

Redirectは、ホストのデフォルトゲートウェイとは別のルータを通るほうが近い場合に、ルータが送る。ホストはこれを受けて、その宛先への経路を書き換える。ただし、偽のRedirectで通信を横取りされるおそれがあるため、Redirectを受け付けない設定にすることも多い。

実際の試験ではここに出る!

この用語が出てくる記事

↑