本文使用Apollo和Mosquitto搭建了一个简单的信息订阅推送服务器,对MQTT协议的机制和流量进行了初步的分析
实验目的
本实验旨在搭建MQTT服务器,并探究MQTT的机制与流量特征。
实验内容
实验工具
Apollo:Apache Apollo是一个代理服务器,其是在ActiveMQ基础上发展而来的,可以支持STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets 等多种协议。
Mosquitto:Mosquitto是一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。
MQTT协议详解
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的”轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
实验步骤
第1步 JDK的环境变量配置
新建classpath,值填入
1 | .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; |
新建javahome,值为jdk根目录
path处添加jdk的bin目录
Path处添加jdk中的jre的bin目录
第2步 Apollo的Windows搭建
http://activemq.apache.org/apollo/download.html 下载阿波罗服务器并解压
CMD进入解压的bin目录
输入命令apollo create team6创建自己的MQTT服务器
在创建的服务器目录找到ect目录然后配置apollo.xml
修改配置文件,使其可以允许所有IP访问(修改为0.0.0.0)
进入创建的服务器的bin目录下,启动服务器
命令:
1 | apollo-broker.cmd run |
默认账号:admin 默认密码:password
登陆
Queues:排队等候
Topics:话题
Durable Subs:持久化的子主题
Mosquitto的搭建
Mosquitto是一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件
提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。
典型的应用案例: Andy Stanford-ClarkMosquitto(MQTT协议创始人之一)在家中实现的远程监控和自动化。
需要的软件安装:
1 | sudo apt-get install cmake |
新建目录 build:
1 | mkdir build |
进入 build:
1 | cd build |
编译(提示cmake未安装请安装cmake // apt-get install cmake)
1 | cmake |
解压:
1 | tar -zxvf mosquitto-1.5.4.tar.gz |
更改config.mk 让其支持 websockets(允许服务器向客户端发送消息):
1 | WITH_WEBSOCKETS:=no 改为为 WITH_WEBSOCKETS:=yes |
编译前工作准备(必须安装,报错源头):
1 | sudo apt-get install libc-ares-dev libc-ares2 |
编译
安装:
1 | make install |
Mosquitto启动相关选项:
-c,–config文件
从文件加载配置。 如果没有给出,则使用mosquitto.conf(5)中描述的默认值
-d,–daemon
在后台运行蚊子作为守护进程。 所有其他行为保持不变。
-p,–port
在指定的端口上监听,而不是默认的1883.除了配置文件中的端口设置外,还会起作用。 可以指定多次以打开在不同端口上侦听的多个套接字。 该套接字将绑定到所有网络接口。
-v,–verbose
使用详细日志记录。 这相当于在配置文件中将log_type设置为全部。 这种覆盖和记录选项在配置文件中给出。
运行成功
抓包分析
打开客户端。
请求连接时候的数据包分析
确认连接时候的数据包分析
发布信息
订阅请求
确认订阅
取消订阅
确认取消
退出连接