先搞懂它是什么
- 协议(Protocol):设备之间通信的“语言规则”,规定数据怎么编排、怎么发送、怎么确认。
- 分层:把复杂通信拆成一层管一件事,每层只和上下层打交道,像公司里“前台→部门→仓库”各司其职。
- Ai-WB2 的协议栈全景:无线收发(Wi-Fi 4 / BLE)→ IP 网络(lwIP)→ 应用协议(HTTP/MQTT/SNTP…),每一层在 SDK 里都有对应实现和例程。
层层拆解原理
1. 网络协议分类
按功能把协议分成几类,Ai-WB2 相关协议如下:
| 分类 | 协议 | 作用 | 对应教程页 |
|---|---|---|---|
| 无线链路 | Wi-Fi(802.11)、BLE | 物理收发、接入网络 | Wi-Fi 简介、BLE 简介 |
| 网络层 | IP、ICMP | 寻址与路由(“发给谁”) | TCP/IP 协议栈简介 |
| 传输层 | TCP、UDP | 可靠/不可靠传输(“怎么送”) | TCP 客户端、UDP 客户端 |
| 应用层 | HTTP/S、MQTT/S、SNTP、DNS、WebSocket | 面向业务的数据格式 | HTTP 简介、MQTT、SNTP |
| 应用层(BLE) | GATT/ATT、HID | BLE 连接后的数据组织 | BLE 与 GATT 原理 |
2. OSI 与 TCP/IP 层级对照
现实中常说的“四层模型”(TCP/IP)对应七层 OSI 模型的简化版:
| TCP/IP 四层 | OSI 七层(对应) | 典型协议 | 类比 |
|---|---|---|---|
| 应用层 | 应用/表示/会话层 | HTTP、MQTT、SNTP、DNS | 信件内容 |
| 传输层 | 传输层 | TCP、UDP | 快递单(挂号信/平信) |
| 网络层 | 网络层 | IP、ICMP | 收件地址(门牌号) |
| 链路层 | 数据链路/物理层 | Wi-Fi 802.11、以太网 | 快递运输 |
3. 数据封装:一层套一层
发送时每一层给数据“套信封”,接收时再一层层拆开:
这也是抓包时能看到“一层层头部”的原因——每个头都是某一层协议加的“信封”。
4. Ai-WB2 协议栈实现全景
对应到代码:Wi-Fi 用 wifi_task_create + fhost_init 启动,网络协议栈用 tcpip_init 启动 lwIP,BLE 用 btble_controller_init + hci_driver_init + bt_enable 启动。
结合 SDK 看实现
一个能联网的例程,启动时通常同时做了“Wi-Fi 初始化 + lwIP 初始化”:
tcpip_init(NULL, NULL); /* 启动 lwIP 协议栈 */
xTaskCreate(wifi_start_firmware_task, "wifi init", 1024, NULL, 10, NULL); /* 启动 Wi-Fi 固件 */
/* 连上 Wi-Fi 拿到 IP 后,TCP/UDP/HTTP/MQTT 例程才能工作 */常见考点 / 面试题
TCP/IP 四层模型是哪四层?各举一个协议?
应用层(HTTP/MQTT)、传输层(TCP/UDP)、网络层(IP/ICMP)、链路层(Wi-Fi/以太网)。
数据发送时为什么要一层层封装?
每层各管一件事(端口→IP→MAC),封装让每层只关心自己该加的头,接收端逐层解封还原;这也是分层协议能跨厂商互通的原因。
IP 和 TCP 分别解决什么问题?
IP 负责“发给哪台设备”(寻址路由);TCP 负责“怎么可靠地送”(端口、序号、确认重传)。一个管地址,一个管传输质量。
Wi-Fi 属于哪一层?和 TCP/IP 是什么关系?
Wi-Fi(802.11)属于链路层/物理层,负责无线收发;TCP/IP 跑在它上面。所以“连上 Wi-Fi”只代表链路通,还要拿到 IP(DHCP)才能用网络协议。
BLE 和 Wi-Fi 的协议栈有什么区别?
BLE 是另一套独立协议栈(控制器+HCI+主机栈 GAP/GATT),不跑 IP/TCP;Wi-Fi 走 IP 网络。两者可共存(单天线时分复用),但协议体系不同。
遇到问题?
如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

