Mímisbrunnr知恵の泉

← コンピュータネットワーク 一覧

🎓 レベル:標準 | 重要度:A(必須) 📎 前提:ルーティングの基礎

要点(BLUF)

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です。ここが「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 ExceededTTLが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です。安全装置を診断ツールに転用した美しい例です。

⚠️ よくある誤解

対応 lab

関連