3、MAC层连接问题:MAC地址过滤、关联拒绝、认证失败、速率协商失败

各位做WiFi开发的同行,咱们接着聊。上一章我们把扫描阶段的问题捋了一遍,设备能看见AP了,接下来就该“敲门”了——也就是MAC层的连接过程。

这一层的问题,说白了就是设备跟AP之间“对上暗号”的过程出了岔子。我这些年排查过的连接失败案例,至少有一半都卡在这一步。你想想看,扫描都过了,信号也看到了,就是连不上,多让人抓狂。

MAC层连接,核心就四件事:认证、关联、速率协商,以及AP端可能存在的MAC地址过滤。任何一个环节出问题,设备就只能在“已保存”状态里打转,永远拿不到IP。

核心观点:MAC层连接失败,抓包看Management Frame的Status Code,比看日志快10倍。我个人的习惯是,遇到连不上的问题,先开抓包工具,直接过滤 wlan.fc.type_subtype == 0x00 || wlan.fc.type_subtype == 0x01 || wlan.fc.type_subtype == 0x02,看AP返回的Status Code是多少。

MAC层连接过程与故障点 MAC层连接过程与故障点 STA 发送认证请求 AP 返回认证响应 ❌ 认证失败 Status Code: 1-19 STA 发送关联请求 AP 返回关联响应 ❌ 关联拒绝 Status Code: 17-20 速率协商(4次握手) ❌ 速率协商失败 HT/VHT Capabilities 不匹配 ✅ 连接成功 排查要点 1. 抓包过滤 Management Frame 2. 关注 Status Code 字段 3. 检查 HT/VHT Capabilities 4. 确认 AP 的 MAC 过滤白名单

3.1 MAC地址过滤:AP端的“门禁系统”

MAC地址过滤,是AP最基础的访问控制手段。说白了,就是AP维护一个白名单或黑名单,只有MAC地址在名单上的设备才让连。

我在项目中遇到过好几次,客户反馈“WiFi信号满格,就是连不上”。我过去一看,AP的MAC过滤列表里根本没加这个设备的MAC。嗯,这种问题最隐蔽,也最容易被忽略。

排查技巧:如果设备能扫描到AP,但连接时立即被拒绝(通常1-2秒内),优先检查AP的MAC过滤设置。我建议在AP后台查看“无线MAC过滤”或“访问控制”列表,确认设备的MAC地址是否在白名单中。

MAC地址过滤的典型表现:

  • 白名单模式:设备MAC不在列表中,AP直接丢弃认证请求或关联请求。抓包能看到AP回复 Deauth 或 Disassoc,Reason Code通常是 0x0001(Unspecified reason)。
  • 黑名单模式:设备MAC在列表中,AP同样会拒绝连接。抓包表现类似,但Reason Code可能不同。

注意:有些AP的MAC过滤是“静默拒绝”——AP根本不回复任何帧,设备会一直重试直到超时。这种情况最容易误判为“信号问题”或“AP死机”。我曾经被这种坑过,排查了半天才发现是MAC过滤没加。

3.2 认证失败:密码对不上,还是算法不匹配?

认证失败,是MAC层最常见的连接问题。设备发送 Authentication Request,AP回复 Authentication Response,如果Status Code不是0,那就是认证失败了。

认证失败的常见原因:

Status Code 含义 常见原因
0 成功 认证通过
1 Unspecified failure AP内部错误,或MAC过滤拒绝
2 Capabilities mismatch 设备与AP的能力集不匹配(如WPA版本)
3 Reassociation denied 重关联被拒绝(通常因漫游场景)
4-9 其他认证失败 密码错误、算法不匹配等
13 Invalid authentication IE 认证信息元素无效(如WPA2/WPA3混用)

我个人习惯,遇到认证失败,先看AP的日志。很多企业级AP会记录“Authentication failure: wrong password”或“Unsupported authentication algorithm”。如果AP日志不详细,那就抓包看Status Code。

举个例子,有一次一个客户说“手机能连,但智能家居设备连不上”。我抓包一看,智能家居设备发的是 Open System Authentication,但AP配置的是 WPA2-PSK。设备根本不支持WPA2,认证算法就不匹配。嗯,这种问题,换设备或者改AP配置才能解决。

实战经验:WPA3的SAE认证,对设备兼容性要求更高。我遇到过一些老设备,明明支持WPA2,但AP开了WPA3过渡模式后,设备认证就失败了。抓包看,设备发的是 SAE Commit,但AP回复 SAE Reject,Status Code是 0x004C(SAE authentication failure)。这种问题,要么升级设备固件,要么关闭WPA3。

3.3 关联拒绝:AP说“我不带你玩”

认证通过了,设备开始发 Association Request。如果AP回复 Association Response 的Status Code不是0,那就是关联被拒绝了。

关联拒绝的常见原因:

  • AP已达最大关联数:很多家用AP限制同时连接的设备数量(通常是16-32个)。如果连满了,新设备就会被拒绝。抓包能看到Status Code是 0x0011(Association denied because AP is unable to handle additional associated stations)。
  • 速率集不匹配:设备支持的速率AP不支持,或者AP要求的速率设备不支持。Status Code通常是 0x0012(Association denied due to unsupported rates)。
  • AP配置了白名单/黑名单:有些AP在关联阶段才做MAC过滤,而不是在认证阶段。表现就是认证通过了,但关联被拒绝。

排查技巧:关联拒绝后,设备通常会重试几次。如果一直失败,抓包看AP回复的Status Code。如果是 0x0011,去AP后台看“已连接设备数”;如果是 0x0012,检查设备支持的速率集和AP配置的速率集是否一致。

3.4 速率协商失败:WiFi的“语言不通”

关联成功后,设备和AP会进行速率协商。这个过程在802.11n/ac/ax中尤其复杂,涉及HT(High Throughput)、VHT(Very High Throughput)、HE(High Efficiency)能力集的交换。

速率协商失败,说白了就是设备说“我能跑80MHz频宽”,但AP说“我只支持20MHz”,或者设备说“我支持MCS 9”,但AP说“我只能到MCS 7”。双方能力不匹配,连接就会不稳定,甚至直接断开。

我遇到过最典型的案例:一款智能摄像头,连接802.11n的AP没问题,但连802.11ac的AP就频繁掉线。抓包发现,摄像头在Association Request里声明支持HT(802.11n),但AP在Association Response里要求使用VHT(802.11ac)。摄像头不理解VHT,双方协商失败,AP直接发Deauth。

速率协商失败的常见场景:

场景 原因 排查方法
设备不支持AP的频宽 AP强制80MHz,设备只支持20MHz 抓包看HT/VHT Capabilities中的Channel Width字段
MCS索引不匹配 AP要求MCS 8-15,设备只支持MCS 0-7 检查设备支持的MCS集,AP是否开启了HT40+/-
GI(Guard Interval)不匹配 AP要求Short GI,设备只支持Long GI 抓包看HT Capabilities中的Short GI字段
802.11n/ac混用问题 AP强制ac only,设备只支持n 检查AP的无线模式设置

注意:有些AP在速率协商失败后,不会立即断开连接,而是降速到最低速率(如1Mbps)。这种“假连接”状态最坑人——设备显示已连接,但实际无法通信。我曾经排查过一个智能门锁的案例,门锁显示WiFi已连接,但APP就是控制不了。抓包发现,门锁和AP协商到了1Mbps,根本跑不动数据。

3.5 综合排查思路:三步定位MAC层问题

好了,上面把四个问题都讲了一遍。实际排查时,我建议按这个顺序来:

  1. 第一步:抓包看Management Frame。过滤 wlan.fc.type_subtype == 0x00 || wlan.fc.type_subtype == 0x01 || wlan.fc.type_subtype == 0x02,看认证和关联的Status Code。如果Status Code不是0,直接定位问题类型。
  2. 第二步:检查AP配置。如果Status Code是0但连接还是失败,去AP后台看MAC过滤、最大关联数、无线模式(b/g/n/ac/ax)、频宽设置、速率集。
  3. 第三步:检查设备能力。如果AP配置没问题,抓包看设备的Association Request里的HT/VHT/HE Capabilities,跟AP的Capabilities对比,看哪里不匹配。

我的经验:80%的MAC层问题,抓包看Status Code就能定位。剩下20%,需要对比设备和AP的能力集。我建议在开发阶段,就把设备和AP的Capabilities信息打印出来,方便调试。量产之后,至少要在日志里记录连接失败的Status Code和Reason Code。

嗯,MAC层的问题就聊到这里。这一层是WiFi连接的“敲门砖”,门敲不开,后面的事都白搭。下一层,我们该聊聊网络层的问题了——DHCP和IP地址获取,那又是另一番风景。