ネットワークの教科書NETWORK

第3章 データが届くしくみ3-2コース全体 19回中10本目

入門読了 約9分

ARP ― IPアドレスからMACアドレスを調べる

IPアドレスは分かっているのにMACアドレスが分からない。この状況を解決するARPの仕組みを、リクエスト・リプライの流れからゲートウェイ宛の挙動まで掘り下げます。

結論

同じネットワーク内でフレームを渡すにはMACアドレスが要る。それをIPから調べるのがARP

同じネットワーク内の相手にデータを渡すとき、実際に使われる宛先はMACアドレスです。しかし普段扱っているのは IPアドレスの方で、相手のMACアドレスは分かりません。この「IPは分かるがMACが分からない」を解決するのがARP(Address Resolution Protocol、アドレス解決プロトコル)です。

この記事の核心ARPリクエスト(問い合わせ)はブロードキャストで全員に届き、ARPリプライ(応答)は該当する1台だけがユニキャストで返します。そして別ネットワーク宛の通信では、ARPで尋ねる相手は最終的な宛先ではなくデフォルトゲートウェイです。この2点を押さえれば、ARPはほぼ理解できたことになります。
前提

なぜMACアドレスへの変換が必要か

IPアドレスとMACアドレスの役割の違いは2-1 MACアドレスとIPアドレスの違いで説明した通りです。第3層(ネットワーク層)はIPアドレスで最終的な宛先を決めますが、実際にフレームを渡すのは 第2層(データリンク層)で、そこで使われるのはMACアドレスです。

つまり「IPアドレスで宛先を決める層」と「実際に渡す層」が違うため、決めたIPアドレスを渡す直前にMACアドレスへ 変換する橋渡し役が必要になります。それがARPです。

ARPが調べられるのは、自分と同じネットワーク(同じ第2層のセグメント)にいる相手のMACアドレスだけです。 ブロードキャストが届く範囲を越えては使えません。この制約が、後述の「ゲートウェイ宛のときは何を聞くか」に直結します。
しくみ

ARPの流れ:リクエストはブロードキャスト、リプライはユニキャスト

PC(192.168.10.25)が、同じネットワーク内のゲートウェイ(192.168.10.1)のMACアドレスを調べる例で見ていきます。

  1. 1

    ARPリクエストをブロードキャストする

    「192.168.10.1 のMACアドレスを教えてください」という問い合わせを、宛先MAC FF:FF:FF:FF:FF:FF で送る。同じネットワーク内の全員に届く。

  2. 2

    該当する機器だけが判断する

    問い合わせを受け取った機器は、自分宛て(自分のIPアドレスへの質問)かどうかを確認する。違えば何もせず無視する。

  3. 3

    該当する機器だけがARPリプライを返す

    「私です。MACアドレスは AC:DE:48:AA:BB:CC です」という返信を、問い合わせ元のPCだけにユニキャストで返す。

PC192.168.10.25① ARPリクエスト(ブロードキャスト)宛先MAC: FF:FF:FF:FF:FF:FF② ARPリプライ(ユニキャスト)宛先MAC: PCのMACゲートウェイ192.168.10.1ホストB192.168.10.30対象外 → 無視ホストC192.168.10.40対象外 → 無視
ARPリクエストは「192.168.10.1のMACは誰ですか」と宛先MAC「FF:FF:FF:FF:FF:FF」のブロードキャストで問い合わせ、ネットワーク内の全員に届く。該当するIPアドレスを持つ機器(ここではゲートウェイ)だけが「私です」とユニキャストでARPリプライを返し、他の機器は無視する。

全員に聞いて、該当者だけが答える。この非対称さ(ブロードキャストで聞いてユニキャストで返す)がARPの動き方です。

効率化

ARPテーブル(キャッシュ)

一度調べたIPアドレスとMACアドレスの対応は、機器の中にARPテーブル(ARPキャッシュ)として保持されます。 同じ相手と通信するたびにARPリクエストをやり直していては効率が悪いので、一度解決した結果を使い回すためです。

arp -aARPテーブルの内容を見る
$ arp -a
? (192.168.10.1) at ac:de:48:aa:bb:cc [ether] on eth0
? (192.168.10.30) at ac:de:48:dd:ee:ff [ether] on eth0

1行の中身を分解すると、次のようになります。

表示例意味
?ホスト名(逆引きできないと ? のまま)
(192.168.10.1)IPアドレス
at ac:de:48:aa:bb:cc対応するMACアドレス
[ether]アドレスの種類(Ethernet)
on eth0このエントリを学習したネットワークインタフェース

ARPテーブルには有効期限がある

ARPテーブルのエントリは、記録したらずっと残るわけではありません。一定時間使われないと自動的に消えます(例えばCiscoルータの初期設定では4時間)。期限が切れると、次にそのIPアドレスと通信するときは、もう一度 ARPリクエストからやり直します。

有効期限があるのは、対応関係が変わることがあるからです。ネットワークカードの交換でMACアドレスが変わったり、 DHCPによって同じIPアドレスが別の機器に割り当てられたりすると、古い対応のままでは間違った相手にフレームが 届いてしまいます。
つまずきやすい点

ゲートウェイ宛のときは何を聞くか

別ネットワークにある相手と通信するとき、混乱しやすい点があります。ARPで尋ねるのは最終的な宛先のMACアドレスではなく、デフォルトゲートウェイのMACアドレスだということです。

理由は「なぜMACアドレスへの変換が必要か」で触れた制約の通りです。ARPは同じネットワーク内でしか使えません。 最終的な宛先が別ネットワークにいる場合、PCはそのMACアドレスを直接調べる方法を持たず、まず自分と同じ ネットワーク内にいるデフォルトゲートウェイにフレームを渡す必要があります。だからARPで尋ねる相手もゲートウェイになります。 宛先が同一ネットワークかどうかの判定自体は3-1 デフォルトゲートウェイで扱っています。

宛先の場所ARPで尋ねる相手理由
同じネットワーク内
(例:192.168.10.30)
宛先そのもの
192.168.10.30
直接フレームを渡せるので、宛先自身のMACが必要
別ネットワーク
(例:203.0.113.50)
デフォルトゲートウェイ
192.168.10.1
別ネットワークには直接渡せないので、中継してくれるゲートウェイのMACが必要
宛先MACゲートウェイのMAC宛先IP203.0.113.50(サーバ)同一ネットワーク複数ネットワークを経由PC192.168.10.25ゲートウェイ192.168.10.1サーバ203.0.113.50✕ 直接ARPできない
サーバ宛の通信でも、PCが実際にARPで尋ねるのは同じネットワーク内にいるゲートウェイのMAC。フレームの宛先IPは最後まで203.0.113.50(サーバ)のままだが、宛先MACはゲートウェイのものになる。

ここで重要なのは、ARPで尋ねる相手(ゲートウェイ)と、パケットの宛先IPアドレス(サーバ)は別物だということです。 IPヘッダの宛先IPは最後まで書き換わらずサーバのままですが、Ethernetヘッダの宛先MACだけがゲートウェイのものになります。 複数のルータを経由するときに宛先MACが区間ごとに書き換わる話は2-1で扱った内容と同じしくみです。

応用

GARP(Gratuitous ARP)

ここまでのARPは「相手のMACアドレスを尋ねる」動きでしたが、GARP(Gratuitous ARP)は自分から 自分のIPアドレスについてARPを送信する仕組みです。主に2つの用途があります。1つは、同じIPアドレスを使う 機器が既にいないかを確認する重複IPアドレスの検知(起動時に自分のIPアドレス宛てにARPを送り、 応答があれば重複と分かる)。もう1つは、MACアドレスが変わったことを周囲に知らせて、他の機器のARPテーブルを 有効期限を待たずに更新させる用途です。

練習

練習問題(全5問)

選んでから「採点する」を押すと、解説つきで答え合わせができます。

Q1ARPリクエストの送り方は?
Q2ARPリプライの送り方は?
Q3192.168.10.25/24 のPCが、別ネットワークにある 203.0.113.50 のサーバと通信するとき、PCがARPで尋ねるのは誰のMACアドレスか?
Q4ARPテーブル(キャッシュ)の説明として正しいものは?
Q5GARP(Gratuitous ARP)の用途として正しいものは?
次の回

コースを読み進める