🎓 レベル:標準 | 重要度:A(必須) 📎 前提:ルーティングの基礎
要点(BLUF)
- ARPは「このIPの持ち主のMACは?」を同一LANにブロードキャストで問い合わせ、IP→MACの対応を解決します。L2へ渡すために必須。
- ICMPはIPの「連絡用プロトコル」で、到達不能やTTL超過などのエラー通知と、ping(エコー)/tracerouteの診断に使われます。
- どちらも普段は裏方ですが、トラブルシュートでは最初に観察する基本ツールです。
ARP:IPは分かったがMACが要る
パケットをL2フレームに包むには、次ホップのMACが必要です。しかし手元にあるのはIPだけ。そこでARPが橋渡しします。
graph TD A["PC-A: 192.168.1.10 が 192.168.1.20 へ送りたい"] B["ARP要求をブロードキャスト『192.168.1.20 は誰? MACを教えて』"] C["PC-B: 192.168.1.20 が自分宛と気づく"] D["ARP応答をユニキャスト『私のMACはこれ』"] E["A はIP→MAC対応をARPキャッシュに保存し送信"] A --> B --> C --> D --> E
- ARP要求は宛先MAC
FF:FF:FF:FF:FF:FF(ブロードキャスト)で全員に届きます。 - 該当IPの持ち主だけがARP応答をユニキャストで返します。
- 結果はARPキャッシュに一定時間保存され、毎回問い合わせないようにします。
別ネットワーク宛ての場合、ARPで解決するのは最終宛先ではなくデフォルトゲートウェイ(ルータ)のMACです。ここが「IPは最終目的地、MACは次の中継」の実体です。
# Linux: ARPキャッシュを見る
ip neigh show
# 例: 192.168.1.20 dev eth0 lladdr 00:1a:2b:3c:4d:5e REACHABLE
ICMP:到達性とエラーの通知
ICMPはデータを運ぶためではなく、IPの状況を知らせるために存在します。代表的なメッセージ:
| タイプ | 意味 | 使われ方 |
|---|---|---|
| Echo Request/Reply | 折り返し確認 | ping |
| Destination Unreachable | 宛先到達不能 | 経路/ポート無し通知 |
| Time Exceeded | TTLが0になった | traceroute |
ping:届くか
エコー要求を送り、応答が返れば往復できると分かります。
ping -c 3 8.8.8.8
# 64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=12.3 ms
traceroute:どこを通るか
TTLを1,2,3…と増やしながら送ると、各ルータがTTL=0でTime Exceededを返すため、経路上のルータが1つずつ判明します。
graph LR S["送信元"] R1["ルータ1(TTL=1で破棄→通知)"] R2["ルータ2(TTL=2で破棄→通知)"] D["宛先(エコー応答)"] S -->|"TTL=1"| R1 S -->|"TTL=2"| R2 S -->|"TTL=3"| D
traceroute 8.8.8.8
# 1 192.168.1.1 1.2 ms
# 2 10.0.0.1 5.4 ms
# 3 8.8.8.8 12.1 ms
なぜTTLがあるのか(設計の直観)
ルーティングの不整合(ループ)が起きると、パケットが永久に回り続けます。L2にはTTLがなくSTPで物理的にループを断ちましたが、L3では各ルータがTTLを1減らし、0になったら破棄することで、ループに落ちたパケットを必ず消します。その「破棄しました」という通知がICMP Time Exceededで、それを逆手に取った診断がtracerouteです。安全装置を診断ツールに転用した美しい例です。
⚠️ よくある誤解
- 「ARPはルータを越える」ではない。ARPはブロードキャストなので同一LAN内に閉じます。別ネットワークへはゲートウェイのMACを解決して渡します。
- 「pingが通らない=経路が壊れている」ではない。多くの機器がICMPをポリシーで遮断します。到達性の一次情報にはなりますが、ICMPの無応答だけで断定は禁物です。
- 「ICMPはTCP/UDPの上で動く」ではない。ICMPはIPの直上(L3の補助)で動き、ポート番号を持ちません。
対応 lab
[[networking-study/labs/03-04_ttl_trace.py]]— TTLを変えたときに応答するホップの対応を擬似的に示す
関連
- 前:
[[03-03_ルーティングの基礎]]/次:[[03-05_IPv6アドレス体系]] - MACの素性:
[[02-01_イーサネットとMACアドレス]]/トラブル切り分け:[[08-03_トラブルシューティングの体系]]