MQTT协议14种报文分析.docx

上传人:b****8 文档编号:12314174 上传时间:2023-06-05 格式:DOCX 页数:25 大小:1.42MB
下载 相关 举报
MQTT协议14种报文分析.docx_第1页
第1页 / 共25页
MQTT协议14种报文分析.docx_第2页
第2页 / 共25页
MQTT协议14种报文分析.docx_第3页
第3页 / 共25页
MQTT协议14种报文分析.docx_第4页
第4页 / 共25页
MQTT协议14种报文分析.docx_第5页
第5页 / 共25页
MQTT协议14种报文分析.docx_第6页
第6页 / 共25页
MQTT协议14种报文分析.docx_第7页
第7页 / 共25页
MQTT协议14种报文分析.docx_第8页
第8页 / 共25页
MQTT协议14种报文分析.docx_第9页
第9页 / 共25页
MQTT协议14种报文分析.docx_第10页
第10页 / 共25页
MQTT协议14种报文分析.docx_第11页
第11页 / 共25页
MQTT协议14种报文分析.docx_第12页
第12页 / 共25页
MQTT协议14种报文分析.docx_第13页
第13页 / 共25页
MQTT协议14种报文分析.docx_第14页
第14页 / 共25页
MQTT协议14种报文分析.docx_第15页
第15页 / 共25页
MQTT协议14种报文分析.docx_第16页
第16页 / 共25页
MQTT协议14种报文分析.docx_第17页
第17页 / 共25页
MQTT协议14种报文分析.docx_第18页
第18页 / 共25页
MQTT协议14种报文分析.docx_第19页
第19页 / 共25页
MQTT协议14种报文分析.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MQTT协议14种报文分析.docx

《MQTT协议14种报文分析.docx》由会员分享,可在线阅读,更多相关《MQTT协议14种报文分析.docx(25页珍藏版)》请在冰点文库上搜索。

MQTT协议14种报文分析.docx

MQTT协议14种报文分析

MQTT协议14种报文分析

实习报告

课程名称:

_____

实习题目:

___________________

专业班级:

_____________

学生姓名:

__________

学  号:

___________

实习成绩:

指导教师签名:

年月日

实习时间

实习地点

实习学时

实习

目的

学习MQTT协议,对各个MQTT报文进行协议分析。

学习java语言的socket编程基础,利用paho库实现MQTT客户端程序。

 

实习

内容

 

利用相关工具捕获MQTT协议的相关报文,

分析MQTT协议的14种报文。

学会直接构造MQTT报文,完成通信,并理解回调机制

 

记录MQTT实验过程、截图分析并说明

利用socket直接构造MQTT报文,完成与服务器进行通信,

实现连接服务器、订阅主题、发送消息等功能。

利用paho库实现MQTT客户端,实现所有功能,并理解回调机制

 

实习

主要

设施

设备

装有WiresharkPortable、paho、mosquitto、npcap、

jdk-8u112-windows-i586等程序的PC机一台

 

 

对MQTT协议有了一定的认识,知道如何分析各种报文。

对MQTT协议编程有了一定的基础和了解。

 

实习报告

1引言

1.1系统概述

MQTT协议的分析与编程实验

1.2需求分析

基于轻量级代理的发布/订阅协议,更为简约、轻量,易于使用,针对受限环境(带宽低、网络延迟高、网络通信不稳定),属于物联网的一个传输协议。

设计思想是开放、简单、轻量、易于实现。

1.3运行环境

装并打开mosquitto服务器;安装MQTT客户端EclipsePahoMQTT;安装npcap;安装WiresharkPortable协议分析软件;安装jdk;Window7系统。

构造服务器环境。

2协议分析实验

2.1实验准备

实验环境:

JDK环境

实验方法及步骤:

1.MQTT服务器端mosquitto

(1)下载并安装mosquitto

(2)确认安装完后,所有所有的程序都安装在这个目录下,C:

\ProgramFiles(x86)\mosquitto。

如果你不想在其他的操作系统上也执行安装程序,把C:

\ProgramFiles(x86)\mosquitto这个文件夹拷贝到任何路径

(3)进入d:

\mosquitto,输入下面的命令,

cdd:

\mosquitto

mosquitto-p1883-v

-p代表当前的mosquitto服务实例启动以后,其监听端口号,这个配置的覆盖[-cconfigfile]指定的配置文件中的端口

-v代码调试模式(verbose)可以输出更多的信息

2.MQTT客户端EclipsePahoMQTT

(1)下载解压缩后,双击paho.exe,打开后的对界面如下

(2)点击上图中的十字图标,就能新建一个MQTT的客户端的连接,输入正确的MQTT服务端的连接地址,

(3)这个时候我们就能订阅消息了。

选择“Subscription”下方的绿色十字图标,就可以输入订阅的主题(topic)的名字,比如我们设置主题名称为“test”,并点击“Subscribe”按钮

(4)往MQTT服务发送一条某一主题的MQTT消息。

然后点击“Publish”按钮,这个时候,我们就能看到消息已经发送成功,且在步骤(3)订阅的同一主题也收到了消息。

3.安装和使用协议分析软件wireshark

(1)安装WiresharkPortable_2.2.1.paf.exe

(2)捕获MQTT协议报文

(3)在Wireshark中,分为capturefilter和DisplayFiler,我们只需要在WireShark软件中的capturefilter输入下面的过滤条件,则与MQTT服务交互的相关TCP的数据包就能抓取到。

如下图所示意.

这个时候,我们先启动WireShark,然后点击EclipsePahoMQTT工具的“Connect”,这个时候WireShark就能抓取下面的TCP数据包。

2.2主要实验步骤

操作:

按照“MQTT-3.1.1-CN”文档各种报文的实现方法依次实现,抓包结果截图,结合参考文档分析实验结果。

结果:

如下各图所示

14种报文分析说明具体如下:

1.CONNECT–连接服务端

分析说明:

固定报头:

00010000其中MQTT报文控制类型0001,保留位0000

剩余长度字段:

为16进制的1c,表示剩余长度等于可变报头的长度(10字节)加上有效载荷的长度为28。

可变报头:

CONNECT报文的可变报头按下列次序包含四个字段:

协议名(ProtocolName),协议级别(ProtocolLevel),连接标志(ConnectFlags)和保持连接(KeepAlive)

协议名字节构成:

00044d515454,表示长度为4的“MQTT”协议名称

协议级别字节构成:

04,对于3.1.1版协议,协议级别字段的值是4(0x04)。

连接标志:

02,对应2进制00000010,服务端必须验证CONNECT控制报文的保留标志位(第0位)是否为0,如果不为0必须断开客户端连接。

清理会话位置为连接标志字节的第1位,清理会话标志被设置为1,客户端和服务端必须丢弃之前的任何会话并开始一个新的会话。

遗嘱标志位置为连接标志的第2位,遗嘱标志被设置为0,连接标志中的WillQoS和WillRetain字段必须设置为0,并且有效载荷中不能包含WillTopic和WillMessage字段,网络连接断开时,不能发送遗嘱消息。

遗嘱QoS位置为连接标志的第4和第3位。

这两位用于指定发布遗嘱消息时使用的服务质量等级,因为此例遗嘱标志位置被置0,所以0,遗嘱QoS也必须设置为0(0x00)

遗嘱保留位置为连接标志的第5位。

遗嘱标志被设置为0,遗嘱保留(WillRetain)标志也必须设置为0

用户名标志位置为连接标志的第7位。

此例用户名标志被设置为0,有效载荷中不能包含用户名字段

密码标志位置为连接标志的第6位。

因为此例用户名标志被设置为0,密码标志也必须设置为0

保持连接:

保持连接字节为003c,其中保持连接KeepAliveMSB为00,保持连接KeepAliveLSB为3c

有效载荷:

00107061686f38373232383535323139343,其中表示随后长度为16,此例有效载荷只有客户端标识符即paho872285521941

2.CONNACK–确认连接请求

3.PUBLISH-发布消息:

分析说明:

以Q0S=1为例:

固定报头:

00110010,其中MQTT报文控制类,0011,保留位0010,重发标志位置为第1个字节,第3位,DUP=0,表示这是客户端或服务端第一次请求发送这个PUBLISH报文。

服务质量等级位置为第1个字节,第2-1位,QoS=01,表示至少分发一次。

保留标志位置为第1个字节,第0位,例图中为0.

剩余长度字段:

为16进制的0a,表示可变报头的长度。

表示可变报头的长度加上有效载荷的长度为10.

可变报头:

为16进制的00033131300006313233,0003表示主题长度为3,313130即主题名110,0006为报文标识符,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的06,313233为发布内容123

有效载荷:

有效载荷包含将被发布的应用消息。

数据的内容和格式是应用特定的。

有效载荷的长度这样计算:

用固定报头中的剩余长度字段的值减去可变报头的长度。

包含零长度有效载荷的PUBLISH报文是合法的。

此例的有效载荷即为零长度。

4.PUBACK–发布确认

分析说明:

固定报头:

01000000,其中MQTT报文控制类,0100,保留位0000

剩余长度字段:

为16进制的02,表示可变报头的长度。

对PUBREL报文这个值等于2.

可变报头:

为16进制的0006,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的06

有效载荷:

PUBACK报文没有有效载荷。

5.PUBREC–发布收到QoS2第一步

分析说明:

固定报头:

01010000,其中MQTT报文控制类,0101,保留位0000

剩余长度字段:

为16进制的02,表示可变报头的长度。

对PUBREL报文这个值等于2.

可变报头:

为16进制的0007,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的07

有效载荷:

PUBREC报文没有有效载荷。

6.PUBREL–发布释放QoS2第二步

分析说明:

固定报头:

01100010,其中MQTT报文控制类,0110,保留位0010

剩余长度字段:

为16进制的02,表示可变报头的长度。

对PUBREL报文这个值等于2.

可变报头:

为16进制的0007,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的07

有效载荷:

PUBREL报文没有有效载荷。

7.PUBCOMP–发布完成QoS2第三步

分析说明:

固定报头:

01110000,其中MQTT报文控制类,0111,保留位0000

剩余长度字段:

为16进制的02,表示可变报头的长度,对PUBCOMP报文这个值等于2。

可变报头:

为16进制的0007,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的07

有效载荷:

PUBCOMP报文没有有效载荷。

8.SUBSCRIBE-订阅主题

分析说明:

固定报头:

10000010,其中MQTT报文控制类,1000,保留位0010

剩余字段长度:

为16进制的08,表示可变报头的长度(2字节)加上有效载荷的长度为8

可变报头:

为16进制的0001,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的01

有效载荷:

为16进制的000331313000,其中MSB为00,LSB为03,主题过滤为313130即110,00表示服务质量等级QoS为0。

9SUBACK–订阅确认

分析说明:

固定报头:

10010000,其中MQTT报文控制类,1001,保留位0000

剩余长度字段为16进制的03,表示可变报头的长度加上有效载荷的长度为3

可变报头:

为16进制的0001,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的01

有效载荷:

为16进制的00,对应2进制即为返回码00000000,返回码值为0x00-最大QoS0

10UNSUBSCRIBE–取消订阅

分析说明:

固定报头:

10100010其中MQTT报文控制类型1010,保留位0010

剩余长度字段为16进制的07,表示可变报头的长度加上有效载荷的长度为7

可变报头:

16进制的0002,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的02

有效载荷:

16进制的0003313130,其中0003表示想要取消订阅的主题长度为3,想要取消的主题为313130即110。

11UNSUBACK–取消订阅确认

分析说明:

固定报头:

10110000其中MQTT报文控制类型1011,保留位0000.

剩余长度字段为:

16进制的02,表示可变报头的长度,对UNSUBACK报文这个值等于2

可变报头:

16进制的0002,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的02

有效载荷:

UNSUBACK报文没有有效载荷。

12PINGREQ–心跳请求

分析说明:

固定报头:

11000000,其中MQTT报文控制类型1100,保留位00000

可变报头:

PINGREQ报文没有可变报头。

有效载荷:

PINGREQ报文没有有效载荷。

 

13PINGRESP–心跳响应

分析说明:

固定报头:

11010000,其中MQTT报文控制类,1101,保留位0000

可变报头:

PINGRESP报文没有可变报头。

有效载荷:

PINGRESP报文没有有效载荷。

14DISCONNECT–断开连接

分析说明:

固定报头:

11100000,其中MQTT报文控制类型1110,保留位0000

可变报头:

DISCONNECT报文没有可变报头。

有效载荷:

DISCONNECT报文没有有效载荷。

2.3思考与总结

1.说明paho和mosquitto的作用,它们与发布/订阅模式的关系。

Paho是MQTT服务器客户端,Mosquitto是MQTT服务器端,助paho和mosquitto均可作为MQTT服务器的实现,可实现发布/订阅模式

2.MQTT中变长字段有哪些?

接收端如何判断变长字段结束?

MQTT中变长字段有剩余长度,当剩余长度字段的标志位为0时表示变长字段结束。

3.构造、捕获并分析带有客户端标识符,遗嘱主题,遗嘱消息,用户名,密码的Connect消息。

分析说明:

固定报头:

00010000报文控制类型0001,保留位0000

剩余长度字段:

为16进制的32,表示剩余长度等于可变报头的长度(10字节)加上有效载荷的长度为50.

可变报头:

CONNECT报文的可变报头按下列次序包含四个字段:

协议名(ProtocolName),协议级别(ProtocolLevel),连接标志(ConnectFlags)和保持连接(KeepAlive)

协议名字节构成:

00044d515454,表示长度为4的“MQTT”协议名称

协议级别字节构成:

04,对于3.1.1版协议,协议级别字段的值是4(0x04)。

连接标志:

c6,对应2进制11000110,服务端必须验证CONNECT控制报文的保留标志位(第0位)是否为0,如果不为0必须断开客户端连接。

清理会话位置为连接标志字节的第1位,清理会话标志被设置为1,客户端和服务端必须丢弃之前的任何会话并开始一个新的会话。

遗嘱标志位置为连接标志的第2位,遗嘱标志被设置为1,表示如果连接请求被接受了,遗嘱(WillMessage)消息必须被存储在服务端并且与这个网络连接关联。

之后网络连接关闭时,服务端必须发布这个遗嘱消息,除非服务端收到DISCONNECT报文时删除了这个遗嘱消息。

且连接标志中的WillQoS和WillRetain字段会被服务端用到,同时有效载荷中必须包含WillTopic和WillMessage字段。

遗嘱QoS位置为连接标志的第4和第3位。

这两位用于指定发布遗嘱消息时使用的服务质量等级,因为此例遗嘱标志位置被置0,所以0,遗嘱QoS也必须设置为0(0x00)

遗嘱保留位置为连接标志的第5位。

此例遗嘱保留被设置为0且遗嘱标志被设置为1,服务端必须将遗嘱消息当作非保留消息发布。

用户名标志位置为连接标志的第7位。

此例用户名标志被设置为1,有效载荷中必须包含用户名字段。

密码标志位置为连接标志的第6位。

此例密码标志被设置为1,有效载荷中必须包含密码字段

保持连接:

保持连接字节为003c,其中保持连接KeepAliveMSB为00,保持连接KeepAliveLSB为3c

有效载荷:

00127061686f31303535343735353035373738300003313130000331313000033131300003313130,其中0012表示随后客户端标识符长18个字节即paho0554755057780,接着0003表示随后的遗嘱主题长3个字节即110,接着0003表示随后的遗嘱消息长3个字节即110,接着0003表示随后的用户名长3个字节即110,接着0003表示随后的密码长3个字节即110

4.构造、捕获并分析订阅多个不同Qos级别的主题Subscribe消息。

同时订阅QoS级别分别为0、1、2的消息。

1三种方式固定头部的前两个字节均为:

82表示为请求订阅;

②Qos表示字段仅仅跟着Topic字段之后,16进制代码为:

000110表示为012三种情况。

5.构造、捕获并分析长度大于127字节的报文。

①当出现大于127字节的报文时,会在PUBLISH后出现几个TCP报文;

②TCP报文的数据内筒不一样,但序号相同。

6.构造、捕获并分析Qos=1和Qos=2时丢包的处理情况。

以上是QoS=1

 

以上是QoS=2

7.学习3种QoS消息的特性,通过实验填写下表内容

发布消息的QoS

0

0

0

1

Topic订阅的QoS

0

1

2

0

接收消息的QoS

0

0

0

0

发布消息的QoS

1

1

2

2

2

Topic订阅的QoS

1

2

0

1

2

接收消息的QoS

1

1

0

1

2

3协议编程实验过程

3.1实验准备

实验环境:

JDK环境

实验方法及步骤:

1.安装JDk

2.安装eclipse

3.打开paho软件

4.在eclipse中调试JAVA软件

3.2主要实验步骤

1.安装JAVA编程环境

2.下载pahoMqttclient.Jar包

3.利用socke直接构造MQTT报文,完成与服务器进行通信,实现连接服务器、订阅主题、发送消息等功能。

4.利用paho库实现 MQTT客户端,实现所有功能,并理解回调机制。

5.结果

①作为客户端

②作为服务器端

回调机制:

SimpleMqttClient类实现MqttCallback接口

SimpleMqttClient类中包含一个MqttClient的引用myClient

MqttClient类有一个参数为setCallback的方法

SimpleMqttClient的对象smc调用runClient方法

然后myClient就可以在setCallback中调用SimpleMqttClient的this方法

回调方法是把功能定义和功能实现分离的一种手段,是一种松耦合的设计思想。

同步调用是一种阻塞式调用,也是我们在写程序中经常使用的;回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口。

3.3思考与总结

了解了java语言的socket编程基础,学会了利用paho库实现MQTT客户端程序。

心得与体会

通过几天的实训了解了MQTT协议对在物联网专业的应用,利用相关工具捕获MQTT协议的相关报文,学习了如何分析MQTT协议中14种报文。

知道如何用paho库实现MQTT客户端程序。

让我对物联网有了新的认识。

 

参考文献

[1]皮德常.c++程序设计教程.机械工业出版社.2013

[2]陈锐.Java程序设计.机械工业出版社.2011

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2