1、广播丢包现象初探:什么是WiFi配网广播?为什么广播会丢包?
各位好,我是老周。做嵌入式WiFi开发十几年了,配网这个环节,我踩过的坑比走过的路还多。今天咱们就从最基础的开始聊——广播丢包。
你想想看,一个新买的智能灯泡,没有屏幕,没有键盘,你怎么告诉它你家路由器的密码?这就是配网要解决的问题。而广播,是其中最常用、也最让人头疼的手段之一。
1.1 什么是WiFi配网广播?
说白了,就是手机把WiFi名字和密码,塞进一个广播报文里,在局域网上大喊一声。设备端(比如那个灯泡)在监听模式下,抓到这包,解析出来,然后自己去连路由器。
我习惯把这种模式叫做“ shouting in the dark ”。手机不知道设备在哪,设备也不知道手机是谁。双方唯一的默契就是:都在听同一个广播信道。
常见的配网广播协议有几种:
| 协议名称 | 典型厂商 | 广播方式 | 我遇到过的坑 |
|---|---|---|---|
| ESP-Touch | 乐鑫 | UDP 广播 + 长度编码 | 小米路由器经常丢包 |
| SmartConfig | TI | 802.11 广播帧 | 信道切换慢导致超时 |
| AirKiss | 腾讯 | UDP 广播 + 自定义头 | Android 8.0 后权限收紧 |
| 零配 | 阿里 | 组播 + 广播混合 | 组播IGMP snooping干扰 |
这些协议的核心逻辑都一样:手机发广播包,设备抓广播包。但问题就出在这个“抓”字上。
1.2 为什么广播会丢包?
这个问题,我当年被折磨了整整两周。后来抓了上千个包才搞明白。原因其实不复杂,但很隐蔽。
核心结论:广播丢包,不是网络坏了,而是设备“没听见”。
具体来说,有三大元凶:
1.2.1 信道不匹配
这是最常见的原因。手机在WiFi信道6上发广播,设备却在信道1上监听。你想想看,这就像两个人一个在FM 103.7,一个在FM 101.1,怎么可能听到?
设备刚上电时,通常会在所有信道上扫一遍。但扫信道需要时间,每个信道停留几十到几百毫秒。如果手机刚好在设备离开信道6的那几毫秒发了包,这包就丢了。
我曾经遇到过一款路由器,它的Beacon间隔是100ms,但设备扫描间隔是120ms。结果就是,设备永远错过手机发的广播包。折腾了三天,最后发现是时序错位。
1.2.2 802.11 的广播机制本身不可靠
这个要重点说一下。WiFi的广播帧,没有ACK确认机制。
你发一个单播包,对方收到了会回一个ACK。没收到ACK,发送方会重传。但广播包不一样——发出去就完了,没人告诉你它到没到。
我画了一张图,你看一眼就明白了:
你看,单播有ACK兜底,广播就是“裸奔”。所以配网时手机要疯狂发几十遍同一个包,就是赌设备能在某一次抓到。
1.2.3 环境干扰与竞争
这个就更好理解了。2.4GHz频段,微波炉、蓝牙、隔壁老王的WiFi,全挤在一起。广播包又没有优先级,说被挤掉就被挤掉了。
我记得有一次在客户现场调试,配网成功率只有30%。后来发现,客户工厂里有一台老式微波炉,一开机就在信道6上产生巨大的噪声。广播包全被淹没了。
我的经验:遇到配网失败,先别急着改代码。拿个WiFi嗅探器(比如Wireshark + 抓包网卡)看看环境底噪。如果某个信道的噪声底数超过 -80dBm,赶紧换信道。
1.3 广播丢包的典型表现
你在实际开发中,如果遇到以下现象,基本就是广播丢包在作祟:
- 配网成功率忽高忽低:今天90%,明天30%,玄学问题。
- 特定路由器必失败:比如在TP-Link上好好的,换小米就跪了。
- 手机靠近设备才成功:距离远了就丢包,因为信号弱了。
- 配网时间不稳定:有时3秒,有时30秒,看运气。
注意:千万不要把广播丢包和“设备没收到”划等号。有时候设备收到了,但解析错了,或者缓冲区满了,也会表现为“丢包”。我见过一个案例,设备WiFi芯片的接收缓冲区只有4个包,手机发了10个广播,结果6个被硬件丢弃了。这不是网络丢包,是硬件瓶颈。
1.4 小结
广播丢包,说白了就是WiFi协议在设计时就没打算保证广播的可靠性。它是个“尽力而为”的服务。配网场景下,我们只能通过冗余发送、信道适配、环境优化来对抗这个天然缺陷。
嗯,这一章先聊到这儿。记住一句话:广播丢包不是bug,是feature。理解了这一点,后面咱们再聊怎么跟这个feature共存。