GARP
ARPにより、通信先のMACアドレスを調べる事が出来ますが、自身のIPアドレスが重複していないか調べる時にも利用出来ます。
本項では、GARPについて説明します。
ARPとGARPの違い
ARPは、通信先のMACアドレスを調べるために送信されます。この送信はリクエストと呼ばれ、応答はリプライと呼ばれます。
GARPは、自身のIPアドレスをリクエストとして送信します。
これにリプライがあると、IPアドレスが重複している事が分かります。
GARPはGratuitous ARPの略です。
IPアドレス重複検知の仕組み
ARPリクエストでは、宛先MACアドレスをFF-FF-FF-FF-FF-FFとし、ブロードキャストします。そのフレームには、送信元を示すSender IP addressと、MACアドレスを調べたい機器のTarget IP addressが含まれています。
ARPリクエストを受信した装置は、Target IP addressが自身のIPアドレスであれば、リプライを送信して自身のMACアドレスを教えます。
GARPでは、Sender IP addressとTarget IP addressの両方を自身のIPアドレスとします。
Target IP addressが自身のIPアドレスであるため、誰もリプライしないはずですが、リプライがあればIPアドレスが重複している事が分かります。WindowsでIPアドレスの重複を検知すると、以下のように「IPアドレスの競合が検出されました」とアラートが表示されます。
このような重複検知のためのGARPは、IPアドレスを静的に設定したり、DHCPで取得した時に送信されます。
IPアドレス利用通知
GARPは、IPアドレスの重複を調べるだけでなく、自身が使っているIPアドレスを知らせる時にも利用出来ます。
ARPには、Sender IP addressやTarget IP addressだけでなく、Sender MAC addressやTarget MAC addressも含まれています。
ARPリクエストを受信した装置は、Sender IP addressとSender MAC addressを対にしてARPテーブルにキャッシュします。ARPリクエストはブロードキャストで送信されるため、同一サブネット上の全機器で送信元のIPアドレスとMACアドレスを知る事が出来ます。
つまり、リスエスト時に送信元の情報もキャッシュされるという事です。
GARPも同様の仕組みで、同一サブネット上の全機器でARPテーブルに送信元の情報をキャッシュさせる事が出来ます。異なる点は先程説明した通り、Target IP addressを自身のIPアドレスにして送信する事です。
通常のARPでは、この後リプライがあります。GARPではTarget IP addressが送信元のIPアドレスになっているため、IPアドレスの重複がなければリプライはありません。このため、自身が利用しているIPアドレスを通知し、ARPテーブルにキャッシュさせる事を目的として利用出来ます。
冗長化構成でのGARP利用例
冗長化された装置がActive/Standbyで動作していた場合、Active側がダウンするとStandby側がActiveに切り替わります。この時、IPアドレスを変更すると通信が成立しないため、Standby側でも同じIPアドレスを利用するとします。
この場合、周辺装置のARPテーブルを考慮する必要があります。
上図では、冗長化された機器で異なる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アドレスを利用していた機器が通信出来なくなります。
これは、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テーブルを更新する時に使います。
区分 | 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)を送信するようになっています。
OS | ARPプローブ | GARP |
---|---|---|
Windows XP以前 Windows 2003以前 |
× | 〇 |
Windows VISTA Windows 2008 |
〇 | × |
Windows7(KB2811463適用) Windows 2008R2(KB2811463適用) |
〇 | 〇 |
Windows8以降 Winwows 2012以降 |
〇 | 〇 |
又、プローブで応答があった場合はIPアドレスが重複しているため、168.254.x.x(リンクローカルアドレス)が自動的に設定されます。
- 基本編「ARP」
- 追補版「ARPパケットフォーマット」
-参考文献-
・IPv4 Address Conflict Detection「RFC 5227」
・Micrisoftサポート「Windows Vista および Windows Server 2008 以降の OS で・・・」