物联网设备的网络连接---中篇

在上篇《物联网设备的网络连接---上篇》中我们介绍了物联网的网格结构及物联网组网技术

本篇,我们将带您了解物联网传输协议。

三、物联网传输协议

 

上节介绍的物联网组网技术,主要解决的是物理层和链路层的网络连接技术;当设备都连接到同一个物联网络以后,它们的通信必须使用统一的协议,才能进行数据交换以及协同工作。这就是物联网传输协议的职责,它们大多基于TCP/UDP协议之上,按照图1所示的协议层次,属于应用层协议。

物联网设备的网络连接---中篇_第1张图片

图1 物联网网络层次结构

本节介绍主流的四种物联网传输协议:MODBUS、BACNET、MQTT以及CoAP。

  MODBUS

MODBUS是一个针对工业自动化设备的应用层协议,1979年由Modicon公司(后被施耐德公司收购)开发,由于该协议免费公开发行以及简单、易用,大量厂商采用MODBUS作为设备与主机的通信协议,因而它成为事实上的工业标准。MODBUS建立在串行通讯、TCP或UDP传输协议之上。目前广泛应用于诸如电表、UPS电源、电梯、空气压缩机等工业设备。

MODBUS的基本数据格式(称为协议数据单元,Protocol Data Unit,简称PDU)是:1字节的功能码加上特定功能相关的数据,如图15所示。

图15 MODBUS-PDU数据格式

常用的功能码如表1所列。注意,对于超过1字节的数据单元,MODBUS使用大端(big-endian)字节顺序。譬如,对于16位整数,高字节在前,低字节在后。

 表1 MODBUS协议常用的功能码

功能码

说明

示例

1

读一组线圈状态

请求:01,00,13,00,13应答:01,03,CD,6B,05

3

读一组寄存器

请求:03,00,6D,00,03应答:03,06,02,2B,00,00,00,64

5

写一个线圈状态

请求:05,00,AC,FF,00应答:05,00,AC,FF,00(原样返回)

6

写单个寄存器

请求:06,00,6D,00,01应答:06,00,6D,00,01(原样返回)

15

写一组线圈状态

请求:0F,00,13,00,0A,02,CD,01应答:0F,00,13,00,0A

16

写多个寄存器

请求:10,00,01,00,02,04,00,0A,01,02应答:10,00,01,00,02

 

与具体的传输协议结合起来,在网络上传输的数据包格式如图16所示。当MODBUS在串行通讯环境中使用时,PDU前面增加一个地址码,后面加上一个16位的CRC校验字;当MODBUS在TCP/IP网络上使用时,前面加上传输标志和协议标志以及一个2字节的长度,和1字节的单元ID,就构成了应用数据帧(即ADU,Application Data Unit)。MODBUS也支持ASCII模式,在这种模式下,每个二进制字节都被转换成两个ASCII字符,因此传输数据量差不多增加一倍。

(a)MODBUS-RTU

(b)MODBUS-TCP

图16 MODBUS-ADU数据格式

 

MODBUS协议的特点包括:

1.MODBUS协议是标准和开放的,也是免费的,不需要许可费,也不会侵犯知识产权。

2.通信两方是主从关系。通常情况下,控制主机或数据采集方是主通信方,传感器设备是从方。典型的通信方式是:主通信方发起请求并等待响应,从设备对于收到的请求进行应答。这些请求和应答的内容由MODBUS协议来规定(如上面表1所示)。

3.MODBUS的帧格式(包括PDU和ADU)简单、紧凑,易于实现。应用软件使用起来容易,厂商实现也简单。

4.MODBUS-RTU与RS-485都是工业自动化领域中发展起来的,分别对应于应用层通信和物理层/链路层组网,在实践中往往组合起来实现工业设备的联网与通信。而MODBUS-TCP则用于在TCP(和UDP)传输网络上使用。

  BACNET

BACNET(Building Automation and Control NETworks)是用于智能建筑的通信协议,也是国际标准化组织(ISO)、美国国家标准协会(ANSI)以及美国采暖、制冷与空调工程师协会(ASHRAE)定义的通信协议。主要用于暖通、照明、门禁、消防等相关的设备与系统。

BACNET有一套相对完整的协议栈定义,从应用层到物理层共有四层,但BACNET的核心在于应用层和网络层,它们是BACNET特有的。这四层协议解释如下:

1.应用层的数据格式是APDU(Application Protocol Data Unit),第一个字节的高4位定义了APDU类型,后面跟上相应的数据结构。

 表2 BACNET APDU类型

首字节

说明(结构)

首字节

示例

0x0X

已确认的请求

BACnet-Confirmed-Request-PDU

0x1X

未确认的请求

BACnet-Unconfirmed-Request-PDU

0x2X

简单应答BACnet-SimpleACK-PDU

0x3X

复杂应答

BACnet-ComplexACK-PDU

0x4X

分段应答Segment ACK

0x5X

发生错误

(含错误类别和错误码)

0x6X

被拒绝

(含拒绝原因)

0x7X

被终止(含终止原因)

0x8X-0xfX

保留

   

BACNET的应用层采用了面向对象技术来封装应用层语义,当前的BACNET标准总共定义了54种对象类型

(http://www.bacnetwiki.com/wiki/index.php?title=BACnet_Objects)。

每个BACNET设备都有一个“设备对象”。每个对象都有Object_Identifier 、Object_Name、Object_Type三个属性,其他的属性随对象的不同而不同。对于应用开发而言,BACNET定义了有关这些对象的一套编程模型,包括属性和方法(服务)。关于这一编程模型,可参考

(http://www.bacnet.org/Bibliography/ES-7-96/ES-7-96.htm)。

BACNET也定义了一组服务,允许一个设备从别的设备获取信息,或者向别的设备发送命令,或者向其他一个或多个设备通知某个事件。这些服务被转化成网络上的请求和应答,从而实现网络设备之间的通信。

2.BACNET有自己的网络层,定义了NPDU(Network layer Protocol Data Unit),其格式如图17所示。BACNET支持广播传输。NPCI控制字节决定了后面出现的内容。

物联网设备的网络连接---中篇_第2张图片

图17 BACNET-NPDU数据格式

 3.BACNET没有定义自己的链路层和物理层,而是支持已有的物理网络和链路层协议。BACNET支持的物理网络包括ARCNET、以太网、RS-232、RS-485以及LonTalk,链路层支持PTP(针对RS-232)、MS/TP(针对RS-485),以及IEEE 802.2和LonTalk链路层协议。在实践中,由于以太网广泛普及,在UDP协议基础上来传输BACNET网络层消息是相对合理和常见的,这称为BACNET/IP。然而,相对于BACNET/Ethernet,BACNET/IP会增加每个物理网络包的数据量,但软件开发要简单很多。

BACNET作为一个拥有30多年历史的智能建筑通信协议,具有以下特点:

a.BACNET是标准协议,也是开放的,在楼宇自控设备市场上得到广泛的支持。

b.在应用层采用面向对象的技术来定义软件编程接口,对应用程序的开发比较友好,它支持模拟量输入/输出、数字量输入/输出、分组、时间计划等楼宇管理相关的功能,但是对于协议实现和协议分析显得过于复杂。

c.支持设备间双向通信及广播通信。

d.协议的开销较高,在窄带网络上容易传输超时。

    MQTT

 

MQTT(Message Queuing Telemetry Transport)是一个轻量级的机器与机器(M2M)之间的连接协议,适合于物联网设备进行通信,它最初由IBM提出,现在已成为OASIS(结构化信息标准促进组织)标准。为了适应大量物联网设备的通信需要,MQTT没有采用传统的请求/应答模式,而是采用发布/订阅模式来传递信息,如图18所示。发布者和订阅者不直接通讯,而是通过一个物联网服务器进行消息传递,这样可以控制消息的发送逻辑和频率。

物联网设备的网络连接---中篇_第3张图片

 图18 MQTT的发布/订阅通信模式

实际上,在移动互联网(主要是移动终端和移动服务)上,MQTT也被用于消息推送(PUSH)服务,允许大量的智能手机接收(订阅)移动服务方的通知消息。

MQTT的消息结构非常简单,每个消息由三部分组成:固定头、可变头、载荷,如图19所示。

物联网设备的网络连接---中篇_第4张图片

图19 MQTT消息格式

 

MQTT消息有15种类型,每个消息的第一个字节(即图19中的控制字节)的高4位决定了消息的类型,如表3所示。控制字节的低4位取决于消息的类型。接下来的剩余长度是指后面的可变头和载荷部分的总长度,用1至4个字节来表达,取决于该长度值是否超过127、16,383或2,097,151。

 

表3 MQTT消息的类型

MQTT控制字节的高4位

类型

MQTT控制字节的高4位

类型

0

保留

8

SUBSCRIBE:客户到服务器的订阅请求

1

CONNECT:客户到服务器的连接请求

9

SUBACK:服务器到客户的订阅确认

2

CONNACK:服务器给客户的连接确认

10

UNSUBSCRIBE:客户到服务器的解除订阅请求

3

PUBLISH:发布消息,客户给服务器,或服务器给客户

11

UNSUBACK:服务器到客户的解除订阅确认

4

PUBACK:发布确认

12

PINGREQ:客户到服务器的Ping请求

5

PUBREC:发布已收到

13

PINGRESP:服务器到客户的Ping应答

6

PUBREL:发布解除

14

DISCONNECT:解除连接通知,客户给服务器,或服务器给客户

7

PUBCOMP:发布已完成

15

AUTH:认证消息交换

 

有些类型的MQTT消息会在固定头后面包含可变头部分,其内容取决于具体的消息类型。比如:

PUBLISH(要求QoS>0)、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK类型的消息在可变头部分都会包含一个包标识符(Packet Identifier)域,用于标识一个MQTT发布或订阅。在可变头的后面部分是一组属性(Properties),这些属性跟该消息的具体内容相关。

在MQTT消息的最后部分是载荷(Payload)部分,比如,在PUBLISH消息中,Payload部分就是应用消息本身。

有关MQTT消息的细节,可以参考MQTT规范(http://mqtt.org/documentation)。从以上的MQTT消息类型列表,我们不难看出,MQTT规范定义了客户与服务器之间建立/取消连接、发布消息、订阅消息,以及PING(测试连接有效)和认证身份的过程。

MQTT是一个应用层协议,它建立在客户与服务器之间已经有一个能提供有序的、不会丢数据的字节流传输能力的传输协议基础之上。通常情况下,底层协议是TCP,也可以是安全的传输协议TLS,但不能是UDP。

MQTT作为一个物联网协议,具有以下特点:

1.消息紧凑,协议本身的开销非常小,尽可能地降低网络流量。

2.基于TCP传输协议(或安全传输协议TLS)。

3.使用发布/订阅模式,提供一对多的通信模型,解除了消息源与目的地之间的耦合。用主题(topic)的概念来描述发布或订阅,并提供了主题过滤的能力。

4.提供了三种服务质量(QoS)语义:

“至多一次”,消息发布完全依赖于底层TCP网络。

“至少一次”,确保消息到达,但消息可能会有重复。

“恰好一次”,确保消息到达一次。

5.提供了一套Will消息机制,允许客户与服务器在跨越TCP连接的情况下保持MQTT应用消息的延续性。

6.提供了Ping机制来保持客户与服务器之间的连接。

    CoAP

CoAP(Constrained Application Protocol)是IETF的CoRE工作组开发的、针对物联网设备的应用层协议,它相当于物联网设备上运行的HTTP协议,默认运行在UDP之上。它的基本消息模型是请求-应答,支持多播(multicast)模式,因此一个请求可以对应多个应答。CoAP的规范位于RFC 7252(https://tools.ietf.org/html/rfc7252)。

CoAP的消息格式如图20所示。

物联网设备的网络连接---中篇_第5张图片

图20 CoAP消息格式

CoAP协议支持4种类型的消息:CON,客户向服务器发送请求,服务器必须发送应答;NON,服务器不需要发送确认;ACK,对应于CON的应答消息;RST,当收到的消息不认识或错误时,发送重置消息。

CoAP支持GET、PUT、POST和DELETE方法,类似于HTPP协议中的同名方法一样。在CoAP消息的4字节头的8位代码中标识具体的方法。

CoAP的URI方案与HTTP的一致,采用“coap:”前导符,其默认端口是udp 5683。譬如,“coap://example.com/~sensors/temp.xml”指定了一个合法的xml文件资源。

CoAP协议的特点如下:

1.协议简单,与互联网协议(特别是HTTP)的一致性较好,包括URI方案、消息中的方法语义等。

2.默认基于UDP传输协议,支持一对多传输,也可以基于TCP。

3.CoAP的安全性方案采用了DTLS(Datagram Transport Layer Security, 即UDP版本的TLS协议)。

4.CoAP是一个针对资源受限设备的基础传输协议,对于应用层语义(包括设备状态、参数等)不侵入。

除了以上介绍的物联网传输协议以外,物联网设备与服务器也可以直接利用HTTP/Rest,或者WebSocket,但这些协议对于通信双方的软硬件资源要求较高,需要完整的TCP/IP协议栈,在有些情况下并不切实可行。但利用HTTP或WebSocket的优势是,上层应用丰富,有大量的软件和工具支持。本文不再赘述。

本篇主要介绍了物联网传输协议相关知识。

下篇,我们将带您了解物联网操作系统及平台的连接设计,敬请关注。

更多iSysCore Radio好文分享,请点击阅读原文查看。

物联网设备的网络连接---中篇_第6张图片

指令集TM智能科技(Instruction SetTM)成立于2018年8月,由计算机工业界领军人物潘爱民博士创立,集结了来自国内外顶尖高校或著名公司的技术及行业专家,总部及研发中心落户杭州,并在上海、重庆布局子公司以便提供更好的本地化服务。

指令集TM智能科技(Instruction SetTM) 既是一家商业公司,也承载着让世界更加互联和智慧的美好愿望。通过打造安全可控的自主智能操作系统(iSysCoreTMIntelligence Operating System),为数字化智慧转型提供智慧、安全、开放和易用的底层基础软件设施及配套解决方案,助力政企提升效率和价值。

物联网设备的网络连接---中篇_第7张图片

指令集智能科技

http://www.isyscore.com

物联网设备的网络连接---中篇_第8张图片

你可能感兴趣的:(物联网设备的网络连接---中篇)