WIFI模块ARP刷新问题

二层、三层、交换机、AP

Views:  times Updated on September 11, 2025 Posted by elmagnifico on September 11, 2025

Foreword

ARP相关的问题进行测试或者找问题的时候可真麻烦,很容易受到习以为常的一些操作的干扰,导致无法发现真实的原因

问题场景

设备不上线的问题太多了,各种各样的,还都是偶发,没有现场,无法复现,针对这个问题造成的情景很多,下面 一一列举:

  1. 设备上了AP,但是不上PC,重启电脑可以好
  2. 设备上了AP,但是不上PC,ping一下设备可以好
  3. 设备不上线,重启设备可以好
  4. 设备不上线,重启AP可以好
  5. 设备不上线,等待5分钟甚至更久自动就好了

以上问题大部分情况下基本都是同一个东西造成,mac表错误,设备发送的包全都被丢弃了,要理解这个问题需要知道下面的机制

机制

以下机制都经过了验证,确实会出现ARP广播

ARP机制

image-20250910162425429

二层局域网中,如果设备之间通信不仅仅需要知道IP地址,还需要知道mac地址,ARP的作用就是在加入一个新的局域网的时候自动广播一次,告诉局域网内的其他设备,他加入了,其他设备就会存储他的mac和ip,下次通信时就知道包要发给哪个mac地址了。

ARP比较特殊,他是网络层协议,但是工作在数据链路层

有些路由器的控制软件,比如Winbox,就可以直接二层通信,只需要mac即可,完全不需要ip地址,这种就很方便,在IP配置错误的情况下,也能通过mac连接,然后修改正确

AP/路由的ARP机制

二层设备,AP一般都属于二层,他们都是不会主动进行ARP广播的,只会监听局域网内的ARP,并偷偷记录下来,遇到需要转发的包时就知道送给谁了,如果这个包的mac不存在就会直接丢掉

三次设备,路由器,这种设备会在内部维护路由表,联动ARP的mac表,他会自主进行维护,所以他会主动发起ARP广播

  • 以上只是通常意义下的情况,特殊情况二层也是会广播的,比如在和二层设备通信时,他肯定需要主动广播ARP

还有一个特殊情况,ARP Proxy,这个东西会代理回复或者发起ARP,这个东西也算是搅局者,被干扰的话也比较难辨别

网口ARP机制

网卡被设置IP时会自动广播一次ARP,同样重启网卡、物理插拔也会重新广播ARP

  • 相同设置再次设置时不会触发

设备端ARP

泛指客户端设备,比如WIFI模块、PC,他们在与PC或者其他东西通信时,内部会维护一个mac和ip的地址表,正常情况下这个表会在加入新网络或者网络断开时重新刷新,或者急速老化

Ping

Ping比较特殊,在主动发起Ping时,设备方如果mac表中不存在对应设备,那么就会发起一次ARP广播,询问这个IP的mac是什么

同理,当被ping的设备收到了这个ping包,也会更新自己的mac表,记录下这个来访者

Wireshark

Wireshark本身是被动抓包工具,默认不会主动发送ARP广播;但打开抓包后,可能出现“间接触发”的ARP流量,让你误以为是Wireshark发的;

可能的间接触发原因:

  • 网卡被唤醒/切到D0全功率:驱动退出省电或关闭卸载后,操作系统/驱动可能立即发出GARP、ARP探测以刷新邻居表与交换机学习表;
  • 关闭/调整硬件卸载:混杂模式与关闭RSC/合包等设置,会促使协议栈重新校验邻居条目,从而触发ARP;
  • 地址/链路状态轻微抖动:开始抓包时网卡重配或状态切换,Windows可能发送GARP或进行DHCP续租,伴随ARP解析;
  • 附带组件或其他工具:安装Npcap时若同时装了Nmap/nping并被调用,才可能主动发包;Wireshark自身不主动扫描;

开了Wireshark反而可能导致问题无法复现,主要还是改了网卡的设置,造成网卡重启了,ARP就广播了

问题成因

设备从SSID:A切换到SSID:B,发包时会重新问一次这个IP对应的mac是谁,如果相同就更新地址表的刷新时间,如果不同那就会替换成新的mac

我们目前出现不上线的问题,基本都是这里,设备端切换SSID后,没有更新他的目标mac地址(PC的mac地址),他发送的地址一直都是错误的,这个mac地址不存在,直接就被丢弃了,所以连上了AP,但是PC收不到。要等到设备主动更新他的mac地址、PC重启、网口重启、网口重设IP、电脑重启等任一条件发生,这个设备才会正常上线。

  • 设备自身更新mac表要5分钟,所以就出现了等5分钟自己上线了

测试验证

测试验证设备是否正常上线

  1. 同一个AP同一个电脑同一个设备下2个SSID来回切换,没有问题
  2. 2个AP同一个电脑同一个设备下2个SSID来回切换,没有问题
  3. 2个AP分别连2个电脑,各开一个SSID,切换,有问题
  4. 2个AP分别连2个电脑,各开一个SSID,切换,ping一下飞机,没有问题
  5. 2个AP分别连2个电脑,各开一个SSID,切换,重启PC,没有问题
  6. 2个AP分别连2个电脑,各开一个SSID,切换,重启网卡,没有问题
  7. 2个AP分别连2个电脑,各开一个SSID,切换,缩短设备mac地址刷新时间,没有问题
  8. 2个AP分别连2个电脑,各开一个SSID,切换,打开Wireshark,没有问题

这里还混合了一个情况,PC自己有mac表管理,可能在测试的时候会出现pc自己主动发起了ARP,这个会搅和在测试中,某些情况就会受到影响,你分不清是谁让这个情况变好了

PC端ARP相关配置

查看网口设备

netsh interface ipv4 show interface


Idx     Met         MTU          状态                名称
---  ----------  ----------  ------------  ---------------------------
  1          75  4294967295  connected     Loopback Pseudo-Interface 1
  7          25        1500  disconnected  WLAN
 19          25        1500  disconnected  本地连接* 9
 10          25        1500  disconnected  本地连接* 10
 11          25        1500  connected     以太网
 23           5        1500  disconnected  以太网 2
 14          35        1500  disconnected  以太网 3
 22          35        2800  connected     ZeroTier One [b6079f73c6ba32c3]
 13          65        1500  disconnected  蓝牙网络连接 3

查询具体网络设备的配置

netsh interface ipv4 show interface 7

接口 WLAN 参数
----------------------------------------------
IfLuid                             : wireless_32768
IfIndex                            : 7
状态                              : disconnected
跃点数                             : 25
链接 MTU                           : 1500 字节
可访问时间                     : 35000 毫秒
基本可访问时间                : 30000 毫秒
重传间隔            : 1000 毫秒
DAD 传输                      : 3
站点前缀长度                 : 64
站点 ID                            : 1
转发                         : disabled
播发                        : disabled
邻居发现                 : enabled
邻居无法访问检测  : enabled
路由器发现                   : dhcp
受管理的地址配置      : enabled
其他有状态的配置       : enabled
弱主机发送                    : disabled
弱主机接收                 : disabled
使用自动跃点数               : enabled
忽略默认路由              : disabled
播发的路由器生存期         : 1800 秒
播发默认路由            : disabled
当前跃点限制                  : 0
强制 ARPND 唤醒模式       : disabled
定向 MAC 唤醒模式      : disabled
ECN 功能                     : application
基于 RA 的 DNS 配置(RFC 6106)     : disabled
DHCP/静态 IP 共存         : disabled

这里的可访问时间和基本可访问时间就是ARP表中的刷新时间

修改ARP时间

netsh interface ipv4 set interface 9 basereachable=60000

显示地址表

netsh interface ipv4 show neighbors

ARP表项修改

# 设置为 4096 个条目
netsh interface ipv4 set global neighborcachelimit=4096

# 验证修改结果
netsh interface ipv4 show global

neighborcachelimit 是新的取代ARP的,需要独立设置表项大小,PC上ARP的机制或者代号改来改去的,和系统有很大关系

Summary

一些大厂的WIFI模块,本身就有类似的测试用例,所以ARP相关机制都会补全,但是一些原生的WIFI模块,二次开发的,这块内容是否有验证,就很值得怀疑了,这个情况复杂,又不容易复现,很容易被各种推脱跳过去了。