第一步:先理解最基础的关系(类比快递)
假设你要给朋友寄快递:
Wi-Fi:相当于“公路和卡车”,负责把包裹从你家运到快递站。
TCP/UDP:相当于“快递公司的运输规则”。
TCP:顺丰快递(保证包裹不丢、按顺序送达,但速度可能慢)。
UDP:普通快递(可能丢件、顺序乱,但速度快)。
MQTT:相当于“快递单上的具体说明”(比如“货到付款”或“放门口”)。
第二步: 用“快递流程”理解完整通信过程
假设你有一个智能温湿度传感器,要通过 Wi-Fi 上报数据到手机 APP:
数据准备(应用层 - MQTT):
传感器生成数据:
温度25℃, 湿度60%
。MQTT 负责包装这条数据:添加“快递单”(MQTT 头部),比如:
主题(Topic):
home/sensor/temperature
(告诉 Broker 这是客厅温度数据)。QoS 等级:1(至少送达一次)。
消息ID:123(用于确认)。
运输规则(传输层 - TCP):
TCP 接手后,将 MQTT 数据包拆分成多个“小包裹”,每个包裹打上标签:
源端口:随机端口(如 54321)。
目标端口:1883(MQTT 默认端口)。
序列号(保证顺序)。
校验和(防数据损坏)。
地址定位(网络层 - IP):
IP 协议 给包裹贴上“大地址标签”:
源 IP:传感器 IP(如
192.168.1.100
)。目标 IP:MQTT Broker 的 IP(如
broker.emqx.io
)。协议类型:TCP(告诉接收方这是 TCP 数据)。
物理搬运(数据链路层/物理层 - Wi-Fi):
Wi-Fi 将 IP 数据包封装成“无线信号”,通过路由器中转:
转换为 Wi-Fi 帧(包含 MAC 地址:路由器的 MAC 是下一站)。
通过无线电波传输到路由器。
路由器再通过互联网将数据最终送达 Broker。
反向流程(手机 APP 接收数据):
Broker 将数据通过同样的流程反向传递到手机 APP(Wi-Fi → IP → TCP → MQTT → 展示数据)。
第三步:核心概念一句话总结
协议 | 一句话总结 | 典型场景 |
---|---|---|
TCP | 可靠的快递员,不丢件不乱序 | 网页、微信消息 |
UDP | 跑得快的快递员,可能丢件 | 视频通话、游戏实时位置 |
MQTT | 为物联网设计的“快递单规则” | 智能家居设备上报数据 |
Wi-Fi | 无线版的“网线” | 手机、电脑无线联网 |
2. 关键协作要点
协议 | 协作行为 | 类比解释 |
---|---|---|
Wi-Fi | 只关心“如何把数据从A点传到B点” | 卡车司机不关心货物内容,只管运输 |
TCP | 确保货物不丢失、按顺序到达 | 快递员逐个包裹检查,丢件就重发 |
UDP | 一次性扔出所有包裹,不管是否到达 | 快递员直接把包裹扔到客户家门口 |
MQTT | 定义包裹内容如何解读(主题、QoS等级) | 快递单上写明“易碎品”或“加急” |
第四步:常见问题解答
Q1:MQTT必须基于TCP吗?
是的,MQTT设计时基于TCP。但物联网中也有变种如MQTT-SN(基于UDP或其他协议)。
Q2:为什么我本地测试MQTT能通,真实项目连不上?
可能原因:
防火墙拦截了端口(如1883)。
未配置MQTT Broker的用户名密码(公开测试Broker不需要,但私有环境需要)。