物联网IoT协议

mqtt

什么是mqtt

mqtt是IBM 公司在1999年开发的即时通讯协议,它是一个轻量级的,基于发布/订阅模式的消息传输协议,专门为资源(如内存,网络等)受限的设备而设计,即使设备运行在低带宽、高延时、不稳定的网络中,通过mqtt依旧可以获得一定程度的、可靠的通信服务。

为什么物联网IoT需要mqtt

物联网的首要任务是完成设备与设备的通信,而且不仅是一对一的通信,还包括多对多的通信,mqtt基于发布/订阅模式,原生支持多对多的通信,非常符合物联网的通信要求

mqtt是轻量级协议,相比HTTP,mqtt协议层占用的通信数据非常少,非常适合低带宽、资源受限的IoT设备

无论是国外的AWS、Azure,还是国内的阿里云、腾讯云,都使用mqtt作为接入IoT设备的首选协议,mqtt已经成为物联网上云第一大协议

mqtt之Hello World

按照惯例,如果不懂mqtt,来个Hello World想必是极好的。mqtt是即时通信协议,和QQ/微信/手机短信非常像,这里就以小明和丽丽互发短信为例,作为mqtt的Hello World。开始Hello World前,需要先了解mqtt中的几个名词。

消息主题(topic)

可以类比为手机号,发短信前得先知道目标手机号,mqtt中发消息前得先知道目标topic。

topic是一个字符串,比如xiaoming,mqtt中常使用/作为分隔符,如/lanxiang/wajueji/xiaoming这样的格式,可以方便的看出这是蓝翔-挖掘机班-小明同学的topic。

消息发布(publish)

publish用来发布一条消息,伪代码为

publish('topic', 'payload')

其中topic为要发布消息的主题,payload为要发布消息的内容。

消息订阅(subscribe)

subscribe用来订阅一个消息主题,伪代码为

subscribe("topic")

其中topic为要订阅的消息的主题,订阅成功后,应用程序还需要注册一个回调函数,当有消息发送过来,回调函数会被调用,伪代码如

client.on("message", function (topic, payload) {

    alert([topic, payload].join(": "))

  })

其中on(“message”)为监控消息达到事件,function为回调函数,topic为收到的消息来自哪个主题,payload为收到消息的内容。

mqtt服务器(broker)

设备通过发布/订阅模式通信,设备需要先连接到mqtt服务器,多个设备之间的消息需要通过mqtt服务器中转,如下图

发布方(publisher)即发送消息的设备

订阅方(subscriber)即订阅消息的设备

mqtt服务器类似消息的中转站,所以mqtt服务器有一个更形象的名词,即消息代理服务器(Broker)。

客户端(client)

发布方和订阅方统称为客户端(client),一个设备可以即是发布方,也可以同时是订阅方,一个设备可以向多个topic发布消息,也可以订阅多个topic。

OPC UA

什么是OPC UA

OPC UA是一套通信协议标准,完成设备与设备,设备与应用之间的数据交互。源码先生的物联网IoT协议之mqtt快速入门教程中的mqtt也是一套数据交互的协议标准,两者虽然协议内容不同,但最终目的一致,都是为了实现不同系统的数据交互。

OPC UA前身是OPC,第一个OPC规范在1996年发布,包括一整套接口、属性和方法的标准集;OPC基于Windows操作系统的COM技术,所以只能运行在Windows上。

OPC UA是OPC的重大升级,在平台独立性、安全性,可靠性等方面做出了升级,更能适应现代工业通信的需求,虽然升级内容很多,但OPC UA 对比OPC并无革命性的变化。

OPC UA用在什么场景

OPC主要用在自动化控制系统、仪器仪表及过程控制系统,具有很明显的工业基因,而且OPC发展这么多年,也很少扩展到非工业领域。

随着近年物联网、工业4.0、工业互联网、IT和OT(Operational Technology)融合等需求的出现,人们希望把工业设备融入到物联网中,深耕工业领域的OPC UA,自然成为大家关注的重点对象!

LoRaWAN

什么是LoRa

LoRa是一种应用在无线通信的调频技术,其他调频技术还有FSK/GSK、QEM/BPSK等,2009年法国公司Cycleo设计出一种优异的扩频通信算法,后来该公司被美国Semtech公司收购,于2013年推出LoRa芯片。大众熟知的蓝牙、WiFi、ZigBee等都是无线通信技术,相比这三个在上个世纪90时间年代推出的无线通信技术,LoRa是一个后来者,但是LoRa从发布到现在短短几年,火热程度已经超过了前辈们,这归功于LoRa以下优点:

    低功耗:物联网嘛,喜欢低功耗;

    通信距离远:城镇可达2-5 Km , 郊区可达15 Km,这个距离直接把ZigBee等前辈拍在沙滩上;

    抗干扰强:LoRa抗干扰性能是比较优秀的,但是通信距离远,功耗又低,抗干扰又强,这三者是不可能三角,LoRa也没有这么完美,只是总体性能比较好罢了。

LoRa节点

可以发送/接收LoRa无线信号的设备节点。

LoRa网关

LoRa网关和LoRa节点没有本质区别,都是发送/接收LoRa信号的,但是网关的处理器,内存等资源更丰富,可以用来接收/发送多个节点的数据。多个节点之间相互通信,不是两两直接通信(虽然也可以直接两两通信),而是经过网关中转通信的。网关完成转发数据,统一规划信道资源等功能,拓扑结构如下图:

LoRa网关拓扑结构LoRa网关拓扑结构

节点容量

节点容量是单个网关可以接入节点的数量,有些文章说LoRa节点容量很大,单个LoRa网关可以连接上万个LoRa节点,在源码先生看来这就是Tree New Bee了,LoRa和LoRaWAN在节点容量上没有任何优化,和ZigBee处在同一水平,想单网关连接上万LoRa节点,只能程序员在应用层自己优化了,优化难度很大!

什么是LoRaWAN

WAN是广域网的意思,多个LoRa节点可以通过同一个LoRa网关相互通信,但是如果想要跨网关通信,或者要想组成城域网/广域网,还需要云端的服务器;多个LoRa网关通过TCP/IP连接到云端,实现网关之间的通信,进一步实现更大范围内节点之间的相互通信。拓扑结构如下图:

LoRaWAN拓扑结构LoRaWAN拓扑结构

LoRaWAN定义了LoRaWAN节点,LoRaWAN网关,LoraWAN云端Server之间的通信协议,他是一套数据交互的协议标准,与mqtt(详见物联网IoT协议之mqtt快速入门教程)、OPC UA(详见物联网IoT协议之OPC UA快速入门教程)没有本质区别,最终目的一致,都是为了实现不同系统的数据交互。

NB-IoT/CoAP

什么是NB-IoT

如果说NB-IoT是窄带物联网,再来个NB-IoT的部署图,可能直接把入门者弄懵,其实NB-IoT是一个比较容易理解的技术,来,直接上图。

NB-IoT物联网卡NB-IoT物联网卡

没错,这就是地球人都知道的SIM卡,简单的说,NB-IoT就是低配版的2G/3G/4G/5G,他们有很多相似之处:

    使用运营商的基站通信,得给运营商交月租或者流量费

    可以发短信

    可以上网

但是NB-IoT卡不支持语音通话,毕竟是“窄带物联网”,速率比较慢,NB-IoT最高速率也就250kbps,和5G相比,只能说是丐版5G了。

使用NB-IoT替代2G

实际上,NB-IoT使用的通信频段就是2G的通信频段。

NB-IoT通信频段NB-IoT通信频段

从上图可以看到,电信的NB-IoT频段全部集中在870-885MHz,这个频段就是之前电信的2G频段,电信2G用户很少,所以电信的2G直接全部退网了,把所有2G频段都转给NB-IoT使用了;电信的NB-IoT通信频段比移动和联通都有优势,因为通信频率越低,信号衰减越小,传输距离越远,基站部署成本越低;不过电信比较任性,使用电信的NB-IoT卡,必须绑定电信的IoT云平台,使用不太方便。移动由于2G用户较多,全部退网2G影响比较大,移动只能把部分2G频段转给NB-IoT,还有部分频段继续用在2G。随着将来2G全部退网,NB-IoT会全面替换2G。

NB-IoT的特点和使用场景

NB-IoT能全面替换2G,那一定有过人之处了。NB-IoT是为了适用物联网需求专门定制的,相比2G,NB-IoT具有以下特点:

低功耗:物联网很多设备只能电池供电,更喜欢低功耗,下文会进一步说明NB-IoT是如何实现低功耗的;

低速率:速率高了耗电高,为了低功耗,只能牺牲点速率了;

大连接:当前2G/3G/4G网络,单个基站能够接入的手机终端个数其实并不多,在人多的密集场合,还是会出现手机没有信号的情况(不要说自己没遇到过,那是因为人还不够多)。物联网的特点之一是设备数量巨多,而NB-IoT设计的目标就是海量连接,NB-IoT能够实现海量连接不是因为NB-IoT的技术有多NB,而是利用了物联网设备很多时候都在休眠的特性,休眠的设备根本就没占用连接嘛;

低成本:NB-IoT整个生态,包括NB-IoT模组,NB-IoT流量收费,NB-IoT基站都是奔着低成本设计的;

强覆盖:NB-IoT信号覆盖比2G强,别问为什么强,问就是源码先生也不太懂。

基于NB-IoT以上特点,NB-IoT比较适合节点数量多,但传送数据量不大,功耗低(电池供电)的场景,比如路灯、水表,烟感,共享单车等;当然供电不是问题的场景,使用NB-IoT也是可以的,还可以获得更好的实时性。

Modbus

什么是Modbus

Modbus和OPC UA、mqtt本质一样,都是为了实现多个设备相互通信的应用层协议。Modbus于1979年产生于Modicon公司(现被Schneider公司收购),一经面世因其简单开放的通信方式逐渐成为工业系统中流行的标准。Modbus的国际组织主要有Modbus-IDA,负责推广Modbus标准以及对Modbus产品进行认证。Modbus官网见 www.modbus.org,网站主要包括协议文档,Modbus产品和厂商等内容。

之前的物联网IoT协议之OPC UA快速入门教程中提到OPC UA是工业领域常用的协议,其实在工业领域中Modbus比OPC/OPC UA更常见,市面上很多数据采集设备(如温湿度采集)都使用Modbus协议;OPC UA大量的专有名词(如节点、服务、引用等)总能把初学者弄得云里雾里,而Modbus比OPC UA简单太多了,简单之处体现包括:

Modbus最开始使用RS232,RS485等串行链路作为底层通信方式,串行总线的接口芯片成本低,而且布线也简单方便;

Modbus是简单的应用层协议,其信息格式简单易懂,下文会详细讲述协议内容;

Modbus相关的资料文档有很多。

IPv6

IPv6的现状

自1992年IPv6被提出来,二十年多IPv6一直处于叫好不叫座的状态,但是当前(2020年)IPv6在中国的发展现状,就得用“如火如荼”四个字来描述了。

2017年底国家印发了《推进互联网协议第六版(IPv6)规模部署行动计划》,要求以下领域全面支持IPv6:

国内用户量排名前50位的商业网站及应用,省部级以上政府和中央企业外网网站系统,中央和省级新闻及广播电视媒体网站系统,工业互联网等新兴领域的网络与应用;域名托管服务企业、顶级域运营机构、域名注册服务机构的域名服务器,超大型互联网数据中心(IDC),排名前5位的内容分发网络(CDN),排名前10位云服务平台的50%云产品;互联网骨干网、骨干网网间互联体系、城域网和接入网,广电骨干网,LTE网络及业务,新增网络设备、固定网络终端、移动终端。上述要求印发后,中国IPv6的发展走上了快车道,各个大厂的应用竞先支持IPv6,比如

腾讯视频IPv6腾讯视频IPv6

?看到右下角的IPv6了吧,其他常见的APP,如淘宝、美团等在开屏页也可以看到IPv6字样,如果哪个APP没有IPv6字样,不是用户太少,就是江湖地位太低。

中国信通院2019-11-20发布了

首批移动互联网应用IPv6支持度测试结果发布,感兴趣的请自行围观,倘若瞄到几个对IPv6支持度是0%的APP,再一看名字,哎呦,是客大欺店的感觉。

为什么IPv6的发展最近加速了

《推进互联网协议第六版(IPv6)规模部署行动计划》中已经说得很明白了,IPv4地址已经消耗殆尽,而物联网、工业互联网、云计算、大数据、人工智能的发展又需要很多IP地址,没有IPv6不行啊,IPv6是其他产业的基础设施,要想富,先修路。

6LoWPAN

物联网需要IPv6

下图是常规的ZigBee物联网架构图。

常规ZigBee物联网架构图常规ZigBee物联网架构图

所谓万物联网,主要是万物接入基于TCP/IP的互联网/局域网,而上图中ZigBee节点并没有直接接入TCP/IP网络,应用程序和ZigBee节点之间通信,必须通过网关的中转,而网关使用的中转通信协议并没有标准规范,不同厂家的ZigBee网关是无法兼容的,当然,ZigBee网关和LoRaWAN网关更是不能相互替换,这会造成物联网的隔离!

互联网的繁荣是建立在统一的TCP/IP协议之上的,要想避免物联网的隔离,物联网也使用统一的TCP/IP该多好啊。

为什么不使用IPv4

IPv4由于地址不够用,现有的IPv4网络大量使用NAT(Network Address Translation,网络地址转换)技术。

IPv4中的NATIPv4中的NAT

由于NAT的存在,上图中内网A和内网B是无法直接通信的,这也是种隔离。IPv6的地址足够大,IPv6已经不需要NAT了,IPv6快速入门教程中”测试公网访问个人笔记本“实测了IPv6是不受NAT的影响。

什么是6LoWPAN

6LoWPAN全称IPv6 Low Power Wireless Personal Area Network,从名字可以看出6LoWPAN的以下特点:

    使用IPv6协议

    Low Power是低功耗

    WPAN是无线个域网

6LoWPAN是面向低功耗无线局域网的IPv6,但是IPv6标准中要求网络中所有路由器的MTU不能小于1280字节,而常规Zigbee中一帧数据最多200个字节,明显不能满足IPv6标准,所以需要一种针对低功耗无线网络的简化版IPv6,这就是6LoWPAN。

6LoWPAN协议栈如下图。

6LoWPAN协议栈6LoWPAN协议栈

上图中可以看到6LoWPAN的物理层和数据链路层是IEEE 802.15.4,那么什么是802.15.4呢?

什么是802.15.4

IEEE 802.15是电气电子工程师学会(IEEE)IEEE 802标准委员会的一个工作组,它负责制定无线个人局域网(WPAN)的协议标准。IEEE 802.15工作组根据数据传输速率、电池能耗等特点的不同,将WPAN分为不同的类型:

802.15的不同类型802.15的不同类型

上图中可以看到,大家熟悉的蓝牙使用了802.15.1,而802.15.4是传输速率最低,功耗最低的类型,6LoWPAN选择了802.15.4,这对应了6LoPWAN的Low Power,这也限定了6LoPWAN的应用场景是低速低功耗的物联网场景,一般都是电池供电。

ZigBee的物理层和链路层也选择了802.15.4。

什么是WPAN

无线个域网,是多个设备通过无线通信组成的简单的局域网。这涉及到两个主题:

主题一:无线通信频段,802.15.4标准中规定了多种频段,如:

    868-868.6MHz频段:该频带是大多数欧洲国家的非授权频带,可以免费使用;

    902-928MHz频段:该频带是北美,澳大利亚,新西兰等国家的非授权频带,可以免费使用;

    779-787MHz频段:该频带是我国的非授权频带,可以免费使用;

    2.4-2.4835GHz频段:该频带全球大多数国家的非授权频带,可以免费使用;

主题二:组网,802.15.4标准中,网络由多个符合标准的无线设备组成,其中PAN协调器用来建立新的网络,定义网络的拓扑结构,运行参数等,其他设备向PAN协调器申请加入网络。

HTTP

HTTP并不是为物联网设计的,但是HTTP太流行了,在没有智能手机的年代,谁的上网不是从浏览器里输入 http://www.xxx.com 开始的?即使现在手机APP不需要手动输入网址了,APP后台也少不了HTTP通信。物联网的COAP协议和HTTP非常类似,且更能满足物联网低功耗等特点,但物联网依旧离不开HTTP,HTTP的市场占有率决定了,谁支持HTTP,谁就能快速接入丰富多彩的互联网世界.

HTTP

HTTP(HyperText Transfer Protocol),即超文本传输协议,从字面上看,涉及两个问题:

在谁和谁之间传输

在客户端和服务器之间传输。

HTTP的客户端/服务器模型HTTP的客户端/服务器模型

客户端最常见的是浏览器,服务器即Web服务器,常见的有Apache,Nginx等。

传输的是什么内容

各种资源,如文字,图片,视频,音频等等,本质都是二进制数据。

HTTP是基于TCP/IP的应用层协议

OSI标准7层网络模型中,HTTP是最上层的应用层协议,HTTP下面是TCP传输层。

参见

  1. 物联网IoT协议之mqtt快速入门教程

  2. 物联网IoT协议之OPC UA快速入门教程

  3. 物联网IoT协议之 LoRaWAN快速入门教程

  4. 物联网IoT协议之NB-IoT/CoAP快速入门教程

  5. 物联网IoT上云协议之Modbus快速入门教程

  6. IPv6快速入门教程

  7. 物联网IoT协议之6LoWPAN快速入门教程

  8. 物联网IoT协议之HTTP快速入门教程