1.8 免费 ARP (Gratuitous ARP) 详解
在上一章我们学习了 ARP 的基本功能:由 IP 查 MAC。 通常情况下,ARP 都是“有问必答”的:A 问 B,B 回复 A。
但有一种特殊的 ARP,它不需要别人问,而是设备自己主动发出来的,而且问的问题很奇怪——它在问自己的 IP 地址。这就是 免费 ARP (Gratuitous ARP)。
1. 什么是免费 ARP?
免费 ARP 是指主机发送一个 ARP 请求(或响应),其中:
- Sender IP (源 IP) = 本机配置的 IP
- Target IP (目标 IP) = 本机配置的 IP
就像一个人走进房间,大喊一声:“谁叫张三?请告诉张三(我)!”
1.1 为什么要叫“免费”?
英文单词 Gratuitous 的意思是“无理由的”、“不请自来的”或者“免费的”。 因为这个 ARP 报文不是为了响应某个请求而发的,而是设备自发产生的,所以被称为“免费 ARP”。
2. 报文结构解析
免费 ARP 本质上还是一个标准的 ARP 包,并没有特殊的协议头,只是字段填法不同。 最显著的特征是:Sender IP 等于 Target IP。
它通常以 Request 的形式发送(某些实现也使用 Reply)。
抓包示例: 在 Wireshark 中,你通常会看到 Info 列显示:Gratuitous ARP for 192.168.1.100 (Request)。
注:新旧版wireshark抓包的Info描述可能不一样

3. 核心作用:它到底想干嘛?
既然已经知道自己的 IP 了,为什么还要问?主要有两个目的:
3.1 宣告与更新 (Announce & Update)
这是免费 ARP 最重要的功能——告诉大家“我来了”或者“我变了”。
场景一:更换网卡/主板 假设你有一台服务器 IP 是 192.168.1.10,MAC 是 AA-AA。 交换机和其他电脑的 ARP 表里都记录着:192.168.1.10 -> AA-AA。 今天网卡坏了,你换了一块新网卡,MAC 变成了 BB-BB,但 IP 还是 192.168.1.10。
如果什么都不做,其他设备发给 192.168.1.10 的数据包还会发往旧 MAC AA-AA,导致通信中断。 此时,服务器启动时会自动发送一个免费 ARP:“我是 192.168.1.10,我的 MAC 是 BB-BB!” 收到这个广播的所有设备,会立即更新自己的 ARP 缓存:192.168.1.10 -> BB-BB。网络瞬间恢复。
场景二:VRRP/HSRP 主备切换 在企业网络中,两台路由器(主/备)组成一个虚拟网关(Virtual IP)。 当“主”路由器挂掉,“备”路由器接管 Virtual IP 时,它必须立刻发送免费 ARP,告诉交换机:“现在 Virtual IP 在我这里(我的接口 MAC)!”这样交换机才会把流量引向新的主路由器。
3.2 地址冲突检测 (DAD)
这是免费 ARP 的另一个经典用途。 当设备刚配置好 IP 时,先发个免费 ARP 问一下:“有人用这个 IP 吗?”
- 如果没人理我 -> 这个 IP 安全,我用了。
- 如果有人理我(回复了 ARP Reply)-> 完蛋,冲突了!报错!
注意:关于 DAD 的详细检测流程和现象,请阅读下一章 1.9 DAD (地址冲突检测) 原理深度解析。
4. 安全隐患:ARP 欺骗
成也萧何,败也萧何。免费 ARP 的“强制更新”特性,也成为了黑客攻击的利器。
攻击原理: 攻击者(IP: 1.100)可以伪造一个免费 ARP 包,声称:“我是网关 192.168.1.1,我的 MAC 是 CC-CC(攻击者的MAC)”。 局域网内的电脑收到后,会天真地更新 ARP 表,把发往网关的数据全都发给攻击者。这就是典型的 ARP 欺骗 (ARP Spoofing) 或 ARP 投毒 (ARP Poisoning)。
防御手段:
- DAI (Dynamic ARP Inspection):交换机上的高级功能,只允许合法的 ARP 包通过(结合 DHCP Snooping 绑定表)。
- 静态 ARP 绑定:在服务器或重要设备上手动写死 ARP 条目,不接收动态更新(维护麻烦)。