一、实验目的
采用软件开发工具实现应用层协议功能或设计一个简单的应用层协议,并利用仿真工具和协议分析器验证网络协议,并分析验证结果。
二、实验要求

三、实验内容
1.MQTT协议流程图

2.MQTT协议格式
每条MQTT命令消息的消息头都包含一个固定的报头,有些消息会携带一个可变报文头和一个负荷。消息格式如下:
①固定报文头(Fixed Header)
MQTT固定报文头最少有两个字节,第一字节包含消息类型(Message Type)和QoS级别等标志位。第二字节开始是剩余长度字段,该长度是后面的可变报文头加消息负载的总长度,该字段最多允许四个字节。
剩余长度字段单个字节最大值为二进制0b0111 1111,16进制0x7F。也就是说,单个字节可以描述的最大长度是127字节。为什么不是256字节呢?因为MQTT协议规定,单个字节第八位(最高位)若为1,则表示后续还有字节存在,第八位起“延续位”的作用。
例如,数字64,编码为一个字节,十进制表示为64,十六进制表示为0×40。数字321(65+2*128)编码为两个字节,重要性最低的放在前面,第一个字节为65+128=193(0xC1),第二个字节是2(0x02),表示2×128。
由于MQTT协议最多只允许使用四个字节表示剩余长度(如表1),并且最后一字节最大值只能是0x7F不能是0xFF,所以能发送的最大消息长度是256MB,而不是512MB。

②可变报文头(Variable Header)
可变报文头主要包含协议名、协议版本、连接标志、心跳间隔时间、连接返回码、主题名等,后面会针对主要部分进行讲解。
③有效负荷(Payload)
Payload直译为负荷,可能让人摸不着头脑,实际上可以理解为消息主体(body)。
当MQTT发送的消息类型是CONNECT(连接)、PUBLISH(发布)、SUBSCRIBE(订阅)、SUBACK(订阅确认)、UNSUBSCRIBE(取消订阅)时,则会带有负荷。
3.运行代码及截图
代码如下:
package srx.awesome.code.mqtt.client;
import org.eclipse.paho.client.mqttv3.*;
public class PahoTest {
//关注的主题
private static String topic = "MQTT Examples";//
//发送的内容
&nb

最低0.47元/天 解锁文章
7465

被折叠的 条评论
为什么被折叠?



