3. 802.11协议栈架构:OSI模型与WiFi的对应关系
各位同学,咱们今天聊聊802.11协议栈的架构。说实话,很多刚入行的朋友一上来就啃协议文档,结果被各种层、子层搞得晕头转向。我当年也一样,看了三天,脑子里还是一团浆糊。
后来我养成了一个习惯:先把OSI模型和WiFi的对应关系理清楚。说白了,就是搞清楚每一层到底管什么事。你想想看,网络通信就像寄快递——应用层是你要寄的东西,传输层是打包,网络层是写地址,而WiFi的MAC和PHY层,就是那个负责把包裹安全送到隔壁房间的快递员。
3.1 OSI七层模型与WiFi的映射
标准的OSI模型有七层,但WiFi主要涉及最下面两层:数据链路层和物理层。嗯,这里要注意,数据链路层在WiFi里被拆成了两个子层——LLC和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层传下来的数据帧加个「信封」。
这个信封包含三样东西:
- 前导码(Preamble):一串固定的比特序列,用来让接收方同步时钟、估算信道。我习惯把它比作「嘿,我要开始说话了,你准备好了吗?」
- 帧头(Header):包含速率信息、帧长度、调制方式等。接收方根据这个才知道怎么解码后面的数据。
- 数据部分:就是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 数据流在协议栈中的旅程
最后,咱们走一遍数据流的完整路径。这样你就能把前面讲的所有内容串起来了。
- 应用层产生数据,一路向下经过TCP/IP协议栈,到达MAC层。
- MAC层封装成802.11帧,加上帧控制字段、地址、序列号等。然后通过PHY-SAP接口交给PLCP。
- PLCP加上前导码和帧头,组成PPDU(PLCP Protocol Data Unit)。前导码用最低速率发送,保证所有设备都能同步。
- PLCP把PPDU交给PMD。PMD进行编码、调制,变成IQ信号。
- IQ信号经过DAC(数模转换)变成模拟信号,再上变频到射频频率,通过天线发射出去。
- 接收方反过来:天线收到信号→下变频→ADC→PMD解调解码→PLCP去掉前导码和帧头→MAC层解析帧→上交上层。
整个过程看起来复杂,但实际在硬件里,从MAC层到天线发射出去,延迟通常在微秒级别。我测过一款主流芯片,这个延迟大概在5-10微秒左右。
好了,这一章的内容就到这里。记住一句话:MAC层管规则,PLCP管封装,PMD管物理传输。搞清楚了这三个子层的分工,后面学802.11的各种特性就会轻松很多。
公众号:蓝海资料掘金营,微信deep3321