物联网协议(设备到物联网服务)

article/2025/10/23 12:15:03

  物联网中的网络分为设备到设备的网络与设备到物联网服务的网络。其中,设备到物联网服务的网络通信协议有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多播等特性,且不是长连接通信,更适用于低功耗的物联网场景。


http://chatgpt.dhexx.cn/article/cKu6AZ3N.shtml

相关文章

物联网系统上位机源码,含服务器和客户端 物联网服务端程序

物联网系统上位机源码,含服务器和客户端 物联网服务端程序,可以接受市面上大多数透传数据的DTU登录,以及和DTU双向通讯 程序功能:能分组管理,不同的组别用户只可见自己组别的设备,设备和客户端登录掉线直观…

物联网python开发实践

文章目录 第1章 物联网邂逅python物联网组成架构发展现状典型应用使用python的理由python与网关/云平台 第2章 开启python之旅版本选择、搭建开发环境python语言介绍 第3章 python数据结构第4章 python高级特性第5章 物联网核心组件网络通信方案网络通信协议硬件物联网云平台 第…

物联网系统怎么部署服务器,如何搭建物联网云服务器

如何搭建物联网云服务器 内容精选 换一换 创建并登录弹性云服务器,请参见《弹性云服务器快速入门》中“购买弹性云服务器”和“登录弹性云服务器”。该弹性云服务器用于连接文档数据库实例,需要与待连接的实例处于同一虚拟私有云子网内。创建弹性云服务器时,要选择操作系统,…

DGIOT物联网开源平台——腾讯云轻量应用服务器部署

为了节省开发者和实施工程师的时间,降低部署难度,本文提供了一套基于linux系统的一键式部署方式,以便快速交付,提升学习和商用部署的效率。 安装部署 1.服务器(本案例采用腾讯云服务器作为示例) 腾讯云地…

ubuntu系统下搭建本地物联网mqtt服务器的步骤

摘要:mqtt broker(服务器)是物联网通信的核心,网上有很多种开源的服务器可供选择,本文介绍如何在ubuntu系统下安装emqx服务器,让大家可以在局域网环境下搭建“云服务器”,体验物联网的乐趣。本文…

【物联网】12.物联网服务器发送方式(HTTP,WebSocket ,MQTT )

发送服务器的目的在于向设备发送数据并控制设备。 这篇主要是利用HTTP、WebSocket、MQTT 协议来看看如何实现同步和异步传输。 HTTP 发送数据 发送服务器等待接收HTTP 请求的Web 服务器。设备向这台服务器申请发送数据,作为响应,服务器把数据发给设备。…

轻量级高并发物联网服务器接收程序源码

轻量级高并发物联网服务器接收程序源码 (仅仅是接收硬件数据程序 ,没有web端,不是java,协议自己写,如果问及这些问题统统不回复。),对接几万个设备没问题,数据库采用ef6sqlite&…

C#物联网平台服务器框架源码

C#物联网平台服务器框架源码。 这套带码是通过C#编写集成IOCP高性能高并发优势服务器服务源码。 带手机appdemo源码 具体具备功能如下: 1、具备EF6mssql数据库功能,可更改为MYSQL或SQLITe. 2、自带WEB API服务,抛弃IIS支持。 用户可以通…

成本360元的迷你物联网服务器有多香?

嗨,大家好,我们又见面了,前段时间比较忙,所以一直没更新。之前在自己的笔记本上搭建了blynk服务器和Domoticz服务器,但是一直开着笔记本插着电源对电池损害太大,也曾经在手机上安装了服务器,但是…

c#轻量级高并发物联网服务器接收程序源码

c#轻量级高并发物联网服务器接收程序源码(仅仅是接收硬件数据程序,没有web端,不是java,协议自己写。 ),对接几万个设备没问题,数据库采用ef6sqlite,可改efMySQL.该程序只是源码使用示…

基于ESP32搭建物联网服务器十三(自已搭建一个MQTT服务器)

在之前的文章中:ESP32搭建WEB服务器十二(使用MQTT协议与ESP32互动)_你的幻境的博客-CSDN博客 我们已经实现了ESP32通过MQTT协议连接到公共MQTT服务器上,但是公共服务器在稳定性或安全性上,很多时候无法保证。这时,我们除了可以购买比如: 阿…

阿里云搭建MQTT物联网服务器

一、MQTT简介 1、MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上&…

搭建一个物联网平台

搭建一个简单的物联网平台 之所以产生自己搭建平台的想法,是因为本来要使用 one* 平台完成一项作业,但是这个平台的官方文档写的太混乱了,有些地方写的有很简略,对我这种想要入门的小白来说不太友好,而且网上的第三方资…

物联网服务器搭建记录,心得

前言 在庞大的物联网世界中,自己拥有一台物联网服务器时多么一件美好的事。如同自己做的衣服更合身,自己搭建的物联网服务更灵活。 2022/3/9搭建服务 首次搭建了服务,但是感觉在安全方面是个很大的问题。每个设备都能连接,每个…

超微物联网超级服务器IoT SuperServer SYS-210SE-31A 评测

SYS-210SE-31A是Supermicro在日益流行的边缘服务器领域的最新产品。有趣的是,这款2单元430mm短深度服务器提供了3个热插拔节点,每个节点都有1个CPU和8个DIMM插槽。它还具有PCIe Gen4 x16扩展插槽、免工具可维护性和高达55℃的工作温度范围。对实现高度通…

JAVA-删除文件夹下所有文件的3种方法,推荐使用JDK8 Stream流的语法

一、删除文件或文件夹的四种基础方法 下面的四个方法都可以删除文件或文件夹,它们的共同点是:当文件夹中包含子文件的时候都会删除失败,也就是说这四个方法只能删除空文件夹。 需要注意的是:传统 IO 中的 File 类和 NIO 中的 Pat…

软件测试必看的5本书

最近好多朋友加我微信,问我有没有好一点的测试相关书籍推荐看一下,现具体介绍如下几本: 1. 软件测试的艺术(第3版) 软件测试的艺术 作 者:(美)梅耶(Myers, G. J.) 等著,张晓明,黄琳 译 出 版 社:机械工业出版社 简介:本书以一次自评价测试开篇,从软件测试的心理…

软件测试入门有哪些书籍可供推荐?

书不在多,关键是精! 入门基础:《软件测试》、《鸟哥的Linux私房菜》、《head first python》 测试技术:《深入理解Java虚拟机》、《移动App性能评测与优化》、《性能之巅》 代码分析:《head first 设计模式》、《重…

盘点几本软件测试入门必读的经典书籍,让你少走一半弯路

读书一直以来就是获取知识的最直接途径,并且成本低廉。每本书都是作者深度思考和总结的成果,书本的内容一般都要经过缜密的调研,都是作者辛辛苦苦实践的结晶。技术书籍写作耗时都比较久,基本上能广泛流传的书籍,都是经…

你在自学软件测试吗?学软件测试10本必看书

没有软件开发,就没有软件测试。有了软件测试,软件开发出的软件产品才能达到用户满意的地步,他们之间是相互依赖的关系。软件测试在软件开发行业是不可或缺的存在,你在自学软件测试吗?学软件测试10本必看书你该看&#…