基本介紹
在上篇文章《快速開發MQTT(一)電子工程師眼中的MQTT》中,對比了串口連接和TCP連接,我們知道實現了連接和數據收發之后,接下來就是要考慮數據的封裝、組包的事了。
比如UART傳輸過程中,數據被從A設備發送到B設備時,一般的都做這樣的協議簡單封裝數據:“包頭0xAA+兩字節包長度LEN+1字節的LRC+數據內容”,此時B設備收到數據包就進行解析。
這一過程就是應用層面的協議。
類似的,MQTT也有報文格式,應用程序將數據填入報文包中,后通過TCP進行發送。
為了查看其報文格式,可以利用MQTT客戶端工具MQTT.fx,嘗試向TCP服務器發起一個連接請求。
TCP服務器繼續使用上篇文章《快速開發MQTT(一)電子工程師眼中的MQTT》中提到的SSCOM工具進行模擬。
交互過程如下:
TCP服務器開啟,并偵聽;
MQTT.fx作為客戶端,向TCP服務器發起請求,發出的CONNECT報文(Hex):10 1A 00 044D 51 54 54 04 02 00 3C 00 0E 77 77 77 2E 64 69 67 63 6F 72 65 2E 63 6E;
TCP服務器接收到該請求,TCP服務器此刻該回復(Hex):20 02 00 00;
完成連接請求。
以下為交互過程截圖:
配置TCPServer和MQTT.fx客戶端,需要填寫一致的IP地址和端口號
MQTT.fx發起連接時,TCPServer接收到的完整數據包內容
TCPServer通過發送欄,回復數據(Hex):2002 00 00
至此,MQTT的連接流程完成,并且MQTT.fx客戶端顯示已連接的狀態。通過這一模擬的過程,我們能夠清晰認識到MQTT文檔中的報文格式定義已經協議規范的定義。
對以上的數據分析,我們很容易就和MQTT-3.1.1版本規范進行對應:
客戶端發的數據是10 1A 00 04 4D 51 54 54 04 02 00 3C 00 0E 77 77 77 2E 64 69 67 63 6F 72 65 2E 63 6E
解析如下:
固定報頭:0x10 1A,即報文類型是1,長度是26個字節(0x1A)
可變報頭:
0x00 04 4D 51 54 54,此處定義了協議名,長度是4,協議名是”MQTT”;
0x04,協議級別;
0x02,連接標志;
0x00 3C,保持連接,以秒為單位的時間間隔;
有效載荷:
0x00 0E,有效載荷內容的長度
0x77 77 77 2E 64 69 67 63 6F 72 65 2E 63 6E,客戶端標識符www.digcore.cn
TCPServer回復的數據是20 0200 00
解析如下:
固定報頭:0x20 02,即報文類型是2,長度是2個字節(0x02)
可變報頭:0x00 00,即連接確認標志和連接返回碼
在實際開發過程中,可以利用SSCOM工具作為服務器式驗證自己編寫的MQTT客戶端程序是否正確發出數據,另外也可以作為客戶端驗證與MQTT服務器的正確交互。
既然TCP連接后就已經實現了數據收發的功能,為什么應用層還有這么多的通信協議:HTTP、FTP、MQTT等。
這就有區別于串口,畢竟串口在通信時是有著導線直接相連,而基于TCP連接的通信,在復雜的計算機網絡中,準確找對一個終端并與之交互數據,這中間需要做的是靠應用層的協議進行握手、確認等交互,有著“一回生二回熟三回四回熱炕頭”這么一個啰嗦的過程。
協議框架
MQTT框架模型非常清晰看到,服務器實現了該協議的最主要功能,對數據和指令進行“轉發”。
★★★★★推薦文章
《嵌入式硬件通信接口-使用RingBuffer處理數據(二)詳細設計過程》
《嵌入式硬件通信接口-使用RingBuffer處理數據(一)》
《快速開發MQTT(一)電子工程師眼中的MQTT》
《快速開發MQTT(二)初識MQTT》
《MQTT客戶端搭建-最清晰的MQTT協議架構》
《MQTT服務端搭建-最快方式驗證自己開發的客戶端》
★★★★★相似文章
《嵌入式硬件通信接口協議-UART(五)數據包設計與解析》
《嵌入式硬件通信接口協議-UART(四)設計起止式的應用層協議》
《嵌入式硬件通信接口協議-UART(三)快速使用串口及應用》
《嵌入式硬件通信接口協議-UART(二)不同電氣規范下的標準》
《嵌入式硬件通信接口協議-UART(一)協議基礎》
《嵌入式硬件通信接口協議-SPI(二)分層架構設計模擬接口》
《嵌入式硬件通信接口協議-SPI(一)協議基礎》
★★★★★擴展閱讀
《【硬件電路】AltiumDesigner18規則檢查含義》
《【硬件電路】N溝道、P溝道MOS管基本原理與應用案例》
文章首發于同名微信公眾號:DigCore
歡迎關注同名微信公眾號:DigCore,及時獲取最新技術博文。
原文鏈接:https://mp.weixin.qq.com/s/hY3y0EpWLeya3YkWwvU1lQ
(說明:此處的文章從微信公眾號拷貝而來,排版事宜由電子說工作人員編輯,可能存在一定的瑕疵,歡迎點擊原文鏈接閱讀)
-
MQTT
+關注
關注
5文章
651瀏覽量
22541 -
MQTT協議
+關注
關注
0文章
97瀏覽量
5428
發布評論請先 登錄
相關推薦
評論