QUIC的丢包处理

news2024/12/23 6:47:46

QUIC的重试数据包(Retry Packet)为什么会触发重启另一个连接

安全性考量

防止重放攻击
重试数据包(Retry Packet)是在初始握手过程中由服务端发送给客户端,用于验证客户端的IP地址,以防止重放攻击。
在一些攻击场景中,恶意攻击者可能会重放旧的连接请求。通过触发新的连接,QUIC能有效确保连接的唯一性和合法性。

实现连接的可靠性

确保握手成功
初始连接尝试如果存在网络路径问题或其他传输障碍,可能导致数据包丢失或延迟。
通过重试机制,确保客户端和服务端能够成功进行握手阶段,避免因传输路径问题导致连接失败。
若握手过程中检测到重试包,客户端会根据新的连接状态重新发起连接,确保握手的过程得以完整和成功。

避免握手阻塞

提升握手的效率
在连接初始阶段,若服务端认为握手数据未成功或丢失,会通过发出重试包提醒客户端重新连接。
通过这种机制,避免了由于初始握手问题导致的长期连接阻塞,确保数据传输快速进入稳定状态。

提升传输性能

动态适应网络环境
初始连接失败或需要验证时,通过重试包重新建立的新连接有助于适应动态网络环境。
重新启动连接能够让客户端和服务端根据当前网络状况重新调整传输参数,确保数据传输的最佳性能。

确认客户端可达性

确保客户端的IP有效性
在某些网络环境下,IP地址的变化可能导致连接请求无效。
通常,服务端在初始时通过重试包验证客户端的IP地址,确保新的连接请求是合理的并且客户端可以被准确访问。

示例

当QUIC检测到重试数据包时发生的情景:
初始连接请求:客户端发送初始连接请求到服务端
重试包的发送:如果服务端需要进一步验证客户端或初始握手过程失败,服务端会发送一个重试包给客户端
客户端重新连接:客户端收到重试包后,会根据服务端提供的信息重新发起一个新的连接请求
重新发起的连接请求包含了必要的验证信息,使得服务端能够确认客户端的合法性和有效性
成功建立连接:若新的连接请求被服务端验证通过,双方顺利完成握手并建立连接,进入正规的传输数据阶段

总结

QUIC协议中重试数据包触发重新启动另一个连接,是为了确保安全性、可靠性、以及高效的数据传输
通过这样的机制,QUIC能够有效防止重放攻击、提升握手效率、动态适应复杂网络环境以及确认客户端的可达性
所有这些措施综合起来,使得QUIC比传统传输协议更加稳健和高效

重放攻击

重放攻击(Replay Attack)是一种经典的网络攻击方式,攻击者截取发送方与接收方之间合法的通信消息,然后重新传输这些消息,以欺骗接收方进行未经授权的操作。在TCP协议中,尽管其设计包含了一些内在的安全机制,但并没有固有地防护重放攻击。

SYN包重放

在TCP连接中,攻击者可以通过捕捉并重放旧的连接请求(SYN包)来尝试进行连接重放。下述场景解释了这一攻击方式:
截获合法连接请求:
攻击者截获客户端发送给服务端的SYN包(用于发起TCP三次握手的第一步)。该包包含了源IP地址、目标IP地址、源端口、目标端口以及SYN标志。

重放连接请求:
攻击者在稍后时间重新发起与截获的SYN包相同结构的数据包,尝试与服务端建立新的TCP连接。

三次握手协议中的重放

TCP协议采用三次握手机制来建立连接,但攻击者可以在这一过程中进行重放:
三次握手步骤:
客户端发送SYN包(请求建立连接)。
服务端回应SYN-ACK包(确认连接请求)。
客户端发回ACK包(确认连接建立)。

重放攻击场景:
攻击者可以捕获合法的SYN包,并在稍后时间点重新发送,试图让服务端误认为是新的连接请求。
服务端收到重放的SYN包后,回复SYN-ACK包,若攻击者能够正确响应这一回复,可能建立与服务端的连接,进行进一步恶意操作。

TCP防止重放攻击的机制与不足

尽管TCP协议并没有内嵌专门的防重放攻击机制,但有一些措施与附加机制可以减少重放攻击的风险:

序列号随机化

TCP协议要求连接建立过程中,SYN包和SYN-ACK包都要包含随机生成的初始序列号,作为连接的唯一标识。这种随机性增加了重放攻击的难度,因为攻击者需要匹配正确的序列号范围。

时间戳选项

TCP选项字段中的时间戳(Timestamp)允许发送方和接收方记录包的发送与接收时间,有助于检测并防止重放数据包。
通过比较时间戳,服务端可以识别出重复的旧连接请求,过滤掉无效的重放攻击连接。

TCP三次握手的验证挑战

服务端可以在回应SYN-ACK包中植入一个验证字段(Challenge-Ack),需要客户端在ACK包中返回正确的验证字段,确认是有效请求。
(这个验证字段不能被伪造吗?)

改进和现代替代方案

为了进一步增加对重放攻击的防护,现代传输协议,如QUIC协议中引入了更多安全机制:

加密和认证

QUIC默认使用TLS加密层确保连接信息及其传输的安全性
通过加密对每个连接信息的端到端保护,防止数据包在传输过程中的攻击和篡改

QUIC的握手过程已经嵌入了完整的身份认证机制,不容易被重放攻击所愚弄,确保每个连接请求的可靠性和唯一性。

多层防护机制

QUIC包含IP地址验证机制,可以通过验证重试或发起协商的方式,确保连接可靠来源,防止IP重放和相关攻击。
相较于TCP,QUIC更加灵活和动态,可适应不同的网络环境,减少潜在攻击风险。

总结

TCP协议没有内嵌专门的防重放攻击机制,但通过序列号随机化、时间戳选项、三次握手挑战验证等措施一定程度上减少重放攻击风险。
现代传输协议如QUIC通过加密和多层防护机制提供了更强大的防护能力,确保连接的安全性和唯一性,适应动态复杂的网络环境。

QUIC协议中的time threshold(时间阈值)

定义

用来进行丢包检测的一个指标。
它用于判断在一定时间内未收到预期确认(ACK)的数据包是否被认为丢失

丢包检测是通过两种主要指标进行的:
基于包编号的阈值(KPacketThreshold)
基于时间的阈值(time threshold)

time threshold 是指从发送某个数据包到期望接收到该包的确认所允许的最大时间间隔
如果超过这个时间间隔依然没有收到确认,那么该数据包会被判断为丢失,需要重传

定义

time threshold 被设置为一个基线RTT(Round-Trip Time,往返时间)的1.125倍加上一个固定的时间偏移量
(1.125 = 9/8)

可以定义为1.125 * smoothed_rtt + kGranularity
smoothed_rtt 是经过平滑处理后的RTT估计值
kGranularity 是一个常数,通常表示时间测量的最小单位

丢包检测
每当发送一个新包时,记录下该包的发送时间
当该包的序号在超过 time threshold 的时延后仍然没有收到ACK确认,则认为该包已经丢失

动作
一旦确认包已经丢失,QUIC协议会启动重传机制,重新发送该数据包,以确保数据的传输完整性和可靠性

例子

某个数据包的发送时间是t0,平滑后的RTT是100ms,固定时间偏移量kGranularity是15ms
那么time threshold 可以计算为 1.125 * 100ms + 15ms = 127.5ms
如果在t0 + 127.5ms 时间内还未收到ACK确认,该数据包会被认为丢失

优点

适应性:根据网络状况,time threshold会动态调整,适应不同的网络延迟情况
精确性:这使得丢包检测更为准确,可以有效减少误判的可能性

总结

time threshold 是QUIC协议丢包检测与重传机制中一个重要参数
通过基于时间的检测机制,确保在一定的网络条件下能够有效、及时地发现丢包并进行重传
从而保证数据传输的可靠性与效率

QUIC的 packet loss 的阈值

time threshold

时间阈值,发包时设置定时器,过了时间阈值,还没收到ack,则判断为丢包

packet threshold

包阈值,收包时,乱序程序超过了n,则通知发端有丢包,进行重发

spurious retransmitting

误判为丢包时,则需要重传(实际收端有收到)

什么是QUIC的探测超时

在QUIC(Quick UDP Internet Connections)协议中,探测超时(Probe Timeout,PTO)是一个非常关键的机制,用于处理网络中潜在的数据包丢失和延迟问题。探测超时的目的在于确保数据可靠传输,即使在网络状况不佳的情况下也能维持数据流的正常进行。

什么是探测超时(PTO)

探测超时是QUIC中的一种定时机制,当在预期时间内未收到某些数据包的确认(ACK)时,QUIC会启动探测超时机制来触发重传。这有助于在数据包可能丢失或延迟的情况下,尽快恢复数据传输。

PTO的工作原理

初始设置:
在发送数据包时,QUIC 会记录下发送时间并计算一个探测超时时间值(PTO)
初始的 PTO 值通常基于 QUIC 的 RTT(Round-Trip Time,往返时间)估计

在这里插入图片描述

其中:
smoothed_rtt 是平滑处理后的 RTT 估计值
rtt_var 是 RTT 的变化值(抖动)
kGranularity 是一个常数,表示最小的时间测量单位

触发重传:
如果超过 PTO 时间仍未收到数据包的 ACK 确认,QUIC 会假定该数据包可能丢失,触发重传
此时,QUIC 会发送一个或多个探测包(Probe Packets)来主动查探链路状况,这也是 PTO 名称的由来

更新和调整:
根据接收情况,PTO 会持续动态调整,尤其在网络发生变化时,这种动态调整有助于提高数据传输的可靠性和效率

优点

提高可靠性
使用 PTO 机制可以更快地检测到丢包,从而迅速重传,提高数据传输的可靠性

动态调整:
根据网络条件自动调整 PTO,有助于适应不同的网络环境,优化传输性能

避免死锁:
在高丢包率或长时间无响应的情况下,PTO 能有效避免数据传输陷入死锁状态

示例

假设某个数据包的平滑 RTT 为 100ms,RTT 的变化值(rtt_var)为 20 ms,时间测量的最小单位(kGranularity)为10ms
则 PTO =
如果在 180ms 内没有收到 ACK,QUIC 会启动重传机制

总结

探测超时(PTO) 是 QUIC 协议中的一种关键机制,通过动态计算和调节超时值来探测丢失的数据包并及时进行重传,从而保证数据传输的高效性和可靠性

QUIC探测超时机制和阈值机制的区别

为了提高其传输效率和可靠性,QUIC引入了多种机制来处理丢包和延迟问题
其中,探测超时(Probe Timeout, PTO)机制和阈值(Threshold)机制是两种重要的丢包检测和处理机制

区别对比

特性探测超时机制(PTO)阈值机制(Threshold)
工作原理基于时间的超时机制检测潜在丢包基于包编号(KPacketThreshold)或时间(Time Threshold)的丢包检测
计算方法基于平滑RTT和RTT变化值计算出探测时间包编号阈值(常用值为3)或基于RTT的时间阈值(如1.125倍RTT)
触发条件未在PTO时间内收到ACK,即触发重传当包编号落后一定值或超出时间阈值,判断为丢包
适用情景网络延迟和丢包情况下,通过超时检测进行重传普遍使用于丢包检测,通过包编号和时间推测丢包
灵活性与动态性动态调整PTO值,适应不同网络环境基于预定义阈值,适用于多种网络环境

总结

探测超时机制(PTO)和阈值机制(Threshold)都是 QUIC 协议中用来检测和处理丢包的关键机制。
PTO 更加动态,适应于不同网络状况,而阈值机制使用具体数值进行丢包判断,适用于各种普遍网络问题。
两者互补,共同提升 QUIC 协议的鲁棒性和效率。

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

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

相关文章

STM32上实现FFT算法精准测量正弦波信号的幅值、频率和相位差(标准库)

在研究声音、电力或任何形式的波形时,我们常常需要穿过表面看本质。FFT(快速傅里叶变换)就是这样一种强大的工具,它能够揭示隐藏在复杂信号背后的频率成分。本文将带你走进FFT的世界,了解它是如何将时域信号转化为频域…

【Android】【Compose】实现列表数据添加

序言 在使用列表的时候,以前是使用 Layout 布局里面添加Recyclerview进行列表的显示,但是在Compose里面,是没有这个Recyclerview使用的,那Compose怎么实现列表数据呢? 使用 【LazyColumn】 首先创建一个Compose项目…

java,深拷贝和浅拷贝

在 Java 中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是对象拷贝的两种方式,主要区别在于它们如何处理对象的内部引用。 目录 一、浅拷贝(Shallow Copy) 实现方式 二、深拷贝&…

国际商城系统怎么弄 跨境电商商城怎样上线

国际商城系统一般涉及多个关键步骤。首先,需要选择合适的平台或开发工具,如商淘云国际电商系统或自定义开发。其次,系统应支持多语言、多币种以及国际支付网关,以满足全球客户的需求。第三,确保系统具有强大的物流和配…

推荐5款AI论文大纲生成器,一键极速生成!

在当今学术研究和写作领域,AI论文大纲生成器的出现极大地提高了写作效率和质量。以下是五款功能强大且全面的AI论文大纲生成器推荐: 一、千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和自然语言处理技术的AI写作助手,旨在帮助用户…

新160个crackme - 058-CZG-crackme1

运行分析 按下OK键后,程序退出 PE分析 C程序,32位,无壳 静态分析&动态调试 ida函数栏发现winMain(x,x,x,x),即打开窗口,双击函数跟进 继续跟进 双击DialogFunc函数,这个是窗口逻辑 继续跟进sub_401090函…

数据结构----栈和队列

(一)栈 1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First …

GFS 分布式文件系统 GlusterFS

一、GlusterFS概述 1.1、GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba 存储网关(可选,根据需要选择使用)组成。 包括其去中心化(无元数据服务器)的特性,这有…

【苍穹外卖】总结

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

双亲委派机制知识点

类加载器 双亲委派模型 为什么采用双亲委派模型 打破双亲委派机制的场景 Tomcat 打破双亲委派机制:目的是可以加载不同版本的jar包 实现类隔离:在Tomcat中,每个Web应用使用独立的类加载器加载类文件,这样做的好处在于,当在同一T…

C++二叉搜索树(二叉树进阶)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 C二叉搜索树(二叉树进阶) 收录于专栏 [C进阶学习] 本专栏旨在分享学习C的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 二叉搜索树…

Java重修笔记 第五十七天 坦克大战(七)多线程基础 - 编程练习

1. 线程之间的协调控制(通知方式) public class Homework04 {public static void main(String[] args) {// 在 main 方法中启动两个线程// 第一个线程内循环打印 1 到 100 以内的整数// 直到第二个线程从键盘读取到 "Q" 指令后结束第一个线程…

Porcupine - 语音关键词唤醒引擎

文章目录 一、关于 Porcupine特点用例尝试一下 语言支持性能 二、Demo1、Python Demo2、iOS DemoBackgroundService DemoForegroundApp Demo 3、网页 Demo3.1 Vanilla JavaScript 和 HTML3.2 Vue Demos 三、SDK - Python 一、关于 Porcupine Porcupine 是一个高度准确和轻量级…

LC并联电路在正弦稳态下的传递函数推导(LC并联谐振选频电路)

LC并联电路在正弦稳态下的传递函数推导(LC并联谐振选频电路) 本文通过 1.解微分方程、2.阻抗模型两种方法推导 LC 并联选频电路在正弦稳态条件下的传递函数,并通过仿真验证不同频率时 vo(t) 与 vi(t) 的幅值相角的关系。 电路介绍 已知条件…

Axure RP实战:打造高效图形旋转验证码

Axure RP实战:打造高效图形旋转验证码 在数字产品设计的海洋中,验证码环节往往是用户交互体验的细微之处,却承载着验证用户身份的重要任务。 传统的文本验证码虽然简单直接,但随着用户需求的提高和设计趋势的发展,它…

vue2的diff算法

Vue2 的虚拟 DOM diff 算法是一种高效的算法,用于比较新旧两个虚拟 DOM 树,找出差异并更新到真实 DOM 上。这个算法的核心在于尽量减少不必要的 DOM 操作,提高性能。 虚拟dom:把DOM数据化,先通过不断地操作数据&#…

如何在手机端跑大模型?

最近新入手了一台 arm 开发板,内置安装了 Android 13 系统。 昨天把网络问题给解决了:安卓连接 WIFI 但无法上网?盘点踩过的那些坑 今日分享,继续带大家实操:如何把大模型(LLM)部署到移动端&a…

文章资讯职场话题网站源码整站资源自带2000+数据

介绍: 数据有点多,数据资源包比较大,压缩后还有250m左右。值钱的是数据,网站上传后直接可用,爽飞了 环境:NGINX1.18 mysql5.6 php7.2 代码下载

JUC学习笔记(三)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 八、共享模型之工具--JUC8.1 AQS 原理1. 概述2 实现不可重入锁自定义同步器自定义锁 3.心得起源目标设计1) state 设计2)阻塞恢复设计3)队列…

学习笔记 韩顺平 零基础30天学会Java(2024.9.16)

P563 自定义泛型方法 当调用方法时,要传入参数,因为当传入参数时,编译器就可以确定泛型代表的类型 泛型方法和方法使用了泛型是不一样的 泛型方法可以使用类声明的泛型,也可以使用自己的泛型 P564 泛型方法练习 P565 泛型的继承和…