MQTT功能模拟实验

实验目的

1)熟悉MQTT协议的功能

2)掌握MQTT协议发布和订阅的方法

实验准备

实验硬件:

PC电脑

实验软件:

eqmx 开源服务器、MQTTX桌面测试客户端

实验原理

 MQTT简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。

MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽非常昂贵。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

MQTT协议运行在TCP/IP,或其它提供了有序、可靠、双向连接的网络连接上。MQTT协议的功能及特点:

  1. 使用发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。
  2. 消息传输不需要知道负载内容。
  3. 提供三种等级的服务质量:

“最多一次(QoS0)”,尽操作环境所能提供的最大努力分发消息。消息可能会丢失。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久之后会再次发送。

“至少一次(QoS1)”,保证消息可以到达,但是可能会重复。

“仅一次(QoS2)”,保证消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果 消息重复或丢失会导致不正确的收费。

  1. 很小的传输消耗和协议数据交换,最大限度减少网络流量。
  2. 异常连接断开发生时,能通知到相关各方。
MQTT协议工作原理

实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(服务器)(Broker)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT客户端(Client)

MQTT服务器(Server)

(1)发布其他客户端可能会订阅的信息;

(2)订阅其它客户端发布的消息;

(3)退订或删除应用程序的消息;

(4)断开与服务器连接。

(1)接受来自客户的网络连接;

(2)接受客户发布的应用信息;

(3)处理来自客户端的订阅和退订请求;

(4)向订阅的客户转发应用程序消息。

  1. MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:

(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);

(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。

  1. MQTT协议工作在TCP协议之上,因为客户端和服务器都是应用层,需要一种协议在两者之间进行通信,MQTT控制报文有3个部分组成:

分别是固定报头(fixed header)、可变报头(variable header)、有效荷载(数据区域payload)。固定报头,所有的MQTT控制报文都包含,可变报头与有效载荷是部分MQTT控制报文包含。

  1. MQTT控制报文的类型

类型

说明

Reserved

0

系统保留

CONNECT

1

客户端请求连接服务端

CONNACK

2

连接报文确认

PUBLISH

3

发布消息

PUBACK

4

消息发布收到确认(QoS1)

PUBREC

5

发布收到(QoS2)

PUBREL

6

发布释放(QoS2)

PUBCOMP

7

消息发布完成(QoS2)

SUBSCRIBE

8

客户端订阅请求

SUBACK

9

订阅请求报文确认

UNSUBSCRIBE

10

客户端取消订阅请求

UNSUBACK

11

取消订阅报文确认

PINGREQ

12

心跳请求

PINGRESP

13

心跳响应

DISCONNECT

14

客户端断开连接

Reserved

15

系统保留

  1. MQTT的订阅和发布

MQTT消息发布步骤:

1)发布者通过TCP/IP协议连接到代理服务器;

2)发布者向代理服务器发送CONNECT消息,请求连接;

3)代理服务器接收CONNECT消息后,将进行连接验证和身份认证;

4)连接验证和身份认证完成后,代理服务器向发布者发送CONNACK(连续报文确认)消息,表示连接已建立;

5)发布者向代理服务器发送PUBLISH消息,包含发布的消息内容和指定的主题。

MQTT消息订阅步骤:

1)订阅者通过TCP/IP协议连接到MQTT代理服务器;

2)订阅者想代理服务器发送CONNECT消息,请求连接;

3)代理服务器接收CONNECT消息后,将进行连接验证和身份认证;

4)连接验证和身份认证完成后,代理服务器向订阅者发送CONNACK(连续报文确认)消息,表示连接已建立;

5)订阅者向代理服务器发送SUBSCIRBE消息后,指定要订阅的主题和效应的QoS级别;

6)代理服务器接收到SUBSCRIBE消息后,根据订阅者请求进行主题订阅;

7)代理服务器向订阅者发送SUBACK(订阅请求报文确认)消息,表示订阅已被接受;

8)当有新的消息发布到订阅者订阅的主题上时,代理服务器将消息推送给订阅者;

MQTT消息取消订阅:

1)订阅者可以随时发送UNSUBSCRIBE消息,取消对某个或者多个主题的订阅;

2)代理服务器接受到UNSUBSCRIBE消息后,删除响应的订阅关系。

实验步骤

1)下载并安装emqx服务器和MQTTX桌面客户端:

点击下列链接进入官网:

  1. 下载 EMQX选择系统版本,下载并解压;

  1. 使用 MQTT 客户端快速测试 MQTT 服务 | EMQ (emqx.com),点击立即下载,进入新的页面,选择系统版本,点击免费下载,选择安装方式和CPU架构下载安装。

2)打开emqx下载后解压位置,用记事本格式打开“.\etc\emqx.conf”文件,记住地址。

3)在解压位置,鼠标右键菜单(win11系统使用shift+鼠标右键),选择再此处打开Powershell窗口,输入“.\bin\emqx start”命令,回车,等到下一行输入光标出现表示emqx服务器开启成功。

4)打开浏览器输入emqx.conf中地址,加上端口号18083(默认地址为127.0.0.1:18083)进入登录界面,初始账号为admin,初始密码为public,跳过修改密码,进入主页面,此时连接数、主题数、订阅数均为0。

5)打开MQTTX客户端,新建两个连接test1和test2:填写名称和服务器地址,其他可保持默认,点击连接,连接成功则左侧连接栏显示为绿色。此时emqx服务器连接数增加。

6)发布和订阅

在test1连接右下角设置发送的信息和目标主题“test/hello”;

在test2添加订阅主题“test/hello”。

7)实验完毕后,断开客户端连接,在Powershell中运行“.\bin\emqx stop”关闭服务器。

实验结果

在客户端test1连接中发送消息到主题,如果客户端test2订阅了该主题,则可以收到订阅该主题的信息;在客户端test2中发送消息到主题,由于客户端test1未订阅主题,所以收不到消息。

客户端连接服务器后的消息流入、发出和丢弃的统计信息,可在emqx服务器折线图中观测。

下一期:MQTT报文抓包~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渺若星辰_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值