QUIC的loss detection学习

PTO backoff

backoff 补偿

/ˈbækɒf/

PTO backoff 是QUIC(Quick UDP Internet Connections)协议中的一种机制,用于处理探测超时(Probe Timeout, PTO)重传策略
它逐步增加探测超时的等待时间,以避免网络拥塞并减少不必要的重传

什么是PTO Backoff

PTO backoff 是一种延时策略,用于在多个 PTO 事件发生后逐渐增加超时等待时间,以减少网络负载和拥塞风险
即,每次当数据包重传仍然未得到 ACK 确认时,QUIC 协议会延长下一次 PTO 计算的等待时间

PTO Backoff的工作原理

初始 PTO 计算:
初始 PTO 通常基于平滑后的 RTT(Round-Trip Time,往返时间)
在这里插入图片描述
第一次 PTO 触发:
当超过初始 PTO 时间仍未收到数据包的 ACK 确认,触发第一次重传

应用 PTO Backoff:
每次 PTO 后,若仍未收到 ACK 确认,下一次 PTO 值会增加。增加的方式通常是指数增长。

例如,PTO backoff 因子可能是 2,那么第二次 PTO 等待时间将是初始 PTO 的两倍,第三次为初始 PTO 的四倍,依此类推。
假设 backoff_factor = 2, 且初始 PTO 为 100ms

那么:
第一次PTO:100ms
第二次PTO:100ms × 2 = 200ms
第三次PTO:200ms × 2 = 400ms

减少网络拥塞:

通过逐步增加超时时间,PTO backoff 避免了在拥塞的网络中过于频繁的重传请求,从而减轻网络负载。

PTO Backoff的优点

防止网络拥塞:
逐步增加超时等待时间,减少过频的重传,防止因重传过多而加剧网络拥塞

提高重传效率:
通过合理的延迟策略,重传可以在网络状况有所恢复时进行,提高重传成功率

动态适应网络:
根据实际的网络反馈,动态调整PTO等待时间,有助于在不同网络状况下保持良好的传输性能

示例

假设初始 PTO 为 100ms,backoff 因子为 2

以下是一次重传过程的模拟:
发送了包X,并启动初始PTO 100ms
经过 100ms 仍未收到包 X 的 ACK,触发第一重传
设置下一次 PTO 为 200ms
经过 200ms 仍未收到 ACK,触发第二次重传
设置下一次 PTO 为 400ms
经过 400ms 仍未收到 ACK,触发第三次重传
设置下一次 PTO 为 800ms
依此类推,直到网络恢复或所有重传尝试结束

总结

通过动态增加探测超时的等待时间,减少了在网络状况不佳时过于频繁的重传请求,防止网络进一步拥塞
通过合理的延迟策略,PTO backoff 提升了重传效率,并动态适应了不同的网络环境,从而确保数据传输的稳定性和可靠性

PTO 是跨多个编号空间的吗?

探测超时(Probe Timeout, PTO)机制的设计和应用确实是跨越多个编号空间的。

编号空间

QUIC引入编号空间(Packet Number Spaces)的概念,以支持不同类型的包和它们各自的状态管理。

初始编号空间(Initial Packet Number Space):用于初始连接握手的包
0-RTT编号空间(0-RTT Packet Number Space):用于在连接握手完成前发送的数据包
握手编号空间(Handshake Packet Number Space):用于连接握手完成前的后续包
1-RTT编号空间(1-RTT Packet Number Space):用于连接握手完成后的正常数据传输

PTO跨编号空间的工作原理

在计算PTO时,QUIC需要跨多个编号空间来确定最佳的探测超时值。

具体步骤如下:
初始化和计算独立PTO:
对每个编号空间独立计算初始PTO。每个编号空间有自己的RTT估计和相关的变量。

选择最小PTO:
最终的PTO值是所有编号空间中最小的那个。这样可以确保最早探测到潜在丢包并进行重传。
例如,如果在初始编号空间的PTO是300ms,握手编号空间的PTO是200ms,那么,最终使用的PTO值是200ms。

跨编号空间的探测包:
当PTO触发时,可能需要在不同的编号空间内发送探测包。探测包可以是用于确认连接状态的控制信息,也可以是需要重传的数据包。

动态调整PTO:
根据接收到的ACK确认情况和网络状况,动态调整各个编号空间的PTO值。这有助于在不断变化的网络条件下维持传输稳定性和有效性。

示例

假设存在三个编号空间:
初始编号空间(Initial)、握手编号空间(Handshake)、1-RTT编号空间(1-RTT)

每个编号空间的初始PTO计算如下:
在这里插入图片描述
最终,跨编号空间的PTO值为
在这里插入图片描述

触发探测超时的操作:
在 200ms 后,如果握手编号空间尚未收到 ACK 确认,就会在此编号空间内发送探测包(如握手信息的重传)
如果在接下来的探测包发送后,仍未确认其它编号空间的数据包,可以逐步触发这些编号空间的重传

优点

确保可靠性:通过跨越多个编号空间的PTO机制,可以更早地探测到连接中的任何问题(如数据包丢失),并及时进行重传。
降低延迟:PTO计算采用最小值策略,使得在最短时间内就能发现问题,并采取修复措施。
动态调整:根据实际网络状况,动态调整各个编号空间的PTO值,有助于优化网络性能。

总结

探测超时(PTO)在QUIC协议中确实是跨多个编号空间进行管理和计算的。
通过在多个编号空间内计算独立的PTO值并选择最小的一个进行实际操作,QUIC能够更加灵敏和高效地处理潜在的丢包和延迟问题。
这有助于提高数据传输的可靠性和效率,尤其是在不同类型数据包和不同网络条件下。

PTO是跨编号空间的,为啥每个编号空间还要单独计算PTO

不同的编号空间在处理和传输不同类型的数据包时,往返时延(RTT)和丢包情况可能各有不同。

QUIC协议中的每个编号空间(如Initial、Handshake、1-RTT等)都有其独特的用途和重要性:
Initial编号空间:用于初始连接握手
Handshake编号空间:用于交换握手数据,完成密钥协商
1-RTT编号空间:用于传输正式数据(连接握手完成后的常规数据传输)
每个编号空间中的数据包类型、大小、传输频率和期望的RTT可能都有所不同,因此需要独立管理和监测其状况。

不同编号空间的数据包在网络传输中的RTT可能不同,比如:
握手包(Handshake Packets)通常需要经过更多的处理步骤,因此其RTT可能会略高
初始包(Initial Packets)可能较少受网络拥塞的影响,因为它们通常是在连接初始化时发送的
由于这种差异,独立计算各编号空间的PTO值能使QUIC更精细地反映实时网络状况,并基于精确的信息做出决策。

丢包检测和处理的精确性
单独计算每个编号空间的PTO可以使丢包检测和处理更加精确:
如果一个特定编号空间的PTO较短,说明这个编号空间中的数据更容易丢包,需要更迅速的重传。
独立计算的PTO值帮助快速发现网络瓶颈或传输异常,对应采取措施以减少整体传输延迟。

灵活的重传策略
独立计算PTO还支持更灵活的重传策略:
在某一个编号空间中探测到丢包,可以对该编号空间进行更快的重传,而不影响其他编号空间的数据传输。
这个独立性允许QUIC在网络状况异常时,能够专注于最急需修复的问题,不浪费资源在相对稳定的编号空间。

应用

假设存在三个编号空间(Initial、Handshake、1-RTT),每个编号空间的都有各自的PTO
然后,跨编号空间的PTO选择最小值

当触发PTO时
如果Initial编号空间中的包超时未被确认,需要重传Initial编号空间的包,同时调增PTO值
其他编号空间如没有超时,不需要立即重传,保持当前PTO,直到实际触发

总结

尽管QUIC协议对PTO进行跨编号空间管理,但为了确保每个编号空间的独立性和灵敏度,每个编号空间内仍需单独计算PTO值。
这种策略提供了更精细和精准的丢包检测和重传管理,使得QUIC在不同传输阶段能有效适应网络变化,提高传输的可靠性和效率。

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

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

相关文章

[网络]http请求中的URL,方法,header 和 http响应中的状态码

文章目录 一. http请求1. 认识URLurlencode 2. 认识方法应用场景构造http请求 2. 认识请求报头header 二. http响应1. 状态码 一. http请求 1. 认识URL 我们所说的"网址", 其实就是URL(Uniform Resource Locator 统⼀资源定位符) 1.协议方案名 常见的有http和http…

警惕!甲状腺病的早期“信号弹”,你捕捉到了吗?

在快节奏的现代生活中,健康问题往往被忽视,尤其是那些初期症状不明显、容易被误解或忽视的疾病。甲状腺,这个位于颈部下方、形状如蝴蝶的小腺体,虽然不起眼,却是人体内分泌系统中的重要一员,负责调节新陈代…

AIGC:python 文生图代码(python + stable-diffusion+ cuda)

解决什么问题 搭建一个文生图环境 + python文生图代码,通过输入prompt,生成图片 解决方法 文生图的代码比较简易,主要是搭建环境+下载文生图大模型 步骤一: 创建虚拟环境(用python 3.10版本,起得名字最好可以一看就知道Python的版本) conda create -n text2img3.10 py…

【RAG】RAG再进化?基于长期记忆的检索增强生成新范式-MemoRAG

前言 RAG现在工作很多,进化的也很快,再来看看一个新的RAG工作-MemoRAG。 文章提出,RAG在减少大模型对于垂类知识的问答幻觉上取得了不错的效果,也成为私域知识问答的一种范式。然而,传统RAG系统主要适用于明确信息需…

HTML5超酷炫的水果蔬菜在线商城网站源码系列模板1

文章目录 1.设计来源1.1 主界面1.2 商品列表界面1.3 商品详情界面1.4 其他界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/142059238 HTML5超酷炫的水果蔬菜在线商城网…

软件工程毕业设计开题汇总

文章目录 🚩 1 前言1.1 选题注意事项1.1.1 难度怎么把控?1.1.2 题目名称怎么取? 1.2 开题选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢? 🚩2 选题概览🚩 3 项目概览题目1 : 大数据电商…

Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解

目录 一、Linux软件包管理器 - yum(ubuntu用apt代替yum)1、Linux下安装软件的方式2、认识 yum3、查找软件包4、安装软件5、如何实现本地机器和云服务器之间的文件互传 二、Linux编辑器 - vim1、vim 的基本概念2、vim 下各模式的切换3、vim 命令模式各命令…

WebGL系列教程八(GLSL着色器基础语法)

目录 1 前言2 基本原则3 基本数据类型4 顶点着色器和片元着色器4.1 声明4.2 初始化项目4.3 赋值 5 结构体5.1 声明5.2 赋值 6 函数6.1 基本结构6.2 自定义函数6.3 常用内置函数 7 精度8 其他9 总结 1 前言 通过前七讲,我们已经见过了WebGL中的部分基础语法&#xff…

Java语言程序设计——篇十一(3)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

Google大数据架构技术栈

数据存储层 Colossus Colossus作为Google下一代GFS(Google File System)。 GFS本身存在一些不足 单主瓶颈 GFS 依赖单个主节点进行元数据管理,随着数据量和访问请求的增长,出现了可扩展性瓶颈。想象一下,只有一位…

人工智能——猴子摘香蕉问题

一、实验目的 求解猴子摘香蕉问题,根据猴子不同的位置,求解猴子的移动范围,求解对应的过程,针对不同的目标状态进行求解。 二、实验内容 根据场景有猴子、箱子、香蕉,香蕉挂天花板上。定义多种谓词描述位置、状态等…

Git使用详解:从安装到精通

前言 什么是Git Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。 可以理解: git是一个管理源代码的工具,主要用于企业团队开…

Python编码系列—Python原型模式:深克隆与高效复制的艺术

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

通信工程学习:什么是FDMA频分多址

FDMA:频分多址 FDMA(Frequency Division Multiple Access,频分多址)是一种在无线通信领域广泛应用的多址技术。该技术通过将可用的频谱资源按频率划分,把传输频带划分为若干较窄且互不重叠的子频带(或称信道…

【C语言】malloc()函数详解(动态内存开辟函数)

🦄个人主页:修修修也 🎏所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.malloc()函数简介 1.函数功能 2.函数参数 📌size_t size 3.函数返回值 4.函数头文件 5.函数生成空间(与calloc区别) 二.malloc()函数的具体使用 1.使…

STL值list

list容器 头文件&#xff1a;#include<list> - list是一个双向链表容器&#xff0c;可高效地进行插入删除元素 - list不可以随机存取元素&#xff0c;所以不支持at.(pos)函数与[]操作符 注&#xff1a;list使用迭代器访问数据时可以一步一步走自增自减&#xff08;即…

分享一个基于微信小程序的居家养老服务小程序 养老服务预约安卓app uniapp(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

【苍穹外卖】总结

1 pom 依赖 1.1 MyBatis Spring 用于简化 MyBatis 与 Spring Boot 的集成&#xff0c;提供了对 MyBatis 框架的自动配置支持&#xff0c;简化了数据访问层的开发 1.2 Lombok Lombok 是一个 Java 库&#xff0c;能够通过注解自动生成常见的代码&#xff08;如 getter、setter、…

看Threejs好玩示例,学习创新与技术(三)

本文接上篇内容&#xff0c;继续挖掘应用ThreeJS的一些创新算法。 1、获得鼠标移动对应的地理位置 这个算法如果放在几年前&#xff0c;那肯定会难倒一帮人的。因为是三维投影涉及矩阵变换及求逆&#xff0c;而且还是投影模式下的。在Project Texture这个示例中&#xff0c;作…

Apache-wed服务器环境的安装

一。安装httpd并且开启httpd yum install httpd systemctl start httpd 二。关闭防火墙 systemctl stop firewall 三。常规配置wed服务 mkdir /www vim index.html&#xff08;里面写入自己的内容&#xff09; chmod 755 index.htm chmod 755 /www vim /etc/httpd/co…