协议分析之MQTT协议

文章目录
  1. 1. 实验目的
  2. 2. 实验内容
    1. 2.0.1. 实验工具
    2. 2.0.2. MQTT协议详解
  • 3. 实验步骤
    1. 3.0.1. 第1步 JDK的环境变量配置
    2. 3.0.2. 第2步 Apollo的Windows搭建
    3. 3.0.3. Mosquitto的搭建
    4. 3.0.4. 抓包分析
  • 本文使用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目录
    添加bin

    第2步 Apollo的Windows搭建

    http://activemq.apache.org/apollo/download.html 下载阿波罗服务器并解压
    下载Apollo

    CMD进入解压的bin目录
    输入命令apollo create team6创建自己的MQTT服务器
    创建MQTT服务器

    在创建的服务器目录找到ect目录然后配置apollo.xml
    配置Apollo

    修改配置文件,使其可以允许所有IP访问(修改为0.0.0.0)
    允许所有IP访问

    进入创建的服务器的bin目录下,启动服务器
    命令:

    1
    apollo-broker.cmd run

    配置Apollo

    默认账号:admin 默认密码:password
    登陆
    登录

    Queues:排队等候
    Topics:话题
    Durable Subs:持久化的子主题
    10

    Mosquitto的搭建

    Mosquitto是一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件
    提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。

    典型的应用案例: Andy Stanford-ClarkMosquitto(MQTT协议创始人之一)在家中实现的远程监控和自动化。

    需要的软件安装:

    1
    2
    3
    sudo apt-get install cmake
    sudo apt-get install openssl
    sudo apt-get install libssl-dev

    安装

    新建目录 build:

    1
    mkdir build

    build

    进入 build:

    1
    cd build

    编译(提示cmake未安装请安装cmake // apt-get install cmake)

    1
    cmake

    cmake

    cmake

    cmake

    解压:

    1
    tar -zxvf mosquitto-1.5.4.tar.gz

    解压

    更改config.mk 让其支持 websockets(允许服务器向客户端发送消息):

    1
    2
    WITH_WEBSOCKETS:=no 改为为  WITH_WEBSOCKETS:=yes
    gedit config.mk

    编译前工作准备(必须安装,报错源头):

    1
    2
    sudo apt-get install libc-ares-dev libc-ares2
    sudo apt-get install uuid-dev

    编译
    编译

    安装:

    1
    make install

    安装

    Mosquitto启动相关选项:
    -c,–config文件
    从文件加载配置。 如果没有给出,则使用mosquitto.conf(5)中描述的默认值
    -d,–daemon
    在后台运行蚊子作为守护进程。 所有其他行为保持不变。
    -p,–port
    在指定的端口上监听,而不是默认的1883.除了配置文件中的端口设置外,还会起作用。 可以指定多次以打开在不同端口上侦听的多个套接字。 该套接字将绑定到所有网络接口。
    -v,–verbose
    使用详细日志记录。 这相当于在配置文件中将log_type设置为全部。 这种覆盖和记录选项在配置文件中给出。

    运行成功
    运行成功

    抓包分析

    打开客户端。
    客户端

    请求连接时候的数据包分析
    数据包

    确认连接时候的数据包分析
    数据包

    发布信息
    数据包

    订阅请求
    数据包

    确认订阅
    数据包

    取消订阅
    数据包

    确认取消
    数据包

    退出连接
    数据包