快速开发MQTT(二)初识MQTT

描述

基本介绍

在上篇文章《快速开发MQTT(一)电子工程师眼中的MQTT》中,对比了串口连接和TCP连接,我们知道实现了连接和数据收发之后,接下来就是要考虑数据的封装、组包的事了。

比如UART传输过程中,数据被从A设备发送到B设备时,一般的都做这样的协议简单封装数据:“包头0xAA+两字节包长度LEN+1字节的LRC+数据内容”,此时B设备收到数据包就进行解析。

这一过程就是应用层面的协议。

类似的,MQTT也有报文格式,应用程序将数据填入报文包中,后通过TCP进行发送。

为了查看其报文格式,可以利用MQTT客户端工具MQTT.fx,尝试向TCP服务器发起一个连接请求。

TCP服务器继续使用上篇文章《快速开发MQTT(一)电子工程师眼中的MQTT》中提到的SSCOM工具进行模拟。

交互过程如下:

TCP服务器开启,并侦听;

MQTT.fx作为客户端,向TCP服务器发起请求,发出的CONNECT报文(Hex):10 1A 00 044D 51 54 54 04 02 00 3C 00 0E 77 77 77 2E 64 69 67 63 6F 72 65 2E 63 6E;

TCP服务器接收到该请求, TCP服务器此刻该回复(Hex):20 02 00 00;

完成连接请求。

以下为交互过程截图:

配置TCPServer和MQTT.fx客户端,需要填写一致的IP地址和端口号

MQTT.fx发起连接时,TCPServer接收到的完整数据包内容

TCPServer通过发送栏,回复数据(Hex):2002 00 00

至此,MQTT的连接流程完成,并且MQTT.fx客户端显示已连接的状态。通过这一模拟的过程,我们能够清晰认识到MQTT文档中的报文格式定义已经协议规范的定义。

对以上的数据分析,我们很容易就和MQTT-3.1.1版本规范进行对应:

客户端发的数据是10 1A 00 04 4D 51 54 54 04 02 00 3C 00 0E 77 77 77 2E 64 69 67 63 6F 72 65 2E 63 6E

解析如下:

固定报头:0x10 1A,即报文类型是1,长度是26个字节(0x1A)

可变报头:

0x00 04 4D 51 54 54,此处定义了协议名,长度是4,协议名是”MQTT”;

0x04,协议级别;

0x02,连接标志;

0x00 3C,保持连接,以秒为单位的时间间隔;

有效载荷:

0x00 0E,有效载荷内容的长度

0x77 77 77 2E 64 69 67 63 6F 72 65 2E 63 6E,客户端标识符www.digcore.cn

TCPServer回复的数据是20 0200 00

解析如下:

固定报头:0x20 02,即报文类型是2,长度是2个字节(0x02)

可变报头:0x00 00,即连接确认标志和连接返回码

在实际开发过程中,可以利用SSCOM工具作为服务器式验证自己编写的MQTT客户端程序是否正确发出数据,另外也可以作为客户端验证与MQTT服务器的正确交互。

 既然TCP连接后就已经实现了数据收发的功能,为什么应用层还有这么多的通信协议:HTTP、FTP、MQTT等。

这就有区别于串口,毕竟串口在通信时是有着导线直接相连,而基于TCP连接的通信,在复杂的计算机网络中,准确找对一个终端并与之交互数据,这中间需要做的是靠应用层的协议进行握手、确认等交互,有着“一回生二回熟三回四回热炕头”这么一个啰嗦的过程。

协议框架

MQTT框架模型非常清晰看到,服务器实现了该协议的最主要功能,对数据和指令进行“转发”。

★★★★★推荐文章

《【嵌入式编程】平台大小端存储差异解决办法》

《嵌入式硬件通信接口-使用RingBuffer处理数据(二)详细设计过程》

《嵌入式硬件通信接口-使用RingBuffer处理数据(一)》

《快速开发MQTT(一)电子工程师眼中的MQTT》

《快速开发MQTT(二)初识MQTT》

《MQTT客户端搭建-最清晰的MQTT协议架构》

《MQTT服务端搭建-最快方式验证自己开发的客户端》

★★★★★相似文章

《嵌入式硬件通信接口协议-UART(五)数据包设计与解析》

《嵌入式硬件通信接口协议-UART(四)设计起止式的应用层协议》

《嵌入式硬件通信接口协议-UART(三)快速使用串口及应用》

《嵌入式硬件通信接口协议-UART(二)不同电气规范下的标准》

《嵌入式硬件通信接口协议-UART(一)协议基础》

《嵌入式硬件通信接口协议-SPI(二)分层架构设计模拟接口》

《嵌入式硬件通信接口协议-SPI(一)协议基础》

★★★★★扩展阅读

《【硬件电路】AltiumDesigner18规则检查含义》

《【硬件电路】N沟道、P沟道MOS管基本原理与应用案例》

文章首发于同名微信公众号:DigCore

欢迎关注同名微信公众号:DigCore,及时获取最新技术博文。

原文链接:https://mp.weixin.qq.com/s/hY3y0EpWLeya3YkWwvU1lQ

(说明:此处的文章从微信公众号拷贝而来,排版事宜由电子说工作人员编辑,可能存在一定的瑕疵,欢迎点击原文链接阅读)

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
szzlw 2020-08-14
0 回复 举报
为小编点赞Hisilicon、SONY、On Semiconductor、OmniVisino、PIXELPLUS、Nextchip等各大品牌集成电路元器件。例海思型号如下HI3518ERNCV300、HI3519RFCV101、HI3559RFCV100、HI3519ARFCV100、HI3516ARFCV200......;SONY型号如下IMX385LQR-C、IMX185LQR-C、IMX178LQJ-C、IMX323LQN-C、IMX307LQR-C、IMX307LQD-C、IMX335LQN-CIMX327LQR-C、IMX291LQR-C、IMX290LQR-C、IMX123LQT-C、IMX124LQT-C、IMX225LQR-C、IMX322LQJ-C、IMX238LQJ-C、IMX236LQJ-C、IMX226CQJ-C、IMX274LQC-C、IMX317CQC-C、IMX377CQC-C、、IMX334LQR-C,IMX117CQT-C、IMX222LQJ-C、IMX122LQJ-C、IMX265LQR-C、ISX017-0AWR-C、ICX663AKA-B、ICX662AKA-B、ICX673AKA-7、ICX672AKA-7、ICX639BKA-A、ICX639BKA-A、ICX872AKA-A、ICX873AKA-A、ICX229AKA-A、ICX228AKA-A、ICX226AKA-A、ICX227AKA-A、ICX213BK-6、ICX212BK-6、ICX679BKA-AICX678BKA-A、ICX648BKA-A、ICX649BKA-A、ICX638BKA-A、ICX633BKA-AICX632BKA-A、ICX810AKA-A、ICX811AKA-A、ICX405AK-A、ICX405AL-A、ICX404AK-A、ICX404AL-AICX409AK-A、ICX408AK-A、ICX408AL-A、ICX409AL-A、ICX643BKA-A、ICX642BKA-A、ICX228AKA-AICX258ALA-A、ICX259AKA-A、ICX259ALA-A、ICX259ALA-B、CXD2463R、CXD1310A、CXD4130GGCXD5148GG、CXD4140GG、CXD4129GG、CXD4141GG、CXD4 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分