Provided by: manpages-ja_0.5.0.0.20131015+dfsg-2_all bug

名前

       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_USETRAILERS │ trailer が必要               │
              ├────────────────┼──────────────────────────────┤
              │ATF_NETMASK     │ netmask を用いる             │
              ├────────────────┼──────────────────────────────┤
              │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 アルゴリズムを使っている。

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部  である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。