3. 802.11协议栈架构:OSI模型与WiFi的对应关系

各位同学,咱们今天聊聊802.11协议栈的架构。说实话,很多刚入行的朋友一上来就啃协议文档,结果被各种层、子层搞得晕头转向。我当年也一样,看了三天,脑子里还是一团浆糊。

后来我养成了一个习惯:先把OSI模型和WiFi的对应关系理清楚。说白了,就是搞清楚每一层到底管什么事。你想想看,网络通信就像寄快递——应用层是你要寄的东西,传输层是打包,网络层是写地址,而WiFi的MAC和PHY层,就是那个负责把包裹安全送到隔壁房间的快递员。

3.1 OSI七层模型与WiFi的映射

标准的OSI模型有七层,但WiFi主要涉及最下面两层:数据链路层和物理层。嗯,这里要注意,数据链路层在WiFi里被拆成了两个子层——LLC和MAC。而物理层又拆成了PLCP和PMD。

我画了一张图,帮你快速建立整体认知:

OSI 七层模型 应用层 (7) 表示层 (6) 会话层 (5) 传输层 (4) 网络层 (3) 数据链路层 (2) LLC + MAC 物理层 (1) PLCP + PMD 802.11 协议栈 上层协议(TCP/IP、UDP等) LLC 子层(逻辑链路控制) MAC 子层 CSMA/CA · 帧聚合 · ACK · RTS/CTS PLCP 子层 前导码 · 帧头 · 速率协商 PMD 子层 调制 · 编码 · 天线控制 物理介质(2.4GHz / 5GHz / 6GHz 射频) 802.11 协议栈 = MAC + PLCP + PMD

这张图我建议你保存下来。每次看协议文档时,先定位一下当前内容属于哪个子层,思路会清晰很多。

3.2 MAC层与PHY层的职责划分

很多人搞不清MAC层和PHY层到底谁管什么。我打个比方:MAC层是交通警察,负责指挥车辆(数据帧)什么时候走、什么时候停、谁先走;PHY层是马路和汽车本身,负责把车从A点运到B点。

MAC层的主要职责

  • 信道访问控制:用CSMA/CA机制,避免多个设备同时发送数据。我在项目中遇到过一个问题——两个AP在同一个信道上互相干扰,结果吞吐量直接腰斩。后来调整了退避参数才解决。
  • 帧封装与解析:给上层数据加上MAC头,包含源地址、目的地址、序列号等。收到帧时再拆开。
  • 确认与重传:发送方发完数据后,必须等接收方回ACK。没收到就重传。我曾经调试过一个丢包问题,查了半天发现是ACK超时设置太短了。
  • 分片与重组:大包切成小片发送,接收方再拼回去。这在干扰严重的环境下特别有用。

PHY层的主要职责

  • 编码与调制:把二进制数据变成无线电信号。比如64-QAM、BPSK这些。
  • 发送与接收:控制天线发射和接收射频信号。
  • CCA(空闲信道评估):告诉MAC层当前信道是不是空的。这个很关键,如果CCA太灵敏,设备就不敢发数据;太迟钝,又会撞包。
  • 速率选择:根据信号质量自动调整传输速率。信号好就用高速率,信号差就降速保连接。

核心要点:MAC层管的是「什么时候发」,PHY层管的是「怎么发出去」。两者通过一个叫PHY-SAP的接口通信。MAC层说「我要发这个帧,用MCS7速率」,PHY层就照做。

3.3 PLCP子层详解

PLCP,全称Physical Layer Convergence Procedure。名字很绕口,但它的工作其实很简单——给MAC层传下来的数据帧加个「信封」。

这个信封包含三样东西:

  1. 前导码(Preamble):一串固定的比特序列,用来让接收方同步时钟、估算信道。我习惯把它比作「嘿,我要开始说话了,你准备好了吗?」
  2. 帧头(Header):包含速率信息、帧长度、调制方式等。接收方根据这个才知道怎么解码后面的数据。
  3. 数据部分:就是MAC层传下来的完整帧。

PLCP还有一个重要任务——速率协商。802.11支持多种速率,发送方和接收方必须用同一个速率才能通信。PLCP帧头总是用最低速率(比如6Mbps)发送,这样所有设备都能听懂。后面的数据部分才用协商好的高速率。

避坑指南:我曾经调试过一个兼容性问题——老款网卡和新款AP连不上。查了半天发现是PLCP前导码格式不匹配。老设备只支持长前导码(Long Preamble),新AP默认用短前导码(Short Preamble)。解决办法是强制AP兼容长前导码模式。

3.4 PMD子层详解

PMD,Physical Medium Dependent。这个子层是真正和硬件打交道的。说白了,PLCP负责「组织数据」,PMD负责「把数据变成电磁波」。

PMD做的事情包括:

功能 说明 我见过的坑
调制 把比特映射到星座图上。比如BPSK每符号传1比特,64-QAM传6比特 信号差时强行用64-QAM,误码率飙升
编码 添加纠错码,比如卷积码、LDPC码 编码率选太高,纠错能力不够
射频控制 控制发射功率、频率、天线选择 发射功率调太大,干扰隔壁AP
信号检测 判断有没有信号进来,信号强度多少 检测阈值设太低,老是误触发

嗯,这里要注意一个关键点:PMD是直接和射频硬件交互的。所以不同芯片厂商的PMD实现差异很大。我当年在Atheros(现Qualcomm)做驱动时,就发现同一套PMD配置在不同硬件版本上表现完全不同。

警告:PMD层的参数调整要非常谨慎。比如发射功率、CCA阈值这些,调不好轻则性能下降,重则违反无线电法规。我建议你在实验室环境下逐步测试,不要直接在生产环境改。

3.5 数据流在协议栈中的旅程

最后,咱们走一遍数据流的完整路径。这样你就能把前面讲的所有内容串起来了。

  1. 应用层产生数据,一路向下经过TCP/IP协议栈,到达MAC层。
  2. MAC层封装成802.11帧,加上帧控制字段、地址、序列号等。然后通过PHY-SAP接口交给PLCP。
  3. PLCP加上前导码和帧头,组成PPDU(PLCP Protocol Data Unit)。前导码用最低速率发送,保证所有设备都能同步。
  4. PLCP把PPDU交给PMD。PMD进行编码、调制,变成IQ信号。
  5. IQ信号经过DAC(数模转换)变成模拟信号,再上变频到射频频率,通过天线发射出去。
  6. 接收方反过来:天线收到信号→下变频→ADC→PMD解调解码→PLCP去掉前导码和帧头→MAC层解析帧→上交上层。

整个过程看起来复杂,但实际在硬件里,从MAC层到天线发射出去,延迟通常在微秒级别。我测过一款主流芯片,这个延迟大概在5-10微秒左右。

好了,这一章的内容就到这里。记住一句话:MAC层管规则,PLCP管封装,PMD管物理传输。搞清楚了这三个子层的分工,后面学802.11的各种特性就会轻松很多。


公众号:蓝海资料掘金营,微信deep3321