ARP

July 21, 2018

ARP の仕組み

ARP (Address Resolution Protocol) は IP アドレスから MAC アドレスを得るプロトコルとなる。宛先 IP アドレスしかわからない場合、ARP を用いることで、宛先ホストが自らの MAC アドレスを通知する仕組みとなっている。宛先 MAC アドレスを取得した後、MAC フレームを生成して宛先ホストに IP パケットを送信する。
ARP 要求はヘッダに IP アドレスを格納し、ブロードキャストパケットを用いて全ホストに問い合わせる。該当する IP アドレスをもつホストは、自分の MAC アドレスをヘッダに格納し、ARP 応答を返す。ARP 応答にはユニキャストパケットが用いられる。
獲得した MAC アドレスは ARP テーブルに一定期間キャッシュされる (ARP キャッシュ)。キャッシュされている間は、同じ ARP 要求を出さなくても MAC フレームを送信することができる。
ARP のフレームフォーマットは以下の通り。

f:id:shiro_kochi:2018××××××××:plain:w100:left

MAC ヘッダのタイプ領域には ARP フレームを表す値 (0x0806) が格納される。ARP フレームは 28 バイトであるため、最小データ長の 46 バイトになるよう 18 バイト分がパディングされる。
以下の図ではホストから IP パケットを転送する際に ARP がどのように用いられているかを示す。ホスト A とホスト B が同一サブネットに存在し、直接ルーティングにより所用のパケットを送信する例となる。

f:id:shiro_kochi:2018××××××××:plain:w100:left

受信した ARP パケットを処理するフローは以下。

f:id:shiro_kochi:2018××××××××:plain:w100:left

特別な用途の ARP

Gratuitous ARP

Gratuitous ARP は、重複 IP アドレスの検知などに利用される ARP となる。
ホストは自 IP アドレスを目標プロトコルアドレスに格納して ARP 要求を送信する。もし、この ARP 要求に対して他のホストから ARP 応答があれば、そのホストは自分と同じ IP アドレスを持っていると判断する。
Windows OS では、この Gratuitous ARP を用いて、電源投入後の重複 IP アドレスのチェックを行っている。これは、誤った設定等によりIP アドレスが重複してしまう可能性があるためである。

他にも、サーバが二重化されているシステム (主系サーバと待機系サーバが仮想 IP アドレスを共有しているが、MAC アドレスは個別に保持している) でも Gratuitous ARP は用いられる。
主系サーバがダウンし、待機系サーバに切り替わる時、IP アドレスも待機系サーバに引き継がれる。このとき、待機系サーバは Gratuitous ARP をブロードキャストで送信する。Gratuitous ARP を受信した全てのホストは ARP キャッシュを更新する仕組みとなっており、待機系サーバから Gratuitous ARP を受け取ったホストは、仮想 IP アドレスを待機系サーバの MAC アドレスに紐づける。
なお、VRRP のような仮想 IP アドレスと仮想 MAC アドレスを共有する方式をとる場合は Gratuitous ARP で ARP キャッシュを更新する必要はない。

RARP

RARP (Reverse Address Resolution Protocol) は、外部記憶装置を持たないノードが、RARP サーバから自装置の IP アドレスを取得するために用いるデータリンク層のプロトコルとなる。
電源オン時に自ノードのネットワークインターフェイスから MAC アドレスを取得し、RARP サーバに対して、その MAC アドレスに対応する IP アドレスを応答するように要求する。クライアントは RARP サーバの MAC アドレスを保持していないため、RARP 要求にはブロードキャストフレームが利用され、そのフレームには自装置の MAC アドレスが格納されている。RARP サーバはこのフレームを受け取ると、ユニキャストフレームを用いてクライアントの IP アドレスを応答する。

上記が従来の RARP フレームの目的であったが、今日では RARP を必要とするノードを使用しないため、RARP サーバを設置することはない。この状況を踏まえ、本来とは全くことなる用途で RARP が使用される。
主系サーバから待機系サーバに切り替わる際に、主系サーバと待機系サーバが収容されたブロードキャストドメイン内で、スイッチのMAC アドレステーブルを更新する必要がある。この MAC アドレステーブルの更新のため、切り替え直後にサーバから RARP 要求が用いられることがある。
RARP 要求フレームの宛先はブロードキャストアドレスであり、送信元アドレスは送信元ホストの MAC アドレスである。よって RARP 要求フレームを送信すれば、ブロードキャストドメイン内のすべてのスイッチに到達でき、切り替え先のサーバが存在するポートの位置に応じて MAC アドレステーブルおw適切に送信できる。

MAC アドレステーブルの更新には、必ずしも RARP を用いる必要はない。宛先がブロードキャストアドレスであり、送信元が仮想 MAC アドレスであれあば、どのフレームでも良い。
RARP が用いられる理由は、MAC アドレステーブルを更新する以外に副作用がないためである。今日 RARP サーバが設置されることはなく、RARP サーバ以外のホストは RARP てパケットを受信すると直ちに破棄するため、RARP は無害なフレームである。

Proxy ARP

Proxy ARP は、あらかじめ登録された IP アドレスに対する ARP 要求を受けると、あたかも自ホストがその IP アドレスをもっているかのように振る舞い、自ホストの MAC アドレスを回答とする ARP 応答を返信する機能である。ルータやファイアウォールがこの機能を有する。
サブネットを跨いだホストに ARP 要求する際などに利用され、この場合、ルータが変わりに自身の MAC アドレスを返す。

参考


 © 2023, Dealing with Ambiguity