OneNET平台MQTT协议分析_第1页
OneNET平台MQTT协议分析_第2页
OneNET平台MQTT协议分析_第3页
OneNET平台MQTT协议分析_第4页
OneNET平台MQTT协议分析_第5页
已阅读5页,还剩9页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

OneNET平台MQTT协议分析

MQTT协议是一个面向物联网应用的即时通信协议,使用TCP/IP

提供网络连接,能够对负载内容实现消息屏蔽传输,开销小,可以

有效降低网络流量。MQTT协议适用于设备和平台需要保持长连接的

使用场景,MQTT特点在于可以实现设备间的消息单播以及组播,可

以不依赖于其他服务(下发命令服务,推送服务等)实现让设备以

应用服务器的方式对真实设备进行管理和控制。

正因为MQTT协议拥有这些特点,现在成文了各个物联网云平台

支持的最广泛的协议,百度、阿里、(亚马逊)、OneNet等国内外物

联网云服务提供商均支持该协议,所以在做物联网开发的过程中,

有必要学习和了解一下该协议。接下来我们就以OneNET的MQTT接

入协议为例,学习一下该协议个通讯。

硬件连接环境:麒麟座迷你开发板用STlink连接到PC的

(USB)口

软件开发环境:(Keil)MDK5.25编辑麒麟座(mi)ni开发板官

方例程”6.ESP8266-MQTTTYPE3-LED”

网络环境:PC机(以太网)卡连接路由器接入互联网,

WindowslO无线网卡建立热点,麒麟座开发板的ESP8266经过热点

接入互联网。

抓包工具:Wireshart抓取以太网卡的数据包,设置过滤条件

为"ip.addr=183.230.40.39”,只显示与OneNETMQTT服务器通讯

的数据包。

模拟器:Simula(te)-device.exe,在PC上可以模拟嵌入式

设备通讯。

参考文档:OneNET官方MQTT文档:”MQTT.docx",MQTT中文

文档MQTT.PDF

交互过程:连接权鉴,数据上报,命令下发,断开连接。

一、连接权鉴

首先在修改官方例程中的参数信息,把WiFi名称和密码改成使

用PC无线网卡模拟的热点网络,OneNET服务器的IP地址和端口号

确保为"183.230.40.39"和“6002",onenet.c中的PROID、

DEVTD.AUTH」NFO修改为项目中的真实值。

BO\Angel_VA*g\OneNET\6XSP8266-MQTT_T¥PE3-lE[Artm32f103.uvprcj)<-pVision

FileEditVWwProjectFUihDebuQPtr^hetaKSVCSHelp

♦d0八心。,0?2f--9MQn.P»aet$w«O»te0®•|<6>412-A

/00AS),・:"。STM12F103V示IA%_♦勺鲍

Pr,ect

B土Projectstm32flO322tinclude*aZM32flOx.h"

sasTMianos

SCicom24〃网身设备5E动

251include•esp82€€.h"

㈤ClFwlfc

26

国GiHardwareg〃砂侔W动

SQ28tinclude•delay.h*

BkdOneNET29mse*usAxt.h*

回30

Jonmttx31//CS

69Fpfotoel32llnclod*<9txlng.h>

LiJ」MqttKitc33#include<stdlo.h>

曰匕n<tdevice

,口Zp8266人|

|d«fineISPQ2€€JIIFI_IUrO"AT*CWJAP^*d«112330\-t\"da<Ulula\"\r\n"

♦CMjS

IdefineE,P82"_CNENTT_XHF。-AT*CIP5TART-\TCP\-r\-183.230.40.39\"re002\r\n*

41un5igne4chare9p82€6_buf(128);

42unsignedshortesp82“_cne-0resp82«_cntPre-0;

43

44

4s//--------------------------------------------------------------------------------------------------

QO\An9el_YY\^9\OneNEr\6.ESPa266MQn-TYPE3.LE(A«m32f103.uvprojx-pVfeion

FileW<ViewProject八•亦O*bugPenpheralslooBSVCSWindowKelp

rftC0|讲讲偌依I4MQII.RCXHWS”6>«|D'|

图国日i♦4S1M32F1O?vxslA%Ite

ProxdJMqttM.cJJonenKxJtn>i266.c

3女Project5tm32f10331

日■STM32F1O332〃便件更动

⑷uicore33•include•usart.h"

34•include•delay.h"

sU仙岫

35•include•led.b"

⑷口hardware36

(9Qsr37〃C库

QJOneNET38•include<>cxln9.h>

3。•includ*<scdlo.h>

4。

3kJMqotocol41

&JWttKitc42fdefmePROID"1<12I5"

S-rwt.dd43

44tdefmeAUTH_INFC|"dpflO9xxiH0aTZublG9g5S7BtFSEQ-

在」esp8266c

45

♦CMSJS46♦defineDEVID"31451353-

47

4:

49externunsignedchare9P8266_buf[128];

SO

t--

S2//•

编译并下载程序到麒麟座迷你开发板,在PC上使用Wireshark

开始抓取以太网卡的数据包,设置过滤条件

为"ip.addr=183.230.40.39",只显示与OneNETMQTT服务器通讯

的数据包。给麒麟座开发板上电,等待几秒钟后,就可以看到开发

板与OneNET服务器通讯的数据包了。

5532276.95135e192.168.M.55~18J.250.40.WTCPS361J73-6802[$YN]S^q-«Mln-2929R$S-146e-

3533276.98147718).230.46.59192.168.31.35TCP666662♦61373(SYN,MK]SeqYAck-1Mln-14600M5S-144e

35M276.9964S4192.168.31.35583・2诩・48.39TCP5461373♦6002fMK】SeoTAck・lXlc-2928m_______________

3556277.045151192.168.31,35183.2^0.48.39Xll114Reouests:InternAtoo

3537277.074972183.236.40.39192.168.31.35TCP606062-61373(ACK)Seq-1Ack-61Win-146e0Lenf至钗域性

3538277.081291183.230.40.39192.168.31.3STCP606002♦61373(PSH,AC<JSeq-1Ack-61Win-1460eLen-4(TCPsc

3539277.420977192.168.31.35183.2阳.40.39TCP5461373・6002[ACK]Scq-61Ack-Skin-2916Lcn-0

35672M.8711S6185.230.40.59192.168.M.JSTCP66(M2-61373[PSH,ACC]⑶・SAck-128Mln-U6e0IM-4[TCPs<ga_

3568284.972377192・168・31・35183.2珀.48.39ICP5461373■6092【MK]S%・128Ack-9Snf故提上

3666292.366851192.168.31.35183.256.48.39TCP12161373・6082[PSH,ACC]S^j-128Ack-9Mift-2912len-67[TCPSed

as〉is,皿g>Q—tai**:«_ten-------------muno】•UNNLQCM_M勘】*一“Hi—doai—・ITUO・•一

Fraoe3539:S4bytesonwire(432bits),54bytescaptured(432bits)oninterface0

EthernetII,Src:AtherosC.W:66:00(00:13:74:00:00:00),0»t:Xiao«iEl_31:fe:b9(34:ce:«:31:fe:b9)

InternetProtocolVersion%Src:192.168.31.35,Dst:183.230.40.39

TransaissionControlProtocol,SeePort:61373,CHtPort:6^02,Seq:61,Ack:5,Len:0

0000Mcc831Hb90013746000000045I41tE|

00H0028W0700«7e067cf®c«a8If23b7c6(-|#

00202827efbd1772G00019ac632de6c75010(・・・r・・•<・•・P・

0030Ob6479c600«dy••

0>OMUT.IOVK分值4003•BBT27<0noPrefile:

数据包中前三帧为开发板与OneNET服务器建立TCP连接的三次

握手信息,这个是开发板给ESP8266发送建立TCP连接指令后,

ESP8266与服务器之间自动建立的。

数据包的第四帧至第五帧为麒麟座开发板项OneNET发送的鉴权

信息和服务区应答。第六帧和第七帧是OneNET服务器返回的鉴权结

果信息和ESP8266的应答。

在以上过程中,我们作为设备端开发人员,只需要了解第四帧

的鉴权信息发送和第六帧的服务器鉴权结果返回就可以了。

接下来重点分析第四帧数据,次帧数据总计有114字节,去除

以太网头14字节,IP头20字节,TCP头20字节,剩余的TCP有效

载荷共计60字节。

文件(D・出啊*卬皿。分析®蝶力⑤电枇租出IXD*时

本帧数据共计11件节

③*0Q-"咨百量二三aaa0

3532276.951350192.168.31.35183.236.40.39KP5861373/<6W2(SYN)SeqYWln-292«Len-6KSS-KW

3533276.981477183.236.40,39192.166.31.35TCP6661373(SYNtACK)SeqHA<k-1Win-14600Len-6MSS-1440

3534276.990454592.168.31,35183.230.40.39TCPS41f573->6W2|ACK)Seg-1Ack»lHin«2920Len»e

13536277.045151592.168.31.35183.230,“・39XIIH£)Uquest$:InternAto®

:W.;;;1;工装二;二我工:工一;芯:7;三7」S

。>TUTCF>aylc^loftli«p“卜・t(tc^|tyl«»d>,00byt”分妫«Xt)・ettif;2?(00〃“[】♦

根据MQTT报文协议中规定,每一个MQTT包总共包含三部分:

FixedHeader所有packet中都必须有

VaiableHeader部分包含有

Payload部分包含有

1FixedHeader部分定义如下:

Bit76543210

byte1MQTTPacketTypeC000

byte2-5RemainingLength(该字段占用14个字节)

该版本支界的所有类型:

名字值流向描述

CONNECT1C->S'客户端请求与服务端建也连接

CONNACK2S->C服务端确认连接建立

PUBLISH3COS发布消息

PUBACK4cos收到发相消息确认

PUBREC5COS发布消息收到

PUBREL6cos发布消息释放

PUBCOMP7COS发布消息完成

SUBSCRIBE8c->s订阅请求

SUBACK9s->c订阅确认

UNSUBSCRIBE10c->s取消订阅

UNSUBACK11S4C取消订阅确认

PING12c->s客户端发送PING(连接保活)命令

PINGRSP13s->cPING命令回发

DISCONNECT14c->s断开连接

根据抓包的数据,TCP负载的第一个字节是0x10,对应表格可

以得知,MQTTPacketType值为1,名称为CONNECT,其功能是客户

端请求与服务器建立连接。其第二个字节的0x3a为表格中的Reni

(ai)ningLength字段,为数据包的长度。

根据MQTT协议规定,剩余长度(RemainingLength)表示当前

报文剩余部分的字节数,包括可变报头和负载的数据。剩余长度不

包括用于编码剩余长度字段本身的字节数。0x3a为十进制的58,这

个数止好是TCP负载的60字节减去固定报头的两个字节长度。至十

如何判断剩余长度占用的字节数,MQTT协议是这么规定的:

剩余长度字段使用一个变长度编码方案,对小于128的值它使

用单字节编码。更大的值按下面的方式处理。低7位有效位用于编

码数据,最高有效位用于指示是否有更多的字节。因此每个字节可

以编码128个数值和一个延续位(con(ti)nuaTTonbit)o剩余长

度字段最大4个字节。

根据以上定义,0x3a的二进制最高位为0,可以判定数据长度

为1字节。

固定报头的部分分析完成后,根据下表进行判断:

消息类型VaiiableHeaderPayload

CONNECT仃有

CONNACK仃有

PUBLISH仃有

PUBACK仃无

PUBREC仃无

PUBREL仃无

PUBCOMP有无

SUBSCRIBE仃有

SUBACK仃有

UNSUBSCRIBE仃有

UNSUBACK仃无

PING无无

PINGRSP无无

DISCONNECT无无

2、CONNECT类型的消息是有可变报头和负载的。对于可变报头

部分,按照以下格式编码:

Description76543210

byte1-2ProtocolName00000000

Length00000100

byte3•M'01001101

byte4Q01010001

byte5T01010100

bytu6T01010100

Byte7ProtocolLevel00000100

Byte8ConnectFlagUserPasswordWillRetainWillQosWiUFlagCleanSessionReserve

flagflagFlagFlagFlag

Byte9-10KeepAlive

对照抓包数据:

>[SEQ/ACKanalysis]固定MQTT报头

>[Timestamps],可变MQTR映

TCPpayload(60bytes)I/

TCPsegmentdata(44bvyes)y

eeee34ce0031feb9eep74eeeeeeesa/45ee4-i--t--E-

00100064000600007eft67cb5c0a81必3b7e6d-|--#•

00202827efbd17720通01970632d*c35018('-rpc-P

00300b6875e2伏003a80044d51545404c6hu-,MQTT

004001000008333134353133353300063134031451353114

0050Bl323135001c6470734f3972乃4830611215dpsO9ruH0a

0060,45a75626c4739673553764274465345TZublG9g5SvBtFSE

0070,3dQ-

其中byte『byte6是固定值,表格与数据完全对应。Byte7表

示MQTT协议版本,这个必须固定为4,即3.L1版,OneNET只支持

这一版本协议,不支持更早版本的协议。

在Byte8中,userflag与passwordflag平台不允许匿名登

陆,因此这两个标志位在连接时必须设置为1,否则认为协议错

误,平台将会断开连接。所以该字节数据为OxCO。

Byte9-10为保持连接(KeepAlive),是一个以秒为单位的时间

间隔,表示为一个16位的字,它是指在客户端传输完成一个控制报

文的时刻到发送下一个报文的时刻,两者之间允许空闲的最大时间

间隔。如果保持连接的值非零,并且服务端在一点五倍的保持连接

时间内没有收到客户端的控制报文,它必须断开客户端的网络连

接,认为网络连接已断开。OneNET规定最短120秒,最长65535

秒,这里设置的事0x0100,也就是256秒。

3、负载部分

负载部分的数据是按照以下格式编码

Desciiption是否必须存住格式

Field1ClientIdentifier是2字"字中长度+utf8)小

Field2UserNane是2字"字中长度+utf8字小

Field3UserPassword是2字打字率长度+utf8字申

对照数据:

0064000600007e067cb5c0a8If23b7e6•0!・•••z・|••••#••

2827efbd177200刀1970632de6c35。18(,…r--pc--P]

M

0D0875e2GO00103a00044d51545404c0hu--J:BQTT

0100000833313435313335330006313431451353I

31323135001c6470734f397275483061215dps09ru

545a75626c4739673553764274465345ZublG9gSSvBtFS

513d

0x0008为域一的(字符)串长度,这里是8字节,内容为

ASCH码的“31421353”,正好是源码中DEVID,也就是设备

ID(DevicelD);0x0006为域二的字符串长度,这里是6字节,内容

为ASCH码的“141215”,正好是源码中PROID,也就是产品

ID(ProducelD);OxOOlC为域三的字符串长度,这里是28字节,内

容为ASCH码的"dps09ruH0aTZublG9g5SvBtFSEQ=",正好是源码

中中TH」NFO,也就是产品TD(AuthTnfo):

至此,上传的鉴权信息就分析完毕了,服务器接收到鉴权信息

后首先会有一个应答包,同时进行鉴权,鉴权完毕后会下发结果给

客户端:

“OaNET.downpc.png

文GDM1D慢朋功例第。尔g分忻®电租他)UKD

"i,・以

14rlJh1*I«

3536277.645151192.168.31.35183.230.46.39Xll114Requests:InternAtoo

斗37277.974972183.239.肛39192.i68・31.35TCP696002♦61373[ACK)Seq-lAck41Nin-U609LmY

1538277.^81291183.236・40・39192,168・31-35TCP606602♦61373[PSH,ACK]MX】lei[TCP骏+4

3s39277.420977192.168.31.3S18).230.46.39TCPS461373・682[MKJScq-61Ack-SWln-2916

(ChecksunStatus:Unverified)

Urgefltpointer:0

[SEQ/ACKanalysis]

WR5)I

[加as+ewblEPOU1cfnwe;3%8】

13740034ce003108004504

2c7S*310614412827c0a8

23177219ac5018

©636082Q18

•7mTC?«fthis<t«r4kytw8他4003•示27to加rrua«

鉴权结果同样采用TCP传输,总共60个字节,除去以太网头、

IP头、TCP头共计54字节,还剩余60字节,其中有效TCP负载为

4字节,其后面的两个字节为TCP数据包需要四字节对齐所补充的

无效数据。

服务器返回的签权结果同样遵循MQTT包规则,首先是固定报

头,根据上文表格0x20表示服务器确认连接,0x02表示后面跟随

两字节有效数据,这里就是可变报头了。

可变报头规则如下:

Description76543210

byte1AcknowlecgcFlags0000000Sp

byte2ReturnCodeXXXXXXXX

Sp:SessionPresentFlag,session信息在服务器己保持.置1:未保存.置0.

返网科说明:

返网码描述

0成功

1协议版本错说

2出法的clientid

3服务不可用

4用户名或密码错误

5乐法链接(比如t&en柞法)

失败:

•如果connect包不符合协议内容约束.则代接断掉连接.而不需要发送毁典骐«包・

*如果鉴权或授权失败.同攵•个带作。错误码的也y*包.

根据返回的数据为0x0000,表示鉴权成功了。

二、数据上报

数据上报过程其实就是TCP通讯过程,每一次上报数据需要三

帧,分别是数据上报,服务器确认,客户端确认,其中只需要了解

数据上报帧就可以了。

,OneNET_downpc«prg-DX

文GDMit分*®蚂计⑤电枇无MDUKD・脸

@二犬一咎可里二三eaas;

■7>.,金-而函7o»一

TIM(kttiMtiMUttctlb

3539277.42^977192.168.31・35583・236.•.39TCP5461373.6002[ACK]Seq-61Ack-5WK・2916ImY

RS66284.840953192.168.31.3S183.2%.48.39UP121161373-6002[PSH,ACK]3q・61Ack-$Nln-2916l«n-67[TCP

3567284.871156183.2M.40.39192.168.31.35TCP606002♦61373(PSH,ACK)Seq-5Ack-1MWin-146«0Len-4(TCPsegju.

3568284.972372192.168.31.35183.2^.3.39TCP5461373•6M2[ACK]Scq>>128Ack-9Min-2912Len-0

(ChecksunStatus:IMverified)

Urgentpointer:9

>(SEQ/ACKanalysis]

,[TIPS*,]___________

T(p$^£oa?ntcm(67OvXes)

ceee31feb9W137406W0068W45W

6b000800ee7e667c“"e8If23b7e6

27efbd1772W0019“632de6c75。18

W36648596000012410003246470000•03

W40377b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论