基于消息过滤算法实现MQTT协议智能家居的识别
   来源:现代电子技术     2018年08月26日 10:15

基于语音识别和MQTT协议的智能家居系统实现.doc

邱雨 彭大芹 梁吉申 林峰 项磊

摘 要: 随着智能家居的迅猛发展,使其在高、中、低不同市场上都存在着很多竞争。YunOS智能操作系统的推出也加快了智能家居行业的发展。Message Queuing Telemetry Transport(MQTT)协议是为大量计算能力有限,并且工作在低带宽、不可靠的网络的远程传感器和控制设备通信而设计的协议。由于开销小,适用小型传输,在智能家居中得到大量运用。通过对MQTT协议结构以及关键字段的研究,并从实际环境中抓取到的智能家居中Packet Capture(PCAP)包进行分析,提出一种改进型的消息过滤算法将MQTT协议中订阅的主题与智能家居品牌联系起来,实现识别智能家居设备厂商的目的。

关键词: 智能家居; MQTT; 消息过滤算法; 小型传输; PCAP包; 關键字段

中图分类号: TN915?34 文献标识码: A 文章编号: 1004?373X(2018)16?0064?04

Abstract: With the rapid development of the smart home, a lot of competitions exist in its various high, medium and low level markets. On the other hand, the launch of the YunOS smart operating system also speeds up the development of the smart home industry. The message queuing telemetry transport (MQTT) protocol is designed for communications between a great quantity of remote sensors and control equipments which have limited calculation capabilities and work on unreliable low?bandwidth networks. As the MQTT protocol has small overheads and is suitable for small transmissions, it is widely used in the smart home. An improved message filtering algorithm is proposed by studying the structure and key fields of the MQTT protocol, and analyzing the PCAP package grasped in real environments for the smart home, so as to associate the subscription topics of the MQTT protocol with the smart home brands, which can achieve the purpose of identifying the manufacturers of smart home equipments.

Keywords: smart home; MQTT; message filtering algorithm; small transmission; PCAP package; key field

0 引 言

随着人们生活水平的不断提高,追求的生活质量也越来越高,智能家居在日常生活中体现出重要地位。MQTT是用作制动器和传感器的通信协议。由于其适用于小型传输,所需的带宽小,并且可以较好地工作在不稳定的网络中,使得MQTT协议广泛应用在物联网和机器与机器(M2M)通信环境中[1]。本文设计一款基于MQTT协议的智能家居安防设备的识别系统,首先研究了MQTT协议,通过Wireshark抓取了MQTT协议的PCAP包,分析了MQTT协议的PCAP包中Publish Message里各字段的作用,采用改进的消息过滤算法对MQTT协议数据流相关字节的关键字进行匹配,识别出智能家居生产商。

1 MQTT协议研究

1.1 协议简介

消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)是一种轻量级基于代理的发布/订阅的消息传输协议。协议简单,最小的固定头部只需要2 B,其采用TCP/IP进行基本的网络连接,有三种服务质量(QoS)应对消息发送的级别。

1.2 MQTT消息格式

对于每一个MQTT协议命令消息的头部都包含了一个固定报头,有些消息还需要一个可变报头和一个有效载荷。固定报头和可变报头的格式如下。

1.2.1 固定报头

固定报头的第一个字节包含了类型和标签(DUP, QoS level,RETAIN),第二个字节(至少含有一个字节)包含接下来的变长头部和消息体的总大小。固定报头见图1。

图1中:Message Type是4位无符号的数值;DUP flag设置为1表示客户端或者服务器重新发送一个PUBLISH,PUBREL,SUBSCRIBE或者UNSUBSCRIBE消息。如果DUP设置为1,那么可变报头将包含Message ID字段:QoS表示发送PUBLISH消息的级别。QoS为0时,PUBLISH消息至多发送1次。

第二个字节Remaining Length保存后面的可变头部和消息体的总大小。这个字节可以进行扩展,如果可变头部与消息体的总大小在0~127之间,那么直接保存,不需要扩展字节。但可变头部与消息体的总大小在128~16 383,则需要扩展一个字节,使用第二个字节保存其长度。Remaining Length最多可以为4个字节。

1.2.2 可变报头

图2是MQTT协议的可变报头。在可变头部中,第一部分是协议的名字,MSB与LSB表示在Protocol Name中后面的字节长度,这里是6个字节,即“MQIsdp”。Topic Name是订阅消息标识,可以用来区分消息的推送类别,订阅者使用这个关键字来识别想要接收的消息。

2 对智能家居中的MQTT协议的分析

根据Wireshark,在无线局域网的情况下,在Linux系统中用airodump?ng抓取智能家居的主机与外界通信时IEEE 802.11的PCAP包,并筛选出MQTT协议的数据包。IEEE 802.11数据包的格式如图3所示,其中PCAP包会被封装一层IEEE制定的IEEE 802.11标准的一些标签。

然后针对MQTT这一层进行解读,由于识别智能家居的MQTT协议,一般只涉及PUBLISH消息,所以本文只针对这个消息进行解读。PUBLISH消息见图4。

在Publish Message中,第一个字节是0x30,转化成二进制是00110000,代表这个消息是PUBLISH消息,QoS设置为00,即这个消息至多被发送一次。Msg Len代表可变头部与消息体的总大小,此处大小是302,因为介于128~16 363之间,故需要扩展成两个字节来存放,即0x30后面的两个字节:0xAE与0x02。计算方式为:302=46+2×128,46转为二进制数为00101110,将最高位置1,表示后面还有存放的字节,置1后成为10101110,即0xAE,后一个字节存放0x02。接下来就是可变报头的Topic Name关键字,定义有效载荷数据发送的信息频道。订阅者根据Topic Name来识别出他们想要接收的消息。此处存放的Topic Name转化为ASCII码为dev2app/G86PxmzRfHq98dbJotEoms。后面存放的字节就是PUBLISH消息的数据段。

3 识别系统中消息过滤算法

3.1 过滤算法

在关键字过滤中,常用的算法有BF(Brute Force)、KMP(Knuth Morris Pratt)等[2]。Brute?Force(BF)算法是一种字符串模式匹配算法。假设目标串长度为n,模式串长度为m,首先将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等則将S的第二个字符与T的第二个字符进行匹配,以此类推;若比较过程中相应字符串不相等,则将目标串S的第二个字符与模式串T的第一个字符进行匹配,依次比较下去。BF算法是蛮力算法,运行效率不高,最坏情况下要进行m×(n-m+1)次比较,时间复杂度[3]为O(nm)。

3.2 改进的BF算法

由于此识别系统可能应用于嵌入式设备中,算法的运行效率要求较高,所以对MQTT协议的Topic位先进行特殊字符查找。设模式串特殊符号前有s位,如果目标串也含有特殊字符,则从特殊字符开始当作分界线,往前匹配s位同时往后匹配模式串其余位。首先需要对目标串遍历,找出特殊字符位置,时间复杂度为O(n)。接着匹配模式串其余位,若不匹配,则跳到下一个特殊字符处,重复上面的工作,这样匹配只需n的常数倍,即时间复杂度为O(n)。若遍历后没有特殊字符,则进行原始的BF模式匹配算法,最坏的情况下所需的时间复杂度仍然是O(nm)。

假设目标串S:abc$cel/Gespdev/G86Pxmz。模式串T:dev/G86P。

在识别系统的BF模式匹配算法模块中,首先遍历目标串S,找出特殊字符“$”与“/”。匹配过程中的i表示匹配的次数,j表示目标串的位置。匹配结果见图5~图7。

1) 第一次匹配:此时特殊字符处不相等,匹配失败。

2) 第二次匹配:特殊字符匹配成功,往前匹配时失败。

3) 第三次匹配:当特殊字符匹配成功后,一分为二,同时向前向后开始匹配,目标串与模式串相同,匹配成功。

4 识别智能家居品牌的实现

4.1 识别系统总体框架设计

基于MQTT协议的智能家居系统网络由两部分组成:内部家居设备网络以及外部互联网。在MQTT协议的智能家居安防设备中,手机发送控制命令到主机上,需要经过消息过滤层,即Broker。发送到Broker的控制命令再转交给订阅了此主题(Topic字段)的智能家居安防主机,主机根据控制命令的类别进行相应的反应,如所有安防设备撤防、针对某个防区(如卧室)撤防等[4]。

由于智能主机一般会接入家庭的无线路由器,主机通过WiFi与外界通信,所以识别系统时将抓取主机与Broker通信的数据流,然后根据协议字段筛选出MQTT协议的数据包,读出安防设备厂商在MQTT协议中设置的Topic位,采用改进型的BF模式匹配算法,识别出智能家居品牌。系统总体框架设计图如图8所示。

4.2 识别系统的实现

系统通过C语言实现。识别系统代码实现的框图如图9所示。

首先定义4个结构体,结构体ip_address用来存放4个字节的IP地址;结构体ip_header存放网络层封装的IP报头的各个字段,报头中第一个字节的后4位用来计算报头总长度,即结构体ip_header中的成员ver_ih1,IP报头一般为20 B;结构体tcp_header存放传输层封住的TCP报头的关键字段,若不加扩展TCP报头一般为20 B。定义结构体方便指针的指向,只要明确各个结构体的首地址,就容易得到传输在网络中的数据包中各个位置的信息。

获取网卡接口模块包括得到设备列表、打印列表与输入选择,其中得到设备列表函数为pcap_findalldevs。在Windows系统下获取网络接口模块的显示效果如图10所示。

在抓取数据包模块中,pcap_open函数打开适配器,将抓取模式设置为混杂模式,即抓取经过本机的所有数据流;接着用pcap_dataklink函数检查数据链路层,将数据链路层的标准设置为IEEE 802.11;pcap_loop函数开始捕捉数据包。

过滤器模块就是在抓取经过本机的所有数据流时过滤出自己想要的数据流,如UDP协议的数据流、TCP协议的数据流等。由于MQTT协议是基于TCP的,所以过滤出TCP协议的数据流。首先用pcap_compile函数编译过滤器,然后用pcap_setfilter设置过滤器,这时将过滤出TCP协议的数据流,最后根据关键字判断出MQTT协议的数据流。

在识别系统中设置回调函数,回调函数使用了前面定义结构体的各个成员。捕捉数据包时调用回调函数,每抓取一个数据流,就进行过滤,读取这个数据流的各个字节。

识别系统的效果图如图11所示。当协议为TCP协议时,不进行进一步的识别。只有当协议为MQTT协议时,才将Topic位用BF算法相匹配,识别出智能家居安防设备厂商。

5 结 语

本文研究MQTT协议的结构,针对PCAP数据包对使用MQTT协议的智能家居设备进行了解读与分析,并提出改进型的BF模式匹配算法,设计开发了MQTT协议的智能家居安防设备的识别系统,成功实现了智能家居识别。目前大多数研究是对MQTT协议的即时通信系统的实现,在识别系统这一块较少,未来将引入数据库,把市面上智能家居安防设备厂商存储在数据库中,丰富并完善识别系统,实现更多功能。

参考文献

[1] LUZURIAGA J E, CANO J C, CALAFATE C, et al. Handling mobility in IoT applications using the MQTT protocol [C]// Proceedings of International Conference on Internet Technologies & Applications. Wrexham: IEEE, 2015: 245?250.

[2] 蒋鹏,袁嵩.基于MQTT协议的综合消息推送[J].现代计算机,2014(11):11?15.

JIANG Peng, YUAN Song. Integrated message push based on MQTT protocol [J]. Modern computer, 2014(11): 11?15.

[3] YASSEIN M B, SHATNAWI M, ALJWARNEH S, et al. Internet of Things: survey and open issues of MQTT protocol [C]// Proceedings of International Conference on Engineering & MIS. Monastir: IEEE, 2017: 1?5.

[4] LEE S, KIM H, HONG D K, et al. Correlation analysis of MQTT loss and delay according to QoS level [C]// Proceedings of International Conference on Information Networking. Bangkok: IEEE, 2013: 714?717.

[5] IBM, Eurotech. MQTT V3.1 protocol specification [S/OL]. [2011?02?28]. https: //wenku.baidu.com/view/dedf6ed9d15abe23482f4

d65.html.

[6] NAIK N. Choice of effective messaging protocols for IoT systems: MQTT, CoAP, AMQP and HTTP [C]// Proceedings of IEEE International Systems Engineering Symposium. Vienna: IEEE, 2017: 1?7.

[7] HUNKELER U, TRUONG H L, STANFORD?CLARK A. MQTT?S: A publish/subscribe protocol for wireless sensor networks [C]// Proceedings of 3rd International Conference on Communication Systems Software and Middleware and Workshops. Bangalore: IEEE, 2008: 791?798.

[8] 许金喜,张新有.Android平台基于MQTT协议的推送机制[J].计算机系统应用,2015,24(1):185?190.

XU Jinxi, ZHANG Xinyou. Push mechanism on Android platform based on MQTT protocol [J]. Computer systems & applications, 2015, 24(1): 185?190.

[9] 明廷堂.BF与KMP模式匹配算法的实现与应用[J].电脑编程技巧与维护,2013(23):24?28.

MING Tingtang. Implementation and application of BF and KMP pattern matching algorithm [J]. Computer programming skills & maintenance, 2013(23): 24?28.

[10] 顾亚文.基于MQTT协议的通用智能家居系统设计与实现[D].西安:西安电子科技大学,2014.

GU Yawen. Design and implementation of general smart home system based on MQTT protocol [D]. Xian: Xidian University, 2014.

协议 文章 报头