Manpages

NAME

arp - Linux的 ARP核 心 模 塊

描 述

這 個 核 心 協 議 模 塊 實 現 RFC826中 定 義 的 Address Resolution Protocol [譯 註 : 即 TCP/IP的 第 三 層 到 第 一 層 的 地 址 轉 換 協 議 ], 用 於 在 直 接 相 連 的 網 絡 中 換 第 二 層 硬 件 地 址 和 Ipv4 協 議 地 址 之 間 的 轉 換 。 用 戶 除 非 想 對 其 進 行 配 置 , 否 則 一 般 不 會 直 接 操 作 這 個 模 塊 。 實 際 上 , 它 提 供 對 核 心 中 其 它 協 議 的 服 務 。 用 戶 進 程 可 以 使 用 packet(7) 的 sockets, 收 到 ARP 包 ( 譯 註 : 一 譯 分 組 ) 。 還 有 一 種 機 制 是 使 用 netlink(7) sockets, 在 用 戶 空 間 管 理 ARP 緩 存 的 機 制 。 我 們 也 可 以 通 過 ioctl (2) 控 制 任 意 PF_INET socket上 的 ARP 表

ARP 模 塊 維 護 一 個 硬 件 地 址 到 協 議 地 址 映 射 的 緩 存 。 這 個 緩 存 有 大 小 限 制 , 所 以 不 常 用 的 和 舊 的 記 錄 ( Entry) 將 被 垃 圾 收 集 器 清 除 ( garbage-collected) , 垃 圾 收 集 器 永 遠 不 能 刪 除 標 爲 永 久 的 記 錄 。 我 們 可 以 使 用 ioctls直 接 操 縱 緩 衝 , 並 且 其 性 狀 可 以 用 下 面 定 義 的 sysctl 調 節 。 如 果 在 限 定 的 時 間 ( 見 下 面 的 sysctl) 內 , 一 條 現 存 映 射 沒 有 肯 定 反 饋 時 , 則 認 爲 相 鄰 層 的 緩 存 記 錄 失 效 。 爲 了 再 次 向 目 標 發 送 數 據 , ARP將 首 先 試 着 詢 問 本 地 arp進 程 app_solicit 次 , 獲 取 更 新 了 的 MAC( 介 質 訪 問 控 制 ) 地 址 。 如 果 失 敗 , 並 且 舊 的 MAC地 址 是 已 知 的 , 則 發 送 ucast_solicit 次 的 unicast probe。 如 果 仍 然 失 敗 , 則 將 向 網 絡 廣 播 一 個 新 的 ARP請 求 ,此 時 要 有 待 發 送 數 據 的 隊 列 如 果 Linux 接 到 一 個 地 址 請 求 , 而 且 該 地 址 指 向 Linux 轉 發 的 地 址 , 並 且 接 收 接 口 打 開 了 代 理 arp 時 , Linux 將 自 動 添 加 一 條 非 永 久 的 代 理 arp 記 錄 ; 如 果 存 在 拒 絕 到 目 標 的 路 由 , 則 不 添 加 代 理 arp 記 錄 。

IOCTLS

有 三 個 ioctl 可 以 用 於 所 有 PF_INET 的 sockets 中 。 它 們 以 一 個 指 向 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, SIOCDARPSIOCGARP 可 分 貝 設 置 、 刪 除 和 獲 取 ARP 映 射 。 設 置 和 刪 除 ARP 映 射 是 特 許 操 作 , 只 有 擁 有 CAP_NET_ADMIN 權 限 的 進 程 或 有 效 UID爲 0的 進 程 可 以 執 行 。

arp_pa 必 須 是 AF_INET socket, 並 且 arp_ha 必 須 有 和 arp_dev. 指 定 的 設 備 相 同 的 類 型 。 arp_dev 是 個 以 null結 束 的 設 備 名 字 符 串 。

如 果 設 置 了 ATF_NETMASK 標 誌 , 那 麼 arp_netmask 必 須 有 效 。 Linux 2.2 不 支 持 代 理 網 絡 ARP 記 錄 , 因 此 , 要 設 成 0xffffffff或 者 0, 以 刪 除 現 存 代 理 arp記 錄 。 這 裏 不 使 用 現 存 代 理 arp記 錄 。 ATF_USETRAILERS 已 經 過 時 了 , 不 應 該 繼 續 使 用 。

SYSCTLS

ARP 支 持 一 個 sysctl 接 口 , 可 以 用 以 配 置 全 局 參 數 或 逐 個 網 絡 接 口 地 進 行 配 製 。 該 sysctl 可 以 通 過 /proc/sys/net/ipv4/neigh/*/* 文 件 或 者 使 用 sysctl(2) 接 口 來 訪 問 。 系 統 中 每 個 接 口 都 在 /proc/sys/net/ipv4/neigh/. 中 有 自 己 的 目 錄 。 ’default’目 錄 中 的 設 置 用 於 所 有 新 建 的 設 備 。 sysctl 相 關 的 時 間 是 以 秒 爲 單 位 , 除 非 特 別 聲 明 過 .
anycast_delay
對 IPv6 相 鄰 請 求 信 息 的 回 覆 的 最 大 延 遲 時 間 ; 目 前 還 不 支 持 anycast。 缺 省 值 爲 1秒 。
app_solicit
這 是 在 使 用 多 路 廣 播 探 測 (multicast probe)前 , 經 過 網 絡 連 接 送 到 用 戶 間 隙 ARP端 口 監 控 程 序 的 探 測 ( probe) 最 大 數 目 (見 mcast_solicit )。 缺 省 值 爲 0。
base_reachable_time
一 旦 發 現 相 鄰 記 錄 , 至 少 在 一 段 介 於 base_reachable_time/2和 3*base_reachable_time/2 之 間 的 隨 機 時 間 內 , 該 記 錄 是 有 效 的 。 如 果 收 到 上 層 協 議 的 肯 定 反 饋 , 那 麼 記 錄 的 有 效 期 將 延 長 。 缺 省 值 是 30秒 。
delay_first_probe_time
發 現 某 個 相 鄰 層 記 錄 無 效 (stale)後 , 發 出 第 一 個 探 測 要 等 待 的 時 間 。 缺 省 值 是 5秒 。
gc_interval
收 集 相 鄰 層 記 錄 的 無 用 記 錄 的 垃 圾 收 集 程 序 的 運 行 週 期 , 缺 省 爲 30秒 。
gc_stale_time
決 定 檢 查 一 次 相 鄰 層 記 錄 的 有 效 性 的 週 期 。 當 相 鄰 層 記 錄 失 效 時 , 將 在 給 它 發 送 數 據 前 , 再 解 析 一 次 。 缺 省 值 是 60秒 。
gc_thresh1
存 在 於 ARP高 速 緩 存 中 的 最 少 層 數 , 如 果 少 於 這 個 數 , 垃 圾 收 集 器 將 不 會 運 行 。 缺 省 值 是 128。
gc_thresh2
保 存 在 ARP 高 速 緩 存 中 的 最 多 的 記 錄 軟 限 制 。 垃 圾 收 集 器 在 開 始 收 集 前 , 允 許 記 錄 數 超 過 這 個 數 字 5 秒 。 缺 省 值 是 512。
gc_thresh3
保 存 在 ARP 高 速 緩 存 中 的 最 多 記 錄 的 硬 限 制 , 一 旦 高 速 緩 存 中 的 數 目 高 於 此 , 垃 圾 收 集 器 將 馬 上 運 行 。 缺 省 值 是 1024。
locktime

ARP 記 錄 保 存 在 高 速 緩 存 內 的 最 短 時 間 ( jiffy數 ) , 以 防 止 存 在 多 個 可 能 的 映 射 (potential mapping)時 , ARP 高 速 緩 存 系 統 的 顛 簸 (經 常 是 由 於 網 絡 的 錯 誤 配 置 而 引 起 )。 缺 省 值 是 1 秒 。

mcast_solicit 在 把 記 錄 標 記 爲 不 可 抵 達 的 之 前 , 用 多 路 廣 播 /廣 播 ( multicast/broadcast) 方 式 解 析 地 址 的 最 大 次 數 。 缺 省 值 是 3。
proxy_delay
當 接 收 到 有 一 個 請 求 已 知 的 代 理 ARP 地 址 的 ARP 請 求 時 , 在 迴 應 前 可 以 延 遲 的 jiffy( 時 間 單 位 , 見 BUG) 數 目 。 這 樣 , 以 防 止 網 絡 風 暴 。 缺 省 值 是 0.8秒 。
proxy_qlen
能 放 入 代 理 ARP 地 址 隊 列 (proxy-ARP addresses)的 數 據 包 最 大 數 目 。 缺 省 值 是 64。
retrans_time
重 發 一 個 請 求 前 的 等 待 jiffy( 時 間 單 位 , 見 BUG) 的 數 目 。 缺 省 值 是 1秒 。
ucast_solicit
詢 問 ARP端 口 監 控 程 序 前 , 試 圖 發 送 單 探 測 ( unicast probe) 的 次 數 。 (見 app_solicit). 缺 省 值 是 3秒 。
unres_qlen
每 個 沒 有 被 其 它 網 絡 層 解 析 的 地 址 , 在 隊 列 中 可 存 放 包 的 最 大 數 目 。 缺 省 值 是 3.

BUGS

時 鐘 設 置 的 時 間 單 位 jiffy, 跟 硬 件 體 系 有 關 。 在 Alpha 上 , 一 個 jiffy 是 1/1024 秒 , 而 在 其 它 機 器 上 , 是 1/100 秒 。 目 前 還 沒 有 辦 法 從 用 戶 空 間 發 送 肯 定 反 饋 。 這 意 味 着 在 用 戶 空 間 實 現 的 面 向 連 接 的 協 議 ( connection oriented protocols) 將 產 生 大 量 的 ARP 通 訊 。 因 爲 ndisc將 重 新 探 測 MAC地 址 。 內 核 NFS 的 實 現 也 存 在 同 樣 的 問 題 。 這 個 手 冊 頁 主 要 講 IPv4 規 範 並 且 共 享 IPv4 和 IPv6 的 功 能 .

版 本

Linux 2.0中 的 struct arpreq, 添 加 了 arp_dev , 同 時 ioctl 數 目 也 改 變 了 。 在 Linux 2.2 中 將 不 再 支 持 舊 的 ioctl。 在 Linux 2.2 中 , 取 消 了 對 網 絡 代 理 arp 記 錄 (網 絡 掩 碼 不 是 0xffffffff)的 支 持 。 這 個 功 能 被 內 核 設 置 的 一 個 自 動 代 理 arp 取 代 , 這 個 自 動 代 理 arp 用 於 所 有 位 於 其 它 接 上 的 可 到 達 的 主 機 ( 如 果 該 接 口 的 轉 發 和 代 理 arp 打 開 了 ) 。

另 見

ip(7)

RFC826 瞭 解 ARP 描 述 .
RFC2461 描 述 了 IPv6使 用 的 近 鄰 查 找 以 及 基 本 算 法

[中 文 版 維 護 人 ]

Alan Yao <Alan_Yao [AT] 163.net>

[中 文 版 最 新 更 新 ]

2000/10/23

《 中 國 linux論 壇 man手 冊 頁 翻 譯 計 劃 》 :

http://cmpp.linuxforum.net

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh