GARP(Gratuitous-ARP/グラチューイタスアープ)について説明します。
通常のARPに関しての説明は、下記を参照してください。
GARP(Gratuitous-ARP/グラチューイタスアープ)とは
概要
GARP(Gratuitous-ARP/グラチューイタスアープ)とは、IPアドレスの利用有無の確認や周辺機器のARPテーブル・キャッシュのクリアするために利用されます。ネットワーク機器では、冗長化された機器がIPアドレスを引き継ぐ際に利用されます。
「gratuitous」は、「余計な」や「無償の」という意味や「自発的に与えられる」という語源があります。
GARPの種類
GARPには目的別に以下のような種類があります。
種類 | 利用目的の例 | 利用機器の例 |
---|---|---|
GARP | 冗長系切替時の周辺機器のARPテーブル・MACアドレステーブルの更新 | ネットワーク機器等 |
ARP Probe | 自機器に設定しようとしているIPアドレスの未利用確認 | Window端末等 |
ARP Announcement | IPアドレスを利用する旨の通達 (周辺機器のARPテーブル・MACアドレステーブルの更新) | Window端末等 |
ProbeとAnnouncementについては、RFC5227(ACD – Address Conflict Detection)で議論されており、純粋なGARPではない可能性はあるのですが、ここでは”広義のGARP”として記載しています。
“Shouldn’t ARP Announcements be performed using gratuitous ARP Reply packets?”
RFC 5227 – IPv4 Address Conflict Detection
「無償のARP応答パケットを使用してARPアナウンスを実行すべきではないか?」
RFC 5227 – IPv4 Address Conflict Detection 日本語訳
GARPの利用場面とパケット詳細
冗長系切替り時のARPテーブル・MACアドレステーブル更新
HSRPやVRRP等で、冗長系の切替りが発生した場合に、新しくActiveとなったルーターがGARPを送信します。これにより、周辺機器のARPテーブル・MACアドレステーブルを更新することで、通信経路の切り替えを行います。
HSRPの切替りやGARP送信タイミングの詳細は、下記を参照してください。
下記のネットワーク構成を例に説明します。
・Router1とRouter2がHSRPで冗長化されています。
・Router1がHSRPのActiveルーターとなっています。
・HSRPのVIP(192.168.1.254)のMACアドレスは、「00:00:0c:07:ac:fe」です。
・SwitchのMACアドレステーブルでは、HSRPのVIPのMACアドレスは、「Gi0/1」と紐付いています。
Router1で障害が発生すると、HSRPのActiveルーターがRouter2に切り替わります。
Router2からGARPをブロードキャストで送信します。※GARPパケットの詳細は後述します。
GARPを受け取ったSwitchのMACアドレステーブルが更新され、通信経路が切り替わります。
GARPパケットの詳細
GARPパケットの中身を確認します。
1 00:00:0c:07:ac:fe → ff:ff:ff:ff:ff:ff ARP 60 Gratuitous ARP for 192.168.1.254 (Reply)
Frame 1: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)
Ethernet II, Src: 00:00:0c:07:ac:fe, Dst: ff:ff:ff:ff:ff:ff
Destination: ff:ff:ff:ff:ff:ff
Source: 00:00:0c:07:ac:fe
Type: ARP (0x0806)
Padding: 000000000000000000000000000000000000
Address Resolution Protocol (reply/gratuitous ARP)
Hardware type: Ethernet (1)
Protocol type: IPv4 (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: reply (2)
[Is gratuitous: True]
Sender MAC address: 00:00:0c:07:ac:fe
Sender IP address: 192.168.1.254
Target MAC address: ff:ff:ff:ff:ff:ff
Target IP address: 192.168.1.254
イーサネットヘッダ
項目 | 表記 | 説明 |
---|---|---|
送信先MACアドレス | Destination | GARPはブロードキャストのため、送信先は「ff:ff:ff:ff:ff:ff」 |
送信元MACアドレス | Source | GARPを送信している機器のMACアドレス |
イーサネットタイプ | Type | GARPのイーサネットタイプは「0806」※通常のARPと同じ |
GARPのフォーマット
項目 | 表記 | 説明 |
---|---|---|
ハードウェアタイプ | Hardware type | イーサネットの場合は「1」 |
プロトコルタイプ | Protocol type | IPv4の場合は「0800」 |
ハードウェアサイズ | Hardware size | イーサネットの場合はMACアドレスのサイズ「6Byte」 |
プロトコルサイズ | Protocol size | IPv4の場合はIPアドレスのサイズ「4Byte」 |
オペレーションコード | Opcode | GARPのコードは「2」※通常ARPのreplyと同じ |
送信者MACアドレス | Sender MAC address | GARPを送信している機器のMACアドレス |
送信者IPアドレス | Sender IP address | GARPを送信している機器のIPアドレス |
対象MACアドレス | Target MAC address | GARPでは「ff:ff:ff:ff:ff:ff」 |
対象IPアドレス | Target IP address | GARPでARPテーブルやMACアドレスを更新したいIPアドレス |
このGARPは、ARPテーブルやMACアドレステーブルの更新が目的で、ARP応答(reply)が必要ないため、オペレーションコードは「2(reply)」が利用されます。
IPアドレスの利用有無確認と利用通知
同一のネットワーク上では、IPアドレスは一意である必要があります。そのため、IPアドレスを設定する際は端末自身がGARPを送信して、IPアドレスの重複がないことを確認するという動作が行われています。これは、DHCPでIPアドレスが割り当てられる際にも同様です。
下記のネットワーク構成を例に説明します。
・A〜Dの4台のホストが同一ネットワーク上に設置されています。
・ホストAは、まだIPアドレスが割り当てられていません。
・ホストB〜Dは、IPアドレスが割り当てられています。
DHCPサーバーから「192.168.1.9」がホストAに割り当てられました。この時点では、まだホストAはIPアドレスを設定しません。
ホストAがGARP(ARP Probe)を送信し、「192.168.1.9」を利用しているホストが存在しないことを確認します。もし該当IPアドレスを利用しているホストが存在する場合、ARP応答(reply)が帰ってくるため、存在に気がつくことができます。
ホストAは、割り当てられたIPアドレスが利用されていないことを確認し、IPアドレスを設定します。
ホストAがGARP(ARP Announcement)を送信し、「192.168.1.9」を利用することをネットワーク内に通知します。
GARP(ARP Probe)パケットの詳細
GARP(ARP Probe)パケットの中身を確認します。
1 18:cf:5e:58:14:85 → ff:ff:ff:ff:ff:ff ARP 42 Who has 192.168.1.9? (ARP Probe)
Frame 1: 42 bytes on wire (336 bits), 42 bytes captured (336 bits)
Ethernet II, Src: 18:cf:5e:58:14:85, Dst: ff:ff:ff:ff:ff:ff
Destination: ff:ff:ff:ff:ff:ff
Source: 18:cf:5e:58:14:85
Type: ARP (0x0806)
Address Resolution Protocol (ARP Probe)
Hardware type: Ethernet (1)
Protocol type: IPv4 (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: request (1)
[Is probe: True]
Sender MAC address: 18:cf:5e:58:14:85
Sender IP address: 0.0.0.0
Target MAC address: 00:00:00:00:00:00
Target IP address: 192.168.1.9
イーサネットヘッダ
項目 | 表記 | 説明 |
---|---|---|
送信先MACアドレス | Destination | GARP(ARP Probe)はブロードキャストのため、送信先は「ff:ff:ff:ff:ff:ff」 |
送信元MACアドレス | Source | GARP(ARP Probe)を送信している機器のMACアドレス |
イーサネットタイプ | Type | GARP(ARP Probe)のイーサネットタイプは「0806」※通常のARPと同じ |
GARP(ARP Probe)のフォーマット
項目 | 表記 | 説明 |
---|---|---|
ハードウェアタイプ | Hardware type | イーサネットの場合は「1」 |
プロトコルタイプ | Protocol type | IPv4の場合は「0800」 |
ハードウェアサイズ | Hardware size | イーサネットの場合はMACアドレスのサイズ「6Byte」 |
プロトコルサイズ | Protocol size | IPv4の場合はIPアドレスのサイズ「4Byte」 |
オペレーションコード | Opcode | GARP(ARP Probe)のコードは「1」※通常ARPのrequestと同じ |
送信者MACアドレス | Sender MAC address | GARP(ARP Probe)を送信している機器のMACアドレス |
送信者IPアドレス | Sender IP address | まだIPアドレスは設定していないため「0.0.0.0」 |
対象MACアドレス | Target MAC address | GARP(ARP Probe)では「00:00:00:00:00:00」 |
対象IPアドレス | Target IP address | GARP(ARP Probe)で未利用を確認したいIPアドレス |
GARP(ARP Announcement)パケットの詳細
GARP(ARP Announcement)パケットの中身を確認します。
1 18:cf:5e:58:14:85 → ff:ff:ff:ff:ff:ff ARP 42 ARP Announcement for 192.168.1.9
Frame 1: 42 bytes on wire (336 bits), 42 bytes captured (336 bits)
Ethernet II, Src: 18:cf:5e:58:14:85, Dst: ff:ff:ff:ff:ff:ff
Destination: ff:ff:ff:ff:ff:ff
Source: 18:cf:5e:58:14:85
Type: ARP (0x0806)
Address Resolution Protocol (ARP Announcement)
Hardware type: Ethernet (1)
Protocol type: IPv4 (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: request (1)
[Is gratuitous: True]
[Is announcement: True]
Sender MAC address: 18:cf:5e:58:14:85
Sender IP address: 192.168.1.9
Target MAC address: 00:00:00:00:00:00
Target IP address: 192.168.1.9
イーサネットヘッダ
項目 | 表記 | 説明 |
---|---|---|
送信先MACアドレス | Destination | GARP(ARP Announcement)はブロードキャストのため、送信先は「ff:ff:ff:ff:ff:ff」 |
送信元MACアドレス | Source | GARP(ARP Announcement)を送信している機器のMACアドレス |
イーサネットタイプ | Type | GARP(ARP Announcement)のイーサネットタイプは「0806」※通常のARPと同じ |
GARP(ARP Announcement)のフォーマット
項目 | 表記 | 説明 |
---|---|---|
ハードウェアタイプ | Hardware type | イーサネットの場合は「1」 |
プロトコルタイプ | Protocol type | IPv4の場合は「0800」 |
ハードウェアサイズ | Hardware size | イーサネットの場合はMACアドレスのサイズ「6Byte」 |
プロトコルサイズ | Protocol size | IPv4の場合はIPアドレスのサイズ「4Byte」 |
オペレーションコード | Opcode | GARP(ARP Announcement)のコードは「1」※通常ARPのrequestと同じ |
送信者MACアドレス | Sender MAC address | GARP(ARP Announcement)を送信している機器のMACアドレス |
送信者IPアドレス | Sender IP address | 設定済みのIPアドレス |
対象MACアドレス | Target MAC address | GARP(ARP Announcement)では「00:00:00:00:00:00」 |
対象IPアドレス | Target IP address | 設定済みのIPアドレス |
なお、DHCP自体にもIPアドレスの重複を防ぐ仕組みは存在しており、何重もの仕組みでIPアドレスが重複しないように工夫されています。DHCPの詳細な動作については、下記を参照してください。
GARPパケットのまとめ
上述したGARPパケットのフォーマットをまとめると下記の通りです。
表記 | GARP | ARP Probe | ARP Announcement |
---|---|---|---|
Hardware type | 1 | 1 | 1 |
Protocol type | 0800 | 0800 | 0800 |
Hardware size | 6(Byte) | 6(Byte) | 6(Byte) |
Protocol size | 4(Byte) | 4(Byte) | 4(Byte) |
Opcode | 2 | 1 | 1 |
Sender MAC address | 送信元MAC | 送信元MAC | 送信元MAC |
Sender IP address | 送信元IP | 0.0.0.0 | 送信元IP |
Target MAC address | ff:ff:ff:ff:ff:ff | 00:00:00:00:00:00 | 00:00:00:00:00:00 |
Target IP address | 送信元IP | 未利用確認IP | 送信元IP |
以上で、GARPとは(Gratuitous-ARP 機能・動作と利用場面)の説明は完了です!