Manpages

名 前

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 は デ バ イ ス の 名 前 を 示 す 、 ゼ ロ で 終 端 さ れ た 文 字 列 で あ る 。

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/ に 書 か れ て い る 。