概述
Mqtt协议基本介绍
-
简介
- MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
- MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
-
特点与优势
- 适用于低带宽,小型传输,开销很小。
- 基于发布/订阅的体系结构,基于事件的驱动,可以实现一对多的消息发布以及应用解耦
- 使用TCP/IP提供网络连接。
- 使用Last Will和Testament特性通知有关各方客户端异常中断的机制。
- 有三种消息发布服务质量。
- 对负载内容屏蔽的消息传输。
-
MQTT协议原理
-
通信过程中MQTT协议具有三种身份,即发布者(Publish)、代理(Broker服务器)、订阅者(Subscribe)。
-
其中主要包括两个部分
- topic:主题(主题是一个简单的字符串,可以有更多的层次结构级别,用斜杠分隔,如:/sys/{deviceId}/thing/register),在客户端订阅主题以后,就可以收到此类主题的publish消息。
- payload:负载信息,也就是消息内容 在iot中主要是设备定义协议发来的信息(json数据等)
-
MQTT会建立tcp连接作为连接通道,然后客户端发送connect信息,服务端返回conack连接确认信息,之后会用心跳来测试对方在线情况。
-
sequenceDiagram
客户端 ->> 服务端:tcp连接(三次握手)
客户端 ->> 服务端:connect报文连接
服务端 ->> 客户端:conack响应连接MQTT完成
客户端 ->> 服务端:心跳pingreq
服务端 ->> 客户端:响应心跳pingresp
客户端 ->> 服务端:订阅主题SUBSCRIBE(可以包含多个带有订阅的主题topic)
客户端 ->> 服务端:publish发布信息(带有主题topic)
服务端 ->> 客户端:publish发布信息(带有主题topic)
```
其中,客户端可以发布/订阅(可以是其他客户端的)信息,取消订阅关闭连接,服务端可以接受客户端发来的信息,处理客户端订阅与退订信息,向有相关订阅信息客户端发送信息。
-
MQTT协议数据结构
-
固定头(Fixed header)主要是表示数据包类型与分组标识
-
可变头(Variable header) 根据固定头的数据包类型决定
-
负载(payload消息体)这个是发送的具体数据
-
-
MQTT协议的固定头部
- 第一个字节信息,messageType代表了消息的类型
-
服务质量
1. 至多一次 Qos = 0 这个代表消息会发送一次,不管有没有到达服务端 2. 至少一次 Qos =1 这个代表会保证服务到达一次,服务端通过puback来响应,这样就算一次,如果通信异常就会重发这条在消息头中设置了DUP(固定头部的数据)位的消息 3. 一次 Qos=2 这个会执行一次而且只有一次。
-
服务质量对应头报文信息类型
- PUBACK 报文是对 QoS 1 等级的 PUBLISH 报文的响应,即只有当PUBLISH发布QoS 1 等级的消息时,服务器才会发出对应的响应报文
- PUBREC报文是对QoS等级2的PUBLISH报文的响应。它是QoS 2等级协议交换的第二个报文。真正能实现QoS2等级消息而且没有性能问题的Broker或mqtt server的很少。
- PUBREL报文是对PUBREC报文的响应。它是QoS 2等级协议交换的第三个报文。
- PUBCOMP报文是对PUBREL报文的响应。它是QoS 2等级协议交换的第四个也是最后一个报文。
注意:可以下载mqttfx工具自己测试MQTT协议的数据是怎么传输的也可以再结合抓包工具(wireshark)捕获看MQTT协议传输的是什么。
-
最后
以上就是饱满凉面为你收集整理的Mqtt协议基本介绍的全部内容,希望文章能够帮你解决Mqtt协议基本介绍所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复