MACアドレス(NICの物理的なアドレス)とIPアドレス(OSで設定する論理的なアドレス)を紐づけ、データリンク層とネットワーク層の架け橋的な役割を担うプロトコル。
Address Resolution Protocol
扱い的には2.5層
図:ARPはMACアドレスとIPアドレスを紐づけるプロトコル
ある端末がデータを送信する時、ネットワーク層から受け取ったデータをイーサネットフレームにカプセル化してケーブルに流す。この時、送信元MACアドレスは自分自身のNICのアドレスなのでまだわかるとして、宛先MACアドレスは知りようがない。
そこで実際のデータ通信に先立って、ARPでIPアドレスから宛先MACアドレスを求める。=アドレス解決。
図:イーサネットフレームの宛先MACアドレスは宛先IPアドレスから求める。
ARPのフレームフォーマット
イーサネットヘッダーのタイプコードで0x0806と定義されている。
図:ARPのフレームフォーマット
ハードウェアタイプ
使用しているレイヤー2プロトコルを表す2バイトのフィールド
イーサネットの場合は0x0001
プロトコルタイプ
使用しているレイヤー3プロトコルを表す2バイトのフィールド
IPv4の場合は0x0800
ハードウェアアドレスサイズ
MACアドレスの長さ。6が入る。
プロトコルアドレスサイズ
IPアドレスの長さ。4が入る(IPv4)。
オペレーションコード(オプコード、動作コード)
ARPフレームの種類を表す。
よく見かけるのは
1:ARP Request
2:ARP Reply
目標MACアドレス/目標IPアドレス
ARPで解決したいフィールド。最初はMACアドレスを知りようがないのでダミーのMACアドレス00:00:00:00:00:00をセットする。
ARPによるアドレス解決の流れ
1.まずはARPテーブルを検索。(ARPで解決した情報を一定時間保持するメモリ上のテーブル)
最初は空なのでARP Request処理に移行する。
ARPテーブルに情報がある場合は6に進む。
2.各フィールドの情報を組み立てる。
オペレーションコードはARP Requestを表す「1」。
送信元MACアドレスと送信元IPアドレスに自身のアドレスを入れる。
目標MACアドレスはARP Requestでは無視されるのでダミー(00:00:00:00:00:00)を入れる。
目標IPアドレスはIPヘッダーに含まれるIPアドレスによって変わる。
同じネットワークの場合はそのまま使う。
異なるネットワークの場合はそのネットワークの出口となる「ネクストホップ」を目標IPとして使用。
続いてイーサネットヘッダを組み立てる。
ARP Requestはブロードキャストを使用。つまり宛先MACアドレスはFF:FF:FF:FF:FF:FF
3.そのイーサネットネットワークにいる端末全てにいきわたる。対象の端末はARP Requestを自分に対するARPフレームと判断し受け入れる。併せてARPフィールドに含まれる送信元MACアドレスと送信元IPアドレスをARPテーブルに書き込む。
図:1~3までの処理
4.対象端末はARP Replyを返すために各フィールドの情報を組み立てる。
オペレーションコードはARP Replyを表す「2」
送信元MAC/IPアドレスは自身のアドレス
目標MAC/IPアドレスはRequestを送ってきた端末のもの
続いてイーサネットフレームの組み立て。
ARP Replyはユニキャストを使用。したがって宛先MACアドレスはRequestを送ってきた端末のもの。送信元MACは自身のもの。
5.Requestを送った端末はReplyのARPフィールドに含まれる送信元MACアドレスとIPアドレスを見て送信先を認識。併せてARPテーブルに書きこみ、一時保存する。
図:4~5の処理
6.以降はアドレス解決したMACアドレスを使ってデータ通信を行う。
ARPのキャッシュ機能
ARPの弱点:ブロードキャストを前提としている(最初は相手のMACアドレスを知らないので、ブロードキャストを使用するのは必然)
通信するたびにARPをブロードキャストしていたらそのネットワークはARPで溢れかえる。(そもそもMAC/IPアドレスともにそんなに頻繁に変わるものではない)
→APPのキャッシュ機能
OS等でも異なるが、基本的にエントリ数上限まで保持し続ける。=ARPテーブル
古くなったエントリに通信するときなどはユニキャストのARPを使用して到達性を確認する。そのReplyを受け取れなかったり、APRエントリが削除されていたらまたブロードキャストを使用してARP Requestを送る。
つまり「可能な限りブロードキャストを使用しないようにして、ネットワークがARPでいっぱいにならないように、ARPの処理を行っている」
コメントを残す