MQTT协议14种报文分析.doc

上传人:jian****018 文档编号:9462909 上传时间:2020-04-05 格式:DOC 页数:29 大小:4.39MB
返回 下载 相关 举报
MQTT协议14种报文分析.doc_第1页
第1页 / 共29页
MQTT协议14种报文分析.doc_第2页
第2页 / 共29页
MQTT协议14种报文分析.doc_第3页
第3页 / 共29页
点击查看更多>>
资源描述
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:Program Files (x86)mosquitto。如果你不想在其他的操作系统上也执行安装程序,把C:Program Files (x86)mosquitto这个文件夹拷贝到任何路径(3)进入d:mosquitto,输入下面的命令, cd d:mosquitto mosquitto -p 1883 -v -p 代表当前的mosquitto服务实例启动以后,其监听端口号,这个配置的覆盖-c config file 指定的配置文件中的端口 -v 代码调试模式(verbose)可以输出更多的信息 2.MQTT客户端Eclipse Paho MQTT (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中,分为capture filter和Display Filer,我们只需要在WireShark软件中的capture filter 输入下面的过滤条件,则与MQTT服务交互的相关TCP的数据包就能抓取到。如下图所示意. 这个时候,我们先启动WireShark,然后点击Eclipse Paho MQTT工具的“Connect”,这个时候WireShark就能抓取下面的TCP数据包。2.2 主要实验步骤操作:按照“MQTT-3.1.1-CN”文档各种报文的实现方法依次实现,抓包结果截图,结合参考文档分析实验结果。结果:如下各图所示14种报文分析说明具体如下:1.CONNECT 连接服务端分析说明:固定报头:0001 0000其中MQTT报文控制类型0001,保留位0000剩余长度字段:为16进制的1c,表示剩余长度等于可变报头的长度(10字节)加上有效载荷的长度为28。可变报头:CONNECT报文的可变报头按下列次序包含四个字段:协议名(Protocol Name),协议级别(Protocol Level),连接标志(Connect Flags)和保持连接(Keep Alive)协议名字节构成:00 04 4d 51 54 54,表示长度为4的“MQTT”协议名称协议级别字节构成:04,对于3.1.1版协议,协议级别字段的值是4(0x04)。连接标志:02,对应2进制0000 0010,服务端必须验证CONNECT控制报文的保留标志位(第0位)是否为0,如果不为0必须断开客户端连接 。清理会话位置为连接标志字节的第1位 ,清理会话标志被设置为1,客户端和服务端必须丢弃之前的任何会话并开始一个新的会话。遗嘱标志位置为连接标志的第2位,遗嘱标志被设置为0,连接标志中的Will QoS和Will Retain字段必须设置为0,并且有效载荷中不能包含Will Topic和Will Message字段,网络连接断开时,不能发送遗嘱消息。遗嘱QoS位置为连接标志的第4和第3位。这两位用于指定发布遗嘱消息时使用的服务质量等级,因为此例遗嘱标志位置被置0,所以0,遗嘱QoS也必须设置为0(0x00) 遗嘱保留位置为连接标志的第5位。 遗嘱标志被设置为0,遗嘱保留(Will Retain)标志也必须设置为0 用户名标志位置为连接标志的第7位。此例用户名标志被设置为0,有效载荷中不能包含用户名字段密码标志位置为连接标志的第6位。因为此例用户名标志被设置为0,密码标志也必须设置为0 保持连接:保持连接字节为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,此例有效载荷只有客户端标识符即paho 8722855219412.CONNACK 确认连接请求 3. PUBLISH-发布消息:分析说明:以Q0S=1为例:固定报头:0011 0010,其中MQTT报文控制类,0011,保留位0010,重发标志位置为第1个字节,第3位,DUP=0,表示这是客户端或服务端第一次请求发送这个PUBLISH报文。服务质量等级位置为第1个字节,第2-1位,QoS=01,表示至少分发一次。保留标志位置为第1个字节,第0位,例图中为0.剩余长度字段:为16进制的0a,表示可变报头的长度。表示可变报头的长度加上有效载荷的长度为10.可变报头:为16进制的00 03 31 31 30 00 06 31 32 33,00 03表示主题长度为3,31 31 30即主题名110,00 06为报文标识符,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的06,31 32 33为发布内容123有效载荷:有效载荷包含将被发布的应用消息。数据的内容和格式是应用特定的。有效载荷的长度这样计算:用固定报头中的剩余长度字段的值减去可变报头的长度。包含零长度有效载荷的PUBLISH报文是合法的。此例的有效载荷即为零长度。4.PUBACK 发布确认分析说明:固定报头:0100 0000,其中MQTT报文控制类,0100,保留位0000剩余长度字段:为16进制的02,表示可变报头的长度。对PUBREL报文这个值等于2. 可变报头:为16进制的00 06,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的06有效载荷:PUBACK报文没有有效载荷。 5.PUBREC 发布收到QoS2第一步分析说明:固定报头:0101 0000,其中MQTT报文控制类,0101,保留位0000剩余长度字段:为16进制的02,表示可变报头的长度。对PUBREL报文这个值等于2. 可变报头:为16进制的00 07,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的07有效载荷:PUBREC报文没有有效载荷。 6.PUBREL 发布释放QoS2第二步分析说明:固定报头:0110 0010,其中MQTT报文控制类,0110,保留位0010剩余长度字段:为16进制的02,表示可变报头的长度。对PUBREL报文这个值等于2. 可变报头:为16进制的00 07,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的07有效载荷:PUBREL报文没有有效载荷。 7.PUBCOMP 发布完成QoS2第三步分析说明:固定报头:0111 0000,其中MQTT报文控制类,0111,保留位0000剩余长度字段:为16进制的02,表示可变报头的长度,对PUBCOMP报文这个值等于2。 可变报头:为16进制的00 07,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的07有效载荷:PUBCOMP报文没有有效载荷。 8.SUBSCRIBE - 订阅主题 分析说明:固定报头:1000 0010,其中MQTT报文控制类,1000,保留位0010剩余字段长度:为16进制的08,表示可变报头的长度(2字节)加上有效载荷的长度为8可变报头:为16进制的00 01,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的01有效载荷:为16进制的00 03 31 31 30 00,其中MSB为00,LSB为03,主题过滤为31 31 30即110,00表示服务质量等级QoS为0。9 SUBACK 订阅确认 分析说明:固定报头:1001 0000,其中MQTT报文控制类,1001,保留位0000剩余长度字段为16进制的03,表示可变报头的长度加上有效载荷的长度为3可变报头:为16进制的00 01,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的01有效载荷:为16进制的00,对应2进制即为返回码0000 0000,返回码值为0x00 -最大QoS 0 10 UNSUBSCRIBE 取消订阅 分析说明:固定报头:1010 0010其中MQTT报文控制类型1010,保留位0010剩余长度字段 为16进制的07,表示可变报头的长度加上有效载荷的长度为7可变报头:16进制的00 02,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的02有效载荷:16进制的 00 03 31 31 30,其中00 03表示想要取消订阅的主题长度为3,想要取消的主题为31 31 30即110。11 UNSUBACK 取消订阅确认 分析说明:固定报头:1011 0000其中MQTT报文控制类型1011,保留位0000.剩余长度字段为:16进制的02,表示可变报头的长度,对UNSUBACK报文这个值等于2可变报头:16进制的00 02,其中报文标识符MSL为16进制的00,报文标识符LSB为16进制的02有效载荷:UNSUBACK报文没有有效载荷。 12 PINGREQ 心跳请求 分析说明:固定报头:1100 0000,其中MQTT报文控制类型1100,保留位00000可变报头:PINGREQ报文没有可变报头。 有效载荷:PINGREQ报文没有有效载荷。13 PINGRESP 心跳响应 分析说明:固定报头:1101 0000,其中MQTT报文控制类,1101,保留位0000可变报头:PINGRESP报文没有可变报头。 有效载荷:PINGRESP报文没有有效载荷。14 DISCONNECT 断开连接分析说明:固定报头:1110 0000,其中MQTT报文控制类型1110,保留位0000可变报头:DISCONNECT报文没有可变报头。 有效载荷:DISCONNECT报文没有有效载荷。2.3 思考与总结1.说明paho和mosquitto的作用,它们与发布/订阅模式的关系。Paho是MQTT服务器客户端,Mosquitto是MQTT服务器端,助paho和mosquitto均可作为MQTT服务器的实现,可实现发布/订阅模式2.MQTT中变长字段有哪些?接收端如何判断变长字段结束?MQTT中变长字段有剩余长度,当剩余长度字段的标志位为0时表示变长字段结束。3.构造、捕获并分析带有客户端标识符,遗嘱主题,遗嘱消息,用户名,密码的Connect消息。分析说明:固定报头:0001 0000报文控制类型0001,保留位0000剩余长度字段:为16进制的32,表示剩余长度等于可变报头的长度(10字节)加上有效载荷的长度为50.可变报头:CONNECT报文的可变报头按下列次序包含四个字段:协议名(Protocol Name),协议级别(Protocol Level),连接标志(Connect Flags)和保持连接(Keep Alive)协议名字节构成:00 04 4d 51 54 54,表示长度为4的“MQTT”协议名称协议级别字节构成:04,对于3.1.1版协议,协议级别字段的值是4(0x04)。连接标志:c6,对应2进制1100 0110,服务端必须验证CONNECT控制报文的保留标志位(第0位)是否为0,如果不为0必须断开客户端连接 。清理会话位置为连接标志字节的第1位 ,清理会话标志被设置为1,客户端和服务端必须丢弃之前的任何会话并开始一个新的会话。遗嘱标志位置为连接标志的第2位,遗嘱标志被设置为1,表示如果连接请求被接受了,遗嘱(Will Message)消息必须被存储在服务端并且与这个网络连接关联。之后网络连接关闭时,服务端必须发布这个遗嘱消息,除非服务端收到DISCONNECT报文时删除了这个遗嘱消息。且连接标志中的Will QoS和Will Retain字段会被服务端用到,同时有效载荷中必须包含Will Topic和Will Message字段。遗嘱QoS位置为连接标志的第4和第3位。这两位用于指定发布遗嘱消息时使用的服务质量等级,因为此例遗嘱标志位置被置0,所以0,遗嘱QoS也必须设置为0(0x00) 遗嘱保留位置为连接标志的第5位。此例遗嘱保留被设置为0且遗嘱标志被设置为1,服务端必须将遗嘱消息当作非保留消息发布。用户名标志位置为连接标志的第7位。此例用户名标志被设置为1,有效载荷中必须包含用户名字段。密码标志位置为连接标志的第6位。此例密码标志被设置为1,有效载荷中必须包含密码字段保持连接:保持连接字节为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表示随后客户端标识符长18个字节即paho 0554755057780,接着00 03表示随后的遗嘱主题长3个字节即110,接着00 03表示随后的遗嘱消息长3个字节即110,接着00 03表示随后的用户名长3个字节即110,接着00 03表示随后的密码长3个字节即1104. 构造、捕获并分析订阅多个不同Qos级别的主题Subscribe消息。同时订阅QoS级别分别为0、1、2的消息。 三种方式固定头部的前两个字节均为:82 表示为请求订阅;Qos表示字段仅仅跟着Topic字段之后,16进制代码为:00 01 10表示为0 1 2三种情况。5.构造、捕获并分析长度大于 127 字节的报文。当出现大于127字节的报文时,会在PUBLISH后出现几个TCP报文;TCP报文的数据内筒不一样,但序号相同。6.构造、捕获并分析Qos=1和Qos=2时丢包的处理情况。以上是QoS=1以上是QoS=27.学习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 23协议编程实验过程3.1 实验准备实验环境:JDK环境实验方法及步骤:1.安装JDk2.安装eclipse3.打开paho软件4.在eclipse中调试JAVA软件3.2 主要实验步骤1.安装JAVA编程环境2.下载pahoMqttclient.Jar包3.利用socke直接构造MQTT报文,完成与服务器进行通信,实现连接服务器、订阅主题、发送消息等功能。4.利用paho库实现MQTT客户端,实现所有功能,并理解回调机制。5.结果作为客户端作为服务器端回调机制:SimpleMqttClient类实现MqttCallback接口 SimpleMqttClient类中包含一个MqttClient的引用myClientMqttClient类有一个参数为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
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 模板表格


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!