bionic (7) arp.7.gz

Provided by: manpages-ja_0.5.0.0.20161015+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/ に書かれている。