2 .\" This man page is Copyright (C) 1999 Matthew Wilcox <willy@bofh.ai>.
3 .\" Permission is granted to distribute possibly modified copies
4 .\" of this page provided the header is included verbatim,
5 .\" and in case of nontrivial modification author and date
6 .\" of the modification is added to the header.
7 .\" Modified June 1999 Andi Kleen
8 .\" $Id: arp.7,v 1.9 2001/03/12 08:45:27 nakano Exp $
10 .\" Japanese Version Copyright (c) 1999-2001 NAKANO Takeo all rights reserved.
11 .\" Translated 1999-12-06, NAKANO Takeo <nakano@apm.seikei.ac.jp>
12 .\" Updated & Modified 2001-02-16, NAKANO Takeo
13 .\" Updated 2008-12-26, Akihiro MOTOKI, LDP v3.14
16 .\"WORD neighbor cache entry 近傍キャッシュエントリ
18 .\"WORD proxy arp 代理 arp
19 .\"WORD garbage collect (-or) ガベージ・コレクト(コレクタ)
21 .\"WORD neighbor soliciation message 近傍要請メッセージ
22 .\"WORD network flooding ネットワーク・フラッディング
23 .\"WORD thrashing スラッシング
24 .\"WORD connection oriented 接続指向
25 .\"WORD forward progress フォワードプログレス
27 .TH ARP 7 2008-11-25 "Linux" "Linux Programmer's Manual"
29 arp \- Linux ARP カーネルモジュール
32 RFC\ 826 で定義されている Address Resolution Protocol を
33 実装したものである。 ARP は、ダイレクトに接続されたネットワーク上で、
34 第 2 層のハードウェアアドレスをIPv4 プロトコルアドレスに
35 変換するために用いられる。ユーザーは設定の場合を除いて
37 これはカーネル内部の他のプロトコルにサービスを提供するものである。
41 ソケットを用いれば ARP パケットを受信することができる。
42 ARP キャッシュをユーザー空間で管理することもできる。
45 を用いる。 ARP テーブルも制御可能で、これには任意の
51 ARP モジュールはハードウェアアドレスからプロトコルアドレスへの
52 マッピングのキャッシュを管理する。キャッシュの大きさには制限が
53 あるので、古いエントリや利用されないエントリはガベージコレクト
54 される。 permanent (保存) マークがつけられたエントリは、
55 決してガベージコレクタによって消去されない。
56 ioctl を用いればキャッシュを直接操作することもできる。
59 インタフェースによりキャッシュの振る舞いを調整できる。
65 近傍キャッシュエントリ (neighbor cache entry) は
67 正のフィードバックは高位のレイヤーからも取得できる
68 (例えば TCP ACK が成功した場合など)。
74 フォワードプログレス (forward progress) をシグナルできる。
77 まずローカルな arp デーモンに問合わせを行い、
78 更新された MAC アドレスを取得しようとする。
81 回失敗すると、古い MAC アドレスがわかっている場合は、
84 回送られる。これにも失敗すると、新しい ARP リクエスト
86 リクエストは、データが送信キューになければ送られない。
88 Linux は、あるアドレスへのリクエストを受信・フォワードし、
89 受信したインターフェースで代理 arp が有効になっている場合には、
90 自動的にそのアドレスを nonpermanent な代理 arp エントリに追加する。
91 そのターゲットに reject route があった場合には、
96 ソケットでは、 3 つの ioctl が使用できる。
104 struct sockaddr arp_pa; /* protocol address */
105 struct sockaddr arp_ha; /* hardware address */
106 int arp_flags; /* flags */
107 struct sockaddr arp_netmask; /* netmask of protocol address */
113 .BR SIOCSARP ", " SIOCDARP ", " SIOCGARP
114 は、それぞれ ARP マッピングを設定・削除・取得する。
115 ARP マップの設定と削除は特権が必要な操作であり、
117 権限を持つプロセスか、実行ユーザー ID が 0 のプロセス
127 で設定されたデバイスと同じタイプでなければならない。
129 はデバイスの名前を示す、ゼロで終端された文字列である。
138 ATF_PERM:エントリを peramanent にする
139 ATF_PUBL:エントリを publish する
140 ATF_USETRAILERS:trailer が必要
141 ATF_NETMASK:netmask を用いる
151 Linux 2.2 は代理ネットワーク ARP エントリをサポートしていないので、
152 これは 0xffffffff にセットしておくか、あるいは
153 現存の代理 arp エントリを削除したい場合には 0 にしておく必要がある。
155 は obsolete なので、用いるべきでない。
157 ARP では、グローバルなパラメータやインターフェースごとのパラメータを
159 インタフェースを通して設定することができる。
161 .I proc/sys/net/ipv4/neigh/*/*
163 システムにあるそれぞれのインターフェースには、
165 .I /proc/sys/net/ipv4/neigh/
167 "default" ディレクトリに対して設定をすると、
168 それ以降生成されるデバイス全てに対してその設定が用いられる。
169 特に指定がなければ、時間に関る sysctl の単位は秒である。
171 .IR anycast_delay " (Linux 2.2 以降)"
172 .\" Precisely: 2.1.79
173 IPv6 の近傍要請メッセージ (neighbor soliciation message)
174 に応答するまでの最大遅延時間 (jiffy 単位)。
175 anycast のサポートはまだ実装されていない。
178 .IR app_solicit " (Linux 2.2 以降)"
179 .\" Precisely: 2.1.79
180 ユーザー空間の ARP デーモンに netlink を用いて探索させる最大回数。
181 これを越えるとマルチキャストによる探索に移行する
185 .IR base_reachable_time " (Linux 2.2 以降)"
186 .\" Precisely: 2.1.79
188 .IR base_reachable_time "/2 から 3*" base_reachable_time /2
189 の間のランダムな値の時間、有効であるとみなされる。
190 エントリの有効性は、高位のプロトコルからポジティブなフィードバックを
191 受け取ると延長される。デフォルトは 30 秒。
192 このファイルは現在は非推奨であり、代わりに
193 .I base_reachable_time_ms
196 .IR base_reachable_time_ms " (Linux 2.6.12 以降)"
197 .I base_reachable_time
201 .IR delay_first_probe_time " (Linux 2.2 以降)"
202 .\" Precisely: 2.1.79
203 近傍ホストのエントリが古くなったと判断された後に
204 最初に探索を行うまでの遅延時間。デフォルトは 5 秒。
206 .IR gc_interval " (Linux 2.2 以降)"
207 .\" Precisely: 2.1.79
208 ガベージ・コレクタを近傍ホストエントリに対して実行させる頻度。
211 .IR gc_stale_time " (Linux 2.2 以降)"
212 .\" Precisely: 2.1.79
213 古くなった近傍ホストエントリに対してチェックを行う頻度。
214 近傍ホストエントリが古くなったとみなされると、そのエントリに
218 .IR gc_thresh1 " (Linux 2.2 以降)"
219 .\" Precisely: 2.1.79
220 ARP キャッシュに保存するエントリ数の最小値。
221 この数より少ないエントリしかキャッシュになければ、
225 .IR gc_thresh2 " (Linux 2.2 以降)"
226 .\" Precisely: 2.1.79
227 ARP キャッシュに保存されるエントリ数のソフトな最大値。
228 キャッシュのエントリがこの数を 5 秒間越えつづけると、
232 .IR gc_thresh3 " (Linux 2.2 以降)"
233 .\" Precisely: 2.1.79
234 ARP キャッシュに保存されるエントリ数のハードな最大値。
239 .IR locktime " (Linux 2.2 以降)"
240 .\" Precisely: 2.1.79
241 ARP エントリをキャッシュに保存する時間の最小値 (jiffy 単位)。
242 可能性のあるマッピングが一つ以上ある (たいていはネットワーク設定のミス)
243 場合に、 ARP キャッシュのスラッシングが起きることを防ぐ。
246 .IR mcast_solicit " (Linux 2.2 以降)"
247 .\" Precisely: 2.1.79
248 エントリを unreachable マークする前に、
249 アドレスをマルチキャスト/ブロードキャストで解決しようとする
253 .IR proxy_delay " (Linux 2.2 以降)"
254 .\" Precisely: 2.1.79
255 既知の代理 ARP アドレスに対して ARP リクエストを受信した場合に、
258 jiffy まで遅延する。これは場合によって生じる
259 ネットワーク・フラッディング (network flooding) を避けるために用いる。
262 .IR proxy_qlen " (Linux 2.2 以降)"
263 .\" Precisely: 2.1.79
264 代理 ARP アドレスに対してキューイングできる最大のパケット数。
267 .IR retrans_time " (Linux 2.2 以降)"
268 .\" Precisely: 2.1.79
269 リクエストを再度送るまでの遅延時間 (jiffy 単位)。
271 このファイルは現在は非推奨であり、代わりに
275 .IR retrans_time_ms " (Linux 2.6.12 以降)"
276 リクエストを再度送るまでの遅延時間 (ミリ秒単位)。
279 .IR ucast_solicit " (Linux 2.2 以降)"
280 .\" Precisely: 2.1.79
281 ARP デーモンへの問い合わせを行う前に行う unicast 探索の最大試行数
285 .IR unres_qlen " (Linux 2.2 以降)"
286 .\" Precisely: 2.1.79
288 他のネットワーク層からキューイングできる最大パケット数。
295 メンバーが含まれるように変更があった。また同時に
296 ioctl 番号も変更された。古い ioctl は
297 Linux 2.2 で用いることができなくなった。
299 ネットワークに対する代理 arp エントリ (netmask が 0xffffffff でない)
300 は、 Linux 2.2 で用いることができなくなった。
301 これはカーネルによって設定される、別のインターフェースにおける
302 到達可能なすべてのホストに対する自動代理 arp によって置き換えられた
303 (そのインターフェースでフォワーディングと代理 arp が有効になっている場合)。
306 の各インタフェースは Linux 2.2 以前には存在しない。
308 いくつかのタイマー設定は jiffy で指定されるが、
309 jiffy はアーキテクチャやカーネルのバージョンに依存する。
313 ユーザー空間からポジティブなフィードバックを送る方法が存在しない。
314 つまり接続指向 (connection-oriented) のプロトコルをユーザー空間で
315 実装すると、余計な ARP トラフィックの原因となる。
316 なぜなら ndisc は定期的に MAC アドレスを再探索するからである。
317 同様の問題はいくつかのカーネルプロトコル (NFS over UDP など) にも存在する。
319 この man ページでは IPv4 特有の機能と
320 IPv4・IPv6 で共有される機能とがごっちゃになっている。
322 .BR capabilities (7),
329 IPv6 neighbor discovery に関する説明と、
332 Linux 2.2 以降の IPv4 ARP は、
333 可能な場合は IPv6 のアルゴリズムを用いる。