OSDN Git Service

Convert release and draft pages to UTF-8.
[linuxjm/jm.git] / manual / LDP_man-pages / release / man7 / arp.7
1 '\" t
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 $
9 .\"
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
14 .\"
15 .\"WORD         permanent               保存
16 .\"WORD         neighbor cache entry    近傍キャッシュエントリ
17 .\"WORD         stale                   古くなった
18 .\"WORD         proxy arp               代理 arp
19 .\"WORD         garbage collect (-or)   ガベージ・コレクト(コレクタ)
20 .\"WORD         capability              権限
21 .\"WORD         neighbor soliciation message    近傍要請メッセージ
22 .\"WORD         network flooding        ネットワーク・フラッディング
23 .\"WORD         thrashing               スラッシング
24 .\"WORD         connection oriented     接続指向
25 .\"WORD         forward progress        フォワードプログレス
26 .\"
27 .TH ARP 7 2008-11-25 "Linux" "Linux Programmer's Manual"
28 .SH 名前
29 arp \- Linux ARP カーネルモジュール
30 .SH 説明
31 このカーネルプロトコルモジュールは、
32 RFC\ 826 で定義されている Address Resolution Protocol を
33 実装したものである。 ARP は、ダイレクトに接続されたネットワーク上で、
34 第 2 層のハードウェアアドレスをIPv4 プロトコルアドレスに
35 変換するために用いられる。ユーザーは設定の場合を除いて
36 通常直接このモジュールに関ることはない。
37 これはカーネル内部の他のプロトコルにサービスを提供するものである。
38 .PP
39 ユーザープロセスは、
40 .BR packet (7)
41 ソケットを用いれば ARP パケットを受信することができる。
42 ARP キャッシュをユーザー空間で管理することもできる。
43 これには
44 .BR netlink (7)
45 を用いる。 ARP テーブルも制御可能で、これには任意の
46 .B AF_INET
47 ソケットに
48 .BR ioctl (2)
49 を用いる。
50 .PP
51 ARP モジュールはハードウェアアドレスからプロトコルアドレスへの
52 マッピングのキャッシュを管理する。キャッシュの大きさには制限が
53 あるので、古いエントリや利用されないエントリはガベージコレクト
54 される。 permanent (保存) マークがつけられたエントリは、
55 決してガベージコレクタによって消去されない。
56 ioctl を用いればキャッシュを直接操作することもできる。
57 また後述の
58 .I /proc
59 インタフェースによりキャッシュの振る舞いを調整できる。
60 .PP
61 存在しているマッピングに対して、
62 正のフィードバックが一定時間ない (後述の
63 .I /proc
64 インタフェースを見よ) と、
65 近傍キャッシュエントリ (neighbor cache entry) は
66 古くなった (stale) とみなされる。
67 正のフィードバックは高位のレイヤーからも取得できる
68 (例えば TCP ACK が成功した場合など)。
69 他のプロトコルは、
70 .BR sendmsg (2)
71
72 .B MSG_CONFIRM
73 フラグを用いることによって、
74 フォワードプログレス (forward progress) をシグナルできる。
75 フォワードプログレスがなければ、
76 ARP は再びプローブを試みる。
77 まずローカルな arp デーモンに問合わせを行い、
78 更新された MAC アドレスを取得しようとする。
79 このリクエストに
80 .B app_solicit
81 回失敗すると、古い MAC アドレスがわかっている場合は、
82 unicast のプローブが
83 .B ucaset_solicit
84 回送られる。これにも失敗すると、新しい ARP リクエスト
85 をネットワークにブロードキャストする。
86 リクエストは、データが送信キューになければ送られない。
87 .PP
88 Linux は、あるアドレスへのリクエストを受信・フォワードし、
89 受信したインターフェースで代理 arp が有効になっている場合には、
90 自動的にそのアドレスを nonpermanent な代理 arp エントリに追加する。
91 そのターゲットに reject route があった場合には、
92 代理 arp エントリは一切追加されない。
93 .SS ioctl
94 すべての
95 .B AF_INET
96 ソケットでは、 3 つの ioctl が使用できる。
97 これらは
98 .I struct arpreq
99 へのポインタを引数に取る。
100
101 .in +4n
102 .nf
103 struct arpreq {
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 */
108     char            arp_dev[16];
109 };
110 .fi
111 .in
112
113 .BR SIOCSARP ", " SIOCDARP ", " SIOCGARP
114 は、それぞれ ARP マッピングを設定・削除・取得する。
115 ARP マップの設定と削除は特権が必要な操作であり、
116 .B CAP_NET_ADMIN
117 権限を持つプロセスか、実行ユーザー ID が 0 のプロセス
118 でなければ実行できない。
119 .PP
120 .I arp_pa
121
122 .B AF_INET
123 アドレスでなければならず、
124 .I arp_ha
125
126 .I arp_dev
127 で設定されたデバイスと同じタイプでなければならない。
128 .I arp_dev
129 はデバイスの名前を示す、ゼロで終端された文字列である。
130 .RS
131 .TS
132 tab(:) allbox;
133 c s
134 l l.
135 \fIarp_flags\fR
136 フラグ:意味
137 ATF_COM:参照完了
138 ATF_PERM:エントリを peramanent にする
139 ATF_PUBL:エントリを publish する
140 ATF_USETRAILERS:trailer が必要
141 ATF_NETMASK:netmask を用いる
142 ATF_DONTPUB:回答しない
143 .TE
144 .RE
145
146 .PP
147 .B ATF_NETMASK
148 フラグがセットされているときには、
149 .I arp_netmask
150 が有効でなければならない。
151 Linux 2.2 は代理ネットワーク ARP エントリをサポートしていないので、
152 これは 0xffffffff にセットしておくか、あるいは
153 現存の代理 arp エントリを削除したい場合には 0 にしておく必要がある。
154 .B ATF_USETRAILERS
155 は obsolete なので、用いるべきでない。
156 .SS /proc インタフェース
157 ARP では、グローバルなパラメータやインターフェースごとのパラメータを
158 .I /proc
159 インタフェースを通して設定することができる。
160 これらのインタフェースには、
161 .I proc/sys/net/ipv4/neigh/*/*
162 ファイルの読み書きによりアクセスできる。
163 システムにあるそれぞれのインターフェースには、
164 それぞれ対応するディレクトリが
165 .I /proc/sys/net/ipv4/neigh/
166 以下にある。
167 "default" ディレクトリに対して設定をすると、
168 それ以降生成されるデバイス全てに対してその設定が用いられる。
169 特に指定がなければ、時間に関る sysctl の単位は秒である。
170 .TP
171 .IR anycast_delay " (Linux 2.2 以降)"
172 .\" Precisely: 2.1.79
173 IPv6 の近傍要請メッセージ (neighbor soliciation message)
174 に応答するまでの最大遅延時間 (jiffy 単位)。
175 anycast のサポートはまだ実装されていない。
176 デフォルトは 1 秒。
177 .TP
178 .IR app_solicit " (Linux 2.2 以降)"
179 .\" Precisely: 2.1.79
180 ユーザー空間の ARP デーモンに netlink を用いて探索させる最大回数。
181 これを越えるとマルチキャストによる探索に移行する
182 .RI ( mcast_solicit
183 を見よ)。
184 .TP
185 .IR base_reachable_time " (Linux 2.2 以降)"
186 .\" Precisely: 2.1.79
187 近傍のホストがみつかると、そのエントリは
188 .IR base_reachable_time "/2 から 3*" base_reachable_time /2
189 の間のランダムな値の時間、有効であるとみなされる。
190 エントリの有効性は、高位のプロトコルからポジティブなフィードバックを
191 受け取ると延長される。デフォルトは 30 秒。
192 このファイルは現在は非推奨であり、代わりに
193 .I base_reachable_time_ms
194 を使うこと。
195 .TP
196 .IR base_reachable_time_ms " (Linux 2.6.12 以降)"
197 .I base_reachable_time
198 と同じだが、時間をミリ秒単位で測る。
199 デフォルトは 30000 ミリ秒である。
200 .TP
201 .IR delay_first_probe_time " (Linux 2.2 以降)"
202 .\" Precisely: 2.1.79
203 近傍ホストのエントリが古くなったと判断された後に
204 最初に探索を行うまでの遅延時間。デフォルトは 5 秒。
205 .TP
206 .IR gc_interval " (Linux 2.2 以降)"
207 .\" Precisely: 2.1.79
208 ガベージ・コレクタを近傍ホストエントリに対して実行させる頻度。
209 デフォルトは 30 秒。
210 .TP
211 .IR gc_stale_time " (Linux 2.2 以降)"
212 .\" Precisely: 2.1.79
213 古くなった近傍ホストエントリに対してチェックを行う頻度。
214 近傍ホストエントリが古くなったとみなされると、そのエントリに
215 データを送る前には再度解決が行われる。
216 デフォルトは 60 秒。
217 .TP
218 .IR gc_thresh1 " (Linux 2.2 以降)"
219 .\" Precisely: 2.1.79
220 ARP キャッシュに保存するエントリ数の最小値。
221 この数より少ないエントリしかキャッシュになければ、
222 ガベージ・コレクタは実行されない。
223 デフォルトは 128。
224 .TP
225 .IR gc_thresh2 " (Linux 2.2 以降)"
226 .\" Precisely: 2.1.79
227 ARP キャッシュに保存されるエントリ数のソフトな最大値。
228 キャッシュのエントリがこの数を 5 秒間越えつづけると、
229 ガベージ・コレクタが実行される。
230 デフォルトは 512。
231 .TP
232 .IR gc_thresh3 " (Linux 2.2 以降)"
233 .\" Precisely: 2.1.79
234 ARP キャッシュに保存されるエントリ数のハードな最大値。
235 キャッシュのエントリがこの数を越えると、
236 ガベージ・コレクタはただちに実行される。
237 デフォルトは 1024。
238 .TP
239 .IR locktime " (Linux 2.2 以降)"
240 .\" Precisely: 2.1.79
241 ARP エントリをキャッシュに保存する時間の最小値 (jiffy 単位)。
242 可能性のあるマッピングが一つ以上ある (たいていはネットワーク設定のミス)
243 場合に、 ARP キャッシュのスラッシングが起きることを防ぐ。
244 デフォルトは 1 秒。
245 .TP
246 .IR mcast_solicit " (Linux 2.2 以降)"
247 .\" Precisely: 2.1.79
248 エントリを unreachable マークする前に、
249 アドレスをマルチキャスト/ブロードキャストで解決しようとする
250 試行回数の最大値。
251 デフォルトは 3。
252 .TP
253 .IR proxy_delay " (Linux 2.2 以降)"
254 .\" Precisely: 2.1.79
255 既知の代理 ARP アドレスに対して ARP リクエストを受信した場合に、
256 応答前に最大
257 .I proxy_delay
258 jiffy まで遅延する。これは場合によって生じる
259 ネットワーク・フラッディング (network flooding) を避けるために用いる。
260 デフォルトは 0.8 秒。
261 .TP
262 .IR proxy_qlen " (Linux 2.2 以降)"
263 .\" Precisely: 2.1.79
264 代理 ARP アドレスに対してキューイングできる最大のパケット数。
265 デフォルトは 64。
266 .TP
267 .IR retrans_time " (Linux 2.2 以降)"
268 .\" Precisely: 2.1.79
269 リクエストを再度送るまでの遅延時間 (jiffy 単位)。
270 デフォルトは 1 秒。
271 このファイルは現在は非推奨であり、代わりに
272 .I retrans_time_ms
273 を使うこと。
274 .TP
275 .IR retrans_time_ms " (Linux 2.6.12 以降)"
276 リクエストを再度送るまでの遅延時間 (ミリ秒単位)。
277 デフォルトは 1000 ミリ秒。
278 .TP
279 .IR ucast_solicit " (Linux 2.2 以降)"
280 .\" Precisely: 2.1.79
281 ARP デーモンへの問い合わせを行う前に行う unicast 探索の最大試行数
282 .RI ( app_solicit
283 を見よ)。デフォルトは 3。
284 .TP
285 .IR unres_qlen " (Linux 2.2 以降)"
286 .\" Precisely: 2.1.79
287 解決されていないアドレスに対して、
288 他のネットワーク層からキューイングできる最大パケット数。
289 デフォルトは 3。
290 .SH バージョン
291 Linux 2.0 で、
292 .I struct arpreq
293
294 .I arp_dev
295 メンバーが含まれるように変更があった。また同時に
296 ioctl 番号も変更された。古い ioctl は
297 Linux 2.2 で用いることができなくなった。
298
299 ネットワークに対する代理 arp エントリ (netmask が 0xffffffff でない)
300 は、 Linux 2.2 で用いることができなくなった。
301 これはカーネルによって設定される、別のインターフェースにおける
302 到達可能なすべてのホストに対する自動代理 arp によって置き換えられた
303 (そのインターフェースでフォワーディングと代理 arp が有効になっている場合)。
304
305 .I neigh/*
306 の各インタフェースは Linux 2.2 以前には存在しない。
307 .SH バグ
308 いくつかのタイマー設定は jiffy で指定されるが、
309 jiffy はアーキテクチャやカーネルのバージョンに依存する。
310 .BR time (7)
311 を参照のこと。
312 .PP
313 ユーザー空間からポジティブなフィードバックを送る方法が存在しない。
314 つまり接続指向 (connection-oriented) のプロトコルをユーザー空間で
315 実装すると、余計な ARP トラフィックの原因となる。
316 なぜなら ndisc は定期的に MAC アドレスを再探索するからである。
317 同様の問題はいくつかのカーネルプロトコル (NFS over UDP など) にも存在する。
318 .PP
319 この man ページでは IPv4 特有の機能と
320 IPv4・IPv6 で共有される機能とがごっちゃになっている。
321 .SH 関連項目
322 .BR capabilities (7),
323 .BR ip (7)
324 .PP
325 .BR RFC\ 826 :
326 ARP に関する説明
327 .br
328 .BR RFC\ 2461 :
329 IPv6 neighbor discovery に関する説明と、
330 利用されている基礎アルゴリズム
331 .LP
332 Linux 2.2 以降の IPv4 ARP は、
333 可能な場合は IPv6 のアルゴリズムを用いる。