Man page - arp(7)
Packages contas this manual
- pts(4)
- initrd(4)
- bootparam(7)
- proc_driver(5)
- udp(7)
- proc_pid_numa_maps(5)
- standards(7)
- epoll(7)
- proc(5)
- proc_net(5)
- urandom(4)
- proc_pid_fdinfo(5)
- mailaddr(7)
- iso-8859-5(7)
- iso_8859-6(7)
- iconv(1)
- full(4)
- user-keyring(7)
- intro(5)
- ftm(7)
- shm_overview(7)
- feature_test_macros(7)
- proc_crypto(5)
- tzfile(5)
- aio(7)
- boot(7)
- proc_profile(5)
- proc_cgroups(5)
- cpuset(7)
- proc_pid_coredump_filter(5)
- proc_pid_cwd(5)
- proc_uptime(5)
- st(4)
- precedence(7)
- ddp(7)
- proc_zoneinfo(5)
- iso_8859_3(7)
- proc_pid_root(5)
- latin4(7)
- proc_tid_children(5)
- proc_pid_oom_adj(5)
- proc_mounts(5)
- iso_8859-14(7)
- ld-linux(8)
- capabilities(7)
- ptmx(4)
- mouse(4)
- sysfs(5)
- rtld-audit(7)
- proc_partitions(5)
- iso_8859_6(7)
- queue(7)
- proc_pid_pagemap(5)
- proc_pid_stack(5)
- proc_pid_mem(5)
- uri(7)
- ttytype(5)
- namespaces(7)
- proc_sys_user(5)
- latin5(7)
- procfs(5)
- charmap(5)
- proc_sys_kernel(5)
- getent(1)
- ip(7)
- iso_8859-5(7)
- queue(3)
- proc_sys_vm(5)
- random(7)
- iso-8859-10(7)
- process-keyring(7)
- protocols(5)
- system_data_types(7)
- operator(7)
- proc_pid_timerslack_ns(5)
- wtmp(5)
- iso_8859_15(7)
- cp1252(7)
- iso_8859_11(7)
- pkeys(7)
- kmem(4)
- proc_pid_clear_refs(5)
- proc_meminfo(5)
- latin8(7)
- zdump(8)
- fuse(4)
- utf-8(7)
- proc_kpagecount(5)
- futex(7)
- complex(7)
- iso_8859-13(7)
- proc_kcore(5)
- iso_8859-8(7)
- iso_8859_14(7)
- iconvconfig(8)
- network_namespaces(7)
- thread-keyring(7)
- locale(5)
- proc_pid_oom_score_adj(5)
- proc_pid_statm(5)
- signal-safety(7)
- units(7)
- re_format(7)
- proc_pid_comm(5)
- latin1(7)
- glibc(7)
- environ(7)
- iso_8859-9(7)
- tty(4)
- proc_pid_projid_map(5)
- urn(7)
- iso_8859_8(7)
- proc_loadavg(5)
- ipc_namespaces(7)
- proc_pid_syscall(5)
- proc_pid_cgroup(5)
- proc_pid_mountstats(5)
- proc_kpageflags(5)
- utmpx(5)
- termio(7)
- iso-8859-13(7)
- suffixes(7)
- iso_8859-16(7)
- intro(1)
- hostname(7)
- proc_pid_status(5)
- proc_pid_fd(5)
- proc_malloc(5)
- proc_sys_debug(5)
- proc_pid_mounts(5)
- console_codes(4)
- iso_8859_2(7)
- iso-8859-16(7)
- proc_thread-self(5)
- socket(7)
- sock_diag(7)
- null(4)
- raw(7)
- memusagestat(1)
- proc_pid_mountinfo(5)
- proc_sys_sunrpc(5)
- iso-8859-1(7)
- motd(5)
- iso_8859-7(7)
- utmp(5)
- proc_pid_auxv(5)
- latin2(7)
- intro(2)
- proc_modules(5)
- user_namespaces(7)
- iso-8859-2(7)
- proc_version(5)
- ldd(1)
- iso_8859-3(7)
- proc_diskstats(5)
- session-keyring(7)
- ascii(7)
- hosts.equiv(5)
- group(5)
- intro(4)
- proc_cmdline(5)
- resolver(5)
- time(7)
- packet(7)
- proc_kpagecgroup(5)
- hosts(5)
- proc_pid_maps(5)
- proc_tty(5)
- inotify(7)
- msr(4)
- tzselect(8)
- proc_locks(5)
- hpsa(4)
- mount_namespaces(7)
- cgroups(7)
- fanotify(7)
- latin7(7)
- intro(6)
- proc_slabinfo(5)
- proc_timer_list(5)
- proc_kallsyms(5)
- mq_overview(7)
- proc_buddyinfo(5)
- iso_8859-15(7)
- proc_pid_wchan(5)
- iso-8859-8(7)
- proc_stat(5)
- attributes(7)
- proc_bus(5)
- sln(8)
- iso_8859_4(7)
- cgroup_namespaces(7)
- symlink(7)
- fifo(7)
- proc_keys(5)
- locale(1)
- proc_devices(5)
- inode(7)
- iso_8859_13(7)
- nptl(7)
- svipc(7)
- proc_sys_proc(5)
- xattr(7)
- proc_key-users(5)
- iso_8859_10(7)
- erofs(5)
- sd(4)
- proc_ide(5)
- proc_dma(5)
- proc_pid_environ(5)
- utf8(7)
- proc_pid_seccomp(5)
- tcp(7)
- localedef(1)
- path_resolution(7)
- proc_kmsg(5)
- regex(7)
- unix(7)
- netdevice(7)
- host.conf(5)
- nss(5)
- proc_pid_io(5)
- issue(5)
- iso_8859-10(7)
- pipe(7)
- nologin(5)
- vcs(4)
- proc_mtrr(5)
- networks(5)
- resolv.conf(5)
- pldd(1)
- koi8-r(7)
- arp(7)
- ld.so(8)
- wavelan(4)
- proc_pid_uid_map(5)
- zero(4)
- iso-8859-7(7)
- memusage(1)
- iso-8859-6(7)
- latin6(7)
- user-session-keyring(7)
- armscii-8(7)
- shells(5)
- cp1251(7)
- rtnetlink(7)
- koi8-u(7)
- address_families(7)
- cpuid(4)
- core(5)
- pty(7)
- tis-620(7)
- iso_8859-1(7)
- math_error(7)
- iso_8859-4(7)
- proc_pid_autogroup(5)
- man(7)
- cciss(4)
- icmp(7)
- sprof(1)
- glob(7)
- iso-8859-9(7)
- proc_sys_dev(5)
- url(7)
- zic(8)
- sched(7)
- services(5)
- proc_pid(5)
- securetty(5)
- acct(5)
- loop(4)
- vcsa(4)
- iso_8859-2(7)
- proc_vmstat(5)
- pthreads(7)
- proc_timer_stats(5)
- uts_namespaces(7)
- elf(5)
- libc(7)
- proc_sysrq-trigger(5)
- credentials(7)
- proc_sys_net(5)
- numa(7)
- bpf-helpers(7)
- netlink(7)
- proc_pid_personality(5)
- iso_8859-11(7)
- mem(4)
- proc_apm(5)
- proc_pid_task(5)
- proc_cpuinfo(5)
- iso_8859_7(7)
- random(4)
- proc_sys_fs(5)
- proc_pid_ns(5)
- proc_filesystems(5)
- slabinfo(5)
- proc_sys_abi(5)
- latin9(7)
- proc_pid_stat(5)
- proc_execdomains(5)
- proc_swaps(5)
- keyrings(7)
- proc_ioports(5)
- iso_8859_1(7)
- hd(4)
- proc_self(5)
- landlock(7)
- proc_interrupts(5)
- port(4)
- proc_pid_cpuset(5)
- vdso(7)
- iso_8859_5(7)
- intro(7)
- mtrace(1)
- latin3(7)
- proc_sys(5)
- repertoiremap(5)
- lirc(4)
- filesystems(5)
- proc_ksyms(5)
- unicode(7)
- iso_8859_9(7)
- man-pages(7)
- pid_namespaces(7)
- proc_pid_attr(5)
- proc_sysvipc(5)
- intro(3)
- spufs(7)
- proc_config.gz(5)
- sem_overview(7)
- ldconfig(8)
- loop-control(4)
- iso-8859-4(7)
- proc_pid_timers(5)
- smartpqi(4)
- posixoptions(7)
- nsswitch.conf(5)
- proc_pid_map_files(5)
- time_namespaces(7)
- string_copying(7)
- iso-8859-11(7)
- proc_pid_gid_map(5)
- latin10(7)
- proc_pid_setgroups(5)
- ld-linux.so(8)
- ram(4)
- iso-8859-3(7)
- intro(8)
- proc_fb(5)
- vsock(7)
- termcap(5)
- fs(5)
- proc_iomem(5)
- iso-8859-15(7)
- signal(7)
- persistent-keyring(7)
- rtc(4)
- dsp56k(4)
- proc_pid_net(5)
- rpc(5)
- lp(4)
- veth(4)
- hier(7)
- kernel_lockdown(7)
- iso-8859-14(7)
- dir_colors(5)
- proc_scsi(5)
- proc_pid_cmdline(5)
- proc_fs(5)
- x25(7)
- proc_tid(5)
- proc_pid_smaps(5)
- proc_pid_limits(5)
- proc_pid_oom_score(5)
- locale(7)
- proc_pci(5)
- charsets(7)
- iso_8859_16(7)
- ipv6(7)
- tmpfs(5)
- proc_pid_exe(5)
- sysvipc(7)
- udplite(7)
- gai.conf(5)
apt-get install manpages
Available languages:
en fr pt_BR es pl ja ru zh_TW zh_CNManual
| ARP(7) | Linux Programmer's Manual | ARP(7) |
名前
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_pa は AF_INET アドレスでなければならず、 arp_ha は arp_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 arpreq に arp_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), arpd(8)
RFC 826: ARP の説明。 RFC 2461: IPv6 neighbor discovery の説明と利用されている基礎アルゴリズム。 Linux 2.2 以降では IPv4 ARP は可能な場合は IPv6 アルゴリズムを使っている。
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。
| 2020-08-13 | Linux |