ステップ2までで,データを送るLAN内のあて先がわかった。LAN内のあて先は,通信相手か最寄りのルーターである。あて先が特定できたら,あとはそこにデータを送るだけだ。しかし,まだ情報が足りない。それは,イーサネットがLAN内のあて先までデータを届けるために使うMACアドレスである。ステップ3は,MACアドレスを調べる流れを追っていこう。

知っているのはIPアドレス

 イーサネットでデータを送るからには,送信元とあて先のMACアドレスがわからないとダメだ。イーサネットがデータを送信できないからだ。そこでIPが,LAN内のあて先となるネットワーク機器(通信相手か最寄りのルーター)のMACアドレスを調べる。

 しかし,IPが管理しているアドレスはあくまでもIPアドレスである。MACアドレスは範ちゅう外だ。そこでIPは,ARP(アープ)というプロトコルを使ってMACアドレスを調べる。つまり,IPは指示を出すだけで,実際にMACアドレスを調べる仕事はARPが担当する。

 IPはARPにMACアドレスの調査を依頼するときに,MACアドレスのヒントとなる情報を教える。それは,LAN内のあて先になる機器のIPアドレスだ。IPはMACアドレスは知らないが,IPアドレスなら知っている。通信相手のIPアドレスはすでにわかっているし,最寄りのルーターのIPアドレスならデフォルト・ゲートウエイとしてIP設定欄に登録されている。

図2-8●IPがARPに依頼し,LAN内の相手のMACアドレスを調べる
IPがイーサネットで使うMACアドレスを調べる。その際,ARPに処理を依頼する。
図2-9●IPアドレスに対するMACアドレスを調べるARPのしくみ
ARPはIPアドレスに対応するMACアドレスを調べる。まずARPキャッシュを検索し,該当する情報がなかったら,ARP要求パケットをブロードキャストする。

 そこでIPは,特定のIPアドレスを持った機器のMACアドレスを調べるようにARPに指示する。するとARPは,この指示通りにMACアドレスを調べてIPに報告する。

 ARPのしくみは単純だ。ARP要求とARP応答という,たった一往復のやりとりで成り立っている(図2-8[拡大表示])。

ARPを使ってLANの全員に尋ねる

 まずARPは,LAN全体にARP要求と呼ばれるパケットを流す。このARP要求パケットには,調べたい機器のIPアドレスを入れる。つまり,「○○○というIPアドレスを持っている機器がいたらMACアドレスを教えて」というメッセージをLAN内にあるすべての機器に送るのである。

 このARP要求パケットは,イーサネットのブロードキャスト・フレームとして運ばれる。つまり,ARPはイーサネットに依頼して,ARPパケットをブロードキャストしてもらう。

 ARP要求を受け取った機器は,そのARP要求が自分のIPアドレスあてかどうかを判断する。もし,ARP要求のIPアドレスが自分のものとは異なっていたら,そのARP要求は無視する。

 ARP要求のIPアドレスが自分に割り当てられているIPアドレスと一致したら,そのARP要求は自分に向けたものだとわかる。すると,ARP要求を受け取った機器は,ARP要求を出したパソコンにARP応答パケットを返す。そのARP応答パケットには,自分のMACアドレスを書き込む。つまり,「私がIPアドレス○○○です。私のMACアドレスは×××です」というメッセージを返すのだ。

 これでARPはIPから指示されたMACアドレス情報を得る。そして,その情報をIPに伝える。

一度調べたアドレスは覚えておく

 パソコン内の実際の動きを,もう少し詳しく見てみよう(図2-9[拡大表示])。

 始まりは,IPがARPにMACアドレスの調査を依頼するところからだ((1))。

 依頼を受けたARPは,必ずARP要求パケットをLANに出すかというと,実はそうではない。ARPはARPテーブルと呼ばれる情報を最初に検索する((2))。ARPテーブルは,IPアドレスとMACアドレスの対応表である。同じ相手と通信するたびにパケットを毎回送信して調べるのは非効率なので,一度調べた情報をARPテーブルという形で記録しているのである。

 ARPがARPテーブルを検索して,目的のIPアドレスが見つかれば,そのIPアドレスに対応するMACアドレスが答えだ。しかし,ARPテーブルに目的のIPアドレスが見つからなかったら,ARPはLANにARP要求パケットを送り出して,IPアドレスに対するMACアドレスを調べる((3))。

 そしてMACアドレスがわかったら((4)),ARPはIPにMACアドレスを知らせる((5))。

古くなった情報は消す

 ARPテーブルは,パソコン内のメモリー上にあるので,私たちも確認することができる。ARPテーブルを表示するには,コマンド・プロンプトから

arp -a

と実行すればよい。IPアドレスとMACアドレスが対で表示されるはずだ。

 このARPテーブルの内容は,一定時間たつと消えるようになっている。Windows2000/XPの場合は,ARPテーブルに情報が登録されてから2分たつと自動的に消える。もし消えてしまった場合は,再びARP要求とARP応答を使ってMACアドレスを調べる。

 ただし,2分の間に同じ情報を再び使った場合は,寿命がリセットされて,その時点から2分間に寿命が延びる。こうして,同じ情報は最長で10分間保持される。しかし,10分経過すると,そのアドレスは無条件に削除されるようになっている。

 なぜこのようにしているかというと,ARPテーブルの情報を常に最新の状態にしておきたいからである。LAN上の機器は,IPアドレスが変わったり,LANアダプタの差し替えでMACアドレスが変わったり,はたまた機器の電源が切られたりと,状態が刻々と変わる。古い情報をいつまでもARPテーブルに保存したままだと,正しい通信ができなくなってしまうのだ。そこで,2分という比較的短い期間,最長でも10分間で情報を消して,テーブルの情報を更新しているのである。