TCP/IP protocol suiteには、アドレスリゾル−ションの形式、意味を規定するために アドレスリゾル−ションプロトコル(ARP)が存在する。 ARPには要求(request)、応答(response)の2つのメッセージタイプがある。
以下は、IPプロトコルアドレス(4オクテット)と、イーサネットハードウェアアドレス(6オクテット) が用いられる場合の、ARPメッセージのフォーマットである。
0 | 16 | 32 | |
Hardware address type | Protocol address type | ||
---|---|---|---|
HLEN | PLEN | Operation | |
Sender MAC address | |||
Sender IP address | |||
Target MAC address | |||
Target IP address |
ETHER TYPES (hexadecimal numeral) | Protocol |
---|---|
800 | IP |
806 | ARP |
8035 | Reverse ARP |
809B | Appletalk |
8137-8138 | Novell |
814C | SNMP |
ホストAがホストBのハードウェアアドレスを得たい時は、
ホストAがARP要求メッセージをブロードキャストし、
ホストBのみホストAへARP応答メッセージを(MACアドレスをのせて)返す。
ARPは汎用性を持たせてあるが、イーサネットとIPの組み合わせで使われるのが一般的である。
ARP要求メッセージの、Target MAC addressはすべて0である。
ちなみにRARPはMACアドレスからIPアドレスを得るために使われる。
ARPはフレームの中にカプセル化して送信される。
HEADER | ARPメッセージ(フレームのデータ領域) | CRC |
---|
イーサネットでは、ARPメッセージを含むイーサネットフレームの ヘッダのタイプフィールド(type field)は0x806であると規定している。 タイプフィールドによって、 受信したコンピュータはこのフレームにARPが含まれていることを 知ることができるが、要求メッセージなのか、応答メッセージなのかは識別できない。 そこで、要求か応答かを決めるためには、OPERATIONフィールドを参照する必要がある。
アドレスの結びつけは1度行えば、その後のパケット送信には同じものを利用できる。 そのため、ARPはメモリ内にキャッシュテーブルを作成する。 テーブルのエントリは、応答の到着ごとに書き換えられる。 また、メモリには当然限りがあるので、テーブルが一杯になった時は、 エントリの書き換え時期が最も古いものを破棄する。
キャッシュの作成はARP要求が到着した時にも作成可能である。 ARP要求はブロードキャストされるので、すべてのコンピュータが 結び付け情報をキャッシュテーブルに格納することができるが、 それはCPU効率を考えるとあまり得策ではない。
ARP表を見るには次のようにする。
micky@puni$ /usr/sbin/arp -a Net to Media Table Device IP Address Mask Flags Phys Addr ------ -------------------- --------------- ----- --------------- le0 arith 255.255.255.255 05:00:22:19:5e:31 le0 risyu 255.255.255.255 00:00:39:91:4d:ac le0 guilty 255.255.255.255 06:d0:fa:c7:eb:d9 le0 gear 255.255.255.255 SP 01:00:30:f9:17:d3 ... |
C:\> arp -a interface: 133.70.10.7 Internet Address Physical Address Type 133.70.10.1 03-00-52-34-e7-1c dynamic 133.70.10.2 00-00-41-f4-1f-ab dynamic ... |
アドレスリゾル−ションソフトウェアが、
階層化モデル(layering model)の下位に位置していることにより、
高位の階層のソフトウェアはプロトコルアドレス付けを使用できる。
つまり、下位のアドレスリゾル−ションによって、
高位階層でハードウェアアドレスを気にせずに
プロトコルソフトウェアを開発することが可能になる。