名 前
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 は デ バ イ ス の 名 前 を 示 す 、 ゼ ロ で 終 端 さ れ た 文 字 列 で あ る 。
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 で 共 通 の 機 能 を 一 緒 に 説 明 し て い る 。
関 連 項 目
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/ に 書 か れ て い る 。