首页 > 其他分享 >QUIC协议对于传输可靠性的保障机制

QUIC协议对于传输可靠性的保障机制

时间:2023-10-12 16:33:50浏览次数:35  
标签:保障机制 重传 数据包 传输 可靠性 QUIC PKN 客户端

今天在看 frp的文档 时看到文档中提到QUIC协议,其底层采用UDP传输,具有传输效率高,连接延迟低的优点。

出于对它的好奇,所以找了一些对这个协议的详解博客文章来了解它的通信机制。

具体可见:QUIC 协议详解 - 知乎 (zhihu.com)


其他暂且不提,由于本人半吊子水平,看到以上提到的那篇博客中所说的QUIC协议对于传输可靠性的保障措施有些不太明白,在这里借用该博客资料及部分原文说明:

可靠传输有 2 个重要特点:

(1)完整性:发送端发出的数据包,接收端都能收到

(2)有序性:接收端能按序组装数据包,解码得到有效的数据

  1. 关于完整性,QUIC协议通过确认应答机制保证其可靠传输


当时我就有个疑问,如果服务器的 SACK 因为丢包导致客户端没有接收到确认包应该怎么处理?
答案是客户端对未接收到确认包的PKN在超时后一律重传(事实证明这个是大部分协议都会有的处理机制,还是看得少了)

另外此图存在一些歧义,我一开始以为 PKN=1,2,3SACK=1,3 是一个单独的包,但实际上也有可能是客户端连续发送了
3个PKN递增的包,而服务器响应了1和3,所以客户端重传2,并将PKN按顺序递增到4。

按上图这个情况,如果SACK丢失了,则客户端会将1,2,3全部重新传输。


2) 关于有序性,原文中提到通过offset确定数据包的顺序,而PKN设计为严格单调递增,递增是为了解决数据包的重传歧义问题

由于原始包和重传包的序列号是一样的,客户端不知道服务器返回的 ACK 包到底是原始包的,还是重传包的。但 QUIC 的原始包和重传包的序列号是不同的,也就可以判断 ACK 包的归属。

这里博主说的一开始我没有搞明白为什么还要判断原始包和重传包,
直到看到这篇文章:基于UDP的可靠传输QUIC - 知乎 (zhihu.com)

显然,客户端发送重传包的情况有 服务器未接收到服务器收到了但是客户端没有收到确认包 这两种情况,头一种情况不存在重传歧义问题,但是第二种情况如果是由于中间的网络原因导致客户端接收确认包超时了,导致发送了重传包,

那么此时服务器接收到重传包后再次发送的确认包将有可能和第一次发送的确认包混杂在一起。这种情况下如果PKN不是严格递增的话就会导致客户端无法确定数据包和确认包的对应关系。

标签:保障机制,重传,数据包,传输,可靠性,QUIC,PKN,客户端
From: https://www.cnblogs.com/foundway/p/17759812.html

相关文章

  • 天合光能组件质量怎么样?至尊组件双面增益达8.82%,高可靠性再获验证
     近日,第三方权威检测认证机构鉴衡进行的极端气候户外实证报告出炉:天合光能至尊600W+系列组件在张北常年多风天气下,运行表现优异,EL图像无缺陷,与至尊600W+单面组件相比,双面组件发电增益高达8.82%。再度证实至尊组件应用于常年大风地区光伏电站的卓越可靠性,用品质护航客户价值。......
  • 基于亚马逊云科技高可靠性的EC2云服务器,搭建功能无限制的私人网盘
    网盘是一种在线存储服务,提供文件存储,访问,备份,贡献等功能,是我们日常中不可或缺的一种服务。很多互联网公司都为个人和企业提供免费的网盘服务。但这些免费服务都有一些限制,比如限制下载速度,限制文件大小,不能多人同时管理,不能实现一些定制化功能。如果想取消这些限制,就要付费。现在为......
  • Kafka不能满足我们的要求,其尤其表现在低延迟和高可靠性方面
    为什么选择RocketMQ|RocketMQhttps://rocketmq.apache.org/zh/docs/为什么RocketMQ​在阿里孕育RocketMQ的雏形时期,我们将其用于异步通信、搜索、社交网络活动流、数据管道,贸易流程中。随着我们的贸易业务吞吐量的上升,源自我们的消息传递集群的压力也变得紧迫。根据我们......
  • RabbitMQ 消息发送和消费的可靠性保障
    在一些比较重要的场景中,我们必须要保障RabbitMQ消息的可靠性,也就是发送给rabbitmq的消息必须最终成功,消费者接收消息进行处理也必须最终成功。即使是中间失败了,也必须要有其它保障措施,哪怕最后进行人工进行干预处理。消息出现丢失的场景主要有:发送消息时丢失:比如消息发送到......
  • Go每日一库之55:quicktemplate
    简介最近在整理我们项目代码的时候,发现有很多活动的代码在结构和提供的功能上都非常相似。为了方便今后的开发,我花了一点时间编写了一个生成代码框架的工具,最大程度地降低重复劳动。代码本身并不复杂,且与项目代码关联性较大,这里就不展开介绍了。在这个过程中,我发现Go标准的模板......
  • Go每日一库之54:quicktemplate(增强模板库)
    简介最近在整理我们项目代码的时候,发现有很多活动的代码在结构和提供的功能上都非常相似。为了方便今后的开发,我花了一点时间编写了一个生成代码框架的工具,最大程度地降低重复劳动。代码本身并不复杂,且与项目代码关联性较大,这里就不展开介绍了。在这个过程中,我发现Go标准的模板......
  • 高可靠性振弦采集仪可减少对仪器维护保养
    高可靠性振弦采集仪可减少对仪器维护保养振弦采集仪是一种用于测量机械设备振动和振动频率的仪器。在现代工业中,振动是许多机械故障的先兆,因此振动监测是维护和预测设备发生故障的重要手段。高可靠性振弦采集仪可以大大减少机械设备的维护保养成本,提高生产效率,本文将介绍其主要优......
  • 高可靠性振弦采集仪可减少对仪器维护保养
    高可靠性振弦采集仪可减少对仪器维护保养振弦采集仪是一种用于测量机械设备振动和振动频率的仪器。在现代工业中,振动是许多机械故障的先兆,因此振动监测是维护和预测设备发生故障的重要手段。高可靠性振弦采集仪可以大大减少机械设备的维护保养成本,提高生产效率,本文将介绍其主要优......
  • Biwen.QuickApi代码生成器功能上线
    [QuickApi("hello/world")]publicclassMyApi:BaseQuickApi<Req,Rsp>{}使用方式:dotnetaddpackageBiwen.QuickApidotnetaddpackageBiwen.QuickApi.SourceGenerator最后简简单单注册路由:app.MapGenQuickApis("api");Biwen.QuickApi使用REPR......
  • C#开源且免费的Windows桌面快速预览神器 - QuickLook
    前言今天给大家推荐一款由C#开源且免费的Windows桌面快速预览神器:QuickLook。工具介绍QuickLook是一款在Windows操作系统上的实用工具,它提供了一种快速预览文件内容的方式。通过使用QuickLook,用户可以在不打开文件的情况下,直接在文件资源管理器中快速查看文件的内容。使用Quic......