Skip to content

先搞懂它是什么

  • 协议(Protocol):设备之间通信的“语言规则”,规定数据怎么编排、怎么发送、怎么确认。
  • 分层:把复杂通信拆成一层管一件事,每层只和上下层打交道,像公司里“前台→部门→仓库”各司其职。
  • Ai-M6x 的协议栈全景:无线收发(Wi-Fi 6 / BLE)→ IP 网络(lwIP)→ 应用协议(HTTP/MQTT/SNTP…),每一层在 SDK 里都有对应实现和例程。

层层拆解原理

1. 网络协议分类

按功能把协议分成几类,Ai-M6x 相关协议如下:

分类协议作用对应教程页
无线链路Wi-Fi(802.11)、BLE物理收发、接入网络Wi-Fi 简介BLE 简介
网络层IP、ICMP寻址与路由(“发给谁”)TCP/IP 协议栈简介
传输层TCP、UDP可靠/不可靠传输(“怎么送”)TCP 客户端UDP 客户端
应用层HTTP/S、MQTT/S、SNTP、DNS、WebSocket面向业务的数据格式HTTP 简介MQTTSNTP
应用层(BLE)GATT/ATT、HIDBLE 连接后的数据组织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-M6x 协议栈实现全景

对应到代码:Wi-Fi 用 wifi_task_create + fhost_init 启动,网络协议栈用 tcpip_init 启动 lwIP,BLE 用 btble_controller_init + hci_driver_init + bt_enable 启动。

结合 SDK 看实现

一个能联网的例程,启动时通常同时做了“Wi-Fi 初始化 + lwIP 初始化”:

c
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

Released under the MIT License. Build Time 2026-09-11 14:52:23