4、ARP协议与MAC地址:ARP工作原理、MAC地址表、ARP欺骗与防护、我在现场排查过的一个ARP广播风暴案例

4.1 先聊聊MAC地址这回事

MAC地址,说白了就是网卡的身份证。每个网卡出厂时都会烧录一个全球唯一的48位地址,比如 00-1A-2B-3C-4D-5E。前24位是厂商代码,后24位是序列号。

我刚开始做工业通信那会儿,总觉得MAC地址就是个编号,没啥好研究的。直到有一次在现场排查故障,发现两台设备的MAC地址居然一模一样——嗯,那场面,简直是一场灾难。

在工业以太网里,MAC地址的作用非常直接:它决定了数据帧该发给谁。交换机靠它做转发决策,设备靠它判断是不是自己的数据。

核心要点:IP地址是逻辑地址,可以变;MAC地址是物理地址,原则上不能变。两者缺一不可。

4.2 ARP协议到底在干什么?

ARP(Address Resolution Protocol),地址解析协议。名字挺绕,其实就干一件事:根据IP地址,找到对应的MAC地址

你想想看,两台设备要通信,光知道对方的IP地址是不够的。数据在二层网络里传输,靠的是MAC地址。那怎么把IP和MAC对上号?ARP就是干这个的。

具体流程是这样的:

  1. 设备A要发数据给设备B(已知B的IP,不知道B的MAC)
  2. A在局域网里广播一条ARP请求:「谁的IP是192.168.1.100?请告诉我你的MAC地址」
  3. 所有设备都收到这条广播,但只有B会回应:「我是192.168.1.100,我的MAC是00-1A-2B-3C-4D-5E」
  4. A收到回应后,把IP和MAC的对应关系存到自己的ARP缓存表里
  5. 下次再通信,直接查表,不用再广播了

我在项目中遇到过一个问题:设备A和设备B明明在同一个网段,但就是ping不通。查了半天,发现A的ARP缓存里,B的MAC地址指向了一个错误的设备。清空缓存后,一切恢复正常。

小技巧:在Windows上用 arp -a 查看ARP缓存,用 arp -d 清空缓存。Linux上用 ip neigh showip neigh flush all

4.3 MAC地址表——交换机的记忆

交换机里也有一张表,叫MAC地址表。它记录的是:哪个MAC地址在哪个端口上

交换机的学习过程是这样的:

  • 设备A从端口1发数据,源MAC是A的地址
  • 交换机记下来:「MAC_A → 端口1」
  • 设备B从端口2发数据,源MAC是B的地址
  • 交换机记下来:「MAC_B → 端口2」
  • 下次A要发数据给B,交换机查表,直接从端口2转发,不广播

这张表不是永久保存的。交换机有个老化时间,一般是300秒。如果某个MAC地址超过300秒没活动,就会被删掉。这样做是为了适应网络拓扑的变化。

我记得有一次在工厂里,一台交换机的MAC地址表频繁抖动,导致网络时断时续。查了半天,发现是环路导致的。嗯,环路问题我们后面会专门讲。

MAC地址 端口 老化时间(秒)
00-1A-2B-3C-4D-5E GigabitEthernet0/1 300
00-1A-2B-3C-4D-5F GigabitEthernet0/2 300
00-1A-2B-3C-4D-60 GigabitEthernet0/3 300

4.4 ARP欺骗——工业网络的隐形杀手

ARP协议有个致命缺陷:它不验证身份。任何设备都可以伪造ARP回应。

攻击者可以这样做:

  1. 攻击者C伪造一条ARP回应:「我是网关192.168.1.1,我的MAC是CC-CC-CC-CC-CC-CC」
  2. 设备A收到后,更新ARP缓存,把网关的MAC指向了C
  3. 设备A发给网关的所有数据,都先到了C手里
  4. C可以窃听、篡改,甚至直接丢弃数据

这就是ARP欺骗,也叫ARP毒化。在工业网络里,这招特别危险。因为很多工业协议(比如Modbus TCP)本身没有加密,数据被截获了都不知道。

警告:ARP欺骗不仅会导致数据泄露,还可能造成设备脱机、控制指令被篡改。在关键工业场景中,后果可能是灾难性的。

防护措施其实不复杂:

  • 静态ARP绑定:在关键设备上手动绑定IP和MAC,不让ARP缓存被动态更新
  • 交换机端口安全:限制每个端口允许通过的MAC地址数量
  • DAI(Dynamic ARP Inspection):交换机检查ARP报文的合法性,只允许可信的ARP回应通过
  • 网络分段:把关键设备和普通设备隔离开,减少攻击面

我曾经在一个化工厂里,发现PLC和上位机之间偶尔通信中断。查了三天,最后发现是办公网的一台电脑中了ARP病毒,不断发送伪造的ARP回应,把PLC的MAC地址给污染了。后来我们做了静态ARP绑定,问题彻底解决。

4.5 我在现场排查过的一个ARP广播风暴案例

这个案例,我印象特别深。

那是一个汽车零部件工厂,生产线突然瘫痪。所有PLC和上位机都连不上,交换机指示灯狂闪。我到现场一看,交换机端口指示灯像跑马灯一样,每秒几千次闪烁。

典型的广播风暴症状。

我用Wireshark抓包,发现网络里充斥着大量的ARP广播请求。正常情况下一台设备几秒钟发一次ARP就够了,但现场每秒有上万条ARP请求。

顺着抓包数据往下查,我发现了一个规律:所有ARP请求都来自同一个MAC地址。顺着这个MAC找到了一台工控机。这台工控机上跑着一个自定义的通信程序,程序里有个bug——它每隔1毫秒就发一次ARP请求,而且不等待回应,发了就忘,忘了再发。

为什么会出现这种情况?

原来这个程序的设计者想实现「实时通信」,但用了最笨的方法:每次发数据前都先发ARP请求,确保MAC地址是最新的。结果就是ARP请求像洪水一样涌出来,交换机被撑爆了。

解决方案其实很简单:

  • 在程序里加一个ARP缓存机制,不要每次都发请求
  • 把ARP请求的间隔时间改成至少1秒
  • 在交换机上配置风暴控制,限制广播包的速率

改完之后,网络立刻恢复正常。生产线重新跑起来,厂长握着我的手说谢谢。嗯,那一刻还是挺有成就感的。

经验总结:ARP广播风暴的排查思路——先抓包看流量特征,再找源头MAC,最后定位到具体设备。不要一上来就重启交换机,那样治标不治本。

4.6 小结

ARP协议和MAC地址,是工业以太网通信的基础。理解它们的工作原理,能帮你快速定位很多网络问题。

记住三件事:

  • ARP把IP翻译成MAC,靠的是广播和缓存
  • MAC地址表让交换机学会转发,靠的是学习和老化
  • ARP欺骗和广播风暴是常见故障,防护手段要提前部署

下一章,我们会聊到VLAN的划分。说实话,VLAN在工业网络里是个好东西,能帮你把网络切得干干净净。到时候见。