版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海工程技术大学《安全心理学》2025-2026学年第一学期期末试卷(A卷)
- 肺叶切除术后口腔护理
- 上海工商职业技术学院《安全与伦理》2025-2026学年第一学期期末试卷(A卷)
- 初中生2025年田园生活体验活动说课稿
- 耐药结核的社区管理
- 高中情绪健康说课稿
- 上饶卫生健康职业学院《Android 应用程序开发》2025-2026学年第一学期期末试卷(B卷)
- 小学生心理健康设计
- 老年人活动能力维持与家政协助
- 上海震旦职业学院《安装工程结构与施工》2025-2026学年第一学期期末试卷(B卷)
- 2025年电信人工智能学习考试题库(含答案)
- 2025年土地使用权永久性转让协议书
- CNAS-CL01:2018 检测和校准实验室能力认可准则
- 借款担保人协议书
- 水生态系统服务价值评估-洞察分析
- DB37T 2012-2011 河道下采煤技术规范
- 手术室物品清点及意外处理
- 2024江苏扬州市扬子工程质量检测限公司招聘7人管理单位遴选500模拟题附带答案详解
- 《智能制造系统感知分析与决策 》 课件 第3章 制造系统大数据分析技术
- 人力资源管理期末考试简答题集
- DL-T5841-2021电气装置安装工程母线装置施工及验收规范
评论
0/150
提交评论