4、ARP广播泛滥:ARP请求机制、ARP表项老化、ARP攻击与欺骗

说到广播丢包,ARP 是个绕不开的话题。我处理过的网络故障里,至少有三成跟 ARP 异常有关。说白了,ARP 就像网络世界的“户籍警”——它负责把 IP 地址翻译成 MAC 地址。但这个翻译过程,天生就带着广播的基因。

你想想看,一台设备想知道另一台设备的 MAC 地址,它只能扯着嗓子喊:“谁是 192.168.1.1?请把你的 MAC 告诉我!”这一喊,整个广播域都听到了。正常情况下,这没什么问题。但如果喊的人太多,或者有人使坏,那广播就会像洪水一样泛滥,把网络带宽和交换机 CPU 全部吃掉。

4.1 ARP 请求机制:广播的源头

ARP 的工作原理其实很简单。我习惯把它分成三步:

  1. 查表:主机要发数据,先看自己的 ARP 缓存表。有记录就直接用,没有就进入下一步。
  2. 广播请求:主机发送一个 ARP 请求帧,目标 MAC 地址填全 F(FF:FF:FF:FF:FF:FF),在整个二层网络里广播。
  3. 单播回应:目标 IP 的设备收到后,发现是在找自己,就回复一个单播 ARP 应答,把自己的 MAC 告诉请求方。

这里有个关键点:ARP 请求是广播,但应答是单播。我见过不少刚入行的同事搞混这一点,排查问题时老盯着单播看,方向完全错了。

核心结论:ARP 广播本身不是问题,问题是广播的频率和规模。一个正常的网络,ARP 广播占比应该低于总流量的 1%。超过 5%,你就该警惕了。

举个例子,一个 C 类网段有 254 个 IP。如果一台主机突然要跟所有 IP 通信,它就会连续发出 254 个 ARP 请求。这在小型网络里还能扛住,但在几千台设备的园区网里,这种突发广播就能让交换机 CPU 直接飙到 100%。

4.2 ARP 表项老化:看不见的丢包元凶

ARP 缓存表不是永久有效的。每一条记录都有个“保质期”,也就是老化时间。不同厂商、不同系统的默认值不一样:

操作系统/设备 默认老化时间 我个人的建议
Windows (10/11/Server) 15-45 秒(动态) 保持默认,别乱改
Linux (内核默认) 60 秒 服务器可适当调大到 300 秒
Cisco 交换机 240 秒(4 分钟) 核心层建议 600 秒
华为交换机 1200 秒(20 分钟) 接入层保持默认即可

老化时间太短会怎样?设备频繁发起 ARP 请求,广播流量激增。老化时间太长呢?MAC 地址变了(比如换了网卡),设备还拿着旧记录,数据就发不出去。

我在项目中遇到过一个问题:某公司财务系统每天下午 3 点准时卡顿,持续 5 分钟。查了一圈,发现是财务服务器的 ARP 老化时间被误设为 10 秒。每到整点,大量客户端同时访问服务器,ARP 请求像潮水一样涌出来,把接入交换机打懵了。把老化时间改回 60 秒后,问题再没出现过。

避坑指南:我曾经在核心交换机上把 ARP 老化时间改成 7200 秒,想着减少广播。结果第二天全网瘫痪——因为一台服务器的网卡半夜坏了,换新后 MAC 变了,但所有交换机都还记着旧 MAC。嗯,从那以后我再也不敢把老化时间设超过 1800 秒。

4.3 ARP 攻击与欺骗:人为制造的广播风暴

ARP 协议有个致命弱点——它不验证身份。任何设备都可以声称“我是 192.168.1.1”,其他设备就会乖乖更新自己的 ARP 表。这就是 ARP 欺骗的原理。

常见的 ARP 攻击场景有三种:

  • ARP 泛洪攻击:攻击者伪造大量源 IP 和 MAC 地址,发送海量 ARP 请求或应答。交换机的 ARP 表项被撑爆,正常设备的 ARP 请求无法被处理,导致丢包。
  • ARP 欺骗(中间人攻击):攻击者冒充网关,让所有主机的流量都先经过自己,然后转发。这样既能窃听数据,也能选择性丢包。
  • ARP 重定向:攻击者告诉交换机“某个 MAC 地址对应的端口变了”,把流量引向错误的方向。

我记得有一次,一家电商公司做促销活动,网站突然打不开。我远程上去一看,核心交换机的 ARP 表项从正常的 200 条暴涨到 8000 条,CPU 占用率 99%。很明显,有人在搞 ARP 泛洪。后来查出来,是内网一台 PC 中了病毒,病毒每秒钟发送上千个伪造 ARP 包。

警告:ARP 攻击的破坏力远超你的想象。它不仅能造成广播丢包,还能让整个二层网络瘫痪。更可怕的是,ARP 欺骗可以绕过防火墙和 IDS,直接窃取敏感数据。我见过一个案例,攻击者通过 ARP 欺骗劫持了财务人员的流量,修改了转账页面上的收款账号,公司损失了 80 万。

4.4 知识体系:ARP 广播问题全景图

下面这张图,是我自己梳理的 ARP 广播问题排查框架。每次遇到相关故障,我都会按这个思路走一遍。

ARP 广播问题排查框架 ARP 广播异常 正常广播 老化时间合理 广播占比 < 1% 配置问题 老化时间过短 ARP 表项容量不足 ARP 攻击 泛洪 / 欺骗 表项异常暴涨 结论:定位根因 → 针对性修复

4.5 实战修复策略

遇到 ARP 广播问题,我一般按这个顺序处理:

  1. 确认症状:用 Wireshark 抓包,看 ARP 广播包的频率和来源。正常网络每秒 ARP 广播不超过 10 个,超过 100 个就是异常。
  2. 定位源头:在交换机上执行 show arp 或 display arp,看哪个端口的 ARP 表项异常多。我习惯用 show mac-address-table 配合着看。
  3. 隔离故障:如果确认是攻击,先把问题端口 shutdown。别犹豫,宁可断一个端口,不能拖垮全网。
  4. 配置防护:在交换机上开启 ARP 防护功能。不同厂商的命令不一样,但思路相同:限制端口 ARP 包速率、绑定 IP+MAC、开启 DAI(Dynamic ARP Inspection)。

关键配置示例(Cisco 交换机):

! 开启 DHCP Snooping(DAI 的前置条件)
ip dhcp snooping
ip dhcp snooping vlan 10,20

! 开启 DAI
ip arp inspection vlan 10,20
ip arp inspection validate src-mac dst-mac ip

! 限制 ARP 包速率(每秒 15 个)
interface GigabitEthernet0/1
  ip arp inspection limit rate 15

华为设备也有类似功能,叫 ARP 防攻击和 ARP 表项固化。我个人觉得华为的配置更直观一些:

# 开启 ARP 表项固化
arp anti-attack entry-check enable

# 限制端口 ARP 学习数量
interface GigabitEthernet0/0/1
  arp anti-attack learning-table limit 100

小技巧:我曾经在排查一个间歇性丢包问题时,用 debug arp 命令实时观察 ARP 交互。结果发现有一台打印机每隔 5 秒就发一次 ARP 请求,因为它把老化时间设成了 5 秒。改回默认值后,广播流量立刻降了 80%。所以,有时候问题不在攻击,而在配置。

最后说一句:ARP 广播问题,预防永远比修复重要。把交换机的 ARP 防护功能开起来,把老化时间调到一个合理的值,再配合监控工具定期检查广播占比。做到这三点,你就能避开大部分 ARP 相关的坑。