MQTT通信協(xié)議作為目前最主流的物聯(lián)網(wǎng)協(xié)議,大家應(yīng)該都很熟悉,包括阿里云、百度云等都是通過MQTT協(xié)議來實(shí)現(xiàn)通訊的,與HTTP通信協(xié)議一樣,其本身都是建立在TCP/IP協(xié)議上,本文會(huì)詳細(xì)介紹MQTT報(bào)文協(xié)議,讓大家直觀地感受到MQTT通信協(xié)議報(bào)文的結(jié)構(gòu)與內(nèi)容。
在探究MQTT通信協(xié)議底層的報(bào)文之前,大家還應(yīng)該對(duì)于MQTT通信協(xié)議本身的工作模式有一個(gè)簡(jiǎn)要直觀的了解。首先MQTT通信協(xié)議是一種低開銷、低帶寬占用的即時(shí)通訊協(xié)議,它本身是一種消息發(fā)布/訂閱的機(jī)制實(shí)現(xiàn)端與服務(wù)器通訊的協(xié)議。對(duì)于服務(wù)器而言,沒有訂閱的概念;而對(duì)于客戶端而言,既有發(fā)布概念,也有訂閱概念,客戶端通過發(fā)布主題向服務(wù)器發(fā)布信息,服務(wù)器收到信息后根據(jù)客戶端的發(fā)布主題對(duì)消息進(jìn)行處理。而消息的發(fā)布又要區(qū)分QoS概念,0/1/2分別對(duì)應(yīng)消息傳輸一次,保證傳輸一次以及保證僅僅傳輸一次,這些涉及到服務(wù)器與客戶端在通訊過程中是否有交互的過程。這幾個(gè)概念是MQTT通信協(xié)議主要的幾個(gè)概念,下面正式去詳解MQTT通信協(xié)議的報(bào)文內(nèi)容。
首先探究MQTT協(xié)議報(bào)文內(nèi)容,是直接使用TCP服務(wù)器進(jìn)行通訊的(不使用MQTT服務(wù)器),因?yàn)?/span>MQTT協(xié)議本身是基于TCP協(xié)議進(jìn)行通訊的,所以只要服務(wù)器向設(shè)備發(fā)起的請(qǐng)求連接報(bào)文以及訂閱報(bào)文進(jìn)行正確的回復(fù),普通的TCP服務(wù)器完全可以當(dāng)做MQTT服務(wù)器接收到客戶端發(fā)布的消息,并且能非常簡(jiǎn)單地將設(shè)備發(fā)送的包抓出來,其他手段類似于抓包工具也能實(shí)現(xiàn)但是并不能直觀幫助我們了解這一過程。
拿一個(gè)億佰特的4G DTU設(shè)備舉例(其他設(shè)備也是一樣的),由于MQTT通信協(xié)議本身要配置三元組,我們將設(shè)備配置成標(biāo)準(zhǔn)MQTT協(xié)議工作模式,三元組按照下面的參數(shù)配置,然后目標(biāo)地址與端口直接填寫我們TCP服務(wù)器的地址與端口,訂閱與發(fā)布都勾選并且都按照如下進(jìn)行配置,然后觀察我們TCP服務(wù)器上交互的信息。
以下為TCP服務(wù)器端交互的信息:
連接MQTT通信協(xié)議第一步是請(qǐng)求TCP服務(wù)器連接,這一步由協(xié)議棧直接完成不需要管,然后客戶端會(huì)發(fā)送請(qǐng)求MQTT服務(wù)器連接報(bào)文,也就是上面的第一條消息:
第一個(gè)byte為0x10,其為MQTT協(xié)議固定頭部分,此byte的8個(gè)bit位分別代表了不同的意義,高四位與低四位的值分別代表的意義也貼在了下方:
高四位信息:
低四位信息:
以上就是固定頭部分的內(nèi)容,常見的固定頭以及其意義如下:
這里就能直觀地理解MQTT通信協(xié)議交互過程中的幾個(gè)交互報(bào)文的頭部了,先是0x10為首的請(qǐng)求MQTT通信協(xié)議連接報(bào)文;其次是0x20為首的服務(wù)器響應(yīng)連接的報(bào)文;然后是0x82為首的設(shè)備訂閱請(qǐng)求報(bào)文;接著是0x90為首的訂閱請(qǐng)求回復(fù)。至此完成了設(shè)備連接MQTT服務(wù)器并且訂閱成功的過程。最后是設(shè)備發(fā)布的報(bào)文,以0x30為首。
MQTT通訊報(bào)文的第二個(gè)字節(jié)指示的是剩余字段的長(zhǎng)度,比如請(qǐng)求連接報(bào)文第二個(gè)字節(jié)值為0x1F代表后面的一個(gè)字節(jié)為剩余長(zhǎng)度,這個(gè)剩余長(zhǎng)度最大占用4個(gè)字節(jié),每個(gè)字節(jié)的低七位是編碼數(shù)據(jù),而最高位代表后面有沒有更多字節(jié)位,表示后續(xù)有沒有更多的字節(jié)為代表剩余字節(jié)數(shù)。而剩余的包括MQTT通信協(xié)議三元組信息,是可以在請(qǐng)求連接報(bào)文中看到的(0x31 0x31 0x31 就代表Client ID ,其前面的0x03代表Client ID 的長(zhǎng)度),而發(fā)布topic,可以在客戶端發(fā)布的報(bào)文中看到。
這些就是MQTT報(bào)文的詳情,去了解底層的報(bào)文結(jié)構(gòu)有助于我們更好地掌控此協(xié)議的用法以及排查問題。
文章推薦:
北斗短報(bào)文通信技術(shù)原理及應(yīng)用介紹
CAN總線通信實(shí)現(xiàn)CAN報(bào)文帶ID標(biāo)識(shí)教程
MQTT協(xié)議報(bào)文中TPC驅(qū)動(dòng)和字符轉(zhuǎn)換教程
億佰特人每一天都致力于更好的助力物聯(lián)化、智能化、自動(dòng)化的發(fā)展,提升資源利用率,更多產(chǎn)品更多資料,感興趣的小伙伴可以登錄我們的官網(wǎng)進(jìn)行了解,還有客服小姐姐在線答疑哦!
7 X 24 銷售服務(wù)熱線
4000-330-990深圳辦事處柯經(jīng)理:18218726658 杭州辦事處戴經(jīng)理:17512568697
常州辦事處崔經(jīng)理:15906110783 南京辦事處葛經(jīng)理:17626012283
業(yè)務(wù)郵箱:support@cdebyte.com
全國銷售投訴電話:19934352316
地址:四川省成都市高新西區(qū)西區(qū)大道199號(hào)B5棟(前臺(tái)座機(jī):028-61543675)
?? 成都億佰特電子科技有限公司【版權(quán)所有】 蜀ICP備13019384號(hào)-3