ARP
ホストが IP アドレスから、必要な MAC アドレスを知る方法。
要求
28 バイトで「192.168.1.1 は誰?」と尋ねます。
フレーム全体
28 バイトの意味は「私は 192.168.1.20(MAC は 3C:22:FB:AA:01:20)。192.168.1.1 の持ち主は、MAC を教えて」です。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| ハードウェア種別 | 0–1 バイト目 | 0x0001 = Ethernet | 使っているリンク層です。1 = Ethernet。ARP は汎用に設計されているので、どの種類のハードウェアアドレスが続くかを明記します。 |
| プロトコル種別 | 2–3 バイト目 | 0x0800 = IPv4 | 解決しようとしているネットワーク層のアドレスで、EtherType の番号を使います。0x0800 = IPv4。 |
| ハードウェアアドレス長 | 4 バイト目 | 6 | ハードウェアアドレスの長さ(バイト)。MAC なら 6。 |
| プロトコルアドレス長 | 5 バイト目 | 4 | プロトコルアドレスの長さ(バイト)。IPv4 なら 4。 |
| オペレーション | 6–7 バイト目 | 1 = 要求 | 1 = 要求(「この IP は誰?」)、2 = 応答(「私です、MAC はこれ」)。 |
| 送信者 MAC | 8–13 バイト目 | 3C:22:FB:AA:01:20 | 問い合わせ側の MAC です。相手はこれをキャッシュして、聞き返さずに答えられます。 |
| 送信者 IP | 14–17 バイト目 | 192.168.1.20 | 問い合わせ側の IP。 |
| ターゲット MAC | 18–23 バイト目 | 00:00:00:00:00:00 (?) | まだ不明。それを知りたいので、要求では全部ゼロです。 |
| ターゲット IP | 24–27 バイト目 | 192.168.1.1 | 尋ねている IP。ここではルータです。 |
概要
Ethernet フレームは MAC で宛先を指定しますが、アプリケーションは IP アドレスを使います。隣へ最初のパケットを送る前に、ホストは ARP(Address Resolution Protocol)で LAN 全体に「この IP は誰?」と尋ね、答えを覚えます。
ARP は小さく、相手を信頼しきった設計です。誰でも答えられ、認証はありません。そのため ARP スプーフィングは LAN 内攻撃の定番になり、IPv6 では Neighbor Discovery に置き換えられた理由のひとつです。
基本情報
- 層
- リンク層とネットワーク層の間
- サイズ
- 28 バイト(IPv4 over Ethernet)
- EtherType
- 0x0806
- 要求の宛先
- FF:FF:FF:FF:FF:FF
- 規格
- RFC 826
応答
同じ並びで、役割を入れ替えたものです。
フレーム全体
送信者とターゲットを入れ替え、空欄を埋めた同じ 28 バイトです。問い合わせた側は 192.168.1.1 → 00:1A:2B:3C:4D:5E を ARP キャッシュに記録します。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| ハードウェア種別 | 0–1 バイト目 | Ethernet | 要求と同じです。 |
| プロトコル種別 | 2–3 バイト目 | IPv4 | 要求と同じです。 |
| ハードウェアアドレス長 | 4 バイト目 | 6 | 要求と同じです。 |
| プロトコルアドレス長 | 5 バイト目 | 4 | 要求と同じです。 |
| オペレーション | 6–7 バイト目 | 2 = 応答 | 2 = 応答。要求と違い、応答は問い合わせた相手へ直接ユニキャストで返します。 |
| 送信者 MAC | 8–13 バイト目 | 00:1A:2B:3C:4D:5E | 答えです。ルータの MAC。問い合わせた側が知りたかったものです。 |
| 送信者 IP | 14–17 バイト目 | 192.168.1.1 | 尋ねられた IP です。 |
| ターゲット MAC | 18–23 バイト目 | 3C:22:FB:AA:01:20 | 最初に問い合わせた側の MAC が入ります。 |
| ターゲット IP | 24–27 バイト目 | 192.168.1.20 | 最初に問い合わせた側の IP。 |
やり取り
質問、答え、そしてその答えを必要としたパケット。
やり取りの全体
ARP は 1 つの LAN の中で IP アドレスと MAC アドレスをつなぐ糊です。質問はブロードキャスト、答えはユニキャスト、結果はキャッシュします。
1192.168.1.1 は誰?
ノート PC はルータへパケットを送りたいのですが、IP しか知りません。LAN 上の全ホストへ ARP 要求をブロードキャストします。
2192.168.1.1 は 00:1A:... にいます
192.168.1.1 の持ち主だけが、問い合わせた相手へ直接答えます。ノート PC は対応表を(通常は数分間)キャッシュし、次回は聞き直しません。
3いよいよ本来のパケット
MAC が分かったので、本来の IP パケットを運ぶ Ethernet フレームをルータ宛にできます。
使われる場面
- あらゆる IPv4 LAN。隣への最初のパケットのほぼ直前に動きます
- Gratuitous ARP は、新しい / 移動したアドレスの通知や IP 重複の検出に使われます
- `arp -a` で手元のマシンのキャッシュを見られます
つまずきやすい点
- ARP は 1 つのブロードキャストドメインの中だけで動きます。ルータの向こうのホストに対しては、遠くのホストではなくルータの MAC を尋ねます。
- 機器交換のあとにキャッシュが古いままだと、「しばらく動いて、そのあと失敗する」症状になります。キャッシュを消すと直ります。
- 応答は認証なしで受け入れられるため、信頼できない LAN では ARP スプーフィングで通信を横取りされ得ます。
出典・規格
- RFC 826: An Ethernet Address Resolution Protocol