zoukankan      html  css  js  c++  java
  • MQTT-SN协议乱翻之简要介绍

    前言

    这一段时间在翻看MQTT-SN的协议,对针对不依赖于TCP传输的MQTT协议十分感兴趣,总是再想着这货到底是怎么定义的。一系列文章皆有MQTT-SN 1.2协议所拼装组成,原文档地址: MQTT-SN_spec_v1.2.pdf

    MQTT-SN文档分为7个部分,我直接按照从前到后的顺序,直接组装成四个小篇。嗯,若放在一篇文章中,文字太长,造成排版难度。

    非直译,完全按照自己理解整理而成,请知晓。

    版本变迁历史

    1. 2007-11-29 1.0版本
    2. 2008-6-5 1.1版本,增加休眠设备支持
    3. 2011-5-20 1.2版本
    • 增加消息长度255字节支持
    • 增加转发封装支持
    • 增加返回代码"0x03 Rejected, not supported"
    • ReturnCode 增加到WILLTOPICRESP和WILLMSGRESP消息中

    MQTT-SN名称由来

    原名是MQTT-S,但会引起人们的误解,因此更名成MQTT-SN:

    As part of the job of applying the same or similar license terms to the MQTT-S specification as those on the MQTT specification, we are proposing a small name change. The new name would be MQTT-SN, standing for exactly the same long name, MQTT for Sensor Networks. Some people had assumed that the S in MQTT-S stood for secure, so we hope this change will avoid that confusion. -- Ian Craggs

    MQTT-SN存在目的

    MQTT for Sensor Networks is aimed at embedded devices on non-TCP/IP networks, such as Zigbee. MQTT-SN is a publish/subscribe messaging protocol for wireless sensor networks (WSN), with the aim of extending the MQTT protocol beyond the reach of TCP/IP infrastructure for Sensor and Actuator solutions.

    针对适配传感装置(缩写为SA)的特定版MQTT协议,一般运行在嵌入式电池驱动的电子元件中,传输通过基于IEEE 802.15.4规范无线低速网络构成的无线传感网络(WSN),同样具有企业级别特性具有以数据为核心的(data-centric)订阅/发布特性。

    总之,针对低功耗、电池驱动、处理存储受限的设备、不支持TCP/IP协议栈网络的电子器件而定制,比如常见的ZigBee(或XBee),对所依赖的底层传输网络不可知,但只要网络支持双向数据传输和网关,都是可以支持较为上层的MQTT-SN协议传输。比如简单数据报服务,只要支持一个源端点发送数据到一个特定目的地端点,这对支持MQTT-SN协议,就足够了。广播数据报传输服务也是必须的用于网关和终端的自动发现流程。为了降低广播风暴,MQTT-SN定义了广播路径深度(广播范围或广播半径)。

    一些名词和术语

    • topic id,主题标识符,两个字节16位表示的自然数(java语言short类型,0-65535范围),对应于主题topic name
    • 网关/服务器(gateway/server),在MQTT-SN中统一称之为网关,主要处理和MQTT-SN客户端的交互,缩写为网关
    • MQTT-SN终端和客户端(client),统一称之为客户端,其实也是嵌入式传感设备,或电子元件,资源受限,在无线区域个人网中运行
    • IEEE 802.15.4,完整栈的整个数据上限为128个字节,一般选择UDP(相比20个字节的TCP协议,UDP报文头部仅仅需要8个字节)协议传输数据
    • 低速网络/当前网络,指的是LR-WPAN(low-rate wireless personal area network,),低速无线个人区域网络

    MQTT-SN VS MQTT

    尽管MQTT-SN被设计成尽可能接近于MQTT,但那些低功耗、电池驱动、资源受限的设备所在网络场景为低速带宽、高连接失败、物理层数据包上线为128字节。文档提出了以下不同点:

    1. CONNECT消息被拆分成三个消息(CONNECT,WILLTIPIC,WILLMSG),后两者用于客户端传递遗嘱主题和遗嘱消息等
    2. 在PUBLISH消息中主题(topic name)被替换成两个字节长度自然数(topic id),这个需要客户端通过注册流程进行获取对应的topic id
    3. 预定义(提前定义)topic id和topic name,省去中间注册流程,客户端和网关要求提前在其固件中指定
    4. 协议引入的自动发现机制可帮助客户端发现潜在的网关。若存在多个网关,彼此可协调是为主从互备或者负载均衡
    5. "clean session"即可作用于订阅持久化,也被扩展作用于遗嘱特性(遗嘱主题和遗嘱消息)
    6. 针对休眠设备增加离线保活机制支持,当有消息时代理需要缓存,客户端被唤醒时再发送

    MQTT-SN架构示意

    在MQTT-SN架构图中,存在三种组件:

    1. MQTT-SN 客户端
    2. MQTT-SN 网关,可单独存在,也可以被集成到MQTT服务器中。需要承担MQTT-SN和MQTT协议之间的转换工作
    3. MQTT-SN 转发器,负责转发当前客户端数据到不可直接访问的网关上去,针对客户端而言网关不可直接访问时,转发器作用就凸显。转发器封装MQTT-SN消息转发给网关,解封来自网关的消息发送给客户端。网关不能够篡改原始数据。

    MQTT-SN传输网关

    MQTT-SN网关传输方式,下面的图片一目了然。 

    1. 透明网关,会为每一个客户端都建立一个TCP连接到MQTT服务器的通道,这样会较为耗费网关网络资源,但模型简单
    2. 聚合网关,只建立一条TCP连接通道到MQTT服务器上,所有的客户端共享一个通道,很经济的说。

    网关需要抉择哪些消息需要和远程的MQTT Server进行交互,比如只选择客户端发送的PUBLISH、SUBSCRIBLE消息等。

    小结

    上面简单介绍了MQTT-SN,下面将会介绍MQTT-SN消息头部和格式。

  • 相关阅读:
    Jmeter之http性能测试实战 非GUI模式压测 NON-GUI模式 结果解析TPS——干货(十一)
    UI Recorder 自动化测试 回归原理(九)
    UI Recorder 自动化测试 录制原理(八)
    UI Recorder 自动化测试 整体架构(七)
    UI Recorder 自动化测试 配置项(六)
    UI Recorder 自动化测试 工具栏使用(五)
    UI Recorder 自动化测试 回归测试(四)
    UI Recorder 自动化测试 录制(三)
    UI Recorder 自动化测试工具安装问题疑难杂症解决(二)
    UI Recorder 自动化测试安装教程(一)
  • 原文地址:https://www.cnblogs.com/yudar/p/4642474.html
Copyright © 2011-2022 走看看