4、WiFi协议栈基础:802.11 b/g/n协议核心要点、Station与AP模式的区别、WiFi扫描与连接流程

好,咱们进入第四章。这一章我打算聊聊WiFi协议栈的基础。说实话,很多做嵌入式开发的朋友,一听到“协议栈”三个字就头大。其实没那么玄乎。你只要搞懂802.11 b/g/n这几个核心协议,搞清楚Station和AP到底是个啥,再把扫描和连接的流程捋一遍,基本就能应付大部分智能音箱的开发工作了。

4.1 802.11 b/g/n协议核心要点

先说说802.11这个家族。它就像WiFi世界的“宪法”,规定了无线通信怎么玩。b/g/n是咱们最常碰到的三个版本。我当年刚入行时,也分不清它们有啥区别,后来踩了几个坑才明白。

核心区别一句话总结:802.11b是古董,速度慢但穿墙好;802.11g是升级版,速度快了但兼容b;802.11n是主流,引入了MIMO技术,速度和覆盖都上了一个台阶。

具体来看:

  • 802.11b:工作在2.4GHz频段,最大速率11Mbps。调制方式用的是DSSS(直接序列扩频)。嗯,这玩意儿现在基本只用来兼容老设备了。我在一个老旧项目里遇到过,客户非要支持b模式,结果发现性能被拖累得厉害。
  • 802.11g:同样2.4GHz,但速率提升到了54Mbps。它用了OFDM(正交频分复用)技术,比b的DSSS效率高很多。说白了,g就是b的“速度升级版”,但兼容b模式。
  • 802.11n:这才是重点。它支持2.4GHz和5GHz双频,最大速率能到600Mbps(理论值)。核心改进是引入了MIMO(多入多出)技术,也就是用多根天线同时收发数据。你想想看,一根天线相当于一条车道,四根天线就是四车道,速度自然快。
协议 频段 最大速率 调制技术 核心特点
802.11b 2.4GHz 11 Mbps DSSS 穿墙好,速率低
802.11g 2.4GHz 54 Mbps OFDM 兼容b,速率适中
802.11n 2.4/5GHz 600 Mbps OFDM + MIMO 双频、多天线、高吞吐

个人经验:做智能音箱移植时,我建议优先支持802.11n。原因很简单——现在家庭路由器基本都是n或ac了。你只支持b/g,用户连上后速度慢,会骂娘的。但别忘了保留b/g兼容模式,万一用户家里有老设备呢?

4.2 Station与AP模式的区别

这两个概念,说白了就是“客户端”和“服务器”的关系。

  • Station模式(STA):你的设备作为客户端,去连接一个已有的WiFi热点。比如智能音箱连上家里的路由器,这就是STA模式。大部分物联网设备都跑在这个模式下。
  • AP模式(Access Point):你的设备自己创建一个WiFi热点,让其他设备来连。比如你用手机直连智能音箱的配置热点,这就是AP模式。常用于设备初次配网。

我见过不少新手搞混这两个模式。有一次,一个同事把智能音箱配成了AP模式,结果音箱自己开了个热点,手机连上去后却没法上网——因为音箱本身没连路由器。嗯,这就是典型的模式选错了。

注意:很多WiFi芯片支持同时工作在STA+AP模式。比如智能音箱可以一边连路由器(STA),一边开个热点给手机配网(AP)。但这样会占用更多资源,功耗也会上升。我个人习惯是:配网时用AP模式,配完网切换到STA模式。

4.3 WiFi扫描与连接流程

这部分是实操重点。WiFi扫描和连接,说白了就是“找网络”和“连上去”两步。但细节里全是坑。

4.3.1 扫描流程

扫描分两种:主动扫描和被动扫描。

  • 主动扫描:设备主动发送Probe Request帧,询问“附近有没有WiFi?”。AP收到后回复Probe Response。这种方式快,但费电。
  • 被动扫描:设备监听AP定期发送的Beacon帧。Beacon帧里包含了SSID、信道、加密方式等信息。这种方式省电,但慢。

我建议智能音箱用主动扫描。为什么?因为用户按下配网键后,都希望立刻看到WiFi列表。你让他等10秒,体验就很差了。我在一个项目中试过被动扫描,结果用户反馈“怎么搜不到网络”,后来改成主动扫描就解决了。

扫描的典型流程如下:

1. 设置信道(比如从1到13逐个扫)
2. 发送Probe Request(广播或指定SSID)
3. 等待Probe Response(超时时间一般100ms)
4. 解析响应,提取SSID、RSSI、加密类型
5. 整理成列表,返回给上层应用

避坑指南:我曾经在扫描时忘记处理信道切换的延迟。结果每次切换信道后,立刻发Probe Request,AP根本来不及响应。后来加了20ms的等待时间,问题就解决了。你想想看,硬件切换信道是需要时间的,别忽略这个细节。

4.3.2 连接流程

连接流程比扫描复杂一些。它涉及认证和关联两个阶段。

  1. 认证(Authentication):设备向AP发送认证请求。如果是开放网络,AP直接回复成功。如果是加密网络,需要先进行密钥协商(比如WPA2的四次握手)。
  2. 关联(Association):认证通过后,设备发送关联请求,AP分配一个AID(关联ID)。关联成功后,设备就可以正常收发数据了。

这里有个关键点:DHCP获取IP地址。关联成功后,设备还需要通过DHCP拿到IP地址,才能真正上网。我见过有人把关联成功当成连接完成,结果发现ping不通网关——因为没拿到IP。

完整的连接流程如下:

1. 选择目标AP(从扫描列表里选一个)
2. 发送认证请求(Authentication Request)
3. 接收认证响应(Authentication Response)
4. 如果是加密网络,进行四次握手(4-Way Handshake)
5. 发送关联请求(Association Request)
6. 接收关联响应(Association Response)
7. 启动DHCP,获取IP地址
8. 连接完成,可以开始通信

重要提醒:连接过程中,如果某一步失败,一定要有重试机制。比如认证失败,可以重试3次;关联失败,可以重新扫描再连。我曾经遇到一个情况:AP信号弱,关联请求丢了,设备一直卡在“关联中”状态。后来加了超时重试,问题就解决了。

好了,这一章的内容就这些。802.11 b/g/n的核心区别、STA和AP模式的选择、扫描和连接的流程,都是你移植WiFi协议栈时必须掌握的基础。下一章我会聊聊蓝牙协议栈,咱们到时候见。