Java 物联网协议MQTT和 CoAP

Java 物联网协议

Survive by day and develop by night.

talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.

happy for hardess to solve denpendies.

目录

概述

java IOT 协议是大家非常熟悉的一种的协议。

需求:

1.概述

  1. 协议分类

设计思路

实现思路分析

1.概述

物联网核心组成就是物联设备、网关和云端。物联设备分为两类,一类是其自身天然支持TCP/IP而能直接接入物联网,如wifi、GPRS/3G/4G(当然,还有即将到来的5G)等设备;另一类是其未能支持IP协议而需要网关(协议转换)来接入物联网,如Zigbee、蓝牙等设备。对于蓝牙设备而言,手机其实是一个网关。

2.MQTT

MQ 遥测传输(MQ Telemetry Transport,简称MQTT)是一个面向 IoT 应用程序的轻量级连接协议。它基于 TCP/IP 网络连接使用发布/订阅方法来传输数据。设计思想是开放、简单、轻量、易于实现,这也使它成为 IoT 开发的理想平台。MQTT 包括代理和客户端两个部分。客户端可以访问或修改设备的数据,代理是持有并传递数据。

MQTT 使用发布/订阅消息模式。客户端可以在一个话题(Topic)下面发布特定参数数据给代理。另一个对此话题感兴趣的客户可以订阅该话题,并定期收到更新的消息。

MQTT有三个角色,包括服务器代理、订阅者和发布者。

1)启动服务器代理。

2)订阅者向服务器代理订阅相关主题。

3)发布者向服务器代理发布主题信息。

4)服务器代理想所有订阅该主题的订阅者推送消息。

​ CoAP约束应用协议(Constrained Application Protocol)是一种专用于受限设备的Internet应用协议,如RFC 7252所定义,它使那些被称为"节点"的受约束设备能够使用类似的协议与更广泛的Internet进行通信。CoAP被设计用于同一受限网络(例如,低功耗、有损网络)上的设备之间、设备和因特网上的一般节点之间以及由因特网连接的不同受限网络上的设备之间使用。CoAP也被用于其他机制,如移动通信网络上的SMS。


​ 总结:CoAP是受约束设备的专用Internet应用程序协议。

基于消息模型,定义了4个消息类型,以消息为数据通信载体,通过交换网络消息来实现设备间数据通信

基于请求/响应模型 ,对CoAP Server云端设备资源操作都是通过请求与响应机制来完成,类似HTTP,设备端可通过4个请求方法(GET, PUT, POST, DELETE)对服务器端资源进行操作。 请求与响应的数据包都是放在CoAP消息里面进行传输的

基于消息的双向通信(M2M),CoAP Client与CoAP server双方都可以独立向对方发送请求.双方可当client或者server角色

轻量最小长度仅为4B

支持可靠传输 ,数据重传,块传输。 确保数据可靠到达。

支持IP多播 , 即可以同时向多个设备发送请求(比如CoAP client搜索CoAP Server)

低功耗 ,非长连接通信

支持受限设备

支持观察模式

支持异步通信


Ver (占两位):默认为01,其它为后续预留

T(报文类型,占两位):

Confirmable Message(CON):CON 报文需要被接受者确认,即每一个 CON报文都需要对应一个 ACK 报文或 RST 报文。即 00

Non-Confirmable Message(NON):不需要被确认的报文,常用于传感器一类只需单向传送数据的应用场景,纯单向传输,不需要应答,收不到也不管。即01

Acknowledgement Message(ACK):应答报文用于确认 CON 报文,用于确认 CON 报文。即 10

Reset Message(RST):复位报文,当服务器收到一个 CON 报文,如果报文中出现上下文缺失,导致无法处理时,服务器将返回一个 RST 报文。让客户端再发一次。即 11

TKL(占两位,标签长度指示(代表Token的长度)):0为特殊情况,代表空报文,可以没有Token

Code(占八位,响应码):分为高三位(0~7)+低五位(0 ~ 31)方式既 x.xx格式。


区别:

CoAP协议(Constrained Application Protocol)和MQTT协议(Message Queuing Telemetry Transport)是两种物联网通信协议,用于在物联网设备之间进行通信。它们有以下几个区别:

  1. 适用范围:CoAP协议是为了在低功耗、有限资源的物联网设备上实现简单、轻量级的通信而设计的。它适用于需要低功耗和有限处理能力的设备,如传感器、执行器等。MQTT协议则更适用于需要高可靠性和延迟敏感的应用场景,如远程监测和控制系统。

  2. 通信模式:CoAP协议基于请求-响应模式,类似于HTTP协议。设备可以发送请求来获取资源,服务器会返回响应。MQTT协议则是基于发布-订阅模式,设备可以发布消息到一个特定的主题,其他订阅该主题的设备会收到消息。

  3. 通信特点:CoAP协议采用UDP传输协议,非常适合在无线网络环境下进行通信。它使用可靠传输协议(如UDP)来确保数据的可靠性。MQTT协议可以使用TCP或者WebSocket作为传输协议,确保数据的可靠性和稳定性。

  4. 协议设计:CoAP协议比MQTT协议更轻量级,它的报文格式更简单,占用的网络带宽和处理能力更少。MQTT协议则提供了更多的功能和灵活性,支持更多的QoS级别,支持持久化消息,支持遗嘱消息等。

总的来说,CoAP协议适用于资源受限的物联网设备之间的简单通信,而MQTT协议更适用于更复杂和灵活的物联网应用。选择哪种协议取决于具体的应用需求和设备的特点。

参考资料和推荐阅读

参考资料
官方文档
开源社区
博客文章
书籍推荐

  1. https://blog.51cto.com/u_16213627/8081771
  2. https://blog.csdn.net/weixin_43504224/article/details/130483265

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~

相关推荐
胚芽鞘6813 小时前
关于java项目中maven的理解
java·数据库·maven
nbsaas-boot4 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
岁忧4 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
chao_7894 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
CJi0NG4 小时前
【自用】JavaSE--算法、正则表达式、异常
java
风无雨4 小时前
GO 启动 简单服务
开发语言·后端·golang
Hellyc4 小时前
用户查询优惠券之缓存击穿
java·redis·缓存
斯普信专业组5 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
今天又在摸鱼5 小时前
Maven
java·maven
老马啸西风5 小时前
maven 发布到中央仓库常用脚本-02
java·maven