この記事でわかること
- なぜIPアドレスだけでは「実際の配送」ができないのか
- ARP(Address Resolution Protocol)とは何か
- ARPリクエスト(ブロードキャスト)とARPリプライ(ユニキャスト)の動作
- ARPキャッシュとは何か、なぜ有効期限があるのか
- 宛先が別のネットワークにある場合のARPの使われ方
arp -aコマンドでARPキャッシュを確認する方法
はじめに
IPアドレスはルーターがパケットの転送先を判断するために使います。MACアドレスはスイッチが同じネットワーク内でフレームを届けるために使います——それぞれ別の記事で学んできました。
2つのアドレスは別々に説明してきましたが、実際の通信では同じパケットを届けるために両方が連携しています。ではどこでどうつながっているのか。
192.168.1.20 のパソコンにパケットを送りたい。IPアドレスはわかっています。でも実際にケーブルの上にデータを流すとき、スイッチはIPアドレスではなくMACアドレスを見て転送先を決めます。IPアドレスがわかっているからといって、MACアドレスが自動でわかるわけではありません。
この「IPアドレスはわかっているが、MACアドレスがわからない」という問題を解決するのが ARP です。インターネット層とネットワークインターフェース層の橋渡し役を担っています。
2つのアドレスをおさらいする
ARPの話に入る前に、2つのアドレスの役割の違いを整理しておきます。
| IPアドレス | MACアドレス | |
|---|---|---|
| 使われる層 | インターネット層(第3層) | ネットワークインターフェース層(第2層) |
| 役割 | ネットワーク間のパケット転送 | 同一ネットワーク内のフレーム配送 |
| 性質 | 論理的・設定で変更できる | 物理的・NICに原則固定 |
| 住所の例え | 都市・番地(どの街の誰か) | 席番号(このフロアのどの席か) |
IPアドレスは「どのネットワークのどのデバイスか」を示す論理的な住所です。ルーターはこれを見てパケットを転送します。MACアドレスは「このネットワーク内の実際にどのNICか」を示す物理的な識別子です。スイッチはこれを見てフレームを配送します。
同じデータを届けるのに2種類のアドレスが必要で、その橋渡しをARPが担います。
ARPとは何か
ARP を英単語ひとつひとつに分解してみましょう。
- Address(アドレス):住所・アドレス
- Resolution(レゾリューション):「解決」「変換」「はっきりさせること」という意味。「画面解像度(screen resolution)」と同じ単語で、「ぼんやりしていたものを細かくはっきりさせる」というニュアンスがあります
- Protocol(プロトコル):「通信の取り決め・規約」という意味
合わせると「アドレスを解決(変換)するための通信の取り決め」です。
IPアドレスという「わかっている情報」をもとに、MACアドレスという「わからない情報」を問い合わせて手に入れる——その手順を定めたのがARPです。
ARPリクエスト——フロア全員に向けて声をあげる
192.168.1.20 のMACアドレスを知りたいとき、パソコンは ARPリクエスト というメッセージをネットワーク上に流します。
このとき使われるのが ブロードキャスト(Broadcast) です。
- Broad(ブロード):「広い」「広範囲の」という意味
- Cast(キャスト):「投げる」「放送する」という意味。テレビのブロードキャスト放送と同じ語源です
合わせて「広く一斉に投げかける」——同じネットワーク内の全デバイスに向けて一斉に送ることです。
オフィスのフロアで声を張り上げて叫ぶ場面を想像してください。
「社員番号 192.168.1.20 の方はいますか?席を教えてください。192.168.1.10 より」
この声はフロア(ネットワーク)にいる全員の耳に届きます。ARPリクエストも同じで、スイッチは全ポートにフレームを流します。ブロードキャストを示すMACアドレスは FF:FF:FF:FF:FF:FF という特殊な値で、スイッチはこの値を見ると全ポートへの転送をします。
ARPリクエストに書かれている内容はこうなっています。
送信元IPアドレス :192.168.1.10 (自分のIP)
送信元MACアドレス:AA:BB:CC:11:22:33(自分のMAC)
宛先IPアドレス :192.168.1.20 (MACを調べたい相手のIP)
宛先MACアドレス :FF:FF:FF:FF:FF:FF(ブロードキャスト=全員宛て)
ARPリプライ——「私です!」
ARPリクエストを受け取ったデバイスはそれぞれ「問われているIPアドレスは自分のものか?」を確認します。
192.168.1.20 のパソコンは「これは自分のIPだ」と認識し、ARPリプライ を返します。今度はブロードキャストではなく、問い合わせてきた相手にだけ直接返信します(ユニキャスト)。フロアで声を聞いた本人だけが「私です!席はこちらです」と手を挙げて答えるイメージです。
送信元IPアドレス :192.168.1.20 (自分のIP)
送信元MACアドレス:DD:EE:FF:44:55:66(自分のMAC) ← これが欲しかった情報
宛先IPアドレス :192.168.1.10 (問い合わせ元のIP)
宛先MACアドレス :AA:BB:CC:11:22:33(問い合わせ元のMAC)
ARPリプライを受け取った 192.168.1.10 のパソコンは「192.168.1.20 のMACアドレスは DD:EE:FF:44:55:66 だ」とわかりました。あとはこのMACアドレスを宛先に書いてフレームを送るだけです。
ARPキャッシュ——「次回からメモを見る」
毎回パケットを送るたびにARPリクエストをブロードキャストしていたら、ネットワークに不要な負荷がかかります。そこで一度調べたIPアドレスとMACアドレスの対応は ARPキャッシュ に保存されます。
- Cache(キャッシュ):もとは「隠し場所」「貯蔵庫」という意味のフランス語由来の言葉。コンピューターでは「一時保存領域」を指します。ブラウザのキャッシュと同じ言葉です
フロアの例えで言えば「あの方は3列目の左から2番目の席だ」とメモ帳に書いておくようなものです。次回送りたいときはメモを見ればすぐわかります。
ただし、ARPキャッシュには有効期限があります。Windowsでは2〜10分程度、LinuxやMacでは30秒〜数分でエントリが消えます。
なぜ期限を設けるのかというと、IPアドレスとMACアドレスの対応関係は変わることがあるためです。DHCPによって別のデバイスに同じIPアドレスが割り当てられたとき、古いキャッシュが残ったままでは誤った相手にフレームを送ってしまいます。適度に期限を切ることで、常に正しい情報を使い続けられます。
別のネットワーク宛てのとき——調べる相手が変わる
ここが特に重要なポイントです。
宛先がインターネット上のサーバーなど「別のネットワーク」にある場合、前回の記事で学んだ通りパソコンはデフォルトゲートウェイにパケットを渡します。このとき、ARPで調べる相手は最終的な宛先ではありません。
「デフォルトゲートウェイのMACアドレス」 を調べます。
なぜか。デフォルトゲートウェイ(ルーター)は自分と同じネットワーク内にいるので、ブロードキャストで問い合わせできます。一方、最終的な宛先サーバーは別のネットワークにいるので、ブロードキャストは届きません。フロアの壁の向こうに向かって声を張り上げても、聞こえないのと同じです。
Googleのサーバー(8.8.8.8)にアクセスするときの動きを追ってみましょう。
① パソコンが判断
「8.8.8.8 は別のネットワーク → デフォルトゲートウェイへ」
② ARPリクエストを送信
「192.168.1.1(デフォルトゲートウェイ)のMACアドレスは?」
③ ルーターがARPリプライを返す
「私のMACは GG:HH:II:77:88:99 です」
④ Ethernetフレームを組み立てて送信
送信元IP :192.168.1.10(自分)
宛先IP :8.8.8.8(Googleサーバー)← IPは最終宛先のまま変わらない
送信元MAC :AA:BB:CC:11:22:33(自分のMAC)
宛先MAC :GG:HH:II:77:88:99(ルーターのMAC)← MACはルーター宛て
IPアドレスは不変、MACアドレスはホップごとに変わる
上の例で気づいてほしいことがあります。フレームの中に書かれた IPアドレスは最終宛先のまま変わりません。しかし MACアドレスはルーターを1台経由するたびに書き換えられます。
パケットが旅をするとき、IPアドレスは「最終目的地の住所」として最初から最後まで保持されます。その一方でMACアドレスは「次のホップ先への配送ラベル」として、ホップごとに張り替えられていきます。
パソコン → ルーターA → ルーターB → Googleサーバー
[パソコン→ルーターA間]
宛先IP:8.8.8.8 宛先MAC:ルーターAのMAC
[ルーターA→ルーターB間]
宛先IP:8.8.8.8 宛先MAC:ルーターBのMAC ← MACが書き換わる
[ルーターB→Googleサーバー間]
宛先IP:8.8.8.8 宛先MAC:GoogleサーバーのMAC ← また書き換わる
この仕組みのおかげで、IPアドレスという「大局的な目的地」とMACアドレスという「次の一手」を使い分けながらパケットが届きます。ARPはそのMACアドレスを各ホップで調べる役割を担っています。
ARPキャッシュをコマンドで確認してみよう
現在のARPキャッシュは次のコマンドで確認できます。
Windowsの場合
arp -a
次のような出力が得られます。
インターフェイス: 192.168.1.10
インターネット アドレス 物理アドレス 種類
192.168.1.1 aa-bb-cc-dd-ee-ff 動的
192.168.1.20 11-22-33-44-55-66 動的
192.168.1.255 ff-ff-ff-ff-ff-ff 静的
- 動的(Dynamic):ARPリクエスト/リプライで自動的に学習したエントリ。有効期限が過ぎると削除される
- 静的(Static):手動で設定したエントリ、またはブロードキャストアドレスなどのシステム固定エントリ
192.168.1.1 のエントリはデフォルトゲートウェイ(自宅ルーター)です。直前にインターネット通信をしていれば、必ず登録されているはずです。
Macの場合
arp -a
router.local (192.168.1.1) at aa:bb:cc:dd:ee:ff on en0
192.168.1.20 at 11:22:33:44:55:66 on en0
Linuxの場合
ip neigh show
192.168.1.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff REACHABLE
192.168.1.20 dev eth0 lladdr 11:22:33:44:55:66 STALE
ip neigh show では各エントリに状態が表示されます。
- REACHABLE(リーチャブル):「到達可能」という意味。最近通信があり、MACアドレスが有効なことが確認されている状態
- STALE(ステール):「古くなった」という意味。しばらく通信がなく、次に使うときに再確認が必要な状態
- FAILED(フェイルド):ARPリクエストを送ったが返答がなく、解決できなかった状態
arp -a を実行するタイミングや使用中のアプリによって、登録されているエントリの数は変わります。インターネットを活発に使っているときに実行すると、デフォルトゲートウェイのエントリが高確率でREACHABLE状態で確認できます。
まとめ
- ARP(Address Resolution Protocol) はIPアドレスからMACアドレスを調べる仕組み。インターネット層とネットワークインターフェース層を橋渡しする
- 同じネットワーク内では、ARPリクエスト(ブロードキャスト) でMACアドレスを問い合わせ、ARPリプライ(ユニキャスト) で回答を得る
- 一度調べた対応関係は ARPキャッシュ に一時保存される。IPアドレスの再割り当てに備えて有効期限が設けられている
- 宛先が別のネットワークの場合、ARPで調べるのは最終宛先ではなく デフォルトゲートウェイのMACアドレス
- パケットの旅を通じて IPアドレスは変わらず、MACアドレスはホップごとに書き換わる。IPは最終目的地、MACは次の1ホップへのラベル
- コマンドで確認:
arp -a(Windows/Mac/Linux)またはip neigh show(Linux)