物联网中的网络分为设备到设备的网络与设备到物联网服务的网络。其中,设备到物联网服务的网络通信协议有HTTP,Websocket,MQTT等。

HTTP协议

  HTTP(超文本传输协议)是一个负责从万维网服务器获取超文本到本地浏览器的传输协议。HTTP协议工作在应用层,在下层使用了TCP传输控制协议作为其运输层协议。HTTP协议由请求和响应两部分组成,其端口号为80。使用HTTP协议在设备与物联网服务之间传输数据时,物联网服务不能主动向设备发送请求,只能在被动接收设备发送的请求并在响应中返回数据,因此设备通常采用轮询的方式定期向服务器发送请求以获取来自服务器的数据。

HTTP协议内容

HTTP请求

# 请求行
GET /api/articles?type=more&category=home&shown_offset=1602317230800527 HTTP/2
# 请求头
Host: www.csdn.net
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

请求行内容:

  • GET:请求类型,GET表示读取请求,POST表示向服务器发送信息
  • /api/articles?type=more&category=home&shown_offset=1602317230800527:网站路径与携带参数
  • HTTP/2:请求使用的HTTP版本号为2.0
    请求头内容:
  • Host:HTTP请求的目的主机
  • UserAgent:用户代理,请求源主机的操作系统信息与浏览器信息
  • Accept:用户希望接收的数据类型
  • Accept-Language:用户希望接收的语言类型
  • Accept-Encoding:用户希望接收的编码格式
  • Connection:连接后是否断开

HTTP相应

# 状态行
HTTP/2 200 OK
# 响应头
date: Sat, 10 Oct 2020 08:07:11 GMT
content-type: application/json
# 响应体

状态行内容:
HTTP/2:响应使用的HTTP版本号为2.0
200 OK:响应状态码,200表示成功处理请求
响应头内容:
content-type:响应体内容类型,application/json表示返回一个json格式数据
date:服务器响应时间

轮询

  相隔很短时间向服务器发出请求,判断服务器是否有发给客户端的新消息。

setInterval(() => {$.ajax({type: 'post',url: http + "interface/index/get_warning_info.php",//  data: obj,dataType: 'json',success (res) {...}})}, 1000);

WebSocket协议

  由于在HTTP协议中,服务器不能主动向设备推送信息。设备使用轮询的方式向服务器请求数据时会消耗大量的设备运行资源与网络资源,因此WebSocket协议诞生。
  WebSocket协议是建立在运输层协议TCP上进行全双工通信的协议,可以实现设备与物联网协议之间的平等传输,即客户端可以主动向服务器发送请求,服务器也可以向客户端推送信息。

  在建立WebSocket连接时,客户端与服务器要先进行握手,即客户端向服务器发送一个HTTP请求。客户端发送的请求报文如下:

 GET / HTTP/2.0Host: server.example.comUpgrade: websocket // 要求将通信协议转换为WebSocketConnection: Upgrade // 要求将通信协议转换为WebSocketSec-WebSocket-Key: eH2kIHNhbVCsdsfSS2AjZQ== // 客户端每次请求时将生成一个唯一的KeyOrigin: http://example.comSec-WebSocket-Protocol: chat, superchat // 通信协议Sec-WebSocket-Version: 13 // 通信版本

  在服务端收到客户端的HTTP请求时,将发回以下报文:

 HTTP/2.0 101 Switching ProtocolsUpgrade: websocket // 将通信协议转换为WebSocketConnection: Upgrade // 将通信协议转换为WebSocketSec-WebSocket-Accept: dGFlIZNhSXAsRSTTuCFG2RjFK== // 服务端采用于客户端一致的密钥加密

  之后建立连接,其中Sec-WebSocket-Accept为服务端通过算法校验客户端发送的Sec-WebSocket-Key后得出的,客户端在收到响应报文后会对Sec-WebSocket-Key进行验证。该机制是为了防止恶意连接或无意连接。
  在建立连接后,WebSocket发送数据的单位为frame(帧)。客户端将长消息分为多个帧,并发送给服务端。服务端接收来自客户端的帧,并组装成完整的数据。此外,客户端还与服务器进行心跳检测,来确定连接是否持续。

MQTT协议

  MQTT(消息队列遥测传输协议)是一种基于发布者/订阅者模式的通信协议,可以实现一对多的通信,该协议建立在传输层协议TCP之上,为应用层协议。此外,该协议具有轻量、低开销、低带宽占用的优点,因此在物联网领域具有广泛的应用。

  MQTT客户端可以是使用MQTT协议的应用程序或者设备,它总是建立到服务器的网络连接,其功能为:

  • 向MQTT中介发布主题
  • 订阅来自其它客户端发布的主题
  • 退订主题或删除应用程序的消息
  • 断开与服务器连接
      MQTT中介又称为MQTT服务器,可以是一个应用程序或一台设备。它是位于消息发布者和订阅者之间,其功能为:
  • 接受来自客户的网络连接
  • 接受客户发布的主题
  • 处理来自客户端的订阅和退订请求
  • 向订阅的客户转发主题

MQTT主要特性

  • Qos(服务质量):通信线路的品质保证,这里以发布者发布主题为例。

      Qos0最多发送一次消息,不保证消息到达。

      Qos1至少发送一次消息,若发布者向中介发布主题A之后,中介没有返回PUBACK(Qos1发布消息确认),则发布者重复发布主题A,直到收到来自中介的PUBACK。

      Qos2准确发送一次消息。在Qos2中,发布者先发送一次主题A,若中介收到主题A,则返回PUBREC(发布消息已接收),发布者在收到PUBREC之后,发送PUBREL(发布消息释放),中介收到后,回复PUBCOMP(发布消息完成)。
      订阅者收到MQTT消息的的Qos取决于发布消息的Qos和订阅主题的Qos,当两者不同时会使用级别较低的Qos。
  • Retain(MQTT中介缓存客户端发布的主题)
      发布者发布带有Retain标志的消息后,消息便被缓存在MQTT中介,订阅者在订阅后可以立即收到带有Retain标志的消息(也可以收到订阅该主题前已经发布的消息)。
  • Will(客户端与服务端的连接意外断开时发送的消息)
      若连接意外断开,Will消息就被传送给订阅者,若使用Disconnect消息明确表明连接已断开时(正常情况),则Will消息不会发给订阅者。
  • Clean Session(是否清除之前的Session)
      用于指定中介是否保留了订阅者的已订阅状态,0表示保留Session,1表示不保留Session。
      Session中存储的信息有:客户端Id,客户端订阅的主题,已经发送或正在发送且没有确认的Qos1与Qos2消息,在发送中的Qos0消息。

MQTT支持框架

  MQTT服务端支持框架:mosquitto、 emqttd、 Apache ActiveMQ、 RabbitMQ
  MQTT客户端支持框架:Eclipse Paho

XMPP

  XMPP是基于XML的协议,相对HTTP,XMPP在通讯的业务流程上是更适合物联网系统的,开发者不用花太多心思去解决设备通讯时的业务通讯流程,相对开发成本会更低。但是HTTP协议中的安全性以及计算资源消耗的硬伤并没有得到本质的解决,且无法适应物联网设备的多样性和低功耗的特性。

CoAP

  Coap(Constrained Application Protocol)是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252。COAP名字翻译来就是“受限应用协议”,顾名思义,使用在资源受限的物联网设备上。物联网设备的ram,rom都通常非常小,运行TCP和HTTP是不可以接受的,因此CoAP选择了简单的UDP作为其运输层协议。
  CoAP基于RESTful风格请求,客户端可以用GET,POST,PUT,DELETE等请求方法对同一个资源的url发起请求。CoAP的数据传输格式为二进制,最小长度为4B。CoAP支持可靠传输,IP多播等特性,且不是长连接通信,更适用于低功耗的物联网场景。

物联网协议(设备到物联网服务)相关推荐

  1. 2021-2027全球与中国物联网网关设备市场现状及未来发展趋势

    2021-2027全球与中国物联网网关设备市场现状及未来发展趋势 IoT网关设备是一种物理设备或硬件设备,旨在用作控制器,传感器,云和智能设备之间的连接,其中来自云(或移至云)的数据通过网关. 本文研 ...

  2. 西北师大与新华三开展物联网战略合作,共建“物联网联合实验室”

    6月9日,西北师范大学与新华三集团(以下简称新华三)共同打造的"物联网联合实验室"正式揭牌,拉开了战略合作的序幕.双方正式签署战略合作协议,通过在高校物联网应用领域开展全方位战略合 ...

  3. 输变电设备物联网节点设备无线组网协议_U-Link 物联网(工业互联网)服务平台

    原标题:U-Link 物联网(工业互联网)服务平台 智慧硬件物联云平台U-Link,即U-Link 物联网(工业互联网)服务平台是由公司自主研发的产品,面向生产制造业.智慧城市.气象环保.农业水利.智 ...

  4. java实现mqtt服务端_基于Swoole使用MQTT协议连接阿里云物联网平台设备实现消息订阅

    阿里云物联网平台为设备提供安全可靠的连接通信能力,支撑设备数据采集上云,我们这里认为阿里云物联网平台是 MQTT 服务端,那么我们自己的设备作为客户端,应该如何实现消息订阅? 阿里云没有提供 PHP ...

  5. 输变电设备物联网节点设备无线组网协议_SmartModule物联网智能测控组件

    根据我们深耕测试.测量与控制领域多年的经验和对智能测控技术发展的研究以及不同行业用户应用需求的分析,设计开发出一种可扩展的定制化的智能测控组件,具备状态感知.网络适配和执行控制功能.其中,前端:可定制 ...

  6. 输变电设备物联网节点设备无线组网协议_AIS-Link-艾森智能的工业物联网连接协议...

    深圳市艾森智能技术有限公司致力于低功耗广域物联网技术创新和行业应用,推出了多个原创的联网解决方案,如TDM over LoRaWAN,.LoRaLAN 和LoRa Mesh等,为工业应用客户创造价值的 ...

  7. 物联网中设备与服务器通信使用什么网络协议?

    HTTP协议互联网中最常用的网络协议.当然还有其他协议,如收发电子邮件使用POP3.SMTP和IMAP协议,如区块链使用P2P协议.那么在物联网中设备与服务器通信使用什么协议呢? 目录 物联网通信的特 ...

  8. MQTT协议 发布/订阅 机制初探 - (模拟物联网传感器设备和控制模块间的通信)

    MQTT协议 发布/订阅 机制初探 - (模拟物联网传感器设备和控制模块间的通信) 1. 实验环境介绍 Windows 2. 安装MQTT服务器并运行 管理员身份运行安装工具 选择安装路径 点击安装 ...

  9. 物联网协议对比(HTTP、websocket、XMPP、COAP、MQTT和DDS协议)

    目录 1.HTTP和websocket 2.XMPP 3.COAP 4.MQTT协议 5.DDS 对于物联网,最重要的是在互联网中设备与设备的通讯,现在物联网在internet通信中比较常见的通讯协议 ...

最新文章

  1. 关于RMAN几个容易混淆的参数
  2. python从文件中读取数据_使用Python脚本从文件读取数据代码实例
  3. 模拟和存根有什么区别?
  4. day07 数据类型的内置方法(列表的内置方法)
  5. vue.jsr入门_JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性
  6. delphi webbrowser 显示 html,delphi webbrowser
  7. JAVA补充-抽象类
  8. 【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫
  9. Q104:怎么用ray tracing画基于磨边楔形的“花环(Rosette)”
  10. 因未发项目奖金,一程序员删代码泄愤被判刑5个月
  11. python中字典dict的方法fromkeys
  12. erlang的又一力作——英雄联盟聊天服务器
  13. oracle中rollup函数与mysql中with rollup区别
  14. RedHat配置阿里yum源
  15. SMART PLC PID仿真 (SMART PID仿真库使用说明)
  16. win7电脑怎么提升开机速度
  17. (三)Spring整合RabbitMQSpringBoot 整合RabbitMQRabbitMQ 镜像队列
  18. Java怎么除以2_哪个更好的选项用于将整数除以2?
  19. 关于音视频的一些知识(demux、filter等)
  20. ubuntu忘记mysql密码,怎么办

热门文章

  1. 泛微OA-E9和用友NCC单据接口对接
  2. 深度学习-使用RNN生成诗
  3. 【IDEA 教程系列第 22 篇】idea 中撤销和反撤销快捷键
  4. 自动维护Windows XP另辟蹊径
  5. 51Nod_1174区间中最大值
  6. 使用计算机上级考试系统时显示注册键值hkey-路径无效,计算机组装于维护上级考试题解.doc...
  7. SAMBA多用户共享
  8. 梦想CAD控件安卓版选择集
  9. 从0开始制作微信投票系统(二):如何创建微信投票链接和二维码?
  10. 没有最兔子,只有更兔子