第6篇:一文读懂 ARP——广播请求与应答过程
一、写在前面
网络通信最底层的问题是:
我知道对方的 IP 地址,但我不知道对方的 MAC 地址,怎么把数据发过去?
ARP(Address Resolution Protocol,地址解析协议)就是来解决这个问题的——通过 IP 地址找到对应的 MAC 地址。
ARP 是网络通信中无处不在但默默工作的协议,理解它是排查网络故障的必备能力。
二、为什么需要 ARP?
在以太网中,二层帧的传输依赖 MAC 地址,但上层应用(TCP/IP)使用的是 IP 地址。
PC-A(192.168.1.1)想给 PC-B(192.168.1.2)发数据
│
▼
它知道 PC-B 的 IP = 192.168.1.2
但不知道 PC-B 的 MAC 地址是什么
│
▼
所以需要 ARP 去问:"192.168.1.2 的 MAC 地址是多少?"
三、ARP 工作过程详解
3.1 场景:同一网段
PC-A PC-B
IP: 192.168.1.1 IP: 192.168.1.2
MAC: AA-AA-AA-AA-AA-AA MAC: BB-BB-BB-BB-BB-BB
│ │
│ │
└──────[交换机]─────────┘
第 1 步:PC-A 查 ARP 缓存
PC-A 想给 192.168.1.2 发数据,先查自己的 ARP 缓存表:
C:\> arp -a
接口: 192.168.1.1 --- 0x5
Internet 地址 物理地址 类型
192.168.1.1 aa-aa-aa-aa-aa-aa 静态 ← 自己的
192.168.1.254 ee-ee-ee-ee-ee-ee 动态 ← 网关
没找到 192.168.1.2 的条目,触发 ARP 请求。
第 2 步:PC-A 发送 ARP 请求(广播)
PC-A 发一个 广播帧:
| 字段 | 值 |
|---|---|
| 源 MAC | AA-AA-AA-AA-AA-AA |
| 目的 MAC | FF-FF-FF-FF-FF-FF(广播) |
| 源 IP | 192.168.1.1 |
| 目的 IP | 192.168.1.2 |
| 操作 | Request(0x0001) |
广播 MAC = FF-FF-FF-FF-FF-FF,交换机收到后会泛洪到所有端口。
第 3 步:所有设备收到广播
- PC-B:检查目的 IP 是自己 → 回复
- PC-C(如果有):检查目的 IP 不是自己 → 丢弃
- 交换机:记录源 MAC(AA-AA-AA-AA-AA-AA)到 MAC 表
第 4 步:PC-B 回复 ARP 应答(单播)
PC-B 发送 单播帧 回复 PC-A:
| 字段 | 值 |
|---|---|
| 源 MAC | BB-BB-BB-BB-BB-BB |
| 目的 MAC | AA-AA-AA-AA-AA-AA(单播,PC-A 的 MAC) |
| 源 IP | 192.168.1.2 |
| 目的 IP | 192.168.1.1 |
| 操作 | Reply(0x0002) |
第 5 步:更新 ARP 缓存
PC-A 收到 ARP Reply,将 192.168.1.2 → BB-BB-BB-BB-BB-BB 写入 ARP 缓存表。
C:\> arp -a
192.168.1.2 bb-bb-bb-bb-bb-bb 动态 ← 刚学的
现在 PC-A 知道 PC-B 的 MAC 了,可以发送真正的数据了。
四、ARP 报文格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
├─────────────────────────────────────────────────────────────────┤
│ 硬件类型(0x0001 = 以太网) │ 协议类型(0x0800 = IP)│
├──────────────────────┬──────────────────────────────────────────┤
│ 硬件地址长度 (6) │ 协议地址长度 (4) │ 操作 │
│ │ │ (1=Req, 2=Reply) │
├─────────────────────────────────────────────────────────────────┤
│ 发送端 MAC 地址(6 字节) │
├─────────────────────────────────────────────────────────────────┤
│ 发送端 IP 地址(4 字节) │
├─────────────────────────────────────────────────────────────────┤
│ 目标 MAC 地址(6 字节) │
├─────────────────────────────────────────────────────────────────┤
│ 目标 IP 地址(4 字节) │
├─────────────────────────────────────────────────────────────────┤
操作(Operation): - 0x0001 = ARP Request(请求) - 0x0002 = ARP Reply(应答)
五、ARP 缓存表
5.1 查看 ARP 缓存
# Windows
arp -a
# Linux
ip neigh show
# 或
arp -n
# 华为交换机
<Huawei> display arp
5.2 缓存老化时间
| 系统 | 默认老化时间 |
|---|---|
| Windows | 通常 15~45 秒(不活动) |
| Linux | 通常 60 秒 |
| 华为交换机 | 默认 1200 秒(20 分钟) |
5.3 手动管理 ARP 缓存
# Windows 删除所有 ARP 条目
arp -d
# Linux 删除特定条目
arp -d 192.168.1.2
# 添加静态 ARP(固化 MAC 映射)
arp -s 192.168.1.100 bb-bb-bb-bb-bb-bb
六、ARP 的三种类型
6.1 普通 ARP(最常用)
同一网段内,通过 IP 查 MAC。
6.2 反向 ARP(RARP)
通过 MAC 找 IP。早期无盘工作站使用,现在基本被 DHCP 取代。
6.3 代理 ARP(Proxy ARP)
概念:路由器/三层设备替其他设备回复 ARP 请求。
场景:PC-A(10.1.1.1/8)想访问 PC-B(10.2.2.2/8)——逻辑上它们在不同的网段,但如果 PC-A 的子网掩码太大(/8),它会认为 PC-B 在同一网段,于是发送 ARP 广播找 PC-B 的 MAC。
这时路由器会代理回复:告诉 PC-A "PC-B 的 MAC 就是我",然后路由器负责把数据转发给 PC-B。
# 华为设备配置代理 ARP
[Huawei-GigabitEthernet0/0/1] arp-proxy enable
七、ARP 相关故障排查
7.1 ARP 表项不完全
C:\> arp -a
192.168.1.2 **不完全** 动态
"不完全" = 发了 ARP Request 但没收到 Reply。原因: - 目标 IP 不存在 - 目标设备关机 - 链路不通 - 目标设备开启了 ARP 防攻击
7.2 IP 地址冲突
ARP 是 IP 冲突排查的重要依据:
C:\> arp -a
192.168.1.100 aa-aa-aa-aa-aa-aa 动态
192.168.1.100 bb-bb-bb-bb-bb-bb 动态 ← 同一个 IP 出现两个 MAC
这就是 IP 冲突的典型表现。同一 IP 对应两个 MAC,说明有两台设备用了同一个 IP。
7.3 ARP 欺骗攻击
攻击者发送伪造的 ARP 报文,把网关的 IP 映射到攻击者的 MAC:
正常情况:
网关 192.168.1.1 → MAC: GG-GG-GG-GG-GG-GG
攻击后:
网关 192.168.1.1 → MAC: HH-HH-HH-HH-HH-HH(攻击者的 MAC)
后果:PC 访问外网的数据全部经过攻击者,被窃听或劫持。
防护手段: - DAI(Dynamic ARP Inspection):交换机检测 ARP 报文合法性 - DHCP Snooping:配合 DAI 做信任端口 - 静态 ARP 绑定:对关键设备固化 ARP
八、华为交换机 ARP 常用命令
# 查看 ARP 表
<Huawei> display arp
# 查看 ARP 表统计
<Huawei> display arp statistics
# 静态 ARP 绑定
[Huawei] arp static 192.168.1.100 bb-bb-bb-bb-bb-bb
# 开启 ARP 防攻击
[Huawei] arp anti-attack check user-bind enable
# 查看 ARP 老化时间
<Huawei> display arp aging-time
# 修改 ARP 老化时间
[Huawei] arp aging-time 600
九、思考
- ARP 请求为什么是广播?ARP 应答为什么是单播?
- ARP 缓存表的默认老化时间一般是多少?太短或太长对网络有什么影响?
- 什么是"ARP 不完全"?看到这个状态怎么排查?
- 什么是 ARP 欺骗?如何防护?
- 代理 ARP 在什么场景下使用?
- 两台 PC 在同一个 VLAN 里,第一次通信时 ARP 和交换机 MAC 学习是什么先后顺序?
下篇预告:第7篇《同一VLAN内两台PC如何通信》——分析同一VLAN内两台PC通信的完整数据流。