FE EXAM

ICMP(到達確認とエラー通知)

通信の到達確認やエラー通知を行うネットワーク層のプロトコル。

INTERACTIVE VISUALIZATION
送信元
宛先/ルータ
エラー通知
フェーズ
idle
TTL(パケット寿命)
結果
シナリオ
ステップ1 / 4
STEP 1/4ping を打つ前これから自分の端末から相手のサーバへ ping(ピン)を打ちます。ping は「そこにいますか?」と相手の生存を確認するコマンドで、中身では ICMP(=通信の到達確認やエラー通知を行うプロトコル)を使います。
送信元(自分)宛先 / ルータ▶ で開始
解説

📌
ICMPとは

送信元宛先そこにいる?ここにいるよ

ICMP(Internet Control Message Protocol)とは、通信の到達確認やエラー通知を行うネットワーク層のプロトコルです。ネットワーク層=相手まで届けるための住所(IPアドレス)を扱う層、のことです。データ本体を運ぶのではなく、通信が「うまくいったか/失敗したか」を知らせる連絡係です。

身近な例で考えると、宅配便の「不在連絡票」や「配達完了メール」に似ています。荷物(データ)そのものではなく、「届きました」「届け先が見つかりませんでした」といった状況を知らせてくれる仕組みです。

ICMP を使う代表的なコマンドが pingtraceroute です。上のツールで▶ボタンを押すと、問いかけと返事のやり取りや、エラーが通知される流れを確認できます。シナリオを切り替えて3つの使い方を見比べてみてください。

📡
ping/tracerouteの仕組み

ping は「相手に届くか」を確かめるコマンドです。仕組みはシンプルです。
Echo Request:「そこにいますか?」と問いかけるメッセージを送る
Echo Reply:相手が「ここにいますよ」と返事を返す
往復時間(RTT):送信から返事までの時間で、通信の速さや安定性が分かる

traceroute は「相手までどのルータを通るか」を1台ずつたどるコマンドです。鍵になるのが TTL(Time To Live=パケットの寿命)です。TTL はルータを1台通るたびに1ずつ減り、0になるとそのルータがパケットを捨て、ICMP の Time Exceeded(時間超過)を送信元に返します。

そこで TTL を 1, 2, 3 …と1ずつ増やしながら送ると、1台目・2台目・3台目…と順番にルータが Time Exceeded を返してくれます。これを集めれば経路がまるごと分かる、という仕掛けです。上のツールの traceroute シナリオで、TTL が減って 0 になり応答が返る流れを確認できます。

⚠️
エラー通知の役割

ICMP のもうひとつの大事な役割がエラー通知です。データを届けられないとき、ただ黙って捨てると送信元は理由が分からず待ち続けてしまいます。そこで ICMP が「なぜ届かなかったか」を送信元に知らせます。

代表的なエラー通知メッセージには次のようなものがあります。
Destination Unreachable(宛先到達不能):その宛先へは届けられないと知らせる
Time Exceeded(時間超過):TTL が 0 になりパケットを捨てたと知らせる
Redirect(経路変更):もっと良い経路があると教える

身近な例で考えると、手紙が届かなかったときに郵便局が「あて先不明で配達できませんでした」と差出人に戻してくれるのと同じです。理由が分かるから、送り直したり住所を確認したりできます。上のツールのエラー通知シナリオで、ルータが Destination Unreachable を返す流れを確認できます。

📌
ICMPメッセージの種類

送信元宛先/ルータEcho Request / TimestampEcho Reply / Timestamp ReplyDestination Unreachable / Time Exceeded

ICMP のメッセージは大きく「問い合わせ系」と「エラー通知系」の2種類に分類できます。それぞれ目的が異なるため、受け取ったときの対応も変わります。

メッセージ名種別役割・意味
Echo Request問い合わせping の「そこにいる?」。相手の生存確認
Echo Reply問い合わせping の「ここにいるよ」。到達確認のOK応答
Destination Unreachableエラーその宛先には届けられないと通知
Time ExceededエラーTTLが0になりパケットを破棄したと通知
Redirect情報より良い経路があることを送信元に通知

なぜICMPはTCPやUDPと別になっているのか。TCPとUDPはデータを運ぶための仕組みですが、ICMPはデータを運ぶのではなくネットワーク自体の状態を知らせる制御専用です。郵便で言えば、手紙(TCP/UDP)と、配達状況を知らせる不在連絡票や追跡メール(ICMP)は別物、と考えると分かりやすいです。

📌
TTLの仕組みを深掘り

送信元TTL=3R1TTL-1=2R2TTL-1=1R3TTL=0→破棄Time Exceeded を送信元へ返す

TTL(Time To Live=パケットの生存時間)とは、パケット(=送られるデータのかたまり)がネットワーク上で「何台のルータを通過できるか」を表す数値です。ルータ(=ネットワーク間でデータを中継する機器)を1台通るたびにTTLは1ずつ減り、0になった時点でそのルータがパケットを破棄します。

なぜTTLが必要なのか。誤った経路情報があると、パケットがネットワーク中をぐるぐる回り続ける(ルーティングループ)ことがあります。TTLがなければ、このパケットが永遠に流れ続けてネットワークが詰まってしまいます。TTLは「通過できるルータ数の上限」として働き、迷子のパケットを自動的に処分する仕組みです。

身近な例で考えると、回覧板を回すとき「最大10軒まで」と決めておくようなものです。宛先が見つからなくてもいつか止まるので、回覧板が無限に回り続けることがありません。上のツールの traceroute シナリオで、TTLが減って0になったルータが Time Exceeded を返す様子を確認してみてください。

練習問題

🎯
基本情報技術者 練習問題

Q1.ICMPの説明として最も適切なものはどれか。
A.メールを受信するためのプロトコル
B.通信の到達確認やエラー通知を行うネットワーク層のプロトコル
C.IPアドレスを自動で割り当てるプロトコル
D.ドメイン名をIPアドレスに変換するプロトコル
Q2.pingコマンドで使われるICMPメッセージの組合せとして正しいものはどれか。
A.DISCOVER と OFFER
B.Echo Request と Echo Reply
C.SYN と ACK
D.GET と 200 OK
Q3.tracerouteが経路上のルータを特定できる仕組みとして正しいものはどれか。
A.TTLを1ずつ増やし、寿命切れのルータが返すTime Exceededを集める
B.すべてのルータにメールを送って返信を待つ
C.DNSにすべての経路を問い合わせる
D.DHCPサーバから経路情報をもらう

関連コンテンツ