ARPでMACアドレス解決
ARPがMACアドレス情報を入手する仕組みを簡単に記載します。
こちらの記事は次の知識が前提になります。
- MACアドレス
- OSI参照モデル
- IPアドレス
- ネットワークセグメント
概要は次のとおりです。
- ARPリクエストのMACアドレスブロードキャスト(ff:ff:ff:ff:ff:ff)
- ARPリプライによるIPアドレスの返答
- ARPテーブルへの追加
では具体的にみていきましょう。
1. ARPリクエストのMACアドレスブロードキャスト(ff:ff:ff:ff:ff:ff)
ネットワーク層のIPアドレスで通信するためには、
同一ネットワークセグメント上にあるデータリンク層のMACアドレスをお互いに知っている必要があります。
自分と同じネットワークセグメント上にある他のホストと通信する場合は、そのホストのMACアドレス宛てにフレームを飛ばします。
自分と違うネットワークセグメント上にあるホストと通信する場合は、
大抵の場合デフォルトゲートウェイのMACアドレス宛てにフレームを飛ばします。
このMACアドレス情報を入手するため、ホストは通信したい相手のIPアドレス情報をこめて下記のMACアドレス宛にブロードキャストします。
ff:ff:ff:ff:ff:ff
このMACアドレス宛のフレームはルータを超えて転送されません。同一ネットワークセグメント内(ブロードキャストドメイン内)のみ届きます。
2. ARPリプライによるIPアドレスの返答
ARPリクエストが上記アドレス宛にブロードキャストされると、同一ネットワークセグメント内にあるすべてのホストがこれを受け取ります。
その中で、ARPリクエストに含まれるIPアドレスが、自分に設定されたIPアドレスと一致するホストのみ、
ARPリプライを自分のMACアドレスをこめて返します。
ARPリプライの宛先は、ARPリクエストの送信元MACアドレス、すなわちARPリクエストを発信したホストになります。
3. ARPテーブルへの追加
ARPリプライを受信したホスト(ARPリクエストの発信者)は、通信したいIPアドレスをもつホストのMACアドレス情報を入手します。
これによりめでたくIP通信ができるようになります。
IP通信するたびに毎回ARPリクエストを飛ばしていては非効率なので、学習したMACアドレス情報はARPテーブルに保存されます。
次回からのIP通信は、ARPテーブルを参照して適切なMACアドレス宛にフレームを送信します。
【ARPテーブルの例】
ちなみにルータがこのARPリクエストを受け取った場合、受け取ったインターフェースのIPアドレスが、
ARPリクエストの中身にあるIPアドレスと一致すると、ルータ自身が「それは自分のIPで、MACアドレスはこちらですよ」といった具合に、
そのインターフェースのMACアドレスをこめてARPリプライを返します。
このルータがデフォルトゲートウェイであれば、
パソコンはめでたくデフォルトゲートウェイを経由してインターネット上のWEBサーバとIP通信できるようになるわけです。
written by 伊藤豪朗