ICMP
IPv4の通信で起きたエラーの通知や疎通確認に使う制御用プロトコル。IPヘッダーのプロトコル番号は1で、pingやtracerouteにも利用される。
イマシルちゃんの解説
ICMPは、IP通信のエラー通知や疎通確認に使う制御用のプロトコルだよ。
例えば途中のルータが宛先へパケットを送れないとき、送信元へ理由を伝えるメッセージを返すことがあるんだ。
通信を確かめるpingでは、エコー要求という確認用のメッセージを送り、相手からエコー応答が戻るかを調べるよ。
こうした通知や返事は、通信できない原因を探る手掛かりになるんだ。
ただし通知や返事が必ず届くわけではないので、返事がないだけで相手が故障したとは決められないよ。
この解説はわかりやすかったですか?
より深い解説
定義
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
- ping:エコー要求を送り、エコー応答が返ってくるかで疎通と往復時間を確かめる
- traceroute:TTLを1、2、3…と増やしながらパケットを送る。各ルータでTTLが0になると時間超過のメッセージが返るので、その送信元を並べると経路がわかる
セキュリティ上の注意
- ICMPフラッド:大量のエコー要求を送りつけて、相手の回線や処理能力を使い切らせる
- Smurf攻撃:送信元を標的のIPアドレスに偽ったエコー要求を、ネットワークのブロードキャストアドレス宛てに送る。多数の機器からの応答が標的に集中する
このため、外部からの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を受け付けない設定にすることも多い。
実際の試験ではここに出る!全13問
ネットワークスペシャリスト
- 午前Ⅱ
- 午後Ⅰ
テクニカルエンジニア(ネットワーク)
- 午前