首页 > 其他分享 >什么是 QoS

什么是 QoS

时间:2023-08-23 22:47:40浏览次数:39  
标签:QoS ACK 什么 TCP 发送 接收 报文

如果设备运行在网络延迟高或者出现网络断线的环境下,只依靠 TCP 协议是不能完全保证消息可以发送到服务端的。

客户端发送数据到服务端的时候,如果网络延迟高 TCP 是可以保证数据发送到服务端的,但是在发送数据的过程中 TCP 因为网络原因断开了,当客户端重新连接后,TCP 不会重新发送这条数据。

因此,MQTT 协议提供了 3 种消息服务质量等级(Quality of Service),保证了在不同的网络环境下消息传递的可靠性:

QoS 0

发送方发送一条消息后,不会关心接收方有没有回复 ACK,就是说发送方不会关心消息有没有发送到接收方。

2023-08-23-163849.png

因为发送方不关心 ACK 就没有重传机制,所以当 TCP 断开连接后,消息就会丢失。

QoS 1

发送方添加了重传机制,没有收到接收方返回的 ACK 报文,就会一直重新发送。

截屏2023-08-23 21.16.44.png

有可能出现,接收方返回了 ACK 报文,但是发送方没有收到,这就导致发送方会重新发送,而接收方就会收到两个相同的报文。

QoS 2

QoS 2 解决了 QoS 0、1 消息可能丢失或者重复的问题,保证消息只发送一次。

截屏2023-08-23 22.02.04.png

QoS 2 流程:

  1. 发送方发送数据到接收方,接收方会返回 REC 报文(代替 ACK),发送方没有收到 REC 报文会继续重发。

  2. 收到 REC 后,发送方再发送 REL 报文,通知接收方把刚才发送的那个数据标记为可用,然后接收方返回 COMP 报文,发送方没有收到会继续重发 REL。

  3. 收到 COMP 报文后,流程正式完成了。

不同 QoS 的性能有差距么?

以 EMQX 为例,在相同的硬件配置下进行点对点通信,通常 QoS 0 与 QoS 1 能够达到的吞吐比较接近,不过 QoS 1 的 CPU 占用会略高于 QoS 0,负载较高时,QoS 1 的消息延迟也会进一步增加。而 QoS 2 能够达到的吞吐一般仅为 QoS 0、1 的一半左右。

参考资料

https://www.emqx.com/zh/blog/what-is-the-mqtt-protocol

https://www.emqx.com/zh/blog/introduction-to-mqtt-qos

https://www.emqx.com/zh/mqtt-guide

标签:QoS,ACK,什么,TCP,发送,接收,报文
From: https://www.cnblogs.com/cdsy/p/17651984.html

相关文章

  • 学习笔记:什么是Wasserstein distance
    简单地说,就是衡量两个概率分布之间的差异。也可以说是将一个概率分布转换成另一个概率分布要花费多少代价。图1:在一维空间中的三个概率分布比如,上图中有三个概率分布f,g,h,我们可以说f与g之间的距离比f与h之间的距离更小。上述只是感性上的认知,那么如何计算出准确......
  • TCP --- 为什么是可靠的通信方式
    TCP包有CRC校验字段 序列号和应答 超时重传 拥塞控制根据网络情况和接收端接收数据能力调整发送量。滑动窗口控制解决了两台主机之间因传送速率而可能引起的丢包问题,在一方面保证了TCP数据传送的可靠性。然而如果网络非常拥堵,此时再发送数据就会加重网络负担,那么发送的......
  • 什么是端口映射?端口映射怎么弄?
    一、什么是端口映射?端口映射其实很容易理解,端口映射是在客户的路由器中进行的操作,如果您路由器设备下面的某台电脑的应用需要被外网访问,那其实路由器就像一堵墙,它给拦截了,如果你想外网访问,那就需要在这堵“墙”中开放端口,通过这个开放的端口外网就能访问该路由器下的应用了。如下......
  • 关于灾备系统中的完全备份,增量备份,差异备份是什么?
    完全备份:完全备份就是用存储介质对整个系统进行备份,包括系统和数据。这种备份方式的好处就是很直观,容易被人理解。而且当发生数据丢失时,只要用备份数据,就可以恢复丢失的数据。然而它也有不足之处:首先由于每次都对系统进行完全备份,因此在备份数据中有大量重复数据,例如操作系统与应......
  • 为什么vite比webpack速度快
    一.webpack为什么慢主要是由于其内部的核心机制——bundle模式引发的webpack通过bundle机制,将项目中各种类型的源文件转化供浏览器识别的js、css、img等文件,建立源文件之间的依赖关系,将数量庞大的源文件合并为少量的几个输出文件。bundle工作机制的核心部分分为两块:构建......
  • 记录--为什么要使用 package-lock.json?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言随着JavaScript在现代软件开发中的日益重要地位,Node.js生态系统中的npm成为了不可或缺的工具。在npm管理依赖的过程中,package-lock.json文件的作用日益凸显。本文将深入探讨为什么要使用package-lock.json,以及......
  • 什么是集合
    集合框架:用于存储数据的容器。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编......
  • 什么是网站空间
    什么是网站空间顾名思义,就是能够存放一些关于网站的文件和资料,比如文档、文字、网站页面和图片等信息,网站空间实际上就像我们的房间一样,空间大,能放的东西就多,空间小,能放的东西就少。一般情况下500M至1000M的内存空间就可以满足企业网站的需要了,但是如都是用来存放视频的话需要另外......
  • 新风机是什么?
     新风机是空气净化设备中的一种,能够将新鲜外界空气引入室内,同时将室内的污浊空气排出去,从而实现室内空气的循环和净化。新风机主要是由风机、过滤器、热交换器和控制面板等部分组成。  风机:新风机中风机是一个非常重要的部件,它可以把新鲜的自然空气从室外引入房间中。大部分......
  • 什么是多线程,多线程的优劣?
    多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务。多线程的好处:可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。也就是说允许单个程序创建多个......