了解控制报文格式是学习MQTT中,笔者认为最为重要的一个知识点。MQTT的全部行为都离不开他。控制报文能够分为三个部分组成,分别为:固定报头、能够变报头、有效载荷部分。学习
注意:上面的说的报文的类型。是指链接(CONNECT),发布(PUBLISH)等。而等级是指服务质量 (QoS) 。spa
固定报头.net
固定报头,从官方的说明文档指出他又边俩部分。但是仍是喜欢把他说明成三个部分。以下翻译
控制报文的类型:用于标示类型,如:链接(CONNECT)报文,发布(PUBLISH)报文等。他占了四个字节。如:链接报文对应二进制:0001。blog
控制报文类型的标志位:这里包含的内部比较多。分别为:标示发送重复数(DUP) (1字节) 、服务质量 (QoS) (2字节)、保留标志(RETAIN)(1字节)。一样子他也占了四个字节图片
剩余长度:和字面意思同样子。只是笔者看了文档说明,有一点不明白。笔者觉得就是可变报头和有效载荷部分的长度。他占8个字节。文档
上面有讲到关于发送重复数(DUP)。这个主要是关系到服务质量 (QoS)的设置。若是只是设置为0的话,那么发送重复数(DUP)也是为0。若是当服务质量 (QoS)为1的时候,那么表示这个报文至少要发送到达一次。这个时候就会用到发送重复数(DUP)了。重送一次就在发送重复数(DUP)上面加1。以下图get
服务质量 (QoS)中文翻译有些有一点怪。上面是笔者去查看一些英文根据本身的解理得来了。若是有不对的话,但愿能指出来。qt
为了方便去理解报文格式。笔者去下载了Wireshark软件来抓一个包来看看。为何要选择Wireshark呢?主要是他对MQTT协议显示的比较直观吧。Wireshark软件有一点要注意。他并不支持本地的抓包。因此你必须还要下载一个叫RawCap的软件。操做以下bfc
1.下载以后,打开RawCap软件。
2.请选择 1 。回车。
3.输入对应的文件名。
上第三个中咱们能够看到Packets是用于当前抓到了几个包。尽可能多一点吧。由于有时候是计算本身的自己的包。差很少的时候,记得不要点击窗口的X。要用CTRL+C来结果。否则文件是空的。没有数据。
结束以后,你会获得一个文件。这个文件会在当前的RawCap.exe同目录下出现。这个时候若是你装完了Wireshark软件。只要双击他就是能够自动导入了。以下
只要输入mqtt就能够只显示关于mqtt协议的数据。如今就让咱们看一个链接CONNECT报文的包。以下
图中笔者选中了固定报头,下方就是一样子选中他对应的二进制。咱们能够看到是否是八个字节呢?同时上面相关的固定报文标志位的信息也显示的很明显。图中的Msg Len就是剩余长度了。其余的就是可变报头和有效载荷部分了。
上面是一个链接(CONNECT)类型的报文。链接报文的类型为1。那么对应的二进制为:0001。同时笔者设置的服务质量(QOS)为0,不保留即为0。因此固定报头就是上面显示的——00010000。至于报文类型的定义笔者上一单也提过。这里笔者就把官方的信息复制过来,以方便阅读。以下。
可变报头
可变报头,不是必定要存在的。根据不一样的类型报文可变报头的内部是会发生改变的。举个列子,如链接肯定(CONNACK)报文,他的可变报头只有链接确认标志和链接返回码。同时他的剩余长度一直是2。以下Wireshark抓到的显示。
最突出的不过去DISCONNECT类型的报文。可变报头是空的。以下
虽然可变报头是变化的。可是咱们总元素是不会发生变化的。因此咱们仍是要全面的了解他到底有些什么东西。笔者根据MQTT文档说明。把全部相关的信息列出来。以下。
绿色的为用到的。红色表示没有用到的。至于每一个项究竟是什么做用。仍是等笔者价绍相关的报文类型的时候,在说吧。
注音:图片若是看不清楚。能够放大看。
有效载荷部分
有效载荷部分。能够说是客户端和服务端以后间的通讯内容。可是不是什么类型的报文都必须有。并且有效载荷部分的总信息又不是只有通讯容。他有可能会出现别的信息。如:主题名(Topic Name)、客户ID(Client Identifier)等信息。笔者也列出来。以下
了解了MQTT报文的格式以后。对于咱们后面学习相关的响应动做很是有帮助。但愿对你们有帮助。