MQTT——控制報文格式

瞭解控制報文格式是學習MQTT中,筆者認爲最爲重要的一個知識點。MQTT的全部行爲都離不開他。控制報文能夠分爲三個部分組成,分別爲:固定報頭、能夠變報頭、有效載荷部分。學習

注意:上面的說的報文的類型。是指鏈接(CONNECT),發佈(PUBLISH)等。而等級是指服務質量 (QoS) 。spa

固定報頭.net

固定報頭,從官方的說明文檔指出他又邊倆部分。但是仍是喜歡把他說明成三個部分。以下翻譯

控制報文的類型:用於標示類型,如:鏈接(CONNECT)報文,發佈(PUBLISH)報文等。他佔了四個字節。如:鏈接報文對應二進制:0001。blog

控制報文類型的標誌位:這裏包含的內部比較多。分別爲:標示發送重複數(DUP) (1字節) 、服務質量 (QoS) (2字節)、保留標誌(RETAIN)(1字節)。一樣子他也佔了四個字節圖片

剩餘長度:和字面意思同樣子。只是筆者看了文檔說明,有一點不明白。筆者覺得就是可變報頭和有效載荷部分的長度。他佔8個字節。文檔

上面有講到關於發送重複數(DUP)。這個主要是關係到服務質量 (QoS)的設置。若是隻是設置爲0的話,那麼發送重複數(DUP)也是爲0。若是當服務質量 (QoS)爲1的時候,那麼表示這個報文至少要發送到達一次。這個時候就會用到發送重複數(DUP)了。重送一次就在發送重複數(DUP)上面加1。以下圖get

服務質量 (QoS)中文翻譯有些有一點怪。上面是筆者去查看一些英文根據本身的解理得來了。若是有不對的話,但願能指出來。qt

爲了方便去理解報文格式。筆者去下載了Wireshark軟件來抓一個包來看看。爲何要選擇Wireshark呢?主要是他對MQTT協議顯示的比較直觀吧。Wireshark軟件有一點要注意。他並不支持本地的抓包。因此你必須還要下載一個叫RawCap的軟件。操做以下bfc

1.下載以後,打開RawCap軟件。

2.請選擇  1 。回車。

3.輸入對應的文件名。

上第三個中咱們能夠看到Packets是用於當前抓到了幾個包。儘可能多一點吧。由於有時候是計算本身的自己的包。差很少的時候,記得不要點擊窗口的X。要用CTRL+C來結果。否則文件是空的。沒有數據。

結束以後,你會獲得一個文件。這個文件會在當前的RawCap.exe同目錄下出現。這個時候若是你裝完了Wireshark軟件。只要雙擊他就是能夠自動導入了。以下

 

只要輸入mqtt就能夠只顯示關於mqtt協議的數據。如今就讓咱們看一個鏈接CONNECT報文的包。以下

圖中筆者選中了固定報頭,下方就是一樣子選中他對應的二進制。咱們能夠看到是否是八個字節呢?同時上面相關的固定報文標誌位的信息也顯示的很明顯。圖中的Msg Len就是剩餘長度了。其餘的就是可變報頭和有效載荷部分了。

上面是一個鏈接(CONNECT)類型的報文。鏈接報文的類型爲1。那麼對應的二進制爲:0001。同時筆者設置的服務質量(QOS)爲0,不保留即爲0。因此固定報頭就是上面顯示的——00010000。至於報文類型的定義筆者上一單也提過。這裏筆者就把官方的信息複製過來,以方便閱讀。以下。

可變報頭

可變報頭,不是必定要存在的。根據不一樣的類型報文可變報頭的內部是會發生改變的。舉個列子,如鏈接肯定(CONNACK)報文,他的可變報頭只有鏈接確認標誌和鏈接返回碼。同時他的剩餘長度一直是2。以下Wireshark抓到的顯示。

最突出的不過去DISCONNECT類型的報文。可變報頭是空的。以下

雖然可變報頭是變化的。可是咱們總元素是不會發生變化的。因此咱們仍是要全面的瞭解他到底有些什麼東西。筆者根據MQTT文檔說明。把全部相關的信息列出來。以下。

綠色的爲用到的。紅色表示沒有用到的。至於每一個項究竟是什麼做用。仍是等筆者價紹相關的報文類型的時候,在說吧。

註音:圖片若是看不清楚。能夠放大看。

有效載荷部分

有效載荷部分。能夠說是客戶端和服務端以後間的通訊內容。可是不是什麼類型的報文都必須有。並且有效載荷部分的總信息又不是隻有通訊容。他有可能會出現別的信息。如:主題名(Topic Name)、客戶ID(Client Identifier)等信息。筆者也列出來。以下

 瞭解了MQTT報文的格式以後。對於咱們後面學習相關的響應動做很是有幫助。但願對你們有幫助。

相關文章
相關標籤/搜索