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