MQTT简介与概述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)该协议构建与TCP/IP协议上,是基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,由IBM开发的一个即时通讯协议。
可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。例如通过卫星和代理连接,通过拨号和医疗保健提供者连接,以及在一些自动化或小型设备上,而且由于小巧,省电,协议开销小和能高效的向一和多个接收者传递信息,故同样适用于称动应用设备上。
特点
- 使用发布/订阅消息模式 类似XMPP(XML格式传输数据),但MQTT的信息冗余远小于XMPP
- 对负载内容屏蔽的消息传输 MQTT协议在传输信息时,不关心用户传输的具体内容格式和类型
- 使用TCP/IP进行网络连接
- 三种消息发布服务质量(QoS)
至多一次:消息发布完全依赖底层TCP/IP网络,会发生消息丢失或重复至少一次:确保消息到达,但可能会导致消息重复仅一次:确保消息到达一次,在一些要求较严格的计费系统中可以使用此级别
- 传输开销小,协议交换最小化,以降低网络流量
- 使用Last Will(遗言机制)和Testament(遗嘱机制)特性通知有关各方客户端异常中断的机制。
MQTT协议原理
实现方式
由客户端与服务器通讯实现 MQTT协议中包含以下三种身份: 客户端:
- 发布者(Publish)
- 订阅者(Subscribe) 消息发布者同时也可以为订阅者 服务器:
- 代理(Broker)
MQTT传输的消息分为:
-
主题(topic) 可理解为消息的类型,订阅者订阅后即可接收到该主题的消息内容(payload)
-
负载(payload) 即消息的内容
网络传输与应用消息
MQTT会构建底层网络传输,建立客户端到服务器的连接,提供两者之间的有序、无损、基于字节流的双向传输
当数据通过MQTT网络发送时,MQTT会将与之相关的服务质量(QoS)与主题(Topic)关联起来
MQTT的消息模型
-
订阅(Subscription) 订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。
-
主题名(Topic Name)
-
会话(Session) 每个客户端与服务器建立连接后就是一个会话
-
主题筛选器(Topic Filter) 对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。
-
负载(Payload)
MQTT数据包
存在于所有MQTT数据包中:
- 固定头(Fixed header) 表示数据包类型及数据包的分组类标识。
存在于部分MQTT数据包中:
-
可变头(Variable header) 数据包类型决定了可变头是否存在及其具体内容
-
消息体(Payload) 表示客户端收到的具体内容
固定头
固定头存在于所有MQTT数据包中,固定头占据两字节的空间,如下:
可变头
MQTT数据包中包含一个可变头,位置在固定头与负载之间。只有某些报文才拥有可变报头,可变头的内容因数据包类型而不同,较常的应用是作为包的标识。
消息体
Payload消息体位MQTT数据包的第三部分,包含CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型的消息:
-
CONNECT:这是客户端用来与服务器建立连接的消息类型。其Payload包含客户端标识(ClientID),用于唯一识别连接到服务器的客户端。此外,它可能还包含其他认证信息,如用户名和密码,以及客户端想要订阅的主题列表等。 -
SUBSCRIBE:当客户端想要订阅一个或多个主题时,会发送这种类型的消息。Payload中包含了客户端希望接收消息的主题列表以及对应的服务质量等级(QoS)。 -
SUBACK:作为对SUBSCRIBE请求的响应,服务器使用该消息类型确认客户端的订阅请求已被接受。Payload中包括了服务器同意的主题订阅信息及其QoS等级。 -
UNSUBSCRIBE:客户端使用此消息类型来取消对一个或多个主题的订阅。Payload中指明了客户端不再希望接收的主题列表。
原文链接: