Provided by: manpages-ja_0.5.0.0.20210215+dfsg-1_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.79 の一部 である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。