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