第3章:WiFi协议栈基础:802.11a/b/g/n/ac/ax演进、MAC层与PHY层关键参数、WiFi调试常用工具
好,咱们进入WiFi的世界。说实话,车载通信里WiFi的地位越来越重。OTA升级、车载热点、手机互联,哪样都离不开它。但WiFi协议栈比蓝牙复杂不少,光是802.11那一堆后缀就够让人头疼的。
这一章,我带你捋清楚WiFi的演进脉络,把MAC层和PHY层的关键参数讲透,再分享几个我常用的调试工具。嗯,都是实战中摸爬滚打出来的经验。
3.1 802.11协议演进:从a/b/g到ax
WiFi协议从1997年诞生到现在,经历了六代。我个人习惯按「代」来记,比记字母后缀直观得多。
| 协议 | 代际 | 频段 | 最大速率 | 调制方式 | 关键特性 |
|---|---|---|---|---|---|
| 802.11a | 第2代 | 5 GHz | 54 Mbps | OFDM | 首个5G频段标准 |
| 802.11b | 第2代 | 2.4 GHz | 11 Mbps | DSSS/CCK | 覆盖范围大 |
| 802.11g | 第2代 | 2.4 GHz | 54 Mbps | OFDM | 兼容b,速率翻倍 |
| 802.11n | 第4代 | 2.4/5 GHz | 600 Mbps | OFDM | MIMO、40MHz信道 |
| 802.11ac | 第5代 | 5 GHz | 6.9 Gbps | OFDM | MU-MIMO、256-QAM |
| 802.11ax | 第6代 | 2.4/5/6 GHz | 9.6 Gbps | OFDMA | 高密场景优化、1024-QAM |
你想想看,从11Mbps到9.6Gbps,差了将近1000倍。但车载场景下,我们更关心的是稳定性和延迟,而不是跑满速率。
关键点:车载WiFi目前主流是802.11ac,但新车型已经开始上802.11ax(WiFi 6)。原因很简单——多设备并发场景下,ax的OFDMA技术能大幅降低延迟。
3.2 PHY层关键参数
PHY层是WiFi的物理基础。说白了,就是信号怎么发、怎么收。我挑几个最关键的参数讲。
3.2.1 调制与编码方案(MCS)
MCS索引决定了速率。从MCS 0到MCS 9,调制方式从BPSK一路升到256-QAM。速率越高,对信噪比的要求也越高。
我在项目中遇到过一个问题:某款车机在停车场里WiFi速率死活上不去。抓包一看,MCS一直卡在3。后来发现是天线布局被金属支架遮挡了,信号反射严重。调整天线位置后,MCS直接跳到7。
实战技巧:调试时先看MCS索引。如果MCS偏低,优先检查天线和射频链路,别急着怀疑协议栈。
3.2.2 信道带宽
802.11n支持20MHz和40MHz,802.11ac支持20/40/80/160MHz。带宽越大,速率越高,但干扰也越严重。
车载环境里,我建议优先用20MHz或40MHz。80MHz以上在车里容易受雷达和车载电子设备干扰。嗯,这是踩过坑才明白的。
3.2.3 发射功率与灵敏度
发射功率通常限制在20dBm(100mW)以内。灵敏度方面,802.11ac的接收灵敏度一般在-82dBm(MCS 0)到-64dBm(MCS 9)之间。
我曾经调试过一个项目,车机连不上路由器。测下来发现接收灵敏度只有-70dBm,比规格书差了10dB。最后查出是PCB走线阻抗不匹配,导致射频前端增益下降。
3.3 MAC层关键参数
MAC层负责介质访问控制。WiFi用的是CSMA/CA机制,跟以太网的CSMA/CD不一样。为什么?因为无线环境里没法检测冲突,只能避免。
3.3.1 DCF与EDCA
DCF是基础机制,通过DIFS和退避算法来避免碰撞。EDCA是802.11e引入的QoS机制,把数据分成四个优先级:语音、视频、尽力而为、背景。
车载场景下,语音和视频流必须走高优先级队列。我见过一个案例:OTA下载占满了带宽,导致CarPlay语音卡顿。后来把OTA流量映射到背景队列,问题就解决了。
注意:EDCA参数配置不当,会导致高优先级流量反而被低优先级阻塞。建议用Wireshark抓包确认TID映射是否正确。
3.3.2 帧聚合与块确认
802.11n引入了A-MSDU和A-MPDU两种帧聚合方式。A-MSDU把多个数据帧合成一个,A-MPDU把多个MPDU合成一个。块确认(Block ACK)则是一次性确认多个帧。
我建议在车载场景下开启A-MPDU,因为它对丢包更鲁棒。A-MSDU一旦出错,整个聚合帧都得重传,效率反而下降。
3.4 WiFi调试常用工具
工具不在多,在于精。我常用的就这几个,但每个都能解决一类问题。
3.4.1 Wireshark
WiFi抓包的首选工具。支持802.11协议解析,能看到Beacon帧、Probe Request/Response、关联过程等。
调试时我一般这么用:
- 先看Beacon帧,确认AP的SSID、信道、支持速率
- 再看关联过程,确认认证方式和密钥协商是否正常
- 最后看数据帧,确认MCS、RSSI、重传率
# 在Linux上开启monitor模式抓包
iw dev wlan0 set monitor none
ifconfig wlan0 up
tcpdump -i wlan0 -w wifi_capture.pcap
3.4.2 iw工具
Linux下的WiFi配置和诊断工具。可以查看链路质量、扫描结果、连接状态。
# 查看当前连接信息
iw dev wlan0 link
# 扫描周围AP
iw dev wlan0 scan
# 查看PHY能力
iw phy phy0 info
我个人习惯用iw dev wlan0 link快速查看RSSI和MCS。如果RSSI低于-75dBm,基本可以判断信号有问题。
3.4.3 频谱分析仪
硬件工具,用于查看信道占用情况和干扰源。车载环境里,我遇到过车载摄像头在2.4GHz频段产生谐波干扰的情况。用频谱仪一看,2.4GHz信道上有明显的尖峰。
省钱方案:没有频谱仪的话,可以用WiFi网卡的FCS错误统计来间接判断干扰。FCS错误率超过5%,基本可以认定有干扰。
3.4.4 吞吐量测试工具
iPerf3是最常用的。测试TCP/UDP吞吐量,确认WiFi链路能跑多少。
# 服务端
iperf3 -s
# 客户端
iperf3 -c 192.168.1.100 -t 30 -i 1
我一般会同时跑UDP测试,因为UDP能更真实反映链路质量。TCP有重传机制,会把丢包掩盖掉。
3.5 避坑指南
最后分享几个我踩过的坑,希望能帮你少走弯路。
坑1:信道选择。车载WiFi AP如果固定在一个信道,遇到雷达信号(DFS)会被强制切换。我建议开启自动信道选择,或者避开DFS信道。
坑2:省电模式。WiFi的PS-Poll和U-APSD省电模式会导致延迟抖动。车载场景下,如果对延迟敏感,建议关闭省电模式。
坑3:天线分集。有些WiFi芯片支持天线分集,但切换算法不成熟。我曾经遇到过天线切换导致丢包率飙升的情况。建议在量产前做充分的天线切换测试。
好了,WiFi协议栈的基础就讲到这里。下一章我们进入实战,用具体案例来演示WiFi调试的全流程。记住,理论是基础,但真正能解决问题的,是你在调试中积累的经验。