Wiresharkでエラーパケット(特にICMPメッセージ)を解析していると、「同じパケットを見ているはずなのに、画面上のTTL値が1だったり128だったりして混乱する」という現象によく遭遇します。
この記事では、Wiresharkにおける「ICMPエラーパケットの二重構造」の仕組みと、それぞれのTTL値(1と128)が何を意味しているのかを分かりやすく解説します。
1. 結論:パケットの中に「もう1つのパケット」が入っている!
WiresharkでICMPの「Time to Live Exceeded(TTL超過)」エラーを見るとき、パケットはマトリョーシカのように二重構造になっています。
- 外側のパケット(手紙の封筒): エラーを教えてくれたルーター(NVA)からの「通知メッセージ」
- 内側のパケット(手紙の中身): 途中で破棄された「元々の通信データ」
| 見ている場所 | 送信元 ➔ 宛先 | プロトコル | 表示されるTTL | 意味 |
|---|---|---|---|---|
| ① 外側のヘッダー | ルーター ➔ 送信元VM | ICMP |
128 (または14など) |
エラー通知パケット自身が持つ寿命 |
| ② 内側のデータ部 | 送信元VM ➔ 宛先VM | UDPなど | 1 |
破棄された元パケットの送信時の寿命(原因) |
2. なぜ二重構造になっているのか?(ICMPの仕組み)
ルーターがパケットを破棄した際、ただ捨てるだけでは送信元コンピュータは「なぜ通信が届かないのか」が分かりません。
そのため、ルーターは送信元に対して「あなたの送ったこのパケット、TTLが0になったので途中で破棄しましたよ」という報告(ICMP Time Exceeded)を返送します。
このとき、送信元が「どの通信が失敗したのか」を特定できるように、ルーターは破棄したパケットのヘッダー情報をICMPメッセージの中にコピーして添付してくれます。
【ルーターから届く ICMP エラーパケットの全体像】
+-----------------------------------------------------------------------+
| [① 外側のIPヘッダー] (TTL = 128) |
| 送信元: ルーター (NVA) ───➔ 宛先: 送信元VM |
+-----------------------------------------------------------------------+
| [ICMPメッセージ本体] |
| Type: 11 (Time-to-live exceeded) |
| |
| ┌───────────────────────────────────────────────────────────────┐ |
| | [② 添付された「破棄された元のパケット」のIPヘッダー] | |
| | 送信元: 送信元VM ───➔ 宛先: 宛先VM | |
| | プロトコル: UDP (Port 3343) | |
| | TTL: 1 <─── ★これが通信トラブルの原因! | |
| └───────────────────────────────────────────────────────────────┘ |
+-----------------------------------------------------------------------+
3. Wiresharkでの見分け方(どこをクリックすればいい?)
Wiresharkの中央パネル(ツリー表示)で、どの階層を展開しているかによって表示されるTTL値が変わります。
① 「128」が見えているとき
中央パネルの上のほうにある Internet Protocol Version 4 を選択している状態です。
- ここで表示されているのは「ルーターが送信したエラー通知(ICMPパケット)」のTTL値です。
- ルーター(OS)のデフォルト初期値(128など)が表示されます。
② 「1」が見えているとき
中央パネルの下にある Internet Control Message Protocol を展開(▶をクリック)し、その中にある Internet Protocol Version 4 を選択している状態です。
- ここで表示されているのが、「破棄された元のパケット」のTTL値です。
- 「なぜ通信が失敗したのか?」を調査するときは、こちらの内部のTTL値を見る必要があります。
4. トラブルシューティングでの活かし方
ネットワークの障害調査(キャプチャ解析)を行う際は、以下の手順でチェックするのがコツです。
- ICMP Time Exceeded パケットを見つける。
Internet Control Message Protocolの中身(折りたたまれている配下)を展開する。- 内側に添付されている元パケットの
Time to Liveを確認する。 - TTLが
1になっていれば、「送信元アプリのTTL設定不足」または「途中に想定外のルーター(L3ホップ)が存在する」ことが原因だと一目で判断できる!
5. まとめ
- WiresharkのICMPエラー表示は「外側の通知」と「内側の原因データ」の二重構造。
- 一番上のIPヘッダーに見える
TTL=128は「エラー通知が届くための寿命」。 - ICMPツリーを展開した中にある
TTL=1こそが「トラブルの原因となった元パケットの寿命」。
Wiresharkでエラーパケットを見るときは、ぜひ「ICMPの中身を展開して、内側のIPヘッダーを見る」ことを意識してみてください!


