目录

1、HTTP和websocket

2、XMPP

3、COAP

4、MQTT协议

5、DDS


对于物联网,最重要的是在互联网中设备与设备的通讯,现在物联网在internet通信中比较常见的通讯协议包括:HTTP、websocket、XMPP、COAP、MQTT

1、HTTP和websocket

在互联网时代,TCP/IP协议已经一统江湖,现在的物联网的通信架构也是构建在传统互联网基础架构之上。在当前的互联网通信协议中,HTTP协议由于开发成本低,开放程度高,几乎占据大半江山,所以很多厂商在构建物联网系统时也基于http协议进行开发。包括google主导的physic web项目,都是期望在传统web技术基础上构建物联网协议标准。

HTTP协议是典型的CS通讯模式,由客户端主动发起连接,向服务器请求XML或JSON数据。该协议最早是为了适用web浏览器的上网浏览场景和设计的,目前在PC、手机、pad等终端上都应用广泛,但并不适用于物联网场景。在物联网场景中其有三大弊端:

1. 由于必须由设备主动向服务器发送数据,难以主动向设备推送数据。对于单单的数据采集等场景还勉强适用,但是对于频繁的操控场景,只能推过设备定期主动拉取的的方式,实现成本和实时性都大打折扣。

2. 安全性不高。web的不安全都是妇孺皆知,HTTP是明文协议,在很多要求高安全性的物联网场景,如果不做很多安全准备工作(如采用https等),后果不堪设想…

3. 不同于用户交互终端如pc、手机,物联网场景中的设备多样化,对于运算和存储资源都十分受限的设备,http协议实现、XML/JSON数据格式的解析,都是“mission impossible”

HTTP的连接问题,HTTP客户端和服务器之间的交互是采用请求/应答模式,在客户端请求时,会建立一个HTTP连接,然后发送请求消息,服务端给出应答消息,然后连接就关闭了。(后来的HTTP1.1支持持久连接)
因为TCP连接的建立过程是有开销的,如果使用了SSL/TLS开销就更大。

在浏览器里,一个网页包含许多资源,包括HTML,CSS,JavaScript,图片等等,这样在加载一个网页时要同时打开连接到同一服务器的多个连接。

HTTP消息头问题,现在的客户端会发送大量的HTTP消息头,由于一个网页可能需要50-100个请求,就会有相当大的消息头的数据量。

HTTP通信方式问题,HTTP的请求/应答方式的会话都是客户端发起的,缺乏服务器通知客户端的机制,在需要通知的场景,如聊天室,游戏,客户端应用需要不断地轮询服务器。

当然,依然有不少厂商由于开发方便的原因,选择基于HTTP协议构架物联网系统,在设备资源允许的情况下,怎么避免上面提到的数据推送实时性低的问题呢?

websocket是一个可行的办法。websocket是HTML5提出的基于TCP之上的可支持全双工通信的协议标准,其在设计上基本遵循HTTP的思路,对于基于HTTP协议的物联网系统是一个很好的补充。

但是问题是:http+websocket的方式,协议开销代价太大。如果让一个单片机去实现这样的协议,性能会很吃力。

2、XMPP

由于物联网设备通信的模式和互联网中的即时通讯应用非常相似,互联网中常用的即时通讯协议也被大量运用于物联网系统构建中,这其中的典型是XMPP。

XMPP是基于XML的协议,由于其开放性和易用性,在互联网及时通讯应用中运用广泛。相对HTTP,XMPP在通讯的业务流程上是更适合物联网系统的,开发者不用花太多心思去解决设备通讯时的业务通讯流程,相对开发成本会更低。但是HTTP协议中的安全性以及计算资源消耗的硬伤并没有得到本质的解决。前段时间报出的黑客轻松破解的TCL洗衣机,正是采用XMPP协议。

无论是HTTP、websocket还是XMPP,在设计时都是根据互联网应用场景设计的,虽然很多厂商把他们应用在物联网系统中,但是必然会水土不服,这些协议的通病就是根本无法适用物联网设备的多样性,无法适用很多物联网设备对低功耗、低成本的需求,难以在极低资源的物联网设备中运用。能不能有协议既可以借用web技术的设计思想,同时又能适应恶劣的物联网设备运行环境呢?

3、COAP

COAP协议的设计目标就是在低功耗低速率的设备上实现物联网通信。coap和HTTP协议一样,采用URL标示需要发送的数据,在协议格式的设计上也基本是参考HTTP协议,非常容易理解。同时做了以下几点优化:

1. 采用UDP而不是TCP。这省去了TCP建立连接的成本及协议栈的开销。

2. 将数据包头部都采用二进制压缩,减小数据量以适应低网络速率场景。

3. 发送和接收数据可以异步进行,这样提升了设备响应速度。

COAP协议就像一个针对物联网场景的http移植品,很多设计保留了HTTP协议的影子,拥有web背景的开发者也能快速上手。但是由于很多物联网设备隐藏在局域网内部,coap设备作为服务器无法被外部设备寻址,在ipv6没有普及之前,coap只能适用于局域网内部(如wifi)通信,这也很大限制了它的发展。

4、MQTT协议

MQTT协议就很好的解决了coap存在的问题。MQTT协议是由IBM开发的即时通讯协议,相比来说比较适合物联网场景的通讯协议。MQTT协议采用发布/订阅模式,所有的物联网终端都通过TCP连接到云端,云端通过主题的方式管理各个设备关注的通讯内容,负责将设备与设备之间消息的转发。

1.使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。

2.对负载内容屏蔽的消息传输。

3.使用 TCP/IP 提供网络连接。

4.有三种消息发布服务质量:

"至多一次",消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。

"至少一次",确保消息到达,但消息重复可能会发生。

"只有一次",确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

5.小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。

6.使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。

MQTT在协议设计时就考虑到不同设备的计算性能的差异,所以所有的协议都是采用二进制格式编解码,并且编解码格式都非常易于开发和实现。最小的数据包只有2个字节,对于低功耗低速网络也有很好的适应性。有非常完善的QOS机制,根据业务场景可以选择最多一次、至少一次、刚好一次三种消息送达模式。运行在TCP协议之上,同时支持TLS(TCP+SSL)协议,并且由于所有数据通信都经过云端,安全性得到了较好地保障。

当前的物联网通信协议真的是百花齐放,没有任何协议能够在市场上占有统治地位。但要实现物联网设备互联互通(不同厂商、不同平台、不同架构),关键点并不在上述接入协议或通讯协议的统一,而在于上层业务应用层协议的统一。无论是wifi、蓝牙、亦或是mqtt、http都是设备进行数据通讯和交换的通道,规定的是通讯的格式;而通讯的内容的统一才是实现互联互通的关键。

5、DDS

DDS(Data Distribution Service for Real-Time Systems),面向实时系统的数据分布服务,这是大名鼎鼎的OMG组织提出的协议,其权威性应该能证明该协议的未来应用前景。

适用范围:分布式高可靠性、实时传输设备数据通信。目前DDS已经广泛应用于国防、民航、工业控制等领域。

特点:
  •   以数据为中心
  •   使用无代理的发布/订阅消息模式,点对点、点对多、多对多
  •   提供多大21种QoS服务质量策略

协议主要实现:
  •   OpenDDS 是一个开源的 C++ 实现
  •   OpenSplice DDS

DDS很好地支持设备之间的数据分发和设备控制,设备和云端的数据传输,同时DDS的数据分发的实时效率非常高,能做到秒级内同时分发百万条消息到众多设备。DDS在服务质量(QoS)上提供非常多的保障途径,这也是它适用于国防军事、工业控制这些高可靠性、可安全性应用领域的原因。但这些应用都工作在有线网络下,在无线网络,特别是资源受限的情况下,没有见到过实施案例。

物联网协议对比(HTTP、websocket、XMPP、COAP、MQTT和DDS协议)相关推荐

  1. 物联网协议对比Http,socket,XMPP,COAP,MQTT,DDS

    HTTP: 典型的c/s通讯模式,最早适用web浏览器.不适合物联网场景,主要三大弊端. 1.必须由设备主动向服务器发送数据,难以主动向设备推送数据.不适合数据采集,实时性,频繁操控场景 2.安全性不 ...

  2. 物联网通信协议——比较-MQTT、 DDS、 AMQP、XMPP、 JMS、 REST、 CoAP

    AMQP & MQTT & DDS (https://www.youtube.com/watch?v=GTK94zZJbGQ) 物联网通信协议详解及选择建议(资料来源:http://w ...

  3. XMPP与SIP-IM两大协议的对比

    2019独角兽企业重金招聘Python工程师标准>>> XMPP与SIP-IM两大协议的对比 XMPP 协议简介 Google 通过官方宣布,Google Talk 将正式支持不同I ...

  4. 物联网:SpringBoot 集成Websocket 前后端客户端 及 mqtt 实现设备联动

    项目背景: 实现人离开房间超过一定时间,自动关闭空调联动控制功能. 实现原理: 通过客流密度摄像机监测客流人数变化,发送订阅消息到mqtt 消息服务器,WEB后台服务器订阅mqtt主题,接收客流密度摄 ...

  5. mqtt协议产品化实现-华为鸿蒙实现mqtt客户端

    前面介绍的mosquitto项目[1]主要实现的是mqtt broker的功能,该小节介绍的物联网操作系统中的mqtt主要是实现客户端功能,因为角色的不同,所以在功能点上.架构上有很大的差异,所依赖的 ...

  6. 基于MQTT的RPC协议

    RPC 是一种基于request/response 模式的分布式协议.而MQTT 是基于pub/sub模式的协议.是否能够将这两种协议相结合,实现RPC Over MQTT ?我并没有发现由比较知名的 ...

  7. WebSocket协议入门:WebSocket API

    HTML5连接性领域包括WebSocket.服务器发送事件和跨文档消息传递(Cross-Document Messaging)等技术.在HTML5之前,浏览器窗口和框架之间的通信由于安全的原因而受到限 ...

  8. 【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )

    文章目录 一.路由选择协议分类 二.BGP 协议 简介 三.BGP 协议 信息交换过程 三.BGP 协议 报文格式 四.BGP 协议 特点 五.BGP-4 协议的 四种报文 六.RIP .OSPF.B ...

  9. 【计算机网络】数据链路层 : 广域网 ( HDLC 协议 | HDLC 站 | HDLC 帧格式 | HDLC 帧类型 | PPP 协议 与 HDLC 协议 对比 )

    文章目录 一.HDLC 协议 二.HDLC 站 三.HDLC 帧格式 四.HDLC 帧类型 五.PPP 协议 与 HDLC 协议 对比 一.HDLC 协议 HDLC 协议 : ① 全称 : High- ...

最新文章

  1. 深入Java核心 Java中多态的实现机制(1)
  2. python3.7安装pygal_pip和pygal的安装实例教程
  3. Little Sub and Sequence
  4. 深入jvm虚拟机第4版_深入理解JVM虚拟机
  5. mysql outfile csv_sql-MySQL导出到outfile:CSV转义字符
  6. c语言二分法_14个经典C语言算法你就不看一眼?(附详细代码)
  7. sql调优的几种方式_「数据库调优」屡试不爽的面试连环combo
  8. 微软杀毒软件 Microsoft Defender 将发布 Linux 版本
  9. puppet 3+Unicorn+Nginx安装配置
  10. SQL Server数据类型概述
  11. Webpack執行打包:“You may need an appropriate loader to handle this file type“
  12. Windows 下 git的安装 + 可视化的小乌龟的安装
  13. jQueryAPI_1.7.1 中文版
  14. 毕业论文系列-公式编号
  15. [Back-To-Back LC]背对背信用证
  16. 模拟退火算法+大规模邻域算法求解大规模固定节点的路径规划问题matlab代码
  17. 在虚拟机Ubuntu下安装java环境
  18. 光大证券自称因异常交易损失约1.94亿元,疑为程序问题!
  19. 如何搭建一个公链?公链生态“吸金“七件套,缺一不可
  20. 如何用python画下三角矩阵的相关热力图?sns.heatmap详解

热门文章

  1. Android Fragment 调用宿主Activity 里面的方法
  2. Android 签名配置
  3. 对python3中pathlib库的Path类的使用详解
  4. Spring Cloud下微服务权限方案
  5. pyhton re模块
  6. MySQL主主配置说明
  7. Color the ball(HDU1556)树状数组
  8. Python 中的locals()
  9. LWIP网络接口管理
  10. android开发之Parcelable使用详解