“我只会用
WiFi.begin()
,难道还需要懂分层?”
“当然!不会调帧你就别谈抓包;不懂分层你就别怪掉线。”
今天,我们就从嵌入式开发的视角,彻底剖析 WiFi 的 “分层结构”,让你从 “能连上” 变成 “能调好”。
简单说,WiFi 是 无线局域网(WLAN)通信协议的实现,基于 IEEE 802.11 标准。
而它真正的通信流程,是一个 分层设计 —— 不同的层负责不同的事情,互不打扰又密切协作。
WiFi ≠ 只有 “无线电波”,它是一个标准的 分层网络协议栈。
应用层
↳ MQTT / HTTP / CoAP 等协议
传输层
↳ TCP / UDP
网络层
↳ IP(IPv4 / IPv6)
数据链路层(重点!)
↳ IEEE 802.11 MAC(媒体访问控制)
物理层
↳ IEEE 802.11 PHY(射频调制、频段选择等)
WiFi 栈重点聚焦的是数据链路层 和 物理层,这也是我们嵌入式开发常踩坑的地方!
负责:把二进制变成“电磁波”发出去!
嵌入式相关举例:
负责:确保多个设备“轮流说话”,别抢话筒
关键机制:
控制什么时候发、发给谁、收到没
嵌入式常用术语:
负责:“我在哪?我要去哪里?”
ESP32 开发中常见的:
WiFi.localIP()
:查看获取到的 IP 地址负责:你发了东西,有没有收全?有没有乱序?
嵌入式应用:
负责:你最终想干嘛?发传感器数据?开灯?OTA?
嵌入式常用协议:
假设你的 ESP32 定时采集温度并通过 MQTT 上传:
{"temp": 24.5}
→ MQTT publish每一层都在默默干活,掉哪一层都“出bug”!
现象 | 问题层级 | 可能原因 |
---|---|---|
连不上WiFi | PHY / MAC | 信号弱、信道冲突、认证失败 |
配网成功但访问不了云端 | 网络层 | 没有分配 IP、DHCP 异常 |
OTA失败 / MQTT连接断 | 传输层 | TCP超时、路由器NAT超时、拥塞 |
收到的数据乱码 / 丢包 | 应用层 / TCP | 编码错误、未处理粘包分包 |
工具 | 用途 |
---|---|
Wireshark | 抓 802.11 帧 + TCP/IP 报文 |
ping / traceroute | 判断 IP/网络层连接 |
MQTT.fx / MQTT Explorer | 测试 MQTT 交互 |
ESP-IDF log / AT 日志 | 查看模组连接日志 |
搞 WiFi 嵌入式开发,你不需要像搞网络工程那样背 RFC,但你必须知道每层干嘛的,否则出问题你连排查都不会:
WiFi.begin()
,而是在 orchestrate 一整套协议栈协同“不懂分层,就像瞎子调收音机。”
“搞嵌入式 WiFi 开发,分层就是你看清问题的望远镜。”
下一篇预告:
《WiFi 的握手、重传、ACK机制全解析:别再说你丢包了》
从 MAC 层通信机制开始,带你破解“明明连上却发不了数据”的谜团!
欢迎留言 + 点赞,我会持续更新「WiFi通信协议全解析」!