1.ARP
(1)ARPとは
・ARP(Address Resolution Protocol)は、アドレス解決プロトコルと訳される。
・ARPはIPアドレスからMAC(Media Access Control)アドレスを取得するプロトコルである。
・ネットワークスペシャリスト試験の過去問では、TCP/IPにおけるARPの説明として、「IPアドレスからMACアドレスを得るプロトコル(H16NW午前 問22)」と述べている。
・Windowsパソコンでは、arp -aコマンドでキャッシュしているARP情報を表示する。
・ARPの要求パケットはブロードキャスト(MACアドレス ff:ff:ff:ff:ff:ff)でセグメント全体に送信され、返信はユニキャストで返信される。
・ARPテーブルはこんな感じです。CiscoのCatalystの場合、show arp コマンドにて確認することができる。MACアドレステーブルとは別物です。違いはスイッチングHUB記事で理解しましょう。メーカによってARPテーブルの保持時間は異なりますが、多くは数分です。
IPアドレス | MACアドレス |
---|---|
192.168.1.10 | mac1 |
192.168.1.30 | mac2 |
(2)ARPのフレーム
フレームフォーマットは以下です。
項目 | 長さ | 補足 |
---|---|---|
HTYPE | 2 | HTYPE(ハードウェアタイプ)は、イーサネットの場合は1(厳密には0x0001) |
PTYPE | 2 | PTYPE(プロトコルタイプ)で、IPv4の場合は0x0800 |
HLEN | 1 | HLEN(Hardware length)はMACアドレスの長さで、6が入る |
PLEN | 1 | PLEN(Protocol length)はIPアドレスの長さで、4が入る |
オペレーション | 1 | オペレーションにはrequest(要求)の場合が1、reply(応答)の場合は2が入る。 |
送信元MACアドレス | 6 | |
送信元IPアドレス | 4 | |
ターゲットのMACアドレス | 6 | ターゲットのMACアドレス:ARP要求パケットの場合、は空になる。 |
ターゲットのIPアドレス | 6 | ターゲットのIPアドレス:ARP要求パケットの場合、解決をしたいIPアドレスを入れる。 |
(3)ARPの動作
※「タイプフィールドにはARPを表す「0x0806」の値が入る」「ARP要求時は、宛先MACアドレスにはブロードキャスト(FF-FF-FF-FF-FF-FF)が入る」と追記。
上記の例とリンクしていないが、Wiresharkでキャプチャした例を紹介します。
ARPはレイヤ2の通信ですか?
これのキャプチャ画面を見ると、送信元IPアドレスが入っているから、
レイヤ3の通信に見受けられます。
確かに、フレームのProtocolフィールドに0x800(IP)と入っているから、そう思えてきます。実際、レイヤ3と解説している文献もいくつかあることでしょう。しかし、よくよくフレームの中身を見てみますと、IPヘッダと送信元IPアドレスなどとは違い、ARPフレームのデータ部分として送信元IPアドレスなどが入っているだけです。IPヘッダの送信元IPアドレスなどではありません。詳しくは、HTTPやICMPなどのIPヘッダと比べていただきたい。
https://nw.seeeko.com/archives/50559141.html#2ICMP%E3%81%AE%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0
(4)ARPテーブルに情報を追記する端末はどれ?
先ほどのPC1がARPを送った図を見てください。ARP要求したPC1が、自分のARPテーブルに情報を追記(または書き換え)しました。では、他のPC2~4はARPテーブルに情報を追記すると思いますか?
というのも、PC1からのARP Requestのフレームによって、PC1のIPアドレスとMACアドレスの情報をPC2~PC4が知ることができます。PC2~PC4は、その情報を、自分のARPテーブルに書き込むでしょうか。
話の流れからすると、書き込むのでしょうか。
正解は、ARP応答を返したPC2だけが書き込みます。一方、PC3とPC4は、このやりとりに関与していないので、ARPテーブルには書き込みません。
この仕組みを利用して、通信相手のARPテーブルに嘘の情報を書き込むことができます。たとえば、PC1が送ったARP Requestですが、自分のMACアドレスを詐称すれば、PC2は、詐称されたMACアドレスをARPテーブルに記載してしまうのです。
(5)ARPに関する過去問
ARPに関して、過去問(H28春FE午後問4)に解説があります。
〔ARPの機能の説明〕 IPアドレスを基にMACアドレスを得るARPの機能は,問合せとしでARP要求”を送信し,それに対する回答としでARP応答”を受け取ることで実現される。例えば,セグメント10.1.1.0/24において,ホストA(IPアドレス10.1.1.10, MACアドレス00:53:00:DA;C7:0B)がホストB(IPアドレス10.1.1.20, MACアドレス00:53:00:EC:17:27)宛てにIPデータグラムを送信しようとしたとき,ホストBのMACアドレスはARPによって,次のようにして得られる。 (1)ホストAは,IPアドレス10.1.1.20に対するARP要求を送信する。このとき,ARP要求は[ c ]される。 (2)ARP要求を受け取ったホストBは,そのARP要求が自分のIPアドレスに対する問合せであることを確認すると,自分のIPアドレス10.1.1.20とMACアドレス00:53:00:EC:17:27を格納したARP応答を送信する。同じARP要求を受け取ったその他のホストは,それが自分のIPアドレスに対する問合せではないので,無視する。 (3)ホストAは,ホストBが送信したARP応答を受け取ることによって,IPアドレス10.1.1.20に対応するMACアドレスが00:53:00:EC:17:27であることが分かる。 ホストAは,ホストBのIPアドレスと得られたMACアドレスの対応付けをキャッシュする。キャッシュが破棄されるまで10.1.1.20宛てのIPデータグラムを送る際,イーサネットフレームの宛先MACアドレスとして00:53:00:EC:17:27を使用する。 |
2.RARPとProxyARP
▼RARP(Reverse Address Resolution Protocol)
・逆アドレス解決プロトコルと訳される。ARP(Address Resolution Protocol)とは逆に、MACアドレスからIPアドレスを解決するプロトコル。
・RARPはMACアドレスからIPアドレスを取得する。ARPとは機能が逆なので、Reverseと付いている。
・ネットワークスペシャリスト試験の過去問では、「電源オフ時にIPアドレスを保持することができない装置が、電源オン時に自装置のMACアドレスから自装置に割り当てられているIPアドレスを知るために用いるデータリンク層のプロトコルで、ブロードキャストを利用するもの」とある。(H21NW午前 問11)
・実際の動作としては、RARPサーバに、MACアドレスとIPアドレスの対応表を保管しておきます。IPアドレスを持てない装置から、IPアドレスが何かというRARPのメッセージが来たら、IPアドレスを答えます。
なんですかこれ?
いまどきそんな機器あるんですか?
それに、DHCPサーバでも、MACアドレスとIPアドレスの情報を管理できますよね。
確かにそうです。今は全く使われません。IPアドレスが持てない装置もほぼありませんし、RARPよりもBOOTPやDHCPプロトコルの方が、優れています。例えば、IPアドレスだけではなくで、デフォルトGWやDNS情報も答えることができます。なので、RARPというものがあって、ARPの反対の動作をする程度で理解しておけばいいでしょう。
▼Proxy ARP
最後はProxy ARPです。こちらもRARPと同様に、それほど重要ではありませんので、聞き流してもらって構いません。
仕組みは、ARPの代理応答を行うものです。たとえば、サブネットマスクを定義できない古いPCが存在する場合に使われます。
[PC1(古いPC) 172.16.1.1] --- [ルータ] --- [PC2(新しいPC) 172.16.2.1/24]
上記の図を少し補足します。古いPCはサブネットを定義できないので、172.16.1.1のPCはクラスBです。
サブネットという概念がないので、172.で始まるIPアドレスは自動的にクラスB、つまりネットワークアドレスが172.16.0.0/16になるのですね。
そうです。よって、PC2(172.16.2.1)も同じ172.16.0.0/16のネットワークにいると考えて、ARPを投げます。ですが、実際にはルータでセグメントが分けられています。ARPはPC2には届きません。そこで、ルータが新PCの代理(Proxy)で古いPCにARPを返すのです。
そもそも、IPアドレスとMACアドレスと2つを使っているからややこしいと思います。
どちらか一つにすればいいのに。
まあ、そうもいかないだろう。まず、L2レベルの通信はMACアドレスが無いとできない。MACアドレスは必須だ。しかし、IPアドレスが無しで、MACアドレスだけでのインターネットは不可能ではないかもしれない。だが、IPアドレスはシンプルな考えかたでルーティングの概念もわりと分かりやすい。2重管理になったとしても、あった方がいいのではないかと思う。
3.GARP
ネットワークスペシャリスト試験の過去問(H28秋NW午前Ⅱ問6)では、「IPv4でのARPを利用したGratuitous ARP の説明」として,「ターゲットIPアドレスフィールドに自端末が使用するIPアドレスを入れて,MACアドレスを問い合わせる」とあります。
さて、Gratuitousは、「いわれのない」や「根拠のない」という意味でして、GARPは本来のARPとは機能が全く違います。
ARPという名がついている理由は、フレームフォーマットはARPと同じだからです。ARPフレームにおいて、本来は調査対象のIPアドレスを入れるフィールドに、自分のIPアドレスを入れています。なので、ARP本来の目的である、MACアドレスを解決するためのフレームではないのです。
じゃあ、何が目的なのですか?
GARPを送信する目的は、(ネットワークスペシャリスト試験対策)としては大きく2つです。
❶ARPテーブルの更新
過去問(R1NW午後1問1)では以下の記載があります。
「マスタルータが故障した際には,新しくマスタになったルータが〔 c:ARP 〕パケットをブロードキャストすることによってL2SWのMACアドレステーブルを更新する。」
ネットワークスペシャリスト試験の過去問(H26秋NW午後1問2)には、「自ポートに設定されたIPアドレスの解決を要求する〔 エ:GARP又は,Gratuitous ARP 〕を用いて接続機器のARPテーブルを更新する」とあります。別のネットワークスペシャリスト試験の過去問(H25NW午後Ⅱ問1)ではGARPの目的が問われ、解答例は「同一サブネット内のIPノードがもつARPキャッシュを更新させるため」となっています。ここにあるように、スイッチなどのARPテーブルを更新することです。
❷MACアドレステーブルの更新
スイッチのMACアドレステーブルの更新。たとえば、VRRPに構成において、マスタルータがダウンした場合、バックアップルータがマスタルータに昇格します。マスタルータに昇格したルータは、スイッチのMACアドレステーブルを更新する目的で送信します。そうしないと、スイッチのMACアドレステーブルは、古い情報、つまり、仮想IPアドレスに対するスイッチのポートが、ダウンしたルータのままになる。
以下、VRRP構成におけるスイッチのMACアドレステーブルを更新するためのGARPです。見てもらうとわかるように、送信元(Sender IP)と宛先(Taeget IP)がどちらも自分自身(=VRRPの仮想IPアドレス)になっている。
参考までに、具体的な検証構成は以下に記載しています。
https://nw.seeeko.com/archives/handson