一.MQTT简介
MQTT (Message Queuing Telemetry Transport) 是由IBM研发的构建在TCP/IP之上的简单轻量的消息协议,目标使用场景为受限制环境,如低带宽、高延迟、不可靠网络,很适用于M2M和IoT中。它的竞争协议包括XMPP协议和IETF的CoAP协议。
MQTT协议最早于1999年发布第一版并被广泛使用在各个行业中,在2013年发布MQTT 3.1版本。
MQTT-S(MQTT for Sensor Networks)是专门为WSN(无线传感器网络,Wireless Sensor Network)设计的协议,是MQTT的修改版本,1.2版本于2014年推出,可用于zigbee网络。
The EVERYTHING IoT platform使用MQTT作为上百万连接产品的M2M协议。Facebook Messenger、Amazon Web Service也都使用了MQTT协议。
二.MQTT具体细节
MQTT消息报文的方式包括connect,disconnect,subscribe,unsubscribe,publish等(类似于HTTP请求行的方法字段)。值得注意的是,为了保持简单和轻量,MQTT提供的安全比较少,主要借助其他设施,如SSL协议和由应用程序自己解决。
MQTT的消息模型为publish-subscribe (发布-订阅模式),即设计模式中的观察者模式,接收者(subscriber)向中介(broker)提交订阅自己感兴趣的内容,发送者(broker)把消息发送给中介,再由中介发送给订阅者。
这种模式这种通信模式的好处是接收者和发送者轻耦合,双方都只需与中介打交道,不需要关心另一方是谁和在哪里,并且方便接收者、发送者数量的增加和减少,很适用于分布式环境中,典型模式如图1所示。
图1 典型的发布/订阅消息通信模型
把WSN融入传统网络的拓扑图如图2所示,
图2 WSN和传统网络的融合图
而把MQTT协议应用于传统网络中的拓扑模式如图3所示(结构与图2很相近,不同点在于传统网络中增加了broker的角色,充当中介,减轻了gateway的通信交互压力),其中WSN的gateway充当publisher的角色,把传感器的数据发布给传统网络中的用户。
图3 使用发布/订阅通信模式的WSN与传统网络融合图
而专门为WSN而设计的MQTT-S协议中,在WSN中进一步细化了角色,把终端传感器和执行器当作MQTT-S Client。从图中可以看出,MQTT-S协议用于WSN中传感器与WSN网关的通信,而MQTT协议用于WSN网关与传统网络中broker的通信。两个协议是可以互补,一起工作的。
图4 MQTT-SN的结构
而更具体地,在WSN中网关作为WSN传感器与传统互联网中broker的中间者,通信模式可分为透明传输和汇聚传输两种,如图4所示。
透明传输实现更简单,但是WSN中有多少终端,broker就会收到多少连接,而因为WSN中传感器、执行器数量众多,这种模式会给broker很大的连接压力。相比之下汇聚传输则不会有这个问题,所以有大量WSN终端时汇聚模式更合适。
图5 网关的透明传输和汇聚传输模式