ARP(4P) — NEWS-OS Programmer’s Manual
名称
arp − アドレス変換プロトコル
形式
pseudo-device ether
解説
ARP は、DARPA インターネットと 10Mb/s イーサネット間のアドレスを ダイナミックにマッピングする際に使用するプロトコルです。 ARP はすべての 10Mb/s イーサネットインターフェースのデバイスドライバで 使用されています。 ARP はインターネットプロトコルや 10Mb/s イーサネットに特有なものでは ありませんが、現在はこの組み合せの通信のみをサポートしています。
ARP は、インターネット−−イーサネット間の アドレスマッピングをキャッシュします。 インターフェースがキャッシュにないアドレスのマッピングを要求すると、 ARP はマッピングを要求するメッセージのキューをつくり、 アドレスマッピングを要求していることをネットワークを通じて送信します。 応答が得られると、新しいマッピングがキャッシュされ、 保留していたメッセージが送信されます。 ARP は、マッピング要求に対する応答を待つ間、 最後に “送信された” パケットを 1 つだけキューにいれて保存します。
ARP を使用しないシステムの通信を容易にするために、 インターネットからイーサネットへの変換テーブル上のエントリを 入力したり削除したりするための ioctl が用意されています。使用方法は以下のとおりです。
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <net/if.h>
struct arpreq arpreq;
ioctl(s, SIOCSARP, (caddr_t)&arpreq);
ioctl(s, SIOCGARP, (caddr_t)&arpreq);
ioctl(s, SIOCDARP, (caddr_t)&arpreq);
各 ioctl は、引数として同じ構造体をとります。 SIOCSARP は ARP のエントリを設定し、SIOCGARP は ARP のエントリを読み出し、 SIOCDARP は ARP のエントリを削除します。 これらの ioctl は、どんなソケット記述子 s にも適用できますが、それはスーパーユーザに限られています。 arpreq 構造体の内容を次に示します。
/∗
∗ ARP ioctl request
∗/
struct arpreq {
struct sockaddrarp_pa;/∗ プロトコルアドレス ∗/
struct sockaddrarp_ha;/∗ ハードウェアアドレス ∗/
intarp_flags; /∗ フラグ ∗/
};
/∗ arp_flags フィールド値 ∗/
#defineATF_COM 0x02 /∗ コンプリートエントリ(arp_ha は有効) ∗/
#defineATF_PERM 0x04 /∗ パーマネントエントリ ∗/
#defineATF_PUBL 0x08 /∗ publish (他のホストへの応答) ∗/
#defineATF_USETRAILERS 0x10 /∗ トレーラパケットをホストへ送る ∗/
arp_pa sockaddr のアドレスファミリーは、AF_INET でなければなりません。 arp_ha sockaddr のアドレスファミリーは、AF_UNSPEC でなければなりません。 設定できるフラグは ATF_PERM、ATF_PUBL、ATF_USETRAILERS だけです。 ATF_PERM は、ioctl コールが成功すれば、エントリを固定エントリとします。 8 以上の固定のインターネットホストアドレスがハッシュによって 同じスロットに入ると、 ARP テーブル固有の性質により ioctl コールは失敗します。 ATF_PUBL は、指定されたホストに対する 他のコンピュータからの ARP 要求に ARP コードが応答するように指示します。 これによって、ホストが “ARP server” として作動します。 “ARP server” は、ARP のみのコンピュータと ARP なしの コンピュータとの通信を行うために用いることができます。
また、ARP は、トレーラ IP の使用を取り決めるためにも使われます。 トレーラは可変長のヘッダの場合でも大きなパケットの位置を変えないために 用いられます。 トレーラパケットを受け付けるホストは、IP 要求に対する応答に加えて 余分な ARP 変換応答を送ることにより、それを示します。 またこれらは、IP の変換応答に対する応答としても送信されます。 この様に片方もしくは両方がトレーラを要求するという点で、 取り決めは完全に対称的です。 ATF_USETRAILERS フラグは、そのような応答の受信を記録するために使用されます。 また、トレーラパケットをそのホストへ送信することを可能にします。
ARPはローカルホストのふりをするホスト(つまり、ローカルホストの アドレスに対するマッピング要求に応答するホスト)を監視しています。
診断
duplicate IP address!! sent from ethernet address: %x:%x:%x:%x:%x:%x. ARP は、ローカルネットワーク上で、それ自身のインターネットアドレスに 対するマッピング要求に応答する別なホストがあることを発見しました。
関連事項
en(4), inet(4F), arp(8C), ifconfig(8c)
“An Ethernet Address Resolution Protocol,” RFC826, Dave Plummer,Network Information Center, SRI.
“Trailer Encapsulations,” RFC893, S.J. Leffler and M.J. Karels,Network Information Center, SRI.
バグ
イーサネット上の ARP パケットは、データの 42 バイトのみを使用します。 しかし、イーサネットの最小パケットは、60 バイト( CRC を除く)です。 最小のパケットのサイズを要求しないシステムもありますが、たいてい は、それを要求しています。
NEWS-OSRelease 4.1C