物联网通信协议——TCP与MQTT的对比

news2025/7/14 2:44:48

在物联网通信中,MQTT和TCP的实现方式和原理完全不同,因为两者属于协议栈的不同层级,解决的问题也不同。以下从协议层级工作机制典型场景三个角度详细解释:


1. 协议层级与定位

特性TCPMQTT
协议层级传输层(第4层)应用层(第7层)
核心职责确保数据可靠、有序、无差错传输定义消息格式和通信模式
依赖关系独立运行,无需上层协议支持必须基于TCP(或类似可靠传输层)
数据内容传输原始字节流,不解析内容定义消息结构(主题、负载、QoS)

关键区别
TCP是底层传输的“管道”,只关心如何把数据从A送到B;而MQTT是上层“业务规则”,定义数据如何组织、谁来接收。


2. 工作机制对比

TCP的工作原理
  1. 连接建立:通过三次握手(SYN, SYN-ACK, ACK)建立可靠的双向连接。
  2. 数据传输
    • 分段与序列号:将数据拆分为多个报文段,每个段有唯一序列号。
    • 确认与重传:接收方需确认(ACK)收到的数据,未确认的段会被重传。
    • 流量控制:通过滑动窗口机制避免发送方压垮接收方。
    • 拥塞控制:动态调整发送速率,防止网络拥堵。
  3. 连接终止:通过四次挥手(FIN-ACK)优雅关闭连接。

特点
TCP是面向连接、可靠、流式传输的协议,但不关心数据内容(例如传输的是文本、图片还是传感器数据)。

MQTT的工作原理
  1. 通信模型:基于发布/订阅模式,包含三个角色:

    • 发布者(Publisher):发送消息到特定主题(Topic)。
    • 代理(Broker):负责接收消息并转发给订阅者。
    • 订阅者(Subscriber):订阅感兴趣的主题,接收相关消息。
  2. 消息流程

    • 客户端与代理通过TCP建立长连接。
    • 订阅者向代理注册订阅的主题(如 sensors/temperature)。
    • 发布者发送消息到主题,代理根据订阅关系将消息推送给订阅者。
  3. 核心特性

    • 主题分层:支持通配符(如 sensors/# 匹配所有子主题)。
    • 服务质量(QoS):提供三种消息可靠性级别:
      • QoS 0:最多一次(可能丢失)。
      • QoS 1:至少一次(可能重复)。
      • QoS 2:恰好一次(可靠但开销大)。
    • 遗嘱消息(Last Will):设备异常断开时,代理自动发布预设消息。

特点
MQTT是轻量级、异步、解耦的通信模式,设备无需知道彼此的存在,只需与代理交互。


3. 为什么MQTT依赖TCP?

MQTT选择基于TCP实现,是因为其需要依赖TCP的以下能力:

  1. 可靠性:TCP的重传和确认机制确保MQTT消息不丢失(尤其在QoS 1/2时)。
  2. 有序性:TCP保证数据按顺序到达,避免MQTT消息乱序。
  3. 长连接支持:MQTT的发布/订阅模型需要持久连接,TCP的长连接特性天然适合。

反例:CoAP协议基于UDP,但需自行实现可靠性(如通过重传和确认),适用于更轻量级的场景。


4. 直接使用TCP与使用MQTT的对比

场景直接使用TCP使用MQTT
开发复杂度需自行处理消息边界、重连逻辑协议已封装复杂性,提供标准API
设备资源消耗高(需实现完整TCP逻辑)低(客户端库轻量,如Eclipse Paho)
扩展性差(新增设备需修改协议)好(通过主题动态扩展订阅关系)
典型用例视频流传输、自定义二进制协议传感器数据上报、远程控制

5. 其他类似协议的设计思路

  • HTTP/2:基于TCP,但采用请求/响应模型,头部开销大,不适合高频小数据。
  • CoAP:基于UDP,模仿HTTP的RESTful风格,但支持多播和低功耗。
  • AMQP:类似MQTT,但更复杂,支持事务和高级路由(如银行交易)。

总结

  • TCP是“搬运工”:只负责可靠搬运数据块,不关心内容。
  • MQTT是“邮局”:在TCP搬运的基础上,定义如何分拣(主题)、投递规则(QoS)和异常处理(遗嘱消息)。
  • 两者协作:MQTT利用TCP的可靠性,专注于解决物联网场景中的高效消息分发问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2337844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker部署springboot(eureka server)项目

打jar包 使用maven&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17&…

第 7 期:DDPM 采样提速方案:从 DDPM 到 DDIM

本期关键词:采样加速、DDIM 推导、可控性提升、伪逆过程、代码实战 前情回顾:DDPM 的采样瓶颈 在前几期中,我们构建了一个完整的 DDPM 生成流程。但是你可能已经发现: 生成一张图像太慢了!!! 原因是: DDPM 要在 T 个时间步中一步步地去噪,从 x_T → x_0。而通常 T 至…

1panel第三方应用商店(本地商店)配置和使用

文章目录 引言资源网站实战操作说明 引言 1Panel 提供了一个应用提交开发环境&#xff0c;开发者可以通过提交应用的方式将自己的应用推送到 1Panel 的应用商店中&#xff0c;供其他用户使用。由此衍生了一种本地应用商店的概念&#xff0c;用户可以自行编写应用配置并上传到自…

七牛使用任务工作流对音频进行转码

最近工作中有对音频转码的需求&#xff0c;比如 iOS 设备中对 ogg 格式的语音支持力度不够&#xff0c;那么可以讲ogg转码成mp3格式,下面来介绍一下&#xff0c;如果通过七牛&#xff0c;后端自行转码&#xff0c;不需要前端做任何事情。 假设我们存在一个音频的 url&#xff…

基于springBoot+vue的PC 端学习系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;线上管理系统展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;在疫…

【Python爬虫基础篇】--1.基础概念

目录 1.爬虫--定义 2.爬虫--组成 3.爬虫--URL 1.爬虫--定义 网络爬虫&#xff0c;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。随着网络的迅速发展&#xff0c;万维网成为大量信息的载体…

CSS进度条带斑马纹动画(有效果图)

效果图 .wxml <view class"tb"><view class"tb-line" style"transform:translateX({{w%}})" /> </view> <button bind:tap"updateLine">增加进度</button>.js Page({data: {w:0,},updateLine(){this.…

HarmonyOS:使用Refresh组件实现页面下拉刷新上拉加载更多

一、前言 可以进行页面下拉操作并显示刷新动效的容器组件。 说明 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。该组件从API Version 12开始支持与垂直滚动的Swiper和Web的联动。当Swiper设置loop属性为true时&…

【C++深入系列】:模版详解(上)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 你不需要很厉害才能开始&#xff0c;但你需要开始才能很厉害。 ★★★ 本文前置知识&#xff1a; 类和对象&#xff08;上&#xff09; …

leetcode刷题日记——同构字符串

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 题目要求判断 s 和 t 是否为同构字符串&#xff0c;即 s 中每个字符与 t 中对应位置的字符形成一个映射关系&#xff0c;且只能是一对一映射ASCII&#xff08;American Standard Code for Information Interchange&#xff09…

HTTP/1.1 队头堵塞问题

文章目录 一、队头堵塞1、非管线化2、管线化 二、如何解决&#xff1f; 一、队头堵塞 1、非管线化 如图&#xff0c;http 请求必须等到上一个请求响应后才能发送&#xff0c;后面的以此类推&#xff0c;由此可以看出&#xff0c;在一个 tcp 通道中&#xff0c;如果某个 http 请…

【Quest开发】在虚拟世界设置具有遮挡关系的透视窗口

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 仅针对urp管线 参考了YY老师这篇&#xff0c;可以先看他的再看这个可能更好理解一些&#xff1a;Unity Meta Quest MR 开发&#xff08;七&#xff09;&#xff1a;使…

常用 Git 命令详解

Git 是一个强大的版本控制工具&#xff0c;广泛用于软件开发和团队协作中。掌握 Git 命令可以帮助开发者更高效地管理代码版本和项目进度。本文将介绍一些常用的 Git 命令&#xff0c;并提供示例以帮助你更好地理解和应用这些命令。 目录 常用命令 git clonegit stashgit pul…

java导出word含表格并且带图片

背景 我们需要通过 Java 动态导出 Word 文档&#xff0c;基于预定义的 模板文件&#xff08;如 .docx 格式&#xff09;。模板中包含 表格&#xff0c;程序需要完成以下操作&#xff1a; 替换模板中的文本&#xff08;如占位符 ${设备类型} 等&#xff09;。 替换模板中的图…

基于CNN卷积神经网络和GEI步态能量提取的视频人物步态识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 GEI步态能量提取 4.2 CNN卷积神经网络原理 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b/matlab2022a 3.部分核心程序 &…

算法思想之链表

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之链表 发布时间&#xff1a;2025.4.18 隶属专栏&#xff1a;算法 目录 算法介绍常用技巧 例题两数相加题目链接题目描述算法思路代码实现 两两交换链表中的节点题目链接题目描述算法思路代码实现 重排链表…

Oceanbase单机版上手示例

本月初Oceanbase单机版发布&#xff0c;作为一个以分布式起家的数据库&#xff0c;原来一个集群动辄小十台机器&#xff0c;多着十几台几十台甚至更多&#xff0c;Oceanbase单机版的发布确实大大降低了硬件部署的门槛。 1.下载安装介质 https://www.oceanbase.com/softwarece…

架构师面试(三十二):注册中心数据结构

问题 提到【注册中心】&#xff0c;我们对它的基本功能&#xff0c;肯定可以顺手拈来&#xff0c;比如&#xff1a;【服务注册】【服务发现】【健康检查】【变更通知】等。 透过这些基本功能&#xff0c;一个普适的注册中心的数据结构应该如何设计呢&#xff1f; 可以结合着…

《软件设计师》复习笔记(11.5)——测试原则、阶段、测试用例设计、调试

目录 1. 测试基础概念 2. 测试方法分类 3. 测试阶段 真题示例&#xff1a; 题目1 题目2 题目3 4. 测试策略 5. 测试用例设计 真题示例&#xff1a; 6. 调试与度量 真题示例&#xff1a; 1. 测试基础概念 定义&#xff1a;系统测试是为发现错误而执行程序的过程&…

闲来无事,用HTML+CSS+JS打造一个84键机械键盘模拟器

今天闲来无聊&#xff0c;突发奇想要用前端技术模拟一个机械键盘。说干就干&#xff0c;花了点时间搞出来了这么一个有模有样的84键机械键盘模拟器。来看看效果吧&#xff01; 升级版的模拟器 屏幕录制 2025-04-18 155308 是不是挺像那么回事的&#xff1f;哈哈&#xff01; 它…