连上 Wi‑Fi 却拿不到地址:Offer 不该走组播
现象
NUC 上 iwl8265 已经能走到 wpa2=ok,黄字里关联、握手看上去齐了,可是 DHCP 一直 no offer。有时能看到发现包发出去(dat=tx / dtx=0201),收包侧却是一串 rx=mic o,任务栏显示 up,地址还是 0.0.0.0。课网目标很朴素:家里 WPA2 → 拿到地址 → ping 网关。卡在「关联成功、租约不来」。
初始假说
我先怀疑两条常见线:一是组密钥(GTK)没解开,路由器把 Offer 打成组播,我们解不开;二是数据帧队列/速率/QoS 头不对,发现包根本没被固件取走。于是前期大量刀花在 EAPOL、队列、GTK unwrap、CCMP 主机解密和 ADD_STA_KEY 上。
尝试与失败
队列和站类型试过一轮:数据放错队列时 EAPOL 出不去;改到正确队列后终于 wpa2=ok。这否定了「永远发不出管理/数据帧」,但没解决 DHCP。
GTK 路径更磨人:能看到 gtk=ok,组播仍 mic o;装固件密钥后状态字也不干净;强行把 STA RSN 组播改成 CCMP,AP 直接不跟你握手(m1to / wpa2=fail)。这一刀很有用——黄字 assoc=gc=02 证明家里 AP 的 beacon 组播套件是 TKIP。我否定的是「靠改关联套件逼 AP 改组播算法」;也否定了「把 DHCP Offer 赶到组密钥上就能省事」。
还有一刀把 DHCP 发现包的广播位打开,指望 Offer 走已经「看起来解开」的组播路径。结果仍然没有 rx=off,只有更多 mic o / disc。广播位假说被否掉:在这台混合模式 AP 上,组播 DHCP 不是可依赖的交付通道。
转折
转折是承认混合模式的现实:单播已经有 PTK/CCMP,组播 GTK/TKIP 我们课上本来就不做产品级解密。那 DHCP 就不该去赌组播,而该让 Offer 走单播 PTK。对应动作不是再拧无线密钥,而是把 lwIP DHCP 发现包上的广播标志清掉,让服务器用单播回 Offer。
根因
根因可以写成一句:DHCP 清广播位,Offer 走单播 PTK。在 assoc=gc=02(beacon 组播 TKIP)的环境里,置上广播位等于把租约通知推到我们解不干净的组播平面;清掉之后,Offer 落在 PTK/CCMP 单播上,主机侧才能稳定看到 rx=off,接着 ok ip=…,再 ping 网关有 reply。组播上残留的 mic o 可以忽略,它不再挡课路径。
教训
- 关联成功 ≠ 地址平面成功;要看
rx=off/ok ip=,不要只看wpa2=ok。 - 混合模式 AP 上,TKIP 组播和 CCMP 单播要分开记账;强行改 RSN 组播可能直接谈崩。
- 已经被否的路(广播位骗组播 Offer、强制 CCMP 组播)不要无记录重试。
- 第三方栈里的 flags 若在 gitignore 树,编/同步前要确认广播位真的清掉了,否则「源码看起来对、镜像仍错」。
- 无线刀史可以很长;收官标准仍是真机
ping网关,不是黄字数量。