今回は,arp(アープ)コマンドを取り上げる。arpコマンドは,同じ名称のARP*というプロトコルを使って,LANにつながっている機器のIPアドレスからMAC(マック)アドレス*を調べた結果を表示するコマンドである。そして前回で紹介した,LAN内の全端末にping(ピング)パケットを送って応答を調べる方法と組み合わせて,LAN内で稼働中の全端末のIPアドレスとMACアドレスの対応表を作ることにしよう。

LAN全体に呼びかけて調べる

 実作業に入る前に,ARPというプロトコルのしくみを確認しておこう。パソコンが自分と同じLANにつながっている機器にIPパケットを送るときには,相手のMACアドレスを指定しなければならない。例えば,コマンド・プロンプト*を開いて,

ping 192.168.0.1
のように,あて先IPアドレスを指定してping(ピング)コマンド*を実行しても,本当は即座にIPパケットをあて先に送るわけではない。あて先IPアドレスの機器が持っているMACアドレスを調べ,そのMACアドレスをあて先にしたイーサネット・フレームにIPパケットを入れて送り出す。つまり,あて先IPアドレスに対応するMACアドレスを調べる「アドレス解決」という処理が必ず介在する。


図1 ARPのしくみ
IPパケットの送信に先立って,IPアドレスに対応するMACアドレスを調べるためにARPが実行される。
[画像のクリックで拡大表示]

 このアドレス解決処理で使われるプロトコルがARPである。例えば1台のパソコンがIPアドレスCの機器にIPパケットを送りたいとしよう(図1[拡大表示](1))。このとき,そのパソコンはLAN内の全端末に届くブロードキャスト・パケットを送信する((2))。このブロードキャスト・パケットがARP要求パケットである。そこには,「IPアドレスがCの人はいますか。いたらMACアドレスを教えて下さい」という内容のメッセージが書かれている。

 このARP要求パケットを受信した機器は,自分のIPアドレスとパケット内に書かれているアドレスを比較する。そして一致したら,「それは私です。MACアドレスはXです」という内容の応答メッセージを返信する((3))。こちらの応答パケットは,ARP応答パケットと呼ばれる。ほかの機器は自分のIPアドレスと一致しないので,ARP要求パケットを受け取っても無視するだけである((3)’)。

 ARP応答パケットを受け取れば,IPアドレスCに対応するMACアドレスがわかる。そしてパソコンは,そのMACアドレスあてのイーサネット・フレームにpingパケットなどを入れて送信する。

調べた結果はメモリーに残る

 ただ,IPパケットを送ろうとするたびに,アドレス解決のためのARP要求とARP応答のパケットをやりとりしていたのでは効率が悪い。そこでパソコンは,ARPのやりとりで1度調べた結果を一定時間だけ,キャッシュとしてメモリーに記録しておく(図1(4))。このメモリーにキャッシュされた情報は,ARPキャッシュと呼ばれる。

 そして,再び同じIPアドレスの機器にIPパケットを届けるときは,ARPのやりとりを実行しないで,ARPキャッシュに記録されている情報を使う。

 ただし時間がたつと,通信相手の機器の電源が切られたり,IPアドレスが変更されたりすることがあるので,あまり古くなったARPキャッシュの情報は使わないようにしている。Windowsのデフォルトでは,2分間利用されなかったARPキャッシュの情報は自動的に削除される。このときは,再びアドレス解決のやりとりをする。