📖

IPアドレス・ICMPの深掘り学習3:ICMPの基礎と構造

に公開1

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コマンドの処理の流れ

  1. ICMPエコー要求メッセージ(ICMP Echo Request Message)を送信
  2. 相手先ホストから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)を利用して経路探索する

  1. TTL=1で送信 → ルーター1で破棄 → Time Exceeded受信 → ルーター1を記録
  2. TTL=2で送信 → ルーター2で破棄 → Time Exceeded受信 → ルーター2を記録
  3. 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 主要なポイント

  1. ICMPはOSI参照モデルの**第3層(ネットワーク層)**で動作
  2. IPパケットのデータ部にカプセル化されて送信(プロトコル番号:1)
  3. タイプ(8ビット)コード(8ビット) の組み合わせでメッセージを識別
  4. 重要な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 書籍

Discussion