第6篇:一文读懂 ARP:广播请求与应答过程

关键词:ARP 地址解析协议 广播 ARP表 免费ARP ARP代理 华为配置


一、引言

在网络通信中,IP 地址是我们规划网络的"逻辑门牌号",但数据真正在网线上传输时,靠的是 MAC 地址——交换机只认 MAC,不认 IP。那么问题来了:当一台 PC 知道目的 IP 地址,但不知道目的 MAC 地址时,它怎么办?

答案就是 ARP(Address Resolution Protocol,地址解析协议)。

一个真实的案例:某公司网络中,所有 PC 的 IP 均正常,网关可达,但就是无法与同网段的另一台 PC 通信。登录交换机查看 ARP 表,发现大量 IP 地址对应的 MAC 为 Incomplete。最终排查是某台中毒 PC 在大量发送伪造的 ARP 应答(ARP 欺骗),导致正常 ARP 解析被污染。

本文将从 ARP 的基本原理出发,详解 ARP 请求与应答过程、ARP 缓存管理、免费 ARP、ARP 代理以及常见故障诊断。

二、ARP 协议概述

2.1 ARP 的核心作用

ARP 的唯一作用:将 IP 地址解析为 MAC 地址。

以太网帧封装时,需要填写目的 MAC 地址,而应用层只知道目的 IP。ARP 就是连接这两者的桥梁。

ARP 的核心作用 - 图示

2.2 ARP 报文格式

ARP 报文直接封装在以太网帧中(不需要 IP 头),以太网类型字段为 0x0806。

字段 长度 说明
硬件类型 2 字节 1 = 以太网
协议类型 2 字节 0x0800 = IPv4
硬件地址长度 1 字节 6(MAC 地址长度)
协议地址长度 1 字节 4(IPv4 地址长度)
操作码 2 字节 1 = 请求,2 = 应答
发送方 MAC 6 字节 发送方的 MAC 地址
发送方 IP 4 字节 发送方的 IP 地址
目的 MAC 6 字节 请求时填 0,应答时填目标 MAC
目的 IP 4 字节 要查询的 IP 地址

2.3 ARP 报文类型

类型 操作码 目的 MAC 传播方式
ARP Request(请求) 1 00:00:00:00:00:00 广播(FFFF.FFFF.FFFF)
ARP Reply(应答) 2 请求方的 MAC 单播

三、ARP 解析完整过程

3.1 场景设定

设备 IP 地址 MAC 地址 子网掩码
PC_A 192.168.1.10 AA:AA:AA:AA:AA:01 255.255.255.0
PC_B 192.168.1.20 BB:BB:BB:BB:BB:01 255.255.255.0

PC_A 需要向 PC_B 发送数据,但 PC_A 的 ARP 缓存中没有 PC_B 的 MAC 地址。

3.2 ARP 请求阶段

  1. PC_A 检查本地 ARP 缓存,发现无 192.168.1.20 的 MAC 地址
  2. PC_A 构造 ARP Request 报文:
  3. 发送方 MAC:AA:AA:AA:AA:AA:01
  4. 发送方 IP:192.168.1.10
  5. 目的 IP:192.168.1.20
  6. 目的 MAC:00:00:00:00:00:00(未知)
  7. PC_A 以广播方式发送该请求(以太网目的 MAC = FFFF.FFFF.FFFF)
  8. 交换机收到广播帧后泛洪到所有端口
  9. 同一 VLAN 内所有设备均收到该 ARP 请求

3.3 ARP 应答阶段

  1. PC_B 收到 ARP 请求,发现"目的 IP = 自己的 IP(192.168.1.20)"
  2. PC_B 构造 ARP Reply 报文:
  3. 发送方 MAC:BB:BB:BB:BB:BB:01
  4. 发送方 IP:192.168.1.20
  5. 目的 MAC:AA:AA:AA:AA:AA:01(即请求方的 MAC)
  6. 目的 IP:192.168.1.10
  7. PC_B 以单播方式回复 PC_A
  8. PC_A 收到 ARP Reply,提取出 PC_B 的 MAC 地址
  9. PC_A 将 {192.168.1.20 → BB:BB:BB:BB:BB:01} 写入本地 ARP 缓存
  10. PC_A 现在可以封装以太网帧向 PC_B 发送数据了

同时:PC_B 在发送 ARP Request 时也会学到 PC_A 的 MAC 地址,自动将 {192.168.1.10 → AA:AA:AA:AA:AA:01} 写入自己的 ARP 缓存。这就是为什么通信建立后双方都有了彼此的 ARP 记录。

四、ARP 缓存管理

4.1 ARP 缓存表结构

# Windows 查看 ARP 缓存
C:\> arp -a

接口: 192.168.1.10 --- 0x9
  Internet 地址         物理地址              类型
  192.168.1.1     00-e0-fc-12-34-56    动态
  192.168.1.20    bb-bb-bb-bb-bb-01    动态
  192.168.1.100   cc-cc-cc-cc-cc-01    静态
类型 说明 老化
动态(Dynamic) 通过 ARP 交互自动学习 有老化时间(Windows 约 2 分钟,Linux 约 60 秒)
静态(Static) 手动绑定 不过期

4.2 ARP 缓存老化

与 MAC 地址表类似,动态 ARP 表项也有老化时间。如果一段时间内没有与该 IP 通信,表项被删除,下次通信时需重新发起 ARP 请求。

操作系统 默认老化时间
Windows 10/11 约 2 分钟(120 秒)
Linux 约 60 秒(/proc/sys/net/ipv4/neigh/default/base_reachable_time_ms)
华为设备 120 秒(可配置)
# 华为交换机查看 ARP 表
[HUAWEI] display arp

# 华为交换机查看 ARP 老化时间
[HUAWEI] display arp expiry-time

# 修改 ARP 老化时间(秒)
[HUAWEI] arp expiry-time 300

4.3 静态 ARP 配置

# Windows 添加静态 ARP
arp -s 192.168.1.1 00-e0-fc-12-34-56

# Linux 添加静态 ARP
ip neigh add 192.168.1.1 lladdr 00:e0:fc:12:34:56 nud permanent dev eth0

# 华为交换机配置静态 ARP
[HUAWEI] arp static 192.168.1.100 00e0-fc12-3456 interface GigabitEthernet 0/0/1

五、ARP 的特殊应用

5.1 免费 ARP(Gratuitous ARP)

免费 ARP 是一种"自问自答"的 ARP 报文——主机发送一个查询自己 IP 地址的 ARP 请求,而不是查询别人的。

用途一:检测 IP 冲突 - PC 启动或 IP 变更后,先发送免费 ARP - 如果网络中有其他设备回复,说明 IP 冲突 - Windows 提示"存在 IP 地址冲突"即源于此

用途二:通知网络更新 ARP 缓存 - 主备切换后,新主机接管 VIP(虚拟 IP),发送免费 ARP 通知所有设备更新 ARP 表 - 网卡更换后 MAC 变化,通过免费 ARP 通知网络

免费 ARP(Gratuitous ARP) - 图示

5.2 ARP 代理(Proxy ARP)

当两台设备在不同子网但没有中间路由器时,可以通过开启 ARP 代理实现通信。

场景:路由器一个接口连接两个子网(二次编址),PC_A(192.168.1.10)需要访问 PC_B(192.168.2.20)。PC_A 认为 192.168.2.20 不在同一子网,将数据包发给网关。但如果网关未正确配置路由,通信失败。

开启 Proxy ARP 后,路由器代替 PC_B 回复 PC_A 的 ARP 请求,使得 PC_A 误以为 PC_B 在同一网段,从而直接发送数据给路由器,再由路由器转发给 PC_B。

# 华为接口上开启 Proxy ARP
[HUAWEI] interface GigabitEthernet 0/0/1
[HUAWEI-GigabitEthernet0/0/1] arp proxy-enable

注意:Proxy ARP 增加了 ARP 广播的范围,不推荐在大型网络中使用。

六、ARP 常见故障

6.1 ARP 欺骗(ARP Spoofing)

原理:攻击者持续发送伪造的 ARP Reply,声称"网关的 IP(192.168.1.1)对应我的 MAC",导致受害者的流量被引导到攻击者的网卡。

危害:中间人攻击(MITM),可以窃听、篡改网络流量。

华为交换机防御配置:

# 启用 Dynamic ARP Inspection (DAI)
[HUAWEI] arp anti-attack check enable trusted
[HUAWEI] arp detect enable

# 在接入端口上绑定静态 ARP(防止伪造)
[HUAWEI] arp static 192.168.1.100 00e0-fc12-3456 interface GigabitEthernet 0/0/1

6.2 ARP 表 Incomplete

现象:arp -a 显示目标 IP 的 MAC 地址为 Incomplete(不完整)。

原因分析: 1. ARP 请求发送后超时未收到应答 2. 目的主机已关机或断网 3. 目的主机防火墙拦截了 ARP 请求(罕见) 4. 中间存在 VLAN 配置错误,导致 ARP 广播无法到达目标

6.3 跨网段 ARP 问题

关键原则:ARP 只能在同一广播域(同一 VLAN、同一子网)内工作。

当 PC_A(192.168.1.10)要访问 PC_B(10.0.0.100)时: 1. PC_A 判断 10.0.0.100 不在同一子网 2. PC_A 发起 ARP 请求解析的是网关的 IP(而非 PC_B 的 IP) 3. PC_A 获取网关的 MAC 地址后,将数据帧发给网关 4. 网关根据路由表转发数据到 10.0.0.0/24 网络

常见误区:有人尝试直接 ping 10.0.0.100 后执行 arp -a 查看 10.0.0.100 的 MAC,这是看不到的——跨网段通信时,本地 ARP 表中只存在网关的 MAC。

七、总结

概念 说明 要点
ARP 请求 广播询问"谁有这个 IP" 以太网目的 MAC 为 FF:FF:FF:FF:FF:FF
ARP 应答 单播回复"我是这个 IP,我的 MAC 是…" 只有 IP 匹配的设备回复
ARP 缓存 本地 IP→MAC 映射表 动态表项有老化时间
免费 ARP 自问自答的 ARP 检测 IP 冲突 + 通知缓存更新
ARP 代理 路由器代答 ARP 请求 实现跨子网 ARP 解析,不推荐大规模使用
ARP 欺骗 伪造 ARP 应答 需通过 DAI、静态 ARP 等手段防御

核心要点: 1. ARP 是同网段内 IP 到 MAC 的唯一解析手段,跨网段 ARP 解析的是网关 MAC 2. ARP 请求是广播,应答是单播——这是理解 ARP 工作原理的关键 3. ARP 缓存有老化机制,长时间不通信后需重新解析 4. ARP 欺骗是局域网安全的重大威胁,需部署 DAI 或端口安全策略 5. arp -a 是排障 ARP 问题的第一命令

思考题

  1. PC_A(192.168.1.10)Ping PC_B(192.168.1.20),第一次 Ping 通常会出现"请求超时",但后续均正常。请从 ARP 的角度解释原因。
  2. 在交换机上开启了 Proxy ARP 后,原本应该跨网关通信的两台 PC 却能直接通信了,但网络中的 ARP 广播量明显增加。这说明了什么?
  3. 某台服务器更换了网卡(MAC 改变),但 IP 地址不变。其他 PC 与该服务器的通信会中断吗?如何恢复?

下篇预告

ARP 解决了同网段内 IP 到 MAC 的解析问题。那么当两台 PC 在同一个 VLAN 内时,它们的完整通信过程是怎样的?数据帧如何从源设备经过交换机到达目的设备?下一篇文章《同一 VLAN 内两台 PC 如何通信》将完整还原这一过程。