龚永罡 付俊英 汪昕宇 王蕴琪 高 爽
(北京工商大学计算机与信息工程学院,北京 100048)
通信对于物联网来说是非常常见和至关重要的,不管是移动通信技术还是近距离无线传输技术,都会对物联网的发展产生影响。而在通信中,通信协议是指双方实体完成通信或服务必须遵循的规则和约定,显得尤为重要。在物联网的三层体系结构中,感知层和应用层需要通过网络层进行通信,目前TCP/IP已经成为互联网的事实标准,物联网通信协议主要是运行在互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行通信和数据交换。由于HTTP协议开发成本低,开放性高;在构建物联网系统时,很多厂商都基于HTTP协议进行开发。但在资源紧缺型的嵌入式系统中或网络带宽非常昂贵的环境中,HTTP协议并不适用。MQTT协议具有低功耗、开放、简单、轻量级以及易于实现的特点,使其即便是在资源有限的环境中也能易于使用,广泛应用于遥感、智能家居、能源监测和医疗应用等领域,是物联网的重要组成部分。
本文讨论并通过实验对比了HTTP协议和MQTT协议在智能家居领域的应用,测试结果表明MQTT在降低功耗和推送功能开发上优势明显。
目前在物联网领域中,可以采用的消息传输方案主要有以下几种:HTTP协议、Ajax轮询、Websocket、MQTT和Co-AP协议,以下对HTTP和MQTT做一下介绍。
HTTP协议的特点是简捷、快速,适用于分布式超媒体信息系统,是一个基于请求和响应模式的应用层协议。它承载于TCP协议之上,通过客户端建立TCP连接,向服务器指定端口(默认端口80)发出HTTP请求,服务器接收到请求后返回一个响应消息。HTTP协议包含传输信息和命令,适用于内联网/因特网应用系统之间的通信来促成各种应用资源超媒体访问集成,也可用于Web访问。目前流行的AJAX、WebSocket和CoAP协议,本质上都是在HTTP基础封装的,没有改变HTTP基础的特点。由于HTTP协议开放程度高,开发成本低,所以在构建物联网系统时,很多厂商都是基于HTTP协议进行开发的。
2.2.1 MQTT协议分析
由Arcom(现在的Eurotech)和IBM公司开发的MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)协议是一种轻量级基于发布/订阅模式的消息传输协议。MQTT协议在计算方面受到了限制,适用于不可靠的网络设备和低带宽所设计的协议。它的特点是小型传输、功耗小、网络流量低,并有效分配与传输最小数据包;MQTT协议可用于移动系统应用,是物联网重要的通信协议之一。
2.2.2 MQTT协议的数据表示
MQTT消息体主要分为三部分:有效载荷,固定报头和可变报头。每个命令消息都必须包括固定报头部分,固定报头为2个字节,其格式如表1所示。
表1MQTT固定报头格式表
其中Message Type为消息类型,大约有14种;Qos level为服务质量,有3种等级,分别为Qos0、Qos1、Qos2,等级越高,产生的系统开销就会越多,因此对通信效率产生的影响也就越大;Remaining Length是指除固定报头之外的消息长度,包括有效载荷部分和可变头部,最大可扩展为4 bytes,最大长度可以为256M。
2.2.3 MQTT的控制数据包的格式
MQTT协议简单,传输量小,成本少,可最小化协议交换,大大降低网络流量,且固定报头只有2 bytes。它采用的消息模式为发布/订阅及一对多的消息发布模式,解除了对负载内容屏蔽及应用程序耦合的消息传输。基于TCP上的应用层协议MQTT,支持基于TLS/SSL加密通道的传输。且MQTT在进行connect时支持认证。此外,MQTT还有3种不同的消息发布服务质量,分别为:
“至多一次”:消息发布完全依赖底层TCP/IP网络,会出现消息丢失或重复的现象。
“至少一次”:确保消息抵达,但可能会发生消息重复的现象。
“只有一次”:确保消息抵达一次,可以用在计费系统中,可能会发生消息重复或因为丢失数据而导致产生不正确结果的现象。
功耗、流量及传输这几个特性对于移动终端应用是必需要涉及到的地方。对于MQTT协议而言,在满足即时消息的基本需求情况下,同时在功耗、流量、传输上的问题也得到了解决。首先MQTT的固定长度只有2 bytes,其流量消耗十分小。其次,因为MQTT协议本身很简单,再加上头部简小,因此解析成本低,功耗也就比较小。另外MQTT非常容易扩展,便于用户的再次开发。以上内容可以总结出,MQTT协议更适用于移动终端,因此本文采取了基于MQTT协议的解决方案。
图1MQTT运行框架
本文以智能厨房油烟机控制系统与应用端进行通信为例进行应用分析。
MQTT的信息发布是基于话题的。只需要在发布的时候指定某个话题,并不需要配置相关的话题。
MQTT协议定义了发布服务器和客户端两个对象,如图1所示。作为整个通信系统网络核心的发布服务器,可以连接多个客户端。而框架中信息的产生者和接收者则为客户端。
(1)服务器接受的信息是客户端通过subscribe发布的;
(2)发布服务器上的某个话题信息是某个客户端通过publish发布的;
(3)发布服务器再将这个信息转发到对这个话题感兴趣的客户端。
图2 系统总体通信
智能厨房油烟机系统包括了四个部分:基于Open WRT系统的无线路由器,手机控制端,基于树莓派的网关和智能油烟机设备。如图2所示为系统的总体通信图。
从图2可知,(1)手机通信模块提供了与系统服务端交互的功能,采用TLS-PSK安全协议保证数据传输的安全性。(2)MQTT发布服务端:整个系统的MQTT通信发布服务端为Mosquitto,Mosquitto管理和转发所有的MQTT报文,同时负责TLS-PSK框架配置和管理,还提供用基本的访问权限控制和用户认证功能。(3)MQTT客户端模块:手机控制端和网关与Open WRT系统上的信息处理模块的通信功能是由MQTT客户端模块提供的。MQTT客户端模块从网关接收设备状态信息,并将信息推送到手机控制终端。另外,手机控制端发布的控制命令也是由它负责接收的,且在命令被处理完成后再推送给网关。
我们搭建了实验环境,对HTTP和MQTT协议在物联网应用中的通信效率进行了对比测试,在智能厨房油烟机中,进行测试时分别采用MQTT协议的实现与HTTP协议的实现,抓取数据包和分析数据包时采用sniffer。MQTT协议和HTTP协议的响应时间、吞吐量、消耗流量如表2所示。
MQTT测试环境:1个智能油烟机客户端,阿里IOT云服务器(提供MQTT服务),wifi网络环境。
HTTP测试环境:1个智能油烟机客户端,Ayla IOT云服务器(提供REST服务),wifi网络环境。
测试采样10000条,获取的通信响应和吞吐量指标响应如表2所示:
表2 测试结果
10000次采样测试结果表明,在平均响应时间上MQTT为4ms,而HTTP为13ms,在吞吐量指标上,单位时间MQTT比HTTP要大,因此,可以得出结论,同样的环境中,MQTT在通信效率上有明显的优势。
随着移动互联网和智能终端的普及,在物联网应用中,对在手机类移动终端设备上获取信息提出了更高的要求,主要体现在时限性和移动性两个方面。时限性要求把信息在规定的时间内发送到移动终端设备;移动性要求在信息传输时保持低功耗,低速率。不管是IOS还是Android,如果采用“拉取”的推送方式,在程序中信息的更新通知需要持续的检查,获取消息时需给服务器发送拉取请求[1],更新的信息无法直接通过服务器被主动发送给用户,这就增加了交互的次数和负担,同时也增加了移动端的资源开销,而推送方式缩短反应时间,提高效率,第一时间把更新信息推送给移动端[2,3]。目前在Android和IOS平台上都有自己的推送系统,但在网络中,操作系统和开发方面会受到各方面的限制,同一款应用在这个功能上需要采用不同的技术方案,有很大的局限性。比如Android推送无法直接使用Google的云消息服务器,只能采用国内的代理推送服务器,而iphoneAPNS只适用于IOS,不能跨平台推送,使用MQTT可以避免上述问题,节省了开发人员宝贵的开发时间。
通过对目前Android平台上最主流的几种消息推送方案的分析和对比,可以清楚地了解到MATT协议是最快速,也最省流量的(固定头长度仅为2个字节),在IOS和Android平台上进行推送功能开发具有一致性,且极易扩展,适合二次开发。所以本文推荐使用MQTT协议的方案进行实现。
本文详细剖析了用于物联网通信的HTTP协议和MQTT协议,并从功耗和消息推送功能开发效率两方面进行了比对,实践证明基于TCP/IP之上的HTTP协议不适合资源紧缺型的嵌入式系统或网络带宽非常昂贵的环境,另外HTTP协议开发消息推送功能非常繁琐,而MQTT协议具有低功耗、开放、简单、轻量级以及易于实现的特点,在资源受限的环境中也能得到很好的使用,更适合用于物联网领域的通信,在降低功耗和推送功能开发上具有非常明显的优势。
[1]刘军霞,熊选东,付建丹.基于发布/订阅的推模式服务调用[J].计算机系统应用,2012(12):196-199.
[2]李小智.基于消息中间件的服务器推送技术的应用研究[D].长沙:湖南大学,2010.
[3]梅蕊.跨服务器消息发布与推送机制的研究[D].武汉:华中科技大学,2011.
[4]崔健,段振刚,齐志男,等.基于物联网云平台的壁挂炉远程控制系统[J].计算机系统应用,2015,24(9):56-60.
[5]徐汶东.基于无线通信的智能油烟机控制系统设计[J].ICSSS,2015:421-425.
[6]任亨.基于MQT T协议的消息推送服务器[J].计算机系统应用,2014,23(3):77–82.