前回、スイッチが宛先MACアドレス未学習・またはブロードキャスト宛てのフレームを フラッディング(受信ポート以外の全ポートに転送)することを学びました。
今回学ぶ ARP はまさにこの性質を利用して、IPアドレスからMACアドレスを解決する仕組みです。
MACアドレスは、機器に紐づいた48bitの物理的な識別番号である。
スイッチは宛先MACアドレスをもとに、フォワーディング/フラッディングのいずれかの動作でフレームを転送する。
宛先がブロードキャストアドレスのフレームは、スイッチによって受信ポート以外の全ポートにフラッディングされる。
今回学ぶARPは、この「ブロードキャストはスイッチによって全ポートに届く」という性質を前提として成り立っています。
ARP(Address Resolution Protocol) は、その名の通り「IPアドレスからMACアドレスを解決(Resolution)する」ためのプロトコルです。
「通信の流れ」で学んだ通り、TCP/IPモデルでは上位層から下位層へ向かってヘッダが付与されていくカプセル化が行われ、インターネット層(IPアドレス)の情報だけではまだ電気信号として送信できる状態にはなりません。
実際に送信するには、その外側に ネットワークインターフェース層の情報(宛先/送信元MACアドレスを含むフレームヘッダ) まで付与される必要があるという点は第6回「MACアドレス」でも扱いました。
つまり、PC1が「192.168.1.2(PC2)にデータを送りたい」と考えたとき、PC1はインターネット層の情報として宛先IPアドレス(192.168.1.2) はすでに持っていますが、ネットワークインターフェース層の情報として必要な 宛先MACアドレス はまだ持っていません。
この「インターネット層の情報(IPアドレス)は分かっているが、ネットワークインターフェース層の情報(MACアドレス)が分からない」という層と層の間のギャップを埋める役割を果たしているのが ARP です。
ARP があることで、PC1は「宛先IPアドレスは分かっているが、宛先MACアドレスが分からない」という状態から、実際にフレームを送信できる状態へと進むことができます。
ARPの動作の流れは、以下のようになります。
※今回は以下の構成で説明します。また、ハンズオンを見越して PC ではなくルータ (RT) で説明します。動作は同じです。

RT1 が RT2(192.168.1.2)にデータを送りたいが、そのMACアドレスを知らない場合、RT1 は同一ネットワーク内の全機器に対して次のように問い合わせます。

この問い合わせは ブロードキャスト(同一ネットワーク内の全機器宛て) で送信されます。これを ARP Request と呼びます。
ARP Request には以下の情報が含まれています。

本構成ではそれぞれ以下になります。
※RT1 (192.168.1.1) が RT2 (192.168.1.2) の MAC アドレスを調べたい


前回学んだ通り、スイッチはこのブロードキャストフレームを受信ポート以外の全ポートにフラッディングするため、同一ネットワーク内の全機器にARP Request が届くことになります。
また、この ARP Request を受信した機器は自身の ARP table に Source IP と Source MAC の情報を登録します。(ARP table の詳細は後述します)

ARP Requestを受け取った機器のうち、Target IP(この例では192.168.1.2)を持つ機器(RT2)だけが、自分のMACアドレスを ユニキャスト(PC1宛ての1対1通信) で返信します。これを ARP Reply と呼びます。

ARP Reply には以下の情報が含まれています。

本構成ではそれぞれ以下になります。


ARP Reply はブロードキャストではなく、PC1宛てのユニキャストです。そのためスイッチは、学習済みのMACアドレステーブルを参照し、フラッディングではなく フォワーディング(PC1が接続されているポートにのみ転送)で処理します。

RT1 は受け取ったARP Replyの内容を、ARPテーブル(ARPキャッシュ) と呼ばれる対応表に一定時間保存します。
一度解決したIPアドレス⇔MACアドレスの対応関係を毎回問い合わせ直すのは非効率なため、このように一時的にキャッシュしておく仕組みになっています。
また、ARP テーブルに保存された情報には有効期限(Aging Time)があり、一定時間通信がないと自動的に削除されます。
今後学ぶ Cisco IOS-XE では4時間が default の Aging Time となっています。
これまで見てきたARPは、「相手のMACアドレスを知りたいときに、相手のIPアドレスを尋ねる」という動作でした。
これに対して Gratuitous ARP(GARP) は、自分自身のIPアドレスに対して自ら(誰にも聞かれていないのに)ARP Request を送信する という少し特殊なARPです。
通常のARP Requestとの違いは、問い合わせている宛先IPアドレスが送信者自身のIPアドレスと同じという点です。
GARP で送信する情報は以下になります。

一見奇妙な動きに見えますが、これには明確な目的が主に2つあります。
具体例で考えてみましょう。
たとえば PC1に 192.168.1.1 というIPアドレスを設定するとします。
このとき、PC1は設定と同時に、自分自身のIPアドレス(192.168.1.1)宛てのGARPを自動的に送信します。
もしこのネットワーク内に、既に 192.168.1.10 を使っている別の機器が存在していた場合、その機器が「そのIPアドレスは私です」と応答してしまいます。
PC1からすれば、本来自分が使うはずのIPアドレスに対して他の機器から応答が返ってきたことになるため、「このIPアドレスは既に誰かに使われている」と気づくことができます。
多くの機器はこの応答の有無によってIPアドレスの重複を検知し、重複していた場合はエラーとして通知するという形でこの仕組みを利用しています。

GARPはブロードキャストで送信されるため、同一ネットワーク内の全機器に届きます。GARPを受け取った機器はその送信元IPアドレス・MACアドレスの対応関係を特に応答をしなくても自分のARPテーブルに学習・更新することが一般的です。
この性質が役立つのは、同じIPアドレスのまま、MACアドレスだけが変わってしまうケース です。
たとえば、PC1のネットワークカード(NIC)が故障し、新しいネットワークカードに交換したとします。IPアドレスの設定はそのまま 192.168.1.1 を使い続けますが、ネットワークカード自体が新しくなったことでMACアドレスだけが変わってしまいます。
このとき、周囲の機器(SW1のMACアドレステーブルや、PC2のARPテーブル)が、交換前の古いMACアドレスの情報を持ったままだと、192.168.1.1宛てのフレームが古いMACアドレス宛てに送られ続けてしまい、正しく通信できなくなってしまいます。
そこで、交換後の新しいネットワークカードが起動時にGARPを送信することで、周囲の機器に「192.168.1.10のMACアドレスが新しくなりました」と知らせ、MACアドレステーブルやARPキャッシュをすぐに更新させることができます。

次章「同一セグメント内の通信」では今回までに学んだ知識を実際の通信の流れとして図解しながら統合していきます。
ログインすると、進捗を保存できます。
← 0.8 ARP に戻る