3.

ICMPとは|ping・tracerouteの仕組みとメッセージタイプ・ICMPv6

編集
この記事の要点
  • ICMP (Internet Control Message Protocol) は IP 層で動く制御・通知用プロトコル
  • IP パケットの到達不可TTL 超過エコー要求/応答などを伝える
  • ping は ICMP Echo Request / Reply、traceroute は TTL を増やしながらTime Exceeded を集める仕組み
  • TCP/UDP のようなポート番号は持たない。代わりに Type / Code でメッセージ種別を表す
  • IPv6 では ICMPv6 として再設計され、NDP(近隣探索)など IP 動作に不可欠な役割を担う

ICMP とは

ICMP(Internet Control Message Protocol)は、IP ネットワークにおける制御メッセージ・エラー通知専用のプロトコルです。IP 層(インターネット層)と同居して動作し、IP の不具合や状態を中継ノードや送信元へ伝える役割を担います。

項目内容
レイヤOSI の第 3 層(ネットワーク層)/ TCP/IP のインターネット層
標準RFC 792(ICMPv4)/ RFC 4443(ICMPv6)
カプセル化IP パケットのペイロードとして搬送(プロトコル番号 1 / 58)
役割制御メッセージ / エラー通知 / 診断
ポートなし(TCP/UDP のような概念を持たない)

主なメッセージタイプ(ICMPv4)

Type名称用途
0Echo Replyping の応答
3Destination Unreachable到達不可(網不到達 / ホスト不到達 / ポート不到達 / DF 必要)
5Redirectより良い経路の通知
8Echo Requestping の問い合わせ
9 / 10Router Advertisement / Solicitationルータ発見(ほぼ NDP に置換)
11Time ExceededTTL 切れ(traceroute の核)
12Parameter Problemヘッダ異常
13 / 14Timestamp / Reply時刻同期(現代では NTP に置換)

ICMP メッセージの構造

+------+------+----------+
| Type | Code | Checksum |   ← 共通ヘッダ 4 バイト
+------+------+----------+
|     Type 依存データ     |
+-------------------------+
|  問題のあった IP ヘッダ  |   ← エラー通知の場合
|  + 先頭 8 バイト         |
+-------------------------+

Type が大分類、Code がサブ分類です。たとえば Type=3(Destination Unreachable)の中に Code=0(Net Unreachable)/ Code=1(Host Unreachable)/ Code=3(Port Unreachable)/ Code=4(DF Set / Fragmentation Needed)などがあります。

ping(Echo Request / Reply)

もっとも有名な ICMP 用途。送信側で Type=8 を送り、受信側が Type=0 で返します。RTT(往復時間)とパケットロスを測れます。

# 基本的な ping
ping 8.8.8.8

# 回数指定(Linux)
ping -c 4 example.com

# パケットサイズ指定(MTU 調査)
ping -M do -s 1472 8.8.8.8   # DF 立てて 1472 バイト送る

traceroute / tracert の仕組み

traceroute はTTL を 1, 2, 3, ... と増やしながらパケットを送り、途中のルータが TTL=0 を検出して返す Time Exceeded メッセージを集めることで経路ノードを特定します。

traceroute example.com         # Linux/Mac
tracert  example.com           # Windows
  1. TTL=1 のパケット送信 → 最初のルータが TTL=0 で破棄、Time Exceeded を返す
  2. TTL=2 → 2 段目のルータが返す
  3. … 最終的に宛先ホストが Echo Reply(または Destination Unreachable)を返す

Linux 版は既定で UDP(ポート 33434+)、Windows 版は ICMP Echo を使うなど実装差があります。

Path MTU Discovery と ICMP

送信ホストは DF(Don't Fragment)ビットを立てた IP パケットを送り、途中で MTU を超えるとルータが ICMP "Fragmentation Needed"(Type 3 Code 4)を返します。これを受け取った送信ホストはパケットサイズを下げて再送します。

ICMP がファイアウォールで遮断されている経路ではPMTUD ブラックホールが発生し、特定サイズの通信だけ詰まる不具合が起きやすい。

Destination Unreachable の主なコード

Code意味
0Network Unreachable
1Host Unreachable
2Protocol Unreachable
3Port Unreachable(UDP で受け先がいない時に返る)
4Fragmentation Needed / DF set
9 / 10Administratively prohibited(管理者ブロック)
13Communication Administratively Prohibited(FW で遮断)

ICMPv6(IPv6 用 ICMP)

IPv6 では ICMPv6 が必須プロトコルです。アドレス解決やルータ広告など、IPv4 で ARP / DHCP が担っていた役割の多くを引き受けます。

Type名称
1Destination Unreachable
2Packet Too Big(PMTUD の核)
3Time Exceeded
128 / 129Echo Request / Reply
133 / 134Router Solicitation / Advertisement(NDP)
135 / 136Neighbor Solicitation / Advertisement(NDP)

セキュリティ観点

  • Smurf 攻撃 — ブロードキャスト宛 Echo Request で大量応答を引き起こす(現代では IP Directed Broadcast 禁止で対策済み)
  • Ping of Death — 異常サイズの ICMP で OS をクラッシュ(古い脆弱性、対策済み)
  • ICMP トンネリング — FW を通る ICMP ペイロードに任意データを載せて C&C と通信
  • ICMP Redirect 攻撃 — ルート情報を偽装して中間者攻撃

ICMP を遮断するべきか

「セキュリティのため ICMP 全遮断」は非推奨です。Type 3(Destination Unreachable)と Type 11(Time Exceeded)を遮断すると PMTUD や経路調査が破綻します。

方針説明
Echo Request を制限(レート制限)ping flood 対策、完全遮断は避ける
Type 3 / 11 / 12 は通す到達性・PMTUD のため必要
ICMPv6 は遮断しないNDP が壊れて通信不能になる

パケットキャプチャの例(tcpdump)

# ICMP のみ表示
sudo tcpdump -i any 'icmp'

# ICMPv6 含めて
sudo tcpdump -i any 'icmp or icmp6'

# Echo Request のみ
sudo tcpdump -i any 'icmp[icmptype] = icmp-echo'

FAQ

Q: ICMP に「ポート番号」はある?
A: ありません。代わりに Type / Code でメッセージ種別を区別します。Identifier / Sequence フィールドが「同じ ping 対応の問い合わせ⇔応答」を識別します。

Q: TCP と UDP の関係は?
A: ICMP は TCP/UDP の上下関係ではなく同列の独立プロトコルで、IP の直下に座ります。プロトコル番号は IPv4 で 1、ICMPv6 で 58。

Q: クラウド環境で ping が通らない
A: AWS / GCP / Azure ではセキュリティグループ・NSG の既定で ICMP が許可されていないことが多い。必要なら明示的に許可する。

関連

  • インターネット層(第2層) — 親カテゴリ
  • IP / IPv4 / IPv6 — 上位プロトコル基盤
  • ping / traceroute — ICMP を使うツール
  • NDP / ARP — アドレス解決
  • Path MTU Discovery
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. IP
  2. ARP
  3. ICMP

最近更新/作成されたページ