Baud
プロトコル一覧

ARP

ホストが IP アドレスから、必要な MAC アドレスを知る方法。

要求

28 バイトで「192.168.1.1 は誰?」と尋ねます。

ARP 要求・28 バイト04812162024000000000001000000010800001000000000000006000001100400000100000000000001000000013C001111002200100010FB11111011AA1010101001000000012000100000C011000000A81010100001000000011400010100000000000000000000000000000000000000000000000000000000000000C011000000A81010100001000000010100000001ハードウェア種別プロトコル種別ハードウェアアド…プロトコルアドレ…オペレーション送信者 MAC送信者 IPターゲット MACターゲット IPフィールドをクリックして中身を見る

フレーム全体

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 はこれ」)。
送信者 MAC8–13 バイト目3C:22:FB:AA:01:20問い合わせ側の MAC です。相手はこれをキャッシュして、聞き返さずに答えられます。
送信者 IP14–17 バイト目192.168.1.20問い合わせ側の IP。
ターゲット MAC18–23 バイト目00:00:00:00:00:00 (?)まだ不明。それを知りたいので、要求では全部ゼロです。
ターゲット IP24–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

応答

同じ並びで、役割を入れ替えたものです。

ARP 応答・28 バイト048121620240000000000010000000108000010000000000000060000011004000001000000000000020000001000000000001A000110102B001010113C001111004D010011015E01011110C011000000A810101000010000000101000000013C001111002200100010FB11111011AA1010101001000000012000100000C011000000A81010100001000000011400010100ハードウェア種別プロトコル種別ハードウェアアド…プロトコルアドレ…オペレーション送信者 MAC送信者 IPターゲット MACターゲット IPフィールドをクリックして中身を見る

フレーム全体

送信者とターゲットを入れ替え、空欄を埋めた同じ 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 = 応答。要求と違い、応答は問い合わせた相手へ直接ユニキャストで返します。
送信者 MAC8–13 バイト目00:1A:2B:3C:4D:5E答えです。ルータの MAC。問い合わせた側が知りたかったものです。
送信者 IP14–17 バイト目192.168.1.1尋ねられた IP です。
ターゲット MAC18–23 バイト目3C:22:FB:AA:01:20最初に問い合わせた側の MAC が入ります。
ターゲット IP24–27 バイト目192.168.1.20最初に問い合わせた側の IP。

やり取り

質問、答え、そしてその答えを必要としたパケット。

ノート PC192.168.1.20ルータ192.168.1.1ARP requestto FF:FF:FF:FF:FF:FFARP replyunicastIP packetdst MAC 00:1A:...cache: empty192.168.1.1 = 00:1A:2B:3C:4D:5E

やり取りの全体

ARP は 1 つの LAN の中で IP アドレスと MAC アドレスをつなぐ糊です。質問はブロードキャスト、答えはユニキャスト、結果はキャッシュします。

  1. 1192.168.1.1 は誰?

    ノート PC はルータへパケットを送りたいのですが、IP しか知りません。LAN 上の全ホストへ ARP 要求をブロードキャストします。

  2. 2192.168.1.1 は 00:1A:... にいます

    192.168.1.1 の持ち主だけが、問い合わせた相手へ直接答えます。ノート PC は対応表を(通常は数分間)キャッシュし、次回は聞き直しません。

  3. 3いよいよ本来のパケット

    MAC が分かったので、本来の IP パケットを運ぶ Ethernet フレームをルータ宛にできます。

使われる場面

  • あらゆる IPv4 LAN。隣への最初のパケットのほぼ直前に動きます
  • Gratuitous ARP は、新しい / 移動したアドレスの通知や IP 重複の検出に使われます
  • `arp -a` で手元のマシンのキャッシュを見られます

つまずきやすい点

  • ARP は 1 つのブロードキャストドメインの中だけで動きます。ルータの向こうのホストに対しては、遠くのホストではなくルータの MAC を尋ねます。
  • 機器交換のあとにキャッシュが古いままだと、「しばらく動いて、そのあと失敗する」症状になります。キャッシュを消すと直ります。
  • 応答は認証なしで受け入れられるため、信頼できない LAN では ARP スプーフィングで通信を横取りされ得ます。

出典・規格

  • RFC 826: An Ethernet Address Resolution Protocol

関連するプロトコル