第3章 データが届くしくみ|3-2|コース全体 19本中10本目
ARPとは ― IPアドレスからMACアドレスを知る仕組み
ARPとは、
前の記事 ・3-1 デフォルトゲートウェイとは
同じネットワーク内でフレームを渡すにはMACアドレスが要る。それをIPから調べるのがARP
同じネットワーク内の相手にデータを渡すとき、実際に使う宛先はMACアドレスです。しかし、ふだん扱うのはIPアドレスなので、相手のMACアドレスは分かりません。IPアドレスから相手のMACアドレスを調べるのがARP(Address Resolution Protocol)です。日本語では、アドレス解決プロトコルと訳します。
ARPの問い合わせは、ブロードキャストでネットワーク内の全員に届きます。この問い合わせをARPリクエストと呼びます。応答を返すのは該当する1台だけで、問い合わせ元だけに送るユニキャストで返します。この応答がARPリプライです。
別ネットワーク宛の通信では、ARPで尋ねる相手は最終的な宛先ではありません。尋ねる相手はデフォルトゲートウェイです。
なぜMACアドレスへの変換が必要か
IPアドレスとMACアドレスの役割の違いは、MACアドレスとIPアドレスの記事で説明した通りです。最終的な宛先を決めるのは、ネットワーク層である第3層のIPアドレスです。一方、実際にフレームを渡すのはデータリンク層である第2層で、使われるのはMACアドレスです。
宛先を決める層と、フレームを渡す層が違うのです。そのため、IPアドレスに対応するMACアドレスを調べる仕組みが必要になります。それがARPです。
ARPが調べられるのは、自分と同じネットワークにいる相手のMACアドレスだけです。ここでの同じネットワークとは、ルータを越えずに届く範囲、つまり同じ第2層のセグメントのことです。
ブロードキャストが届く範囲の外には、ARPは使えません。この制約があるため、ゲートウェイ宛の通信では尋ねる相手が変わります。この範囲の決まり方は、衝突ドメインとブロードキャストドメインの違いで説明しています。
ARPは、第3層のIPアドレスと第2層のMACアドレスを橋渡しします。この役割から、第2層と第3層の間で働くとされます。どちらの層に分類するかは、資料によって分かれます。
なお、この節の内容はIPv4での話です。IPv6ではARPを使いません。代わりに、NDP(Neighbor Discovery Protocol)という別の仕組みでMACアドレスを調べます。
ARPの流れ:リクエストはブロードキャスト、リプライはユニキャスト
PCがゲートウェイのMACアドレスを調べる例を見ます。PCのIPアドレスは192.168.10.25です。ゲートウェイは同じネットワーク内にあり、IPアドレスは192.168.10.1です。
- 1
ARPリクエストを
ブロードキャストする PCは、「192.168.10.1 のMACアドレスを教えてください」という問い合わせを送ります。宛先MACは FF:FF:FF:FF:FF:FF です。この問い合わせは、同じネットワーク内の全員に届きます。
- 2
該当する
機器だけが 判断する 問い合わせを受け取った機器は、自分のIPアドレスへの質問かどうかを確認します。違えば無視します。
- 3
該当する
機器だけが ARPリプライを 返す 該当する機器は、「私です。MACアドレスは AC:DE:48:AA:BB:CC です」と返信します。返信は、問い合わせ元のPCだけにユニキャストで送ります。
ARPでは、問い合わせは全員に届きますが、答えるのは該当者だけです。この非対称な動き方が、ARPの特徴です。
ARPテーブル(キャッシュ)
同じ相手と通信するたびにARPリクエストをやり直していては、効率が悪くなります。そこで機器は、一度調べたIPアドレスとMACアドレスの対応を記録しておき、次からはそれを使います。この対応の一覧をARPテーブルと呼びます。ARPキャッシュとも呼びます。
$ 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 -a インターフェイス: 192.168.10.25 --- 0xb インターネット アドレス 物理アドレス 種類 192.168.10.1 ac-de-48-aa-bb-cc 動的 192.168.10.30 ac-de-48-dd-ee-ff 動的 # 表示形式はLinuxと異なりますが、内容(IPアドレスとMACアドレスの対応)は同じです。
Linuxでは、同じ表を ip neigh でも見られます。arp を含む古いコマンドと新しいコマンドの対応は、netstat・ss・digの記事にまとめています。
ARPテーブルには有効期限がある
ARPテーブルのエントリは、記録したらずっと残るわけではありません。一定時間で自動的に消えます。期限が切れた後にそのIPアドレスと通信するときは、もう一度ARPリクエストからやり直します。
期限の長さと数え方は、機器によって異なります。PCのARPキャッシュは、OSによって数十秒から数十分程度のことが多いです。例えば、macOSの既定値は20分です。
Linuxでは、期限切れのエントリがすぐには消えないこともあります。stale(古い)という状態で、しばらく残ります。
一方、Ciscoルータの初期設定では4時間です。この4時間は、使われていない時間ではありません。学習してからの経過時間で数えます。同じ有効期限でも、何を基準に数えるかは機器によって異なります。
有効期限があるのは、対応関係が変わることがあるからです。ネットワークカードを交換すれば、MACアドレスが変わります。同じIPアドレスが、DHCPで別の機器に割り当てられることもあります。
古い対応のままでは、間違った相手にフレームが届いてしまいます。なお、IPアドレスを自動で配る仕組みはDHCPです。
ゲートウェイ宛のときは何を聞くか
別ネットワークにある相手と通信するとき、ARPで尋ねるのは最終的な宛先のMACアドレスではなく、デフォルトゲートウェイのMACアドレスです。
理由は、先に触れたARPの制約です。ARPは同じネットワーク内でしか使えません。最終的な宛先が別ネットワークにいる場合、PCはそのMACアドレスを直接調べられません。
PCはまず、同じネットワーク内のデフォルトゲートウェイにフレームを渡す必要があります。だから、ARPで尋ねる相手もゲートウェイになります。宛先が同一ネットワークかどうかを判定する方法は、デフォルトゲートウェイの記事にあります。
| 宛先の | ARPで | 理由 |
|---|---|---|
| 同じネットワーク内 (例:192.168.10.30) | 宛先そのもの 192.168.10.30 | 直接フレームを渡せるので、宛先自身のMACが必要 |
| 別ネットワーク (例:203.0.113.50) | デフォルトゲートウェイ 192.168.10.1 | 別ネットワークには直接渡せないので、中継してくれるゲートウェイのMACが必要 |
ARPで尋ねる相手はゲートウェイで、パケットの宛先IPアドレスとは別物です。IPヘッダの宛先IPは、最後まで書き換わらずにサーバのままです。一方、Ethernetヘッダの宛先MACだけが、ゲートウェイのものになります。
複数のルータを経由するときは、宛先MACが区間ごとに書き換わります。これも、MACアドレスとIPアドレスの記事で説明したのと同じしくみです。
GARP(Gratuitous ARP)
ここまでのARPは、相手のMACアドレスを尋ねる動きでした。これとは別に、自分のIPアドレスについてのARPを、自分から送信する仕組みがあります。この仕組みをGARP(Gratuitous ARP)と呼びます。主に2つの用途があります。
1つは重複IPアドレスの検知です。機器は起動時に、ARPリクエストを送ります。尋ねるのは、これから使いたいIPアドレスです。このARPリクエストを、ARP Probeと呼びます。
このとき送信元IPアドレスは、まだ確定していない自分のIPではなく、0.0.0.0にします。この手順は、RFC 5227で定められています。もし誰かがそのIPアドレスをすでに使っていれば、応答が返ります。それで重複が分かります。
もう1つは、MACアドレスの変更を周囲に知らせる用途です。知らせを受けた機器は、有効期限を待たずにARPテーブルを更新します。この知らせ方を、ARP Announcementと呼びます。
ARPスプーフィング
ARPには、応答の送り主が本物かどうかを確認する仕組みがありません。機器は、応答した機器の言い分をそのまま信じます。そして、その内容をARPテーブルに記録してしまいます。
悪意のある機器が、「自分がゲートウェイです」と偽ったARP応答を送ったとします。すると、周囲の機器のARPテーブルを書き換えられます。この攻撃をARPスプーフィングと呼びます。ARPポイズニングとも呼びます。
成功すると、本来ゲートウェイ宛の通信が攻撃者の機器を経由するようになります。通信の内容を盗み見られたり、書き換えられたりするおそれがあります。具体的な攻撃手順はここでは扱いません。経路に入り込んで盗聴・改ざん・なりすましを行う攻撃は、まとめて中間者攻撃と呼びます。
スイッチのポートに接続してよいMACアドレスを制限するポートセキュリティでは、ARPスプーフィングは防げません。ARPの中身までは確認しない機能だからです。ARPスプーフィングを防ぐのは、スイッチのDynamic ARP Inspectionという機能です。DHCPスヌーピングとの関係も含めて、DHCPスヌーピングの記事で説明しています。
練習問題(全5問)
正解:ブロードキャスト
誰の
正解:ユニキャスト
ARPリクエストには、
正解:デフォルトゲートウェイの
別ネットワーク宛の
正解:有効期限が
ARPテーブルの
正解:自分の
GARPは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
