第一步:先理解最基礎的關系(類比快遞)
假設你要給朋友寄快遞:
-
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不需要,但私有環境需要)。
-