命令是干什么的
arp 是 net-tools 提供的传统命令,用来查看和修改内核的 ARP 缓存,也就是邻居表,里面记录同一广播域中 IP 与 MAC 的对应关系。它的现代替代品是 iproute2 的 ip neigh,两者读写的是同一份内核数据。差别在于 ip neigh 能看到条目的完整状态机,比如可达、陈旧、探测中、失败,而传统 arp 只给出地址、硬件地址和几个标志位,这是排查时更推荐 ip neigh 的原因。
基本信息
| 适用平台 | Linux,来自 net-tools,新版精简安装默认不带 |
|---|---|
| 查看语法 | arp -n 不解析主机名;arp -a 输出 BSD 风格;arp -i 网卡 限定接口 |
| 修改语法 | arp -s 地址 MAC 手工添加静态条目;arp -d 地址 删除条目 |
| 批量导入 | arp -f 文件 读取 /etc/ethers 格式的静态映射 |
| 现代替代 | ip neigh show、ip neigh del、ip neigh replace,可看到条目状态 |
| 权限要求 | 查看任意用户可读,增删条目需要 root |
典型使用场景
- 同网段通信异常时,核对对端 IP 解析出的 MAC 是否与登记信息一致
- 怀疑 IP 冲突:同一 IP 在表里对应不同 MAC 时能快速定位
- 换网卡或换设备后表里还留着旧 MAC,需要清掉触发重新学习
- 给关键网关写静态绑定,避免地址解析出现抖动
- 老系统只装了 net-tools,需要与 ip neigh 的输出互相对照
- 观察代理 ARP 或路由型设备的应答行为时查看标志位
常用示例
常用示例
arp -n # 数字形式查看邻居表,不查主机名
arp -a # BSD 风格输出,形如 地址 (IP) at MAC on eth0
arp -i eth0 -n # 只看指定网卡的条目
arp -d 10.0.0.9 # 删除单条,设备换 MAC 后触发重新学习
arp -s 10.0.0.9 00:11:22:33:44:55 # 手工添加静态条目,会带永久标志
arp -f /etc/ethers # 批量导入静态映射
ip neigh show # 现代写法,能看到可达与陈旧等状态
arping -I eth0 -c 3 10.0.0.9 # 主动探测,确认该 IP 现在由谁应答arp -n 输出逐列读法
| 列名 | 含义 | 正常与异常 |
|---|---|---|
| Address | IP 地址 | 同一 IP 反复出现且 MAC 变化,提示冲突或设备漂移 |
| HWtype | 硬件类型,ether 表示以太网 | 出现不认识的类型说明链路层不是常规以太网 |
| HWaddress | 对应的 MAC 地址 | 为空或显示不完整说明还没解析成功 |
| Flags Mask | C 表示完整条目,M 表示永久静态条目 | 带 M 的条目不会老化,换设备后必须手工修改 |
| Iface | 关联的网卡 | 与预期出口不一致说明表项来自别的接口 |
内核里的邻居条目有自己的生命周期,常见状态包括可达、陈旧、探测、失败,这些状态 ip neigh 会直接显示,传统 arp 看不到;排查时以 ip neigh 的状态为准。
arp -s 建立的静态条目带永久标记,不参与老化,适合给稳定网关做绑定;设备更换后忘了改,就会出现查得到条目却完全不通的情况。
net-tools 多年不更新,新发行版与精简镜像常不预装;新脚本一律用 ip neigh,arp 主要用于读懂老资料和维护老系统。