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

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

三、物联网传输协议

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

与具体的传输协议结合起来,在网络上传输的数据包格式如图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

BACNETBACNET(Building Automation and Control NETworks)是用于智能建筑的通信协议,也是国际标准化组织(ISO)、美国国家标准协会(ANSI)以及美国采暖、制冷与空调工程师协会(ASHRAE)定义的通信协议。主要用于暖通、照明、门禁、消防等相关的设备与系统。BACNET有一套相对完整的协议栈定义,从应用层到物理层共有四层,但BACNET的核心在于应用层和网络层,它们是BACNET特有的。这四层协议解释如下:

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

表2 BACNET APDU类型

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控制字节决定了后面出现的内容。

图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所示。发布者和订阅者不直接通讯,而是通过一个物联网服务器进行消息传递,这样可以控制消息的发送逻辑和频率。

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

实际上,在移动互联网(主要是移动终端和移动服务)上,MQTT也被用于消息推送(PUSH)服务,允许大量的智能手机接收(订阅)移动服务方的通知消息。MQTT的消息结构非常简单,每个消息由三部分组成:固定头、可变头、载荷,如图19所示。

图19 MQTT消息格式

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

表3 MQTT消息的类型

有些类型的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所示。

图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://http://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的优势是,上层应用丰富,有大量的软件和工具支持。本文不再赘述。

逆战网络连接断开连接服务器超时_物联网设备的网络连接---中篇相关推荐

  1. 笔记本电脑网络连接显示红叉_物联网设备的网络连接---上篇

    在一个物联网场景中,设备连接是底层基础.由于物联网设备的多样性,涉及到各个工业领域中的标准或规范,这就需要综合的软硬件技术将它们连接起来. 本文分别从物联网组网技术和传输协议的角度来介绍物联网系统所面 ...

  2. 逆战网络连接断开连接服务器超时_逆战服务器连接断开 与服务器连接断开的原因...

    今天小编为大家带来了逆战服务器连接断开 与服务器连接断开的原因,感兴趣的朋友们可以跟着小编去下文了解一下哦! 很多玩家都碰到过这种问题,大多都是腾讯的TP安全防卫提示的这个消息,大家大可不必着急,出现 ...

  3. 金蝶系统一直提示服务器超时,连接金蝶云服务器超时

    连接金蝶云服务器超时 内容精选 换一换 本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)副本集实例.操作系统使用场景:弹性云服务器的操作系统以Li ...

  4. 连接远程Redis服务器超时

    连接远程Redis服务器超时 问题 在本地java应用中,连接服务器的Redis失败,提示连接超时.远程服务器上可以登陆,也已经开放相应的端口,但提示连接超时. 解决 1.找到Redis服务启动时的配 ...

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

    在上篇<物联网设备的网络连接---上篇>中我们介绍了物联网的网格结构及物联网组网技术 本篇,我们将带您了解物联网传输协议. 三.物联网传输协议 上节介绍的物联网组网技术,主要解决的是物理层 ...

  6. 物联网设备的网络连接---下篇

    在<物联网设备的网络连接---上篇>中我们介绍了物联网的网格结构及物联网组网技术:在<物联网设备的网络连接---中篇>中我们介绍了物联网的传输协议: 本篇,我们将带您了解物联网 ...

  7. 物联网设备的网络连接---上篇

    在一个物联网场景中,设备连接是底层基础.由于物联网设备的多样性,涉及到各个工业领域中的标准或规范,这就需要综合的软硬件技术将它们连接起来. 本文分别从物联网组网技术和传输协议的角度来介绍物联网系统所面 ...

  8. 越来越多的岗位需要DPDK,那从DPDK该如何提升网络底层效率丨网络原理丨Linux服务器开发丨后端开发丨网络底层原理

    越来越多的岗位需要dpdk,那从dpdk该如何提升网络底层效率 1. dpdk线程模型 2. kni与数据接收处理流程 3. 手把手代码实现 视频讲解如下,点击观看: 越来越多的岗位需要DPDK,那从 ...

  9. 连接超时_记一次网络请求连接超时的事故

    点击上方蓝色字关注我们~前言 从HTTP请求超时.重试机制.操作系统网络等层面剖析了事故的原因,最终解决业务问题. 这里先抛两个问题: 1)你遭遇过由于网络连接或请求超时造成的生产事故吗? 2)你知道 ...

最新文章

  1. 【SpringMVC】从Fastjson迁移到Jackson,以及对技术选型的反思
  2. 改变HTML中超链接的显示样式
  3. Beyond Compare配置
  4. [禅悟人生]心平气和, 慢慢修行
  5. Windows下安装配置SubVersion的简明步骤
  6. freemarker ftl模板_效率提升百分之四十,AS模板也太好用了吧
  7. 【重难点】【JUC 01】线程安全都体现在哪些方面 、如何维护线程安全、多线程的同步方法、多线程通信方式、AQS
  8. 准备让MSN机器人可以显示头像
  9. 关于王者荣耀防沉迷以及各种实名认证
  10. 知乎cookies的介绍_SameSite小识
  11. 白帽子讲web安全(一)
  12. mysql 正则表达式_MySQL的正则表达式
  13. 游戏模型提取工具NinjaRipper
  14. 左/右移运算符,循环左/右移运算
  15. JAVA+selenium+testNG QQ邮箱登录及邮箱发送
  16. 界面配色方案(转载)
  17. MIUI patchrom拉取zip包出错的解决记录
  18. [aria2c]使用aria2c下载“任务出错”的bt种子
  19. MySQL原理与学习
  20. 【深度学习基础1】深度学习发展历史

热门文章

  1. SPGridview的使用
  2. 操作系统形成性考核册作业答案
  3. C++对带有分隔符的字符串 分割为数字的通用解决方案
  4. 【干货】如何利用NLP与知识图谱处理长句理解.pdf(附下载链接)
  5. 【报告分享】2020金融兴趣人群内容消费及理财意识洞察报告.pdf(附下载链接)...
  6. 一个“普通人”的秋招算法岗上岸心得
  7. java swing jcheckbox_Swing JCheckBox类
  8. 外贸网站需要ERP系统吗?
  9. php.ini 是否设置路由,php – 如何在路由INI文件中为Zend Framework中的子域编写路由链?...
  10. kb3042553显示不适用计算机,KB3042553补丁打不上,怎么办?