IPアドレス・ICMPの深掘り学習3:ICMPの基礎と構造
1. はじめに
1.1 記事を執筆した経緯
以前執筆した記事の続きです。
IPアドレスとICMPについて概要を学習したいと考え、自分用の記事として執筆しました。
1.2 この記事で学べること
- ICMPの概要
- ICMPヘッダーと各ICMPメッセージについて
- pingコマンドとtracerouteの基本と両者の違い
2. ICMPの基本を理解する
2.1 ICMPの役割
- OSI参照モデルの第3層(ネットワーク層)に位置
- 同層で動作する主要プロトコル:
- IP:パケット配送の基本プロトコル
- ICMP:IPの補助・診断プロトコル(本記事で解説)
- (その他:IGMP、IPSec等も存在するが、基本は上記2つ)
2.2 ICMPパケットの構造

- ICMPはIPのデータ部分に含められて送信される
- プロトコル番号は1
- 重要なのは タイプ と コード
- タイプとコードの組み合わせによってIPの状況やエラーについて診断できる
3. 主要なICMPメッセージタイプ
3.1 メッセージタイプ一覧
| Type | メッセージ名 | 用途・説明 | 主な利用場面 |
|---|---|---|---|
| 0 | Echo Reply | ping応答 |
pingへの応答 |
| 3 | Destination Unreachable | 宛先到達不能(ネットワーク/ホスト/ポート等) | ルーティング設定ミス、ホストダウン、サービス未起動時 |
| 5 | Redirect | 経路変更通知 | より最適な経路がある時 |
| 8 | Echo Request | ping要求 |
pingコマンド実行時 |
| 11 | Time Exceeded | TTL切れ/フラグメント再構成タイムアウト |
traceroute実行時、ルーティングループ |
| 12 | Parameter Problem | パラメータ異常 | IPヘッダーに問題がある時 |
| 13 | Timestamp Request | タイムスタンプ要求 | ネットワーク遅延測定、時刻同期の確認 |
| 14 | Timestamp Reply | タイムスタンプ応答 | Timestamp Requestへの応答 |
| 42 | Extended Echo Request | 拡張Echo要求(RFC8335) | インターフェース識別子を指定したping |
| 43 | Extended Echo Reply | 拡張Echo応答(RFC8335) | Extended Echo Requestへの応答 |
3.2 Echo Request:タイプ8/Reply:タイプ0
- 通信したいホストやルーターなどにIPパケットが到達するか確認するときに利用される
-
pingコマンドなどが代表的な利用例 - ICMPエコー要求メッセージ(ICMP Echo Request Message)を送信して、
相手先ホストからICMPエコー応答メッセージ(ICMP Echo Reply Message)が返ってくればIPパケットが到達可能と判断できる
3.3 Destination Unreachable:タイプ3
- ルーターがIPパケットを宛先に配送できないときに送信ホストへ送るのがICMP到達不能メッセージ(ICMP Destination Unreachable Message)
- 到達不可の理由はコードにより判断可能
| Code | エラー内容 | 発生シーン |
|---|---|---|
| 0 | Network Unreachable | ルーティングテーブルに該当ネットワークなし |
| 1 | Host Unreachable | ARP解決失敗、ホスト応答なし |
| 2 | Protocol Unreachable | 指定プロトコル非サポート |
| 3 | Port Unreachable | UDPポート閉じている |
| 4 | Fragmentation Needed but DF set | パケットサイズ大きすぎ&分割禁止 (Path MTU Discovery で利用) |
| 5 | Source Route Failed | ソースルーティング失敗 |
| 6 | Destination Network Unknown | 宛先ネットワーク不明 |
| 7 | Destination Host Unknown | 宛先ホスト不明 |
| 8 | Source Host Isolated | 送信元ホストが隔離されている |
| 9 | Communication with Destination Network Prohibited | ネットワークへの通信が管理上禁止 |
| 10 | Communication with Destination Host Prohibited | ホストへの通信が管理上禁止 |
| 13 | Communication Administratively Prohibited | 管理者により通信禁止 |
3.4 Time Exceeded:タイプ11
- TTLが0になりパケットが破棄されると送信ホストへICMP時間超過メッセージ(ICMP Time Exceeded Message)がルーターから送信される
- IPパケットには生存時間(TTL:Time To Live)設定され、パケットがルーターを経由するごとに1つずつ減少していく
- パケットがネットワーク内部でループすることを防ぐことが目的
3.5 Redirect:タイプ5
- 送信元ホストが最適経路以外を使用していることをルーターが検知した際にICMPリダイレクトメッセージ(ICMP Redirect Message)を送信する
- ルーターがホストよりも効率的な経路を学習している場合に利用される。
4. ハンズオン:pingコマンド
4.1 pingの仕組みを理解する
pingコマンドの処理の流れ

- ICMPエコー要求メッセージ(ICMP Echo Request Message)を送信
- 相手先ホストからICMPエコー応答メッセージ(ICMP Echo Reply Message)が返ってくればIPパケットが到達可能と判断できる
識別子とシーケンス番号の役割
pingコマンドを実行すると、ICMPヘッダーの後半部分が「識別子」と「シーケンス番号」となる。

4.2 ping実行時の解説
実行コマンド:ping -c 5 google.com
ping -c 5 google.com
└─┬┘ └┬┘ └────┬────┘
│ │ │
│ │ └── 対象ホスト:ping送信先(ドメイン名またはIPアドレス)
│ └────────── オプション(count):送信するパケット数を指定
│ カウント値:送信するパケット数を指定 オプション(count)
└────────────── pingコマンド
コマンド実行結果
$ ping -c 5 google.com
PING google.com (142.251.42.174) 56(84) bytes of data.
64 bytes from nrt12s46-in-f14.1e100.net (142.251.42.174): icmp_seq=1 ttl=117 time=13.2 ms
64 bytes from nrt12s46-in-f14.1e100.net (142.251.42.174): icmp_seq=2 ttl=117 time=22.8 ms
64 bytes from nrt12s46-in-f14.1e100.net (142.251.42.174): icmp_seq=3 ttl=117 time=12.3 ms
64 bytes from nrt12s46-in-f14.1e100.net (142.251.42.174): icmp_seq=4 ttl=117 time=14.2 ms
64 bytes from nrt12s46-in-f14.1e100.net (142.251.42.174): icmp_seq=5 ttl=117 time=15.2 ms
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3996ms
rtt min/avg/max/mdev = 12.282/15.537/22.837/3.774 ms
コマンド実行結果解説
| 要素 | 値 | 意味 |
|---|---|---|
64 bytes |
64 | 受信したICMPメッセージ全体のサイズ |
nrt12s46-in-f14.1e100.net |
Googleサーバー名 | 応答元のホスト名(逆引きDNS) |
142.251.42.174 |
IPアドレス | 応答元のIPアドレス |
icmp_seq=1 |
1〜5 | シーケンス番号(Linuxでは1から開始) |
ttl=117 |
117 | Time To Live(経由可能ルーター数) |
time=13.2 ms |
13.2ms | 往復時間(RTT: Round Trip Time) |
4.3 ping実行時に敢えてエラーにしてみる
Destination Host Unreachableというホスト到達不能時に表示されるエラーメッセージを表示させてみる。存在しないIPへpingコマンドを実行することで意図的に発生させることが可能。
$ ping 172.31.151.16
PING 172.31.151.16 (172.31.151.16) 56(84) bytes of data.
From 172.31.151.174 icmp_seq=1 Destination Host Unreachable
From 172.31.151.174 icmp_seq=2 Destination Host Unreachable
正常なping実行結果と異なりTTLなどの情報は表示されず、Destination Host Unreachable が表示されることを確認できる。
5. ハンズオン:tracerouteコマンド
5.1 tracerouteの仕組みを理解する
traceroute(Windowsではtracert)は、パケットが宛先に到達するまでの経路(ルート)を表示するコマンド
# 基本的なコマンド(google.comへ接続する場合)
$ traceroute google.com
# Windowsの場合
$ tracert google.com
tracerouteの処理の流れ

TTL(Time To Live)を利用して経路探索する
- TTL=1で送信 → ルーター1で破棄 → Time Exceeded受信 → ルーター1を記録
- TTL=2で送信 → ルーター2で破棄 → Time Exceeded受信 → ルーター2を記録
- TTL=3で送信 → ホスト2に到着 → Port Unreachable → ホスト2を記録して完了
(TTL=nで送信 → 宛先に到達 → 最終応答受信 → 完了)
最終応答端末までTTLを一つずつ追加して経路を探索。
最終到達時に「Port Unreachable」が返ってくることを確認したら実行完了
pingコマンドとの違い
| 項目 | ping | traceroute |
|---|---|---|
| 目的 | 宛先への到達性確認 | 経路の可視化 |
| 使用するICMP | Echo Request/Reply | Time Exceeded(主に) |
| 情報取得 | 宛先の応答時間 | 各ルーターの応答時間 |
| パケット送信 | 直接宛先へ | TTLを段階的に増やして送信 |
| 出力 | 最終的な結果のみ | 経路上の全ホップ |
5.2 traceroute実行時の解説
実行コマンド:traceroute google.com
traceroute google.com
└────┬────┘ └────┬────┘
│ │
│ └── 対象ホスト:トレース先のドメイン名(IPアドレスも指定可能)
└────────────── tracerouteコマンド
コマンド実行結果
$ traceroute google.com
traceroute to google.com (142.251.42.174), 30 hops max, 60 byte packets
1 gateway (192.168.1.1) 1.532 ms 1.498 ms 1.465 ms
2 10.0.0.1 (10.0.0.1) 9.234 ms 9.156 ms 9.098 ms
3 * * *
4 172.16.1.1 (172.16.1.1) 15.234 ms 15.123 ms 15.456 ms
5 nrt12s46-in-f14.1e100.net (142.251.42.174) 20.123 ms 20.234 ms 20.345 ms
コマンド実行結果解説:コマンド情報
traceroute to google.com (142.251.42.174), 30 hops max, 60 byte packets
| 要素 | 値 | 意味 |
|---|---|---|
traceroute to |
google.com | トレース対象のドメイン名 |
(142.251.42.174) |
解決されたIP | DNS解決結果のIPアドレス |
30 hops max |
最大30ホップ | TTLの上限値(最大経由ルーター数) |
60 byte packets |
60バイト | 送信するパケットサイズ |
コマンド実行結果解説:各ホップの情報
1 gateway (192.168.1.1) 1.532 ms 1.498 ms 1.465 ms
| 要素 | 値の例 | 意味 |
|---|---|---|
1 |
ホップ番号 | TTL値(何番目のルーター) |
gateway |
ホスト名 | 逆引きDNSの結果 |
(192.168.1.1) |
IPアドレス | ルーターのIPアドレス |
1.532 ms |
1回目の応答時間 | 1つ目のパケットのRTT |
1.498 ms |
2回目の応答時間 | 2つ目のパケットのRTT |
1.465 ms |
3回目の応答時間 | 3つ目のパケットのRTT |
6. まとめ
本稿では、ICMPプロトコルの基礎から実践的な活用方法までを体系的に学習しました。
ICMPはIPプロトコルの補助的な役割を担い、ネットワークのエラー通知や診断において重要な位置を占めています。IPアドレスの学習に続いて、ICMPを理解することで、ネットワークの動作原理をより深く理解できるようになりました。
特に、普段何気なく使用しているpingコマンドとtracerouteコマンドの裏側で、ICMPメッセージがどのように動作しているかを理解することで、単なるツールの使い方を超えた本質的な知識を獲得できました。
6.1 主要なポイント
- ICMPはOSI参照モデルの**第3層(ネットワーク層)**で動作
- IPパケットのデータ部にカプセル化されて送信(プロトコル番号:1)
- タイプ(8ビット) と コード(8ビット) の組み合わせでメッセージを識別
- 重要なICMPメッセージタイプを学習
- Echo Request/Reply(Type 8/0):疎通確認の基本
- Destination Unreachable(Type 3):到達不能の詳細理由を通知
- Time Exceeded(Type 11):TTL切れを通知(tracerouteで活用)
- Redirect(Type 5):より最適な経路を通知
6.2 復習ポイント
- pingとtracerouteの違いを説明できるか?
- ICMPメッセージのタイプとコードの役割を理解しているか?
- TTLがネットワーク診断でどう活用されているか?
- Type 3(Destination Unreachable)の主要なコードを覚えているか?
7. 参考資料
7.1 書籍
-
ネットワーク技術の教科書 第2版
- 著者:長谷 和幸
- 出版社:アイテック
- 出版年:2022年
-
体験しながら学ぶ ネットワーク技術入門
- 著者:みやた ひろし
- 出版社:SBクリエイティブ
- 出版年:2024年
-
マスタリングTCP/IP 入門編(第6版)
- 著者:井上直也・村山公保・竹下隆史・荒井透・苅田幸雄
- 出版社:オーム社
- 出版年:2019年
Discussion
この記事の執筆時のスクラップは下記