MQTT協(xié)議14種報文分析_第1頁
MQTT協(xié)議14種報文分析_第2頁
MQTT協(xié)議14種報文分析_第3頁
MQTT協(xié)議14種報文分析_第4頁
MQTT協(xié)議14種報文分析_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、MQTT協(xié)議14種報文分析實習(xí)報告課 程 名 稱: _實 習(xí) 題 目: _ 專 業(yè) 班 級: _學(xué) 生 姓 名: _學(xué) 號: _實 習(xí) 成 績: 指導(dǎo)教師簽名: 年 月 日實習(xí)時間實習(xí)地點實習(xí)學(xué)時實習(xí)目的學(xué)習(xí)MQTT協(xié)議,對各個MQTT報文進(jìn)行協(xié)議分析。學(xué)習(xí)java語言的socket編程基礎(chǔ),利用paho庫實現(xiàn)MQTT客戶端程序。實習(xí)內(nèi)容利用相關(guān)工具捕獲MQTT協(xié)議的相關(guān)報文,分析MQTT協(xié)議的14種報文。學(xué)會直接構(gòu)造MQTT報文,完成通信,并理解回調(diào)機制實習(xí)要求記錄MQTT實驗過程、截圖分析并說明利用socket直接構(gòu)造MQTT報文,完成與服務(wù)器進(jìn)行通信,實現(xiàn)連接服務(wù)器、訂閱主題、發(fā)送消息等

2、功能。利用paho庫實現(xiàn)MQTT客戶端,實現(xiàn)所有功能,并理解回調(diào)機制實習(xí)主要設(shè)施設(shè)備裝有WiresharkPortable、paho、mosquitto、npcap、jdk-8u112-windows-i586等程序的PC機一臺實習(xí)成果對MQTT協(xié)議有了一定的認(rèn)識,知道如何分析各種報文。對MQTT協(xié)議編程有了一定的基礎(chǔ)和了解。實習(xí)報告1 引言1.1系統(tǒng)概述MQTT協(xié)議的分析與編程實驗1.2 需求分析 基于輕量級代理的發(fā)布/訂閱協(xié)議,更為簡約、輕量,易于使用,針對受限環(huán)境(帶寬低、網(wǎng)絡(luò)延遲高、網(wǎng)絡(luò)通信不穩(wěn)定),屬于物聯(lián)網(wǎng)的一個傳輸協(xié)議。設(shè)計思想是開放、簡單、輕量、易于實現(xiàn)。1.3 運行環(huán)境裝并打

3、開mosquitto服務(wù)器;安裝MQTT客戶端EclipsePahoMQTT;安裝npcap;安裝WiresharkPortable協(xié)議分析軟件;安裝jdk;Window7系統(tǒng)。構(gòu)造服務(wù)器環(huán)境。2 協(xié)議分析實驗2.1 實驗準(zhǔn)備實驗環(huán)境:JDK環(huán)境實驗方法及步驟:1.MQTT服務(wù)器端mosquitto(1)下載并安裝mosquitto(2)確認(rèn)安裝完后,所有所有的程序都安裝在這個目錄下,C:Program Files (x86)mosquitto。如果你不想在其他的操作系統(tǒng)上也執(zhí)行安裝程序,把C:Program Files (x86)mosquitto這個文件夾拷貝到任何路徑(3)進(jìn)入d:mos

4、quitto,輸入下面的命令, cd d:mosquitto mosquitto -p 1883 -v -p 代表當(dāng)前的mosquitto服務(wù)實例啟動以后,其監(jiān)聽端口號,這個配置的覆蓋-c config file 指定的配置文件中的端口 -v 代碼調(diào)試模式(verbose)可以輸出更多的信息 2.MQTT客戶端Eclipse Paho MQTT (1)下載解壓縮后,雙擊paho.exe,打開后的對界面如下 (2)點擊上圖中的 十字圖標(biāo),就能新建一個MQTT的客戶端的連接,輸入正確的MQTT服務(wù)端的連接位置, (3)這個時候我們就能訂閱消息了。選擇“Subscription”下方的綠色十字圖標(biāo),

5、就可以輸入訂閱的主題(topic)的名字,比如我們設(shè)置主題名稱為“test”,并點擊“Subscribe”按鈕(4)往MQTT服務(wù)發(fā)送一條某一主題的MQTT消息。然后點擊“Publish”按鈕,這個時候,我們就能看到消息已經(jīng)發(fā)送成功,且在步驟(3)訂閱的同一主題也收到了消息。3.安裝和使用協(xié)議分析軟件wireshark (1)安裝WiresharkPortable_2.2.1.paf.exe(2)捕獲MQTT協(xié)議報文(3)在Wireshark中,分為capture filter和Display Filer,我們只需要在WireShark軟件中的capture filter 輸入下面的過濾條件,

6、則與MQTT服務(wù)交互的相關(guān)TCP的數(shù)據(jù)包就能抓取到。如下圖所示意. 這個時候,我們先啟動WireShark,然后點擊Eclipse Paho MQTT工具的“Connect”,這個時候WireShark就能抓取下面的TCP數(shù)據(jù)包。2.2 主要實驗步驟操作:按照“MQTT-3.1.1-CN”文檔各種報文的實現(xiàn)方法依次實現(xiàn),抓包結(jié)果截圖,結(jié)合參考文檔分析實驗結(jié)果。結(jié)果:如下各圖所示14種報文分析說明具體如下:1.CONNECT 連接服務(wù)端分析說明:固定報頭:0001 0000其中MQTT報文控制類型0001,保留位0000剩余長度字段:為16進(jìn)制的1c,表示剩余長度等于可變報頭的長度(10字節(jié))加

7、上有效載荷的長度為28。可變報頭:CONNECT報文的可變報頭按下列次序包含四個字段:協(xié)議名(Protocol Name),協(xié)議級別(Protocol Level),連接標(biāo)志(Connect Flags)和保持連接(Keep Alive)協(xié)議名字節(jié)構(gòu)成:00 04 4d 51 54 54,表示長度為4的“MQTT”協(xié)議名稱協(xié)議級別字節(jié)構(gòu)成:04,對于3.1.1版協(xié)議,協(xié)議級別字段的值是4(0x04)。連接標(biāo)志:02,對應(yīng)2進(jìn)制0000 0010,服務(wù)端必須驗證CONNECT控制報文的保留標(biāo)志位(第0位)是否為0,如果不為0必須斷開客戶端連接 。清理會話位置為連接標(biāo)志字節(jié)的第1位 ,清理會話標(biāo)志

8、被設(shè)置為1,客戶端和服務(wù)端必須丟棄之前的任何會話并開始一個新的會話。遺囑標(biāo)志位置為連接標(biāo)志的第2位,遺囑標(biāo)志被設(shè)置為0,連接標(biāo)志中的Will QoS和Will Retain字段必須設(shè)置為0,并且有效載荷中不能包含Will Topic和Will Message字段,網(wǎng)絡(luò)連接斷開時,不能發(fā)送遺囑消息。遺囑QoS位置為連接標(biāo)志的第4和第3位。這兩位用于指定發(fā)布遺囑消息時使用的服務(wù)質(zhì)量等級,因為此例遺囑標(biāo)志位置被置0,所以0,遺囑QoS也必須設(shè)置為0(0x00) 遺囑保留位置為連接標(biāo)志的第5位。 遺囑標(biāo)志被設(shè)置為0,遺囑保留(Will Retain)標(biāo)志也必須設(shè)置為0 用戶名標(biāo)志位置為連接標(biāo)志的第7位

9、。此例用戶名標(biāo)志被設(shè)置為0,有效載荷中不能包含用戶名字段密碼標(biāo)志位置為連接標(biāo)志的第6位。因為此例用戶名標(biāo)志被設(shè)置為0,密碼標(biāo)志也必須設(shè)置為0 保持連接:保持連接字節(jié)為00 3c,其中保持連接KeepAliveMSB為00,保持連接KeepAliveLSB為3c有效載荷:00 10 70 61 68 6f 38 37 32 32 38 35 35 32 31 39 34 3,其中表示隨后長度為16,此例有效載荷只有客戶端標(biāo)識符即paho 8722855219412.CONNACK 確認(rèn)連接請求 3. PUBLISH-發(fā)布消息:分析說明:以Q0S=1為例:固定報頭:0011 0010,其中MQTT

10、報文控制類,0011,保留位0010,重發(fā)標(biāo)志位置為第1個字節(jié),第3位,DUP=0,表示這是客戶端或服務(wù)端第一次請求發(fā)送這個PUBLISH報文。服務(wù)質(zhì)量等級位置為第1個字節(jié),第2-1位,QoS=01,表示至少分發(fā)一次。保留標(biāo)志位置為第1個字節(jié),第0位,例圖中為0.剩余長度字段:為16進(jìn)制的0a,表示可變報頭的長度。表示可變報頭的長度加上有效載荷的長度為10.可變報頭:為16進(jìn)制的00 03 31 31 30 00 06 31 32 33,00 03表示主題長度為3,31 31 30即主題名110,00 06為報文標(biāo)識符,其中報文標(biāo)識符MSL為16進(jìn)制的00,報文標(biāo)識符LSB為16進(jìn)制的06,3

11、1 32 33為發(fā)布內(nèi)容123有效載荷:有效載荷包含將被發(fā)布的應(yīng)用消息。數(shù)據(jù)的內(nèi)容和格式是應(yīng)用特定的。有效載荷的長度這樣計算:用固定報頭中的剩余長度字段的值減去可變報頭的長度。包含零長度有效載荷的PUBLISH報文是合法的。此例的有效載荷即為零長度。4.PUBACK 發(fā)布確認(rèn)分析說明:固定報頭:0100 0000,其中MQTT報文控制類,0100,保留位0000剩余長度字段:為16進(jìn)制的02,表示可變報頭的長度。對PUBREL報文這個值等于2. 可變報頭:為16進(jìn)制的00 06,其中報文標(biāo)識符MSL為16進(jìn)制的00,報文標(biāo)識符LSB為16進(jìn)制的06有效載荷:PUBACK報文沒有有效載荷。 5.

12、PUBREC 發(fā)布收到QoS2第一步分析說明:固定報頭:0101 0000,其中MQTT報文控制類,0101,保留位0000剩余長度字段:為16進(jìn)制的02,表示可變報頭的長度。對PUBREL報文這個值等于2. 可變報頭:為16進(jìn)制的00 07,其中報文標(biāo)識符MSL為16進(jìn)制的00,報文標(biāo)識符LSB為16進(jìn)制的07有效載荷:PUBREC報文沒有有效載荷。 6.PUBREL 發(fā)布釋放QoS2第二步分析說明:固定報頭:0110 0010,其中MQTT報文控制類,0110,保留位0010剩余長度字段:為16進(jìn)制的02,表示可變報頭的長度。對PUBREL報文這個值等于2. 可變報頭:為16進(jìn)制的00 0

13、7,其中報文標(biāo)識符MSL為16進(jìn)制的00,報文標(biāo)識符LSB為16進(jìn)制的07有效載荷:PUBREL報文沒有有效載荷。 7.PUBCOMP 發(fā)布完成QoS2第三步分析說明:固定報頭:0111 0000,其中MQTT報文控制類,0111,保留位0000剩余長度字段:為16進(jìn)制的02,表示可變報頭的長度,對PUBCOMP報文這個值等于2。 可變報頭:為16進(jìn)制的00 07,其中報文標(biāo)識符MSL為16進(jìn)制的00,報文標(biāo)識符LSB為16進(jìn)制的07有效載荷:PUBCOMP報文沒有有效載荷。 8.SUBSCRIBE - 訂閱主題 分析說明:固定報頭:1000 0010,其中MQTT報文控制類,1000,保留位

14、0010剩余字段長度:為16進(jìn)制的08,表示可變報頭的長度(2字節(jié))加上有效載荷的長度為8可變報頭:為16進(jìn)制的00 01,其中報文標(biāo)識符MSL為16進(jìn)制的00,報文標(biāo)識符LSB為16進(jìn)制的01有效載荷:為16進(jìn)制的00 03 31 31 30 00,其中MSB為00,LSB為03,主題過濾為31 31 30即110,00表示服務(wù)質(zhì)量等級QoS為0。9 SUBACK 訂閱確認(rèn) 分析說明:固定報頭:1001 0000,其中MQTT報文控制類,1001,保留位0000剩余長度字段為16進(jìn)制的03,表示可變報頭的長度加上有效載荷的長度為3可變報頭:為16進(jìn)制的00 01,其中報文標(biāo)識符MSL為16進(jìn)

15、制的00,報文標(biāo)識符LSB為16進(jìn)制的01有效載荷:為16進(jìn)制的00,對應(yīng)2進(jìn)制即為返回碼0000 0000,返回碼值為0x00 -最大QoS 0 10 UNSUBSCRIBE 取消訂閱 分析說明:固定報頭:1010 0010其中MQTT報文控制類型1010,保留位0010剩余長度字段 為16進(jìn)制的07,表示可變報頭的長度加上有效載荷的長度為7可變報頭:16進(jìn)制的00 02,其中報文標(biāo)識符MSL為16進(jìn)制的00,報文標(biāo)識符LSB為16進(jìn)制的02有效載荷:16進(jìn)制的 00 03 31 31 30,其中00 03表示想要取消訂閱的主題長度為3,想要取消的主題為31 31 30即110。11 UNS

16、UBACK 取消訂閱確認(rèn) 分析說明:固定報頭:1011 0000其中MQTT報文控制類型1011,保留位0000.剩余長度字段為:16進(jìn)制的02,表示可變報頭的長度,對UNSUBACK報文這個值等于2可變報頭:16進(jìn)制的00 02,其中報文標(biāo)識符MSL為16進(jìn)制的00,報文標(biāo)識符LSB為16進(jìn)制的02有效載荷:UNSUBACK報文沒有有效載荷。 12 PINGREQ 心跳請求 分析說明:固定報頭:1100 0000,其中MQTT報文控制類型1100,保留位00000可變報頭:PINGREQ報文沒有可變報頭。 有效載荷:PINGREQ報文沒有有效載荷。13 PINGRESP 心跳響應(yīng) 分析說明:

17、固定報頭:1101 0000,其中MQTT報文控制類,1101,保留位0000可變報頭:PINGRESP報文沒有可變報頭。 有效載荷:PINGRESP報文沒有有效載荷。14 DISCONNECT 斷開連接分析說明:固定報頭:1110 0000,其中MQTT報文控制類型1110,保留位0000可變報頭:DISCONNECT報文沒有可變報頭。 有效載荷:DISCONNECT報文沒有有效載荷。2.3 思考與總結(jié)1.說明paho和mosquitto的作用,它們與發(fā)布/訂閱模式的關(guān)系。Paho是MQTT服務(wù)器客戶端,Mosquitto是MQTT服務(wù)器端,助paho和mosquitto均可作為MQTT服務(wù)

18、器的實現(xiàn),可實現(xiàn)發(fā)布/訂閱模式2.MQTT中變長字段有哪些?接收端如何判斷變長字段結(jié)束?MQTT中變長字段有剩余長度,當(dāng)剩余長度字段的標(biāo)志位為0時表示變長字段結(jié)束。3.構(gòu)造、捕獲并分析帶有客戶端標(biāo)識符,遺囑主題,遺囑消息,用戶名,密碼的Connect消息。分析說明:固定報頭:0001 0000報文控制類型0001,保留位0000剩余長度字段:為16進(jìn)制的32,表示剩余長度等于可變報頭的長度(10字節(jié))加上有效載荷的長度為50.可變報頭:CONNECT報文的可變報頭按下列次序包含四個字段:協(xié)議名(Protocol Name),協(xié)議級別(Protocol Level),連接標(biāo)志(Connect F

19、lags)和保持連接(Keep Alive)協(xié)議名字節(jié)構(gòu)成:00 04 4d 51 54 54,表示長度為4的“MQTT”協(xié)議名稱協(xié)議級別字節(jié)構(gòu)成:04,對于3.1.1版協(xié)議,協(xié)議級別字段的值是4(0x04)。連接標(biāo)志:c6,對應(yīng)2進(jìn)制1100 0110,服務(wù)端必須驗證CONNECT控制報文的保留標(biāo)志位(第0位)是否為0,如果不為0必須斷開客戶端連接 。清理會話位置為連接標(biāo)志字節(jié)的第1位 ,清理會話標(biāo)志被設(shè)置為1,客戶端和服務(wù)端必須丟棄之前的任何會話并開始一個新的會話。遺囑標(biāo)志位置為連接標(biāo)志的第2位,遺囑標(biāo)志被設(shè)置為1,表示如果連接請求被接受了,遺囑(Will Message)消息必須被存儲在

20、服務(wù)端并且與這個網(wǎng)絡(luò)連接關(guān)聯(lián)。之后網(wǎng)絡(luò)連接關(guān)閉時,服務(wù)端必須發(fā)布這個遺囑消息,除非服務(wù)端收到DISCONNECT報文時刪除了這個遺囑消息。且連接標(biāo)志中的Will QoS和Will Retain字段會被服務(wù)端用到,同時有效載荷中必須包含Will Topic和Will Message字段。遺囑QoS位置為連接標(biāo)志的第4和第3位。這兩位用于指定發(fā)布遺囑消息時使用的服務(wù)質(zhì)量等級,因為此例遺囑標(biāo)志位置被置0,所以0,遺囑QoS也必須設(shè)置為0(0x00) 遺囑保留位置為連接標(biāo)志的第5位。此例遺囑保留被設(shè)置為0且遺囑標(biāo)志被設(shè)置為1,服務(wù)端必須將遺囑消息當(dāng)作非保留消息發(fā)布。用戶名標(biāo)志位置為連接標(biāo)志的第7位。此

21、例用戶名標(biāo)志被設(shè)置為1,有效載荷中必須包含用戶名字段。密碼標(biāo)志位置為連接標(biāo)志的第6位。此例密碼標(biāo)志被設(shè)置為1,有效載荷中必須包含密碼字段保持連接:保持連接字節(jié)為00 3c,其中保持連接KeepAliveMSB為00,保持連接KeepAliveLSB為3c有效載荷:00 12 70 61 68 6f 31 30 35 35 34 37 35 35 30 35 37 37 38 30 00 03 31 31 30 00 03 31 31 30 00 03 31 31 30 00 03 31 31 30,其中00 12表示隨后客戶端標(biāo)識符長18個字節(jié)即paho 0554755057780,接著00

22、03表示隨后的遺囑主題長3個字節(jié)即110,接著00 03表示隨后的遺囑消息長3個字節(jié)即110,接著00 03表示隨后的用戶名長3個字節(jié)即110,接著00 03表示隨后的密碼長3個字節(jié)即1104. 構(gòu)造、捕獲并分析訂閱多個不同Qos級別的主題Subscribe消息。同時訂閱QoS級別分別為0、1、2的消息。 三種方式固定頭部的前兩個字節(jié)均為:82 表示為請求訂閱;Qos表示字段僅僅跟著Topic字段之后,16進(jìn)制代碼為:00 01 10表示為0 1 2三種情況。5.構(gòu)造、捕獲并分析長度大于 127 字節(jié)的報文。當(dāng)出現(xiàn)大于127字節(jié)的報文時,會在PUBLISH后出現(xiàn)幾個TCP報文;TCP報文的數(shù)據(jù)內(nèi)筒不一樣,但序號相同。6.構(gòu)造、捕獲并分析Qos=1和Qos=2時丟包的處理情況。以上是QoS=1以上是QoS=27.學(xué)習(xí)3種QoS消息的特性,通過實驗填寫下表內(nèi)容發(fā)布消息的QoS 0 0 0 1 Topic訂閱的QoS 0 1 2 0 接收消息的QoS 0 0 0 0發(fā)布消息的QoS 1 1 2 2 2 Topic訂閱的QoS 1 2 0 1 2 接收消息的QoS 1 1 0 1 23協(xié)議編程實驗過程3.1 實驗準(zhǔn)備實驗環(huán)境:JDK環(huán)境實驗方法及步驟:1.安裝J

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論