> Linux Reviews > man >

arp


  1. arp.7.man
  2. arp.8.man


1. arp.7.man

Manpage of ARP

ARP

Section: Linux Programmer's Manual (7)
Updated: 2008-11-25
Index Return to Main Contents
 

名前

arp - Linux ARP カーネルモジュール  

説明

このカーネルプロトコルモジュールは、 RFC 826 で定義されている Address Resolution Protocol を 実装したものである。 ARP は、ダイレクトに接続されたネットワーク上で、 第 2 層のハードウェアアドレスをIPv4 プロトコルアドレスに 変換するために用いられる。ユーザーは設定の場合を除いて 通常直接このモジュールに関ることはない。 これはカーネル内部の他のプロトコルにサービスを提供するものである。

ユーザープロセスは、 packet(7) ソケットを用いれば ARP パケットを受信することができる。 ARP キャッシュをユーザー空間で管理することもできる。 これには netlink(7) を用いる。 ARP テーブルも制御可能で、これには任意の AF_INET ソケットに ioctl(2) を用いる。

ARP モジュールはハードウェアアドレスからプロトコルアドレスへの マッピングのキャッシュを管理する。キャッシュの大きさには制限が あるので、古いエントリや利用されないエントリはガベージコレクト される。 permanent (保存) マークがつけられたエントリは、 決してガベージコレクタによって消去されない。 ioctl を用いればキャッシュを直接操作することもできる。 また後述の /proc インタフェースによりキャッシュの振る舞いを調整できる。

存在しているマッピングに対して、 正のフィードバックが一定時間ない (後述の /proc インタフェースを見よ) と、 近傍キャッシュエントリ (neighbor cache entry) は 古くなった (stale) とみなされる。 正のフィードバックは高位のレイヤーからも取得できる (例えば TCP ACK が成功した場合など)。 他のプロトコルは、 sendmsg(2) に MSG_CONFIRM フラグを用いることによって、 フォワードプログレス (forward progress) をシグナルできる。 フォワードプログレスがなければ、 ARP は再びプローブを試みる。 まずローカルな arp デーモンに問合わせを行い、 更新された MAC アドレスを取得しようとする。 このリクエストに app_solicit 回失敗すると、古い MAC アドレスがわかっている場合は、 unicast のプローブが ucaset_solicit 回送られる。これにも失敗すると、新しい ARP リクエスト をネットワークにブロードキャストする。 リクエストは、データが送信キューになければ送られない。

Linux は、あるアドレスへのリクエストを受信・フォワードし、 受信したインターフェースで代理 arp が有効になっている場合には、 自動的にそのアドレスを nonpermanent な代理 arp エントリに追加する。 そのターゲットに reject route があった場合には、 代理 arp エントリは一切追加されない。  

ioctl

すべての AF_INET ソケットでは、 3 つの ioctl が使用できる。 これらは struct arpreq へのポインタを引数に取る。

struct arpreq {
    struct sockaddr arp_pa;      /* protocol address */
    struct sockaddr arp_ha;      /* hardware address */
    int             arp_flags;   /* flags */
    struct sockaddr arp_netmask; /* netmask of protocol address */
    char            arp_dev[16];
};

SIOCSARP, SIOCDARP, SIOCGARP は、それぞれ ARP マッピングを設定・削除・取得する。 ARP マップの設定と削除は特権が必要な操作であり、 CAP_NET_ADMIN 権限を持つプロセスか、実行ユーザー ID が 0 のプロセス でなければ実行できない。

arp_paAF_INET ソケットでなければならず、 arp_haarp_dev で設定されたデバイスと同じタイプでなければならない。 arp_dev はデバイスの名前を示す、ゼロで終端された文字列である。

arp_flags
フラグ意味
ATF_COM参照完了
ATF_PERMエントリを peramanent にする
ATF_PUBLエントリを publish する
ATF_USETRAILERStrailer が必要
ATF_NETMASKnetmask を用いる
ATF_DONTPUB回答しない

ATF_NETMASK フラグがセットされているときには、 arp_netmask が有効でなければならない。 Linux 2.2 は代理ネットワーク ARP エントリをサポートしていないので、 これは 0xffffffff にセットしておくか、あるいは 現存の代理 arp エントリを削除したい場合には 0 にしておく必要がある。 ATF_USETRAILERS は obsolete なので、用いるべきでない。  

/proc インタフェース

ARP では、グローバルなパラメータやインターフェースごとのパラメータを /proc インタフェースを通して設定することができる。 これらのインタフェースには、 proc/sys/net/ipv4/neigh/*/* ファイルの読み書きによりアクセスできる。 システムにあるそれぞれのインターフェースには、 それぞれ対応するディレクトリが /proc/sys/net/ipv4/neigh/ 以下にある。 "default" ディレクトリに対して設定をすると、 それ以降生成されるデバイス全てに対してその設定が用いられる。 特に指定がなければ、時間に関る sysctl の単位は秒である。
anycast_delay (Linux 2.2 以降)
IPv6 の近傍要請メッセージ (neighbor soliciation message) に応答するまでの最大遅延時間 (jiffy 単位)。 anycast のサポートはまだ実装されていない。 デフォルトは 1 秒。
app_solicit (Linux 2.2 以降)
ユーザー空間の ARP デーモンに netlink を用いて探索させる最大回数。 これを越えるとマルチキャストによる探索に移行する (mcast_solicit を見よ)。
base_reachable_time (Linux 2.2 以降)
近傍のホストがみつかると、そのエントリは base_reachable_time/2 から 3*base_reachable_time/2 の間のランダムな値の時間、有効であるとみなされる。 エントリの有効性は、高位のプロトコルからポジティブなフィードバックを 受け取ると延長される。デフォルトは 30 秒。 このファイルは現在は非推奨であり、代わりに base_reachable_time_ms を使うこと。
base_reachable_time_ms (Linux 2.6.12 以降)
base_reachable_time と同じだが、時間をミリ秒単位で測る。 デフォルトは 30000 ミリ秒である。
delay_first_probe_time (Linux 2.2 以降)
近傍ホストのエントリが古くなったと判断された後に 最初に探索を行うまでの遅延時間。デフォルトは 5 秒。
gc_interval (Linux 2.2 以降)
ガベージ・コレクタを近傍ホストエントリに対して実行させる頻度。 デフォルトは 30 秒。
gc_stale_time (Linux 2.2 以降)
古くなった近傍ホストエントリに対してチェックを行う頻度。 近傍ホストエントリが古くなったとみなされると、そのエントリに データを送る前には再度解決が行われる。 デフォルトは 60 秒。
gc_thresh1 (Linux 2.2 以降)
ARP キャッシュに保存するエントリ数の最小値。 この数より少ないエントリしかキャッシュになければ、 ガベージ・コレクタは実行されない。 デフォルトは 128。
gc_thresh2 (Linux 2.2 以降)
ARP キャッシュに保存されるエントリ数のソフトな最大値。 キャッシュのエントリがこの数を 5 秒間越えつづけると、 ガベージ・コレクタが実行される。 デフォルトは 512。
gc_thresh3 (Linux 2.2 以降)
ARP キャッシュに保存されるエントリ数のハードな最大値。 キャッシュのエントリがこの数を越えると、 ガベージ・コレクタはただちに実行される。 デフォルトは 1024。
locktime (Linux 2.2 以降)
ARP エントリをキャッシュに保存する時間の最小値 (jiffy 単位)。 可能性のあるマッピングが一つ以上ある (たいていはネットワーク設定のミス) 場合に、 ARP キャッシュのスラッシングが起きることを防ぐ。 デフォルトは 1 秒。
mcast_solicit (Linux 2.2 以降)
エントリを unreachable マークする前に、 アドレスをマルチキャスト/ブロードキャストで解決しようとする 試行回数の最大値。 デフォルトは 3。
proxy_delay (Linux 2.2 以降)
既知の代理 ARP アドレスに対して ARP リクエストを受信した場合に、 応答前に最大 proxy_delay jiffy まで遅延する。これは場合によって生じる ネットワーク・フラッディング (network flooding) を避けるために用いる。 デフォルトは 0.8 秒。
proxy_qlen (Linux 2.2 以降)
代理 ARP アドレスに対してキューイングできる最大のパケット数。 デフォルトは 64。
retrans_time (Linux 2.2 以降)
リクエストを再度送るまでの遅延時間 (jiffy 単位)。 デフォルトは 1 秒。 このファイルは現在は非推奨であり、代わりに retrans_time_ms を使うこと。
retrans_time_ms (Linux 2.6.12 以降)
リクエストを再度送るまでの遅延時間 (ミリ秒単位)。 デフォルトは 1000 ミリ秒。
ucast_solicit (Linux 2.2 以降)
ARP デーモンへの問い合わせを行う前に行う unicast 探索の最大試行数 (app_solicit を見よ)。デフォルトは 3。
unres_qlen (Linux 2.2 以降)
解決されていないアドレスに対して、 他のネットワーク層からキューイングできる最大パケット数。 デフォルトは 3。
 

バージョン

Linux 2.0 で、 struct arpreqarp_dev メンバーが含まれるように変更があった。また同時に ioctl 番号も変更された。古い ioctl は Linux 2.2 で用いることができなくなった。

ネットワークに対する代理 arp エントリ (netmask が 0xffffffff でない) は、 Linux 2.2 で用いることができなくなった。 これはカーネルによって設定される、別のインターフェースにおける 到達可能なすべてのホストに対する自動代理 arp によって置き換えられた (そのインターフェースでフォワーディングと代理 arp が有効になっている場合)。

neigh/* の各インタフェースは Linux 2.2 以前には存在しない。  

バグ

いくつかのタイマー設定は jiffy で指定されるが、 jiffy はアーキテクチャやカーネルのバージョンに依存する。 time(7) を参照のこと。

ユーザー空間からポジティブなフィードバックを送る方法が存在しない。 つまり接続指向 (connection-oriented) のプロトコルをユーザー空間で 実装すると、余計な ARP トラフィックの原因となる。 なぜなら ndisc は定期的に MAC アドレスを再探索するからである。 同様の問題はいくつかのカーネルプロトコル (NFS over UDP など) にも存在する。

この man ページでは IPv4 特有の機能と IPv4・IPv6 で共有される機能とがごっちゃになっている。  

関連項目

capabilities(7), ip(7)

RFC 826: ARP に関する説明
RFC 2461: IPv6 neighbor discovery に関する説明と、 利用されている基礎アルゴリズム

Linux 2.2 以降の IPv4 ARP は、 可能な場合は IPv6 のアルゴリズムを用いる。


 

Index

名前
説明
ioctl
/proc インタフェース
バージョン
バグ
関連項目

This document was created by man2html using the manual pages.
Time: 17:38:05 GMT, October 23, 2013

2. arp.8.man

Manpage of ARP

ARP

Section: Linux Programmer's Manual (8)
Updated: 5 Jan 1999
Index Return to Main Contents
 

名前

arp - システムの ARP キャッシュを操作する  

書式

arp [-vn] [-H type] [-i if] -a [hostname]

arp [-v] [-i if] -d hostname [pub]

arp [-v] [-H type] [-i if] -s hostname hw_addr [temp]

arp [-v] [-H type] [-i if] -s hostname hw_addr [netmask nm] pub

arp [-v] [-H type] [-i if] -Ds hostname ifa [netmask nm] pub

arp [-vnD] [-H type] [-i if] -f [filename]

arp は、カーネルの ARP キャッシュをさまざまな方法で操作する。 アドレス・マッピングのエントリーをクリアしたり、 手作業でエントリーを設定したりするのが、主要なオプションである。 デバッグに arp を利用して、ARP キャッシュを完全にダンプすることも可能である。  

オプション

-v, --verbose
何が起こっているかを詳しくユーザーに知らせる。
-n, --numeric
このオプションを指定すると、ホスト名、ポート名、ユーザー名を解決せずに 番号のまま表示する。
-H type, --hw-type type
ARP キャッシュを設定したり読み出したりするとき、 エントリーのどのクラスを対象にして欲しいかを arp に指定する。 このパラメータは、デフォルトでは ether (つまり、IEEE 802.3 10Mbps Ethernet に対応するハードウェア・コード 0x01) に設定されている。 ほかに、たとえば ARCnet (arcnet), PROnet (pronet), AX.25 (ax25), NET/ROM (netrom) などのネットワーク技術が指定できる。
-a [hostname], --display [hostname]
指定したホストのエントリーを表示する。 もし hostname が指定されていない場合は すべての エントリーが表示される。
-d hostname, --delete hostname
指定されたホストのエントリーすべてを削除する。 例えば、これは指定されたホストがダウンしたときなどに使うことができる。
-D, --use-device
インターフェース ifa のハードウェアアドレスを使う。
-i If, --device If
インターフェースを選択する。 ARP キャッシュをダンプする際、 指定されたインターフェースに合致するエントリーのみが出力される。 permanent ARP エントリー、または temp ARP エントリーを設定する場合には、このインターフェースは そのエントリーと関連付けられる。 このオプションを使わないと、 カーネルは経路テーブルからデバイスを推量する。 pub エントリーの場合は、ここに指定するインターフェースは ARP 要求に答えてくれるインターフェースである。
注: これは IP データグラムの経路制御を行なうインターフェースとは、 異なっていなければならない。
-s hostname hw_addr, --set hostname hw_addr
ARP アドレスのマッピング・エントリーを手作業で設定する。 ホスト hostname に対するハードウェア・アドレスは hw_addr に設定される。ハードウェア・アドレスの書式は、 ハードウェア・クラスによって異なるが、 ほとんどのクラスでは普通の書き方が使える。 例えば、ethernet のクラスでは 16 進数 6 バイトであり、 コロンで分割されている。 代理 ARP のエントリーを追加するとき (つまり、 pub フラグを指定したとき) は、 netmask を指定すると、サブネット全体の代理 ARP が設定される。 これはよい風習ではないが、 有効な時もあったので古いカーネルではサポートしていた。 temp フラグを指定しなければ、設定したエントリーは永続的となり、 ARP キャッシュにそのまま残される。
注: カーネル 2.2.0 から、サブネット全体に ARP エントリーをセットすることは 出来なくなっている。 その代わり、Linux では、経路が存在しフォワードされていれば、 自動的に代理 arp される。 詳細は arp(7) を参照すること。
-f filename, --file filename
-s オプションと似ているが、このオプションの場合、アドレスの情報がファイル filename から与えられる。 これは、多数のホストに対して ARP エントリーを設定しなければならない場合に使われる。 データファイルの名前には /etc/ethers がよく使われるが、これは公式のものではない。 filename が指定されない場合、 /etc/ethers がデフォルトとして使われる。

ファイルの書式は簡単である。 ホスト名とハードウェア・アドレスはASCII テキストのみであり、 ホスト名とハードウェア・アドレスの間は空白で区切られる。 加えて、 pub, temp, netmask フラグを使うことができる。

hostname はいずれも、ピリオドで区切られた 10 進表記の IP address でもよい。 互換性のための特別なケースとして、 ホスト名とハードウェア・アドレスの順番を入れ換えることができる。

ARP キャッシュの完全なエントリーには、 C フラグがつけられる。また、永続的 (permanent) なエントリーには M フラグが、公開 (pub) エントリーには P フラグがつけられる。  

ファイル

/proc/net/arp
/etc/networks
/etc/hosts
/etc/ethers  

関連項目

rarp(8), route(8), ifconfig(8), netstat(8)  

著者

Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> また、net-tools の管理者である Bernd Eckenfels <net-tools@lina.inka.de> が多数の改良を行なった。


 

Index

名前
書式
オプション
ファイル
関連項目
著者

This document was created by man2html using the manual pages.
Time: 17:38:05 GMT, October 23, 2013

SVENSKA - SVENSKA - SVENSKA - SVENSKA - pl