GARP

ARPにより、通信先のMACアドレスを調べる事が出来ますが、自身のIPアドレスが重複していないか調べる時にも利用出来ます。

本項では、GARPについて説明します。

ARPとGARPの違い

 ARPは、通信先のMACアドレスを調べるために送信されます。この送信はリクエストと呼ばれ、応答はリプライと呼ばれます。

ARPリクエストとリプライ

 GARPは、自身のIPアドレスをリクエストとして送信します。

GARPリクエスト

 これにリプライがあると、IPアドレスが重複している事が分かります。

 GARPはGratuitous ARPの略です。

IPアドレス重複検知の仕組み

 ARPリクエストでは、宛先MACアドレスをFF-FF-FF-FF-FF-FFとし、ブロードキャストします。そのフレームには、送信元を示すSender IP addressと、MACアドレスを調べたい機器のTarget IP addressが含まれています。

ARPリクエストのフレーム

 ARPリクエストを受信した装置は、Target IP addressが自身のIPアドレスであれば、リプライを送信して自身のMACアドレスを教えます。

 GARPでは、Sender IP addressとTarget IP addressの両方を自身のIPアドレスとします。

GARPリクエストのフレーム

 Target IP addressが自身のIPアドレスであるため、誰もリプライしないはずですが、リプライがあればIPアドレスが重複している事が分かります。WindowsでIPアドレスの重複を検知すると、以下のように「IPアドレスの競合が検出されました」とアラートが表示されます。

WindowsでのIPアドレス競合検知

 このような重複検知のためのGARPは、IPアドレスを静的に設定したり、DHCPで取得した時に送信されます。

IPアドレス利用通知

 GARPは、IPアドレスの重複を調べるだけでなく、自身が使っているIPアドレスを知らせる時にも利用出来ます。

 ARPには、Sender IP addressやTarget IP addressだけでなく、Sender MAC addressやTarget MAC addressも含まれています。

送信元をARPキャッシュする

 ARPリクエストを受信した装置は、Sender IP addressとSender MAC addressを対にしてARPテーブルにキャッシュします。ARPリクエストはブロードキャストで送信されるため、同一サブネット上の全機器で送信元のIPアドレスとMACアドレスを知る事が出来ます。

通信に関係ない機器もARPテーブルにキャッシュする

 つまり、リスエスト時に送信元の情報もキャッシュされるという事です。

 GARPも同様の仕組みで、同一サブネット上の全機器でARPテーブルに送信元の情報をキャッシュさせる事が出来ます。異なる点は先程説明した通り、Target IP addressを自身のIPアドレスにして送信する事です。

GARPでのIPアドレス利用通知

 通常のARPでは、この後リプライがあります。GARPではTarget IP addressが送信元のIPアドレスになっているため、IPアドレスの重複がなければリプライはありません。このため、自身が利用しているIPアドレスを通知し、ARPテーブルにキャッシュさせる事を目的として利用出来ます。

冗長化構成でのGARP利用例

 冗長化された装置がActive/Standbyで動作していた場合、Active側がダウンするとStandby側がActiveに切り替わります。この時、IPアドレスを変更すると通信が成立しないため、Standby側でも同じIPアドレスを利用するとします。

 この場合、周辺装置のARPテーブルを考慮する必要があります。

冗長化でActive/Standbyが切り替わった際、ARPテーブルにMACアドレスがあると通信出来ない場合がある

 上図では、冗長化された機器で異なるMACアドレスを使っているため、パソコン側のARPテーブルに元々のActive側がキャッシュされていると、ARPテーブルがクリアされるまで通信出来ません。

 この対処として、Activeになったサーバー(MACアドレス:B)からGARPを送信すると、パソコンのARPテーブルが書き換えられるため、すぐに通信可能となります。

 又、ルーターの冗長化としてVRRPがありますが、MACアドレスは同じもの(00-00-5E-00-01-xx:xxはVRID)が使われます。この場合でも、やはり起動や切り替わりでマスタールーターになる時、IPアドレス利用通知としてGARPを送信します。

RFC5227(IPv4アドレスの競合検出)

 間違って重複したIPアドレスを設定した機器がGARPを送信すると、元々そのIPアドレスを利用していた機器が通信出来なくなります。

IPアドレスを間違えた機器がGARPを送信すると、通信出来ない装置が発生する

 これは、Sender IP addressが自身のIPアドレスになっているためです。周辺装置はSender IP addressを元に、間違ってIPアドレスが設定された機器をARPテーブルに登録してしまいます。

 この対処としてRFC5227では、Sender IP addressを0.0.0.0にする事が推奨されています。これは、ARPプローブと呼ばれます。0.0.0.0であれば、周辺装置のARPテーブルに影響を与えません。又、間違った側はIPアドレスの重複を検知出来るため、重複された側の通信に影響を与える事なく、IPアドレスを変更する事も可能です。

 GARPと同じくSender IP addressを自身のIPアドレスとするのは、RFC5227ではARPアナウンスメントと呼ばれています。ARPアナウンスメントは、ARPプローブでIPアドレス重複がない事が分かった後、周辺装置のARPテーブルを更新する時に使います。

【ARPプローブとアナウンスメント】
区分 Target Sender
MAC address IP address MAC address IP address
ARPプローブ 00:00:00:00:00:00 自分 自分 0.0.0.0
ARPアナウンスメント 00:00:00:00:00:00 自分 自分 自分

 Windowsでは、XPや2003以前は最初からGARPを送信していましたが、最近のWindowsではプローブで送信し、応答がなければアナウンスメント(GARP)を送信するようになっています。

【WindowsとARPプローブ】
OS ARPプローブ GARP
Windows XP以前
Windows 2003以前
×
Windows VISTA
Windows 2008
×
Windows7(KB2811463適用)
Windows 2008R2(KB2811463適用)
Windows8以降
Winwows 2012以降

 又、プローブで応答があった場合はIPアドレスが重複しているため、168.254.x.x(リンクローカルアドレス)が自動的に設定されます。

サイト関連1

基本編「ARP
追補版「ARPパケットフォーマット

-参考文献-

・IPv4 Address Conflict Detection「RFC 5227

・Micrisoftサポート「Windows Vista および Windows Server 2008 以降の OS で・・・

  • このエントリーをはてなブックマークに追加