ARP 协议工作过程:从 IP 找到 MAC

企业网络

同一个局域网内要把数据帧发给某台主机,必须知道它的 MAC 地址,但应用层给出的通常只有 IP 地址。填补这段空白的是 ARP,地址解析协议。两种地址各自的分工见MAC 地址与 IP 地址的分工。

一次完整的解析

假设 192.168.1.10 要访问 192.168.1.20,而缓存里没有对方的记录:

  1. 发出请求。 主机广播一个 ARP 请求,目标 MAC 填 FF:FF:FF:FF:FF:FF,内容是"谁拥有 192.168.1.20,请告诉 192.168.1.10"。广播域内所有设备都会收到。
  2. 只有当事人回应。 192.168.1.20 发现问的是自己,以单播方式回复自己的 MAC 地址。其余设备直接丢弃请求。
  3. 双方都记下来。 请求方把映射写入 ARP 缓存。应答方在处理请求时也顺手记下了请求方的映射,因为请求包里就带着发送方的 IP 和 MAC。
  4. 后续直接发送。 有了缓存,之后的数据帧不再需要广播。

第 3 步是 ARP 的一个重要特性:任何设备只要发过 ARP 请求,就会把自己的映射告诉全网。这既提高了效率,也是安全隐患的根源。

查看和管理缓存

# Linux
ip neigh show

# macOS / BSD
arp -a

# Windows
arp -a

缓存条目有超时时间,Linux 默认几十秒到几分钟不等,过期后需要重新解析。手动清空某一条:

sudo ip neigh del 192.168.1.20 dev eth0

排查连通性问题时,ip neigh 的输出很有价值。状态为 FAILED 说明对方没有回应,通常是设备离线或被防火墙拦下;状态为 STALE 只是缓存到期待验证,不代表故障。

三个常见变体

免费 ARP(Gratuitous ARP)。 设备主动广播自己的 IP 与 MAC 映射,不是为了查询而是为了通告。接口上线、IP 变更、主备切换时都会发,目的是让全网快速更新缓存。它也是检测地址冲突的手段。

ARP 探测(ARP Probe)。 主机配置一个 IP 之前先发探测包,发送方 IP 填全零。如果有人回应,说明这个 IP 已被占用。

代理 ARP(Proxy ARP)。 路由器代替不在本网段的主机应答 ARP,让两侧主机以为彼此同网段。现在多用在特定的 VPN 和无线场景,一般网络里不建议开启,容易造成难以排查的转发异常。

ARP 没有任何认证

这是理解 ARP 安全问题的起点。协议设计于信任网络的年代,收到应答就更新缓存,不校验来源。任何人都可以声称自己拥有网关的 IP,从而把流量引到自己机器上。这就是 ARP 欺骗,防御方法见ARP 欺骗原理与防御。

抓包观察 ARP 是理解二层行为最直接的方式,过滤器写法参见用 Wireshark 按 MAC 过滤抓包。如果抓到的应答里 MAC 地址查不到厂商,可以在查询页确认一下,那往往意味着对方是虚拟接口或启用了地址随机化。

相关文章
关于作者 · Lin

7n4.cn 技术编辑,负责数据链路层与 IP 层主题。文章以协议规范和抓包行为为基础,把容易混淆的字段与流程拆开解释。

← 返回博客列表