ARPとは

APRとは

ARP(Address Resolution Protocol)とはIPアドレスからMACアドレスを解決するためのプロトコルです。

ARPの仕組み

ARPはARPリクエスト(ARP要求パケット)とARPリプライ(ARP応答パケット)の2種類のパケットを使用します。以下のような構成のときのパケットの流れを見てみます。

①ARPリクエスト(同セグメントの場合)
PC1は192.168.0.34(PC3)と通信をするためのMACアドレスを知ろうとします。その際にブロードキャストにより同セグメント上のすべてのノードに送信されます。

②APRリプライ
PC3は自分のMACアドレス情報をPC1にユニキャストで送信します。

③ARPリプライ(別セグメントの場合)
PC1は172.16.0.4(PC4)と通信をするためにMACアドレスを知ろうとします。別セグメントなためデフォルトゲートエウェイのIPのMACアドレスを教えてもらうようにARPリクエストを送信します。

RARP

RARP(Reverse Address Resolution Protocol)とは、ARPの逆でMACアドレスからIPアドレスを解決するためのプロトコルです。
RARPは普段はあまり使用されません。IPアドレスの設定ができない(IPアドレスを入力するIFが存在しない)場合やDHCPの設定ができない(動的なIPアドレスを設定されると困る)場合に使用されます。
RAPRを使用する場合はRARPサーバを用意してRARPサーバにMACアドレスとIPアドレスの紐づけを設定します。そして、機器の起動時にRAPRリクエストを送信することでRARPサーバからIPアドレスを取得できます。

GARP

GARP(Gratuitous ARP)とは、自分のIPアドレスに対するMACアドレスを解決するためのプロトコルです。
当然自分のMACアドレスというのは知っているためそのままの用途では使われません。
GARPが使用される用途は
①IPアドレスの重複の確認
②ARPキャッシュの更新
の2つの用途で使用されます。

①IPアドレスの重複の確認
ネットワーク上でIPは一意でなければなりません。新しくIPアドレスの割り当てを受けたネットワーク機器はIPアドレスが重複していないかARPリクエストを送信します。(TagertのIPアドレスとSourceのIPアドレスが同じパケットがGARPと呼ばれます。)
この時、ARPリプライが返ってきた場合、そのIPアドレスを使用している機器がネットワーク上に存在するということになり、重複の検知ができます。


②ARPキャッシュの更新
ARPキャッシュ(ARPテーブル)は基本的に数分間キャッシュされる仕組みとなっています。HSRPやVRRPで冗長化していて障害が発生して切り替わりが発生した場合ARPキャッシュが更新されないと、切り替わり先の機器に通信することができません。(基本的に冗長化しているときは切り替わり先でも同じIPを使用しますがMACアドレスは別になります。)その時に切り替わり先のルータのMACアドレスを通知するためGARPを送信してARPキャッシュの更新をします。

ARPプローブ

IPアドレスが重複してしまった機器がGARPを送信すると、GAPRを受け取った機器はARPテーブルの更新を行ってしまうため、元々そのIPアドレスを使用していた機器と通信ができなくなります。

これは、ARPリクエストパケットのSender IP addressが自分のIPパケットになっていて、GARPリクエストを受け取ったPC2はSender IP addressをもとに間違ったIPアドレスとMACアドレスの紐づけのARPテーブルの更新を行ってしまうからです。
これに対する対処としてRFC5277でARPプローブと呼ばれるSender IP addressを0.0.0.0にするパケットを送信するように推奨されています。ARPプローブであればもしIPアドレスが重複していたとしても周囲の機器のARPテーブルに影響を与えることもなく、ARPリプライは返ってくるため重複の検知は変わらずすることができます。
このARPプローブでIPアドレスの重複がないことが分かった後、Sender IP addressを自分のIPアドレスにしたGARP(RFC5227ではARPアナウンスメントと呼ばれる)を送信します。

ARPパケットの詳細についてはこちらをご覧ください。
ARPパケット


代理ARP(Proxy ARP)

代理ARP(Proxy ARP)とは、ほかの機器宛てのARP要求に対して、代理でARP応答する機能です。
ARPは通常、同一セグメント内でIPパケットを送信するときに使用されます。代理ARPはルーティングテーブルを使用せず別のセグメントに送信するときに使用されます。
現在のネットワークでは、複数のセグメントを使用する場合は重複しないようにサブネットを正しく定義したり、ルーティングテーブルで制御するのが普通なので使用されることはあまりありません。サブネットマスクやルーティングテーブルを設定できない旧式の機器や複数のサブネットが重なる環境(VPN環境)などでは代理ARPが使用されることがあります。

①ARPリクエスト
PC1は172.16.0.3と通信をするために必要なMACアドレスを知るためにARPリクエストを送信します。

②ARPリプライ
RT1は代理ARPとしてPC3の代わりにARPリプライを送信します。