🐚

GARPとは何か?(重複検知,テーブル更新)

2022/08/13に公開

この記事ではGARPについて解説します。GARPとはARPフィールドの目標IPアドレスに自信のIPアドレスがセットされた特別なARPです。

  1. IPアドレスの重複検知
  2. 隣接機器のテーブル更新

「自分のIPアドレスに紐付くMACアドレスを知りたい」ということなのですが、自分のMACアドレスは自分が知っているはずです。わざわざ他の端末に聞く必要はありませんよね。GARPはGratuitous ARPの略であり、Gratuitousには根拠のない,理由のないといった意味もあります。

(復習)ARPとは

対象のIPアドレスに紐付いたMACアドレスを調査するための機能です。IPプロトコルがネットワークの経路を調査する際に、「〇〇.〇〇.〇〇.〇〇のIPアドレスを持つMACアドレスは何ですかー?」と全端末へ呼びかけます。

ここでは「190.168.1.10のIPアドレスに紐付くMACアドレスは何ですかー?」と呼びかけます。該当の端末が「私でーす!」と返答し、それ以外は無視します。

GARPとは

自身のIPアドレスを目標IPアドレスにセットして送信します。「〇〇.〇〇.〇〇.〇〇のIPアドレスを持つMACアドレスは何ですかー?」と呼びかけるのは同じですが、それが自身のIPアドレスになっています。

「私と同じIPアドレスを持っている人はいませんかー?(その人のMACアドレスを教えて下さーい)」と呼びかけています。なぜ自身と同じIPアドレスを持つ端末を探すのか?という理由は後述するとして、まずは先に仕組みをご説明します。

ARPパケットの中身

ARPリクエストを送る際には全端末へARPパケットを投げかけています。ARPパケットの中身は以下のようになっています。

注目したいのが目標MACアドレス/目標IPアドレスです。ここにはARPで解決したいMACアドレスとIPアドレスが入ります。IPアドレスは分かっていますが、MACアドレスはもちろん分かりません(それを知るのがARPの目的なので)。そこで最初はダミーのMACアドレスとして00:00:00:00:00:00が入ります。

GARPパケットの中身

GARPのパケットは以下のようになっています。同じように注目したいのが目標MACアドレス/目標IPアドレスです。

ARPにおいて目標IPアドレスには、今回データを送りたい端末のIPアドレスが入りました。それがGARPでは自身と同じIPアドレスが入ります。もう一度まとめると『目標IPアドレス』に入る情報は以下のように異なります。

  • ARP:今回データを送りたい端末のIPアドレス
  • GARP:自分自身と同じIPアドレス

GARPとは

なぜ自身と同じIPアドレスをセットするのでしょうか。それには2つの目的があります。

  1. IPアドレスの重複検知
  2. 隣接機器のテーブル更新

1. IPアドレスの重複検知

他の端末と同じIPアドレスを使っていないかチェックするためです。新しくIPアドレスを設定した際に、GARP(ARPリクエスト)を全端末へ送信します。自身と同じIPアドレスが設定されているので、「このIPアドレスを使っても良いですか?」と確認することができます。

自分と同じIPアドレスを使っている端末はないはずなので、基本的に答えは返ってくることはないはずです。
しかしもし同じIPアドレスを使っている端末がいたらARPリプライを返却されます。これによってIPアドレスの重複を確認することができます。

2. 隣接機器のテーブル更新

GARPは自身が使っているアドレスを知らせることにも利用できます。ARPには目標IPアドレス/MACアドレスだけでなく、送信元の情報が入ることも思い出して下さい。これによって「私のMACアドレスはこれです!」と隣接機器へARPテーブルの更新を促すことができます。

この機能は機器の交換などの場面で役立ちます。故障などで機器を交換すると、MACアドレスが変わってしまいます。そこで新しい機器がネットワークに接続されたタイミングでGARPを送信し、自分自身のMACアドレスが変わったことをブロードキャストで通知します。これによってキャッシュの更新を待たずとも、ARPテーブルとMACアドレスアドレステーブルを最新の情報に更新できます。(ちなみにIPアドレスはOSが設定する論理的なアドレスなので、交換前後で同じモノを設定しても問題ない点に注意して下さい。)

Discussion