MQTT协议

1.简介

  • MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件
  • MQTT基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

2.相关术语

  • 网络连接(Network Connection):基于TCP/IP协议
  • 应用消息(Application Message): MQTT协议通过网络传输应用数据
  • 客户端(Client):使用MQTT的程序或设备,可以发布消息,订阅主题,取消订阅,与服务器断开连接
  • 服务端(Server):一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介,可以接受来自客户端的连接请求和消息,转发消息
  • 订阅(Subscription):订阅包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。订阅与单个会话(Session)关联。会话可以包含多于一个的订阅。会话的每个订阅都有一个不同的主题过滤器
  • 主题名(Topic Name):附加在应用消息上的一个标签,服务端已知且与订阅匹配.服务端发送应用消息的一个副本给每一个匹配的客户端订阅

3.术语理解

1.QOS(消息服务质量):有3个值可取

  • 0:最多只发一次,此为最低等级服务质量,可能存在丢包现象,此时当客户端发送消息后服务器不会有任何响应,且客户端在发送一次后直接丢弃消息
  • 1:最少发一次,此时当客户端发送一个消息后会将消息保留在本地,当收到服务器收到消息的响应后在丢弃消息,否则会一直发
  • 2:只发一次,此为最高等级服务质量,此时客户端发送消息,服务端确认收到,客户端再发布释放消息,服务器回应发布完成响应,保证消息只发一次

2.MQTT运行于TCP之上,属于应用层协议,故只要是支持TCP/IP协议栈的地方都可以用MQTT
3.MQTT是基于CS(客户端-服务器)模式设计的,主要有发布者,服务器,订阅者组成


具体流程类似于微博订阅机制,例如某个博主即发布者,粉丝为订阅者,当粉丝关注(订阅)某个博主后,当博主更新动态后,关注博主的粉丝可收到博主动态,未关注的则收不到.同理,当发布方将消息发布到主题A时候,订阅了主题A的客户端将会收到数据.

4.MQTT控制报文

1.MQTT控制报文由3部分组成:固定报头,可变报头,有效载荷.其中固定报头在所有MQTT控制报文都存在,可变报头与有效载荷则是部分
2.MQTT固定报头格式

固定报头格式
  • 其中第一个字节中的bit4~bit7规定控制报文类型,如下:
控制报文类型
  • 第一个字节中的bit0~bit3为标志位,如下:
标志位
  • 从第二个字节开始余下的字节为剩余长度,其中包含可变报头和负载的数据,最大为4字节.剩余长度字段使用一个变长度编码方案,对小于128的值它使用单字节编码.更大的值按下面的方式处理:低7位有效位用于编码数据,最高有效位用于指示是否有更多的字节.因此每个字节可以编码128个数值和一个延续位(continuation bit)

例如:当发送数字64(十进制)时候,64<128,故使用单字节编码为(0100 0000)0x40
当发送321(十进制)时候,321>128,故被编码为两个字节

对于编码方式最大值与最小值如图:

你可能感兴趣的:(MQTT协议)