2、WiFi协议栈初探:OSI模型与WiFi的关系、802.11标准家族、WiFi帧结构概览

说实话,很多做嵌入式WiFi开发的朋友,上来就撸代码,配网连上了就完事。但一旦遇到丢包、重连慢、广播发不出去,就抓瞎了。为什么?因为你不懂协议栈在底下干了什么。

这一章,我们先把地基打牢。我会带你从OSI模型看WiFi的位置,捋一遍802.11标准家族那些事儿,最后拆一个WiFi帧给你看。嗯,看完这章,你再看抓包软件里的那些十六进制,就不会觉得是乱码了。

2.1 OSI模型与WiFi的关系

OSI七层模型,搞通信的应该都背过。但WiFi到底落在哪几层?我直接说结论:WiFi主要工作在物理层和数据链路层。

你想想看,手机连路由器,本质上是把数据变成无线电波发出去,这是物理层的活。但怎么组帧、怎么寻址、怎么避免碰撞,这些是数据链路层的活。再往上,IP层、TCP层,WiFi就不管了——那是操作系统和协议栈的事。

核心理解:WiFi只负责“把数据从A设备搬到B设备”,不关心搬的是什么。你传的是HTTP网页还是MQTT传感器数据,对WiFi来说都一样,都是二进制比特流。

我个人习惯把OSI模型简化成三层来看WiFi问题:

  • 物理层:调制方式、频段、速率。比如2.4GHz vs 5GHz,OFDM vs DSSS。
  • MAC层(数据链路层子层):帧结构、寻址、CSMA/CA避让、重传机制。这是WiFi的灵魂。
  • LLC层(数据链路层子层):封装上层协议,比如IP包怎么塞进WiFi帧里。

我在项目中遇到过一个问题:某个设备在嘈杂环境下频繁断连。查了半天,发现是物理层速率降得太低,导致MAC层重传超时。如果你不懂这两层的关系,这种问题根本无从下手。

2.2 802.11标准家族

802.11是IEEE制定的无线局域网标准。从1997年诞生到现在,经历了十几代演进。我整理了一张表,把最常见的几个版本列出来:

标准 频段 最大速率 调制方式 发布年份
802.11 2.4 GHz 2 Mbps FHSS / DSSS 1997
802.11b 2.4 GHz 11 Mbps HR-DSSS 1999
802.11a 5 GHz 54 Mbps OFDM 1999
802.11g 2.4 GHz 54 Mbps OFDM 2003
802.11n 2.4 / 5 GHz 600 Mbps MIMO-OFDM 2009
802.11ac 5 GHz 6.9 Gbps MU-MIMO 2013
802.11ax (WiFi 6) 2.4 / 5 / 6 GHz 9.6 Gbps OFDMA 2019

我的建议:做嵌入式配网开发,重点关注802.11b/g/n。这三个标准覆盖了绝大多数IoT芯片(ESP32、RTL8710、MT7681等)的能力范围。WiFi 6虽然好,但目前在低功耗配网场景下还不普及。

802.11n引入了一个关键概念——HT(High Throughput)。它支持20MHz和40MHz带宽,还引入了帧聚合(A-MSDU、A-MPDU)。说白了,就是把多个小包拼成一个大包发出去,减少开销。我在做广播配网时,就利用了这个特性来提升配网包的发送效率。

802.11ac和ax主要面向高速率场景,对配网广播来说,它们的物理层速率太高,反而容易导致兼容性问题。我曾经在调试一款支持ac的模组时,发现它在2.4GHz下回退到n模式时,广播帧的发送间隔会突变——嗯,这就是标准兼容性带来的坑。

2.3 WiFi帧结构概览

WiFi帧是MAC层的核心。不管你是发数据、做扫描、还是配网广播,最终都要封装成WiFi帧发出去。一个标准的WiFi帧长这样:

| 帧控制 (2B) | 时长/ID (2B) | 地址1 (6B) | 地址2 (6B) | 地址3 (6B) | 序列控制 (2B) | 地址4 (6B) | 帧体 (0-2312B) | FCS (4B) |

看着字段多,其实核心就几个:

  • 帧控制(Frame Control):2个字节,决定了帧的类型(管理帧、控制帧、数据帧)和子类型。配网广播通常用数据帧或管理帧。
  • 地址字段:最多4个地址,分别是接收端、发送端、BSSID、以及中继场景下的源/目的地址。配网广播时,接收端地址填广播MAC(FF:FF:FF:FF:FF:FF)。
  • 帧体(Frame Body):真正装数据的地方。配网信息就塞在这里。最大2312字节,但实际受限于物理层速率和信道环境。
  • FCS:4字节校验和。如果接收端算出来不对,直接丢帧——这就是WiFi的“沉默式纠错”。

避坑指南:我曾经在配网广播时,把配网数据塞满了2312字节的帧体。结果发现很多老旧路由器会直接丢弃这种大帧。后来我限制在512字节以内,兼容性就好了很多。记住:广播帧没有ACK,丢了就是丢了,所以帧体越小,成功率越高。

WiFi帧分为三大类:

  1. 管理帧:Beacon(信标)、Probe Request/Response(探测请求/响应)、Association(关联)。配网扫描阶段主要用这类。
  2. 控制帧:RTS/CTS(请求发送/允许发送)、ACK(确认)。这些帧不装数据,只负责协调信道。
  3. 数据帧:真正传用户数据的帧。配网广播通常用QoS Data帧,因为它支持更高的优先级。

下面这张图,是我画的一个WiFi帧结构全景图,帮你把刚才讲的这些串起来:

WiFi MAC帧结构全景图 帧控制 2B 时长/ID 2B 地址1 (RA) 6B 地址2 (TA) 6B 地址3 6B 序列控制 2B 地址4 6B 帧体 (Frame Body) 0~2312B FCS 4B 帧控制展开 协议版本 (2b) 类型 (2b) 子类型 (4b) ToDS / FromDS 更多分片 / 重试 帧体展开 LLC头 (8B) SNAP扩展 (5B) 上层协议数据 (配网信息放这里) Padding (可选) 管理帧 Beacon / Probe / Association 控制帧 RTS / CTS / ACK 数据帧 QoS Data / Null Data 配网广播关注重点 ① 地址1填广播MAC (FF:FF:FF:FF:FF:FF) ② 帧体大小建议 ≤ 512B,提高兼容性 ③ 使用数据帧子类型:QoS Data (优先级高)

这张图把WiFi帧的各个字段、帧控制展开、帧体展开、以及三大帧类型都串在了一起。你可以把它当成一个速查手册——以后抓包看到一串十六进制,对着这个图就能拆出每一段是什么意思。

嗯,这一章的内容就到这里。OSI模型帮你定位WiFi的层级,802.11标准让你知道你的芯片在用什么协议在跑,帧结构则是你操作WiFi芯片时直接打交道的对象。这三样东西,是后面所有配网广播技术的基础。