随着物联网的火热,从google,亚马逊,微软到国内的百度,腾讯,阿里等巨头都发布物联网平台以及开发套件,支持MQTT(Message Queuing TelemetryTransport)协议那么做嵌入式开发的你还有理由不学习MQTT协议吗?今天我们就来简单介绍下MQTT协议.
MQTT最早是由巨头IBM提出来的,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议是一个客户端服务端架构的发布订阅式的消息传输协议,他的设计思想是轻巧,开放,简单,规范,因此易于实现,受到了越来越多巨头的青睐,其主要的特点有:
使用发布订阅消息模式,提供了一对多的消息发布
消息传输不需要知道负载的内容
使用TCP/IP提供基本的网络连通
消息传输提供三种等级:
“最多一次”,尽操作环境所能提供的最大努力分发消息。消息可能会丢失,例如,这个等级可以用于传感器测量数据,单次的数据丢失没有关系,因为不久之后会再次发送,
“至少一次”保证消息可以到达,但是可能会重复。
“仅一次”,保证消息只到达一次,例如,这个等级可以用于一些计费系统,如果消息丢失或重复会导致不正确的收费,损失惨重。
很小的传输消耗,和协议数据交换,最大限度减少网络流量
异常连接断开时候,能通知到相关各方
MQTT控制报文结构
MQTT协议通过交换预定义的MQTT控制报文来通信,控制报文由三部分组成
固定报头:每个控制报文都包含一个固定报头,固定报头格式如下所示
控制报文类型由四个bit位来表示,可以表示16种类型
固定报头第一个字节的剩余四个bit用来表示每个控制报文类型特定的标志,任何标记为保留的标志位都是保留给以后使用的,如果收到非法的标志,接受者必须关闭网络连接。
剩余长度:
表示当前报文剩余部分的字节数,包括可变报头和负载的数据,剩余长度不包括用于编码剩余长度字段本身的字节数。剩余长度字段使用一个可变长度编码方案,对小于128的值使用单字节编码。更多详细内容大家可参阅MQTT官方文档,尽量阅读英文原版的协议。