検索
連載

第11回 MACアドレスを解決するARPプロトコル基礎から学ぶWindowsネットワーク(4/4 ページ)

IPパケットを送るには、相手のIPアドレスに加えMACアドレスも知る必要がある。この変換を可能にするのがARPプロトコルだ。

Share
Tweet
LINE
Hatena
前のページへ |       

 それでは実際のARPパケットの例を見てみよう。これは「192.168.0.103」というコンピュータから、「192.168.0.11」というコンピュータに対して、pingコマンドを1パケット送信した場合の例である。Windows Serverのネットワーク・モニタでキャプチャ・解析している。pingを1パケットだけ送信するので、ICMPのechoパケット(次回解説予定)が1往復するだけであるが、その前に、ARPによるアドレス解決のパケットが1往復している。


ARPの要求パケットの例
「192.168.0.103」というコンピュータから、「192.168.0.11」というコンピュータに対して通信しようとした場合のキャプチャ例。最初に相手先のMACアドレスを求めるため、ARP要求が送信されていることが分かる(ARPのエントリが存在する場合は、この要求は送信されない)。
 (1)送信されたARP要求パケット。
 (2)ARPパケット。ハードウェア・タイプは「Ethernet」、プロトコル・タイプはIPを表す「0x0800」、HLENとPLENはそれぞれ「6bytes」と「4bytes」。
 (3)ARP要求を示している。
 (4)送信元のMAC/IPアドレス。送信元MACアドレスはイーサネット・ヘッダ中の送信元MACアドレスと同じ。
 (5)ARPで求めたいあて先のアドレス。
 (6)あて先のMACアドレスは不明なのですべて0が入っている。
 (7)イーサネットのヘッダ。あて先MACアドレスはFF-FF-FF-FF-FF-FF(ブロードキャスト)。送信元MACアドレスは(4)と同じ。プロトコル・タイプは0x0806(ARP)。
 (8)ARPパケット。28bytes。

 ブロードキャストで送信されるARP要求パケットには、送信元のIPアドレスやMACアドレス、あて先のIPアドレスがセットされている。だがあて先MACアドレス・フィールドにはすべて0が埋められていることが分かるだろう。この部分の情報は、ARPの応答によって始めて得られる。

 このARP要求パケットに対する応答の内容を次に示す。あて先と送信元のフィールドの内容がすべて入れ替わり、さらに送信元MACアドレス・フィールドにも値がセットされていることが分かるだろう。


ARPの応答パケットの例
上のARP要求パケットに対する応答の内容。あて先と送信元のフィールドの内容がすべて入れ替わり、さらに送信元MACアドレス・フィールドにも値がセットされていることが分かる。
 (1)相手から返送されたARP応答パケット。
 (2)ARP応答を示している。
 (3)送信元(つまりMACアドレスを求めたいコンピュータ)のMAC/IPアドレス。この(3)(4)のフィールドは、ARP要求パケット中のものと比べると入れ替わっていることに注意。
 (4)送信先(最初にARP要求を送信したコンピュータ)のMAC/IPアドレス。
 (5)これが求めたかったMACアドレス。

ARPコマンドの使い方

 ARPテーブルの内容を表示させたり、変更したりするために、WindowsシステムにはARP.EXEというコマンドが用意されている。引数を何も付けずに実行すると使い方が表示される。

■ARPテーブルの表示
 現在のARPテーブルの内容を表示させるには、「-a」オプションを付けて実行する。

C:\>arp -a

Interface: 192.168.0.103 --- 0x2 …インターフェイス
  Internet Address      Physical Address      Type
  192.168.0.51          00-a0-c9-b4-08-22     dynamic
  192.168.0.54          00-d0-b7-5c-5e-0c     dynamic
  192.168.0.55          00-02-b3-8a-a5-03     dynamic
  192.168.0.112         00-da-ba-da-ba-da     dynamic

 この例では、全部で5つのエントリが表示されている。ARPキャッシュ・エントリの寿命はデフォルトでは10分なので、(最近まで)これらの5台と通信していた、ということが推測される。Type欄にある「dynamic」というのは動的なエントリを表しており、通常はすべてこのタイプになっている。動的とは、登録が自動的に行われ、さらに時間が経つと自動的に消滅するという意味である。だが以下のように手動でエントリを追加すると「static(静的)」となる。

 なおARPテーブルのエントリは、インターフェイスごとに管理されているので、システムに複数のインターフェイスがある場合は「Interface:」の項が複数表示される。

■ARPテーブルの追加
 ARPテーブルに手動でエントリを追加するには、「-s」オプションを付けて、IPアドレスとMACアドレスを指定する。

C:\>arp -a …元のARPテーブル

Interface: 192.168.0.103 --- 0x2
  Internet Address      Physical Address      Type
  192.168.0.51          00-a0-c9-b4-08-22     dynamic
  192.168.0.54          00-d0-b7-5c-5e-0c     dynamic
  192.168.0.55          00-02-b3-8a-a5-03     dynamic
 
C:\>arp -s 192.168.0.21 00-aa-00-62-c6-09 …静的エントリの追加

C:\>arp -a …新しいARPテーブル

Interface: 192.168.0.103 --- 0x2
  Internet Address      Physical Address      Type
  192.168.0.21          00-aa-00-62-c6-09     static …静的エントリ
  192.168.0.51          00-a0-c9-b4-08-22     dynamic
  192.168.0.54          00-d0-b7-5c-5e-0c     dynamic
  192.168.0.55          00-02-b3-8a-a5-03     dynamic 

 通常はこのオプションを使うことはないだろうが、(現在では)一部のプリント・サーバ(プリンタのパラレル・ポートに取り付けて、ネットワーク対応プリンタに変換するための装置)やルータなどで使われていることがある。それらの機器では、外部からIPパケットを送ると、自分自身のIPアドレスをそのIPパケットに合うように書き換える機能を持っている。これにより、簡単にIPアドレスを設定できるようにしている。例えば、そのネットワーク機器(のMACアドレス)に向けて「192.168.0.21」というあて先IPを持つパケットを送信すると、その機器のIPアドレスが自動的に「192.168.0.21」となるのである。そのようなパケットを特定のMACアドレスに向けて送信するには、あらかじめARPテーブルのエントリを用意しておけばよい。このために「-s」オプションが利用できる。こうすると、「192.168.0.21」に向けてパケットを送信しようとすると、自動的に指定したMACアドレスへ向けてイーサネット・フレームが送信される。

■ARPエントリの削除
 ARPエントリを強制的に削除するには、「-d」オプションを使う。ネットワーク機器を入れ換えたりした場合に、強制的にARPテーブルをフラッシュ(消去)したいような場合に利用する。本来ならば自動更新エントリは、通信が途絶えて(デフォルトでは)10分もすると削除されるはずだが、ネットワークの構成が複雑な場合(例:クラスタ構成などを使っているので、同じIPアドレスでも複数のMACアドレスがある、というような場合など)には、手動でARPエントリを削除したいことがある。「-d」オプションはこのような場合に利用する。「-d」オプションだけを指定すると、すべてのエントリが消去されるが、IPアドレスを指定して特定のエントリだけを削除することもできる。

C:\>arp -a …現在の状態

Interface: 192.168.0.103 --- 0x2
  Internet Address      Physical Address      Type
  192.168.0.51          00-a0-c9-b4-08-22     dynamic
  192.168.0.54          00-d0-b7-5c-5e-0c     dynamic
  192.168.0.55          00-02-b3-8a-a5-03     dynamic

C:\>arp -d …エントリを全部削除する

C:\>arp -a
No ARP Entries Found …すべて削除された

RARP

 ARPと似たプロトコルとして、「RARP(Reverse ARP)」というプロトコルもある。ARPパケットの構造のところで解説したように、RARPはARPと同じ構造のパケットを使っている。違いは、動作コードが異なるだけである(ARP要求/応答に対して、RARP要求/応答の2つがある)。ただしすべてのTCP/IPノードがARPをサポートしているのに対し、RARPはオプション規格であり、実装していないことも多い。特にRARPの要求にこたえる側(RARPサーバ)の機能は、特別なシステムでない限り持っていないことが多い。だが構造も機能も似ているので、ここで紹介しておこう。RARPはRFC903「A Reverse Address Resolution Protocol」で定義されている。

 RARPは名前のとおり、ARPとは逆の動作をするためのプロトコルである。ARPが「IPアドレスからMACアドレスを求める」プロトコルであるのに対し、RARPは「MACアドレスからIPアドレスを求める」ために使われる。現在ではこのような目的に使われるプロトコルとして、BOOTPDHCPが広く一般的に使われているが、10年ほど前まではこのRARPを使って起動するようなシステム(特にディスクレスのUNIXワークステーションなど)も多かった。

 RARPのクライアントは、システムの起動時に自分自身のMACアドレスをRARPサーバに対してブロードキャストする。するとRARPのサーバはそのMACアドレスに対するIPアドレスをRARPの応答パケットに入れて返送する。これによってRARPのクライアントは自分自身のIPアドレスを取得することができ、その後のシステムのブート作業を続行することができるのである(RARPの送受信部分は、専用の小さなブート・コードとしてあらかじめシステムのROMの中に用意しておく)。

 RARPは、機能や原理は単純であるが、ARPと同じパケット構造を使っているので、IPアドレスしか渡せず、ドメイン名ゲートウェイサブネット情報などを渡すことができない。またブロードキャストでしか利用できないので(ルータを越えることができない)、現在ではBOOTPやDHCPにとって代わられている。


「連載 基礎から学ぶWindowsネットワーク ―― Windowsネットワーク管理者への道 ―― 」のインデックス

連載 基礎から学ぶWindowsネットワーク ―― Windowsネットワーク管理者への道 ―― 

Copyright© Digital Advantage Corp. All Rights Reserved.

前のページへ |       
ページトップに戻る