QUIC原理及使用

HTTP3 QUIC数据包重传机制 QUIC 中的数据传输基于流和帧,每个流都是独立的,包含多个帧。帧的类型包括数据帧、ACK 帧、握手帧等。丢包重传只涉及具体丢失的帧,而不会影响其他流中的帧。的,而不是像 TCP 那样基于字节的序列号。包编号的独立性使得 QUIC 能够快速检测到哪些数据包丢失,并决定需要重传哪些包。当发送方接收到 ACK 帧后,会根据确认的信息判断哪些数据包需要重传。在 QUIC 和 HTTP/3 中,数据传输的单位是“包”(packet)和“帧”(frame)来确认接收到的数据包,并提供详细的丢包信息。 阅读详情

TCP协议存在的不足

        队头阻塞:这个问题是长连接面临的最严重问题,在弱网环境、丢包率较高的场景下,消息的延迟时间会非常大。其主要原因是,在我们正常的TCP连接请求中,由于TCP协议的可靠性和一致性保障,一个请求中某一个包的丢失,会导致后续已到达的数据包延迟交付给业务层,直到丢失包经过重传恢复。对于QUIC而言,由于其采用UDP,完全不会出现上面的问题,其带宽占用相对TCP而言会变多,以一定的带宽消耗提高消息的实时性是完全可行的。另外,相较于TCP的流量控制,QUIC在Connection和Stream两个级别分别进行流控

        连接迁移:TCP使用四元组 (源IP,源端口,目的IP,目的端口) 标识连接,网络切换时会导致重连,而 QUIC 使用自定义的Connection ID作为链接标识,只要客户端使用的ConnectionID不变,即使网络切换也能保证链接不中断,连接发生迁移后,拥塞控制清零重新计算。

        握手延迟:TCP三次握手需要 1 个RTT ,TCP握手完成后,才能进行TLS握手,TLS握手需要至少 2 个 RTT ,这样就需要 3 个RTT后,客户端才能给服务端发送请求。即使是优化后的TLS也需要 1 个RTT ,这种情况下需要2个RTT后,客户端才能给服务端发送请求。对于QUIC而言,QUIC总共只需要1个RTT就能完成握手,也就是说1个RTT后,客户端就可以将请求发送给服务端。另外,在QUIC连接复用的情况下,不需要进行再次握手,客户端可以直接发送请求给服务端,也就是常说的0RTT。

        QUIC在应用层即可实现不同的拥塞控制算法,不需要改操作系统和内核单个程序的不同连接也能支持配置不同的拥塞控制。这样我们就可以给不同的用户选择不同的拥塞控制,提高用户的体验。应用程序变更拥塞控制,甚至不需要停机和升级。QUIC还有带宽预测,RTT监控,发送速率调整等高级算法支持。

        综上,QUIC可以很好的解决TCP的队头阻塞、连接迁移、ACK Delay、0RTT等问题。

QUIC原理

        TCP 队头阻塞的主要原因是数据包超时确认或丢失阻塞了当前窗口向右滑动,我们最容易想到的解决队头阻塞的方案是不让超时确认或丢失的数据包将当前窗口阻塞在原地。QUIC (Quick UDP Internet Connections)也正是采用上述方案来解决TCP 队头阻塞问题的。

        TCP 为了保证可靠性,使用了基于字节序号的 Sequence Number 及 Ack 来确认消息的有序到达。QUIC 同样是一个可靠的协议,它使用 Packet Number 代替了 TCP 的 Sequence Number,并且每个 Packet Number 都严格递增,也就是说就算 Packet N 丢失了,重传的 Packet N 的 Packet Number 已经不是 N,而是一个比 N 大的值,比如Packet N+M。

        QUIC 使用的Packet Number 单调递增的设计,可以让数据包不再像TCP 那样必须有序确认,QUIC 支持乱序确认,当数据包Packet N 丢失后,只要有新的已接收数据包确认,当前窗口就会继续向右滑动。待发送端获知数据包Packet N 丢失后,会将需要重传的数据包放到待发送队列,重新编号比如数据包Packet N+M 后重新发送给接收端,对重传数据包的处理跟发送新的数据包类似,这样就不会因为丢包重传将当前窗口阻塞在原地,从而解决了队头阻塞问题。那么,既然重传数据包的Packet N+M 与丢失数据包的Packet N 编号并不一致,我们怎么确定这两个数据包的内容一样呢?

        还记得前篇博文:Web技术(五):HTTP/2 是如何解决HTTP/1.1 性能瓶颈的?_流云IoT的博客-优快云博客使用Stream ID 来标识当前数据流属于哪个资源请求,这同时也是数据包多路复用传输到接收端后能正常组装的依据。重传的数据包Packet N+M 和丢失的数据包Packet N 单靠Stream ID 的比对一致仍然不能判断两个数据包内容一致,还需要再新增一个字段Stream Offset,标识当前数据包在当前Stream ID 中的字节偏移量。

        有了Stream Offset 字段信息,属于同一个Stream ID 的数据包也可以乱序传输了(HTTP/2 中仅靠Stream ID 标识,要求同属于一个Stream ID 的数据帧必须有序传输),通过两个数据包的Stream ID 与 Stream Offset 都一致,就说明这两个数据包的内容一致。

Stream Offset保证数据包有序性

         上图中数据包Packet N 丢失了,后面重传该数据包的编号为Packet N+2,丢失的数据包和重传的数据包Stream ID 与 Offset 都一致,说明这两个数据包的内容一致。这些数据包传输到接收端后,接收端能根据Stream ID 与 Offset 字段信息正确组装成完整的资源。

        QUIC 通过单向递增的Packet Number,配合Stream ID 与 Offset 字段信息,可以支持非连续确认应答Ack而不影响数据包的正确组装,摆脱了TCP 必须按顺序确认应答Ack 的限制(也即不能出现非连续的空位),解决了TCP 因某个数据包重传而阻塞后续所有待发送数据包的问题(也即队头阻塞问题)。

        QUIC 可以支持非连续的数据包确认应答Ack,自然也就要求每个数据包的确认应答Ack 都能返回给发送端(TCP 中间丢失几个Ack 对数据包的确认应答影响不大),发送端收到该数据包的确认应答后才会释放该数据包所占用的缓存资源,已发送但未收到确认应答的数据包会保存在缓存链表中等待可能的重传。QUIC 对确认应答Ack 丢失的容忍度比较低,自然对Ack 的传输能力进行了增强,Quic Ack Frame 可以同时提供 256 个 Ack Block,在丢包率比较高的网络下,更多的 Ack Block 可以提高Ack 送达的成功率,减少重传量。
        原文链接:https://blog.youkuaiyun.com/m0_37621078/article/details/106506532

quic协议解析 quic简介 阅读详情

相关推荐

kwik:Java中的QUIC客户端(和客户端库)实现。 支持带有“ Flupke”插件的HTTP3

QUIC客户端Java库 Kwik是Java中协议的客户端实现。 QUIC是由IETF开发的全新传输协议,它将成为新HTTP3协议的传输层。 尽管QUIC对于HTTP3而言是必需的,但它不仅仅是HTTP3的传输协议:大多数人都将QUIC视为“下一代TCP”。 它具有与TCP类似的属性,例如,提供可靠的有序流,但是在许多方面都更好: 它可以在同一QUIC连接上为多个流(同时和顺序)提供服务 它不会遭受“行头阻塞”问题的困扰 它由TLS加密和保护(不是作为单独的层,而是嵌入在协议中) 它最多只需要一次网络往返即可建立连接(TCP和TLS的结合需要更多) 如果您想了解更多关于QUIC的知识并且能够理解荷兰语,请查看我。 如果您正在寻找Java HTTP3客户端,请查看 ,它是在Kwik之上构建的。 Kwik由Peter Doornbosch维护。 最新的最伟大的总是可以在上找到。 不

QUIC协议原理详解

QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于UDP的传输协议,它实现了TCP + HTTPS + HTTP/2的功能,目的是保证可靠性的同时降低网络延迟。众所周知UDP比TCP传输速度快,TCP是可靠协议,但是代价是双方确认数据而衍生的一系列消耗。其次TCP是系统内核实现的,如果升级TCP协议,就得让用户升级系统,这个的门槛比较高,而QUIC在UDP基础上由客户端自由发挥,只要有服务器能对接就可以。1.1 什么是QUIC。.........

Lce的专栏 1万+

UE5在Ubuntu22.04.4下的高效开发环境配置指南

本文详细介绍了在Ubuntu 22.04.4系统上配置UE5高效开发环境的完整指南,包括系统准备、显卡驱动安装、UE5引擎编译与配置、开发工具链设置以及性能优化技巧。通过逐步指导,帮助开发者快速搭建稳定的UE5开发环境,解决常见问题,提升开发效率。

weixin_29251131的博客 382

QUIC 协议详解

本文尽量用通俗易懂的语言介绍了 QUIC 协议实现原理,目的是让大家对 QUIC 有一个基本的了解,当然,这只是 QUIC 协议的冰山一角,更详细具体的内部实现还需要深入研究标准文档和源码,如果文中有描述不对的地方,欢迎批评指正,多多交流。客户端发送的 5 个数据包(56789)服务器都收到了,并且回应了 5 个 ACK,但是第 5 个数据包的 ACK 丢失了,导致客户端的发送窗口无法向前移动,也就无法发送新的数据,这就是 TCP 层的队头阻塞问题。那拥塞窗口的大小是如何计算的?

优秀技术文章收录 5013

京东商品数据爬取实战:用Selenium+代理IP绕过最新反爬机制(附完整代码)

本文深入解析京东商品数据采集技术,详细介绍了如何利用Selenium与智能反反爬策略绕过京东最新的反爬机制。通过实战案例和完整代码,帮助开发者掌握高效采集京东商品数据的方法,包括动态参数加密、行为验证识别及分布式采集架构设计等关键技术。

cc789的博客 1058

ANSA二次开发在线帮助:ANSA和μETA API文档

  为了方便大家学习ANSA二次开发,我将ANSA和μETA二次开发的官方文档整合到了我的个人网站CAECoder中,大家点击ANSA和μETA API官方帮助文档进行访问即可查看。   本站也将开展对ANSA和μETA API文档的翻译工作,请大家持续关注! ANSA和μETA API文档   ANSA和μETA脚本接口是一个应用程序编程接口(API),允许开发人员访问ANSA和μETA核心功能和数据。   ANSA和μETAAPI是Python编程语言的扩展。 Python Python简.

CAECoder 4320

QUIC协议数据包处理终极指南:深入解析quic-go打包器与解包器实现原理

QUIC协议作为下一代互联网传输协议,正在彻底改变网络通信的方式。quic-go作为Go语言实现的QUIC协议库,其核心的数据包处理机制——打包器与解包器,是实现高性能网络通信的关键所在。本文将带您深入剖析quic-go中数据包处理的完整流程,从加密层次到帧组装,再到网络传输的每一个环节。 [![QUIC协议数据包处理流程](https://raw.gitcode.com/gh_mirrors/

gitblog_00489的博客 446

别再凭感觉了!手把手教你用Excel搞定激光器MPE与NOHD安全计算(附模板下载)

本文详细介绍了如何利用Excel自动化计算激光器的MPE(最大允许照射量)和NOHD(标称眼危害距离),提升激光安全评估的效率和准确性。通过实战案例和模板下载,帮助工程师快速掌握GB/T 7247标准中的关键计算,避免常见错误,适用于激光测距仪等设备的安评工作。

weixin_30954265的博客 465

QUIC协议的设计原理

从传输层抽象来看,TCP+TLS 提供的是一条单一、按序、可靠的字节流,再由 HTTP/2 在其之上通过帧机制模拟多路复用;而 QUIC 则把“多流”做成了传输层的原生能力,在一条连接内部同时维护多个独立的流,每条流拥有自己的序号空间和流控状态。两者的关键区别在于丢包传播范围:TCP 的重传以整个字节流为单位,一处缺口会阻塞后续所有数据的交付,因此 HTTP/2 再多流也逃不开连接级队头阻塞;

x1613769173的博客 874

别再被骚扰了!手把手教你彻底卸载阿里云盾(安骑士)并封禁其IP段

本文详细指导如何彻底卸载阿里云盾(安骑士)并封禁其IP段,帮助用户夺回服务器控制权。从识别监控组件到执行官方卸载脚本,再到手动清理残留文件和配置iptables规则,确保完全阻断云盾通信。适用于追求极致性能或需要完全自主控制的环境。

weixin_42525551的博客 450

Windows10下MATLAB2017a安装与破解实战:手把手教你搞定双镜像加载

本文详细介绍了在Windows 10系统下安装和破解MATLAB 2017a的完整步骤,包括双镜像加载、许可证配置及常见问题解决方案。通过手把手教程,帮助用户顺利完成安装并优化性能,特别适合工程计算领域的初学者和专业人士。

weixin_29053383的博客 415

QUIC协议的核心原理

RTT概念:通信连接的一个过程(如一个TCP三次握手被成为1个RTT.TLS连接也被称为对应的连接)每个QUIC包有对应的序列号。传输失败就可以重传对应序列号的包。QUIC协议数据包的拆解过程。

2301_79584629的博客 288

树莓派视觉小车实战:OpenCV驱动的智能物体追踪系统

本文详细介绍了如何从零开始构建一个基于树莓派的智能视觉小车,实现物体跟踪功能。通过OpenCV进行图像处理,结合颜色与轮廓识别算法,让小车能够实时锁定并追踪特定目标。内容涵盖硬件搭建、软件环境配置、核心代码解析及运动控制逻辑,为创客和开发者提供了完整的实战指南。

weixin_29047545的博客 142

QUIC 协议原理浅解

作者:wellsjiang,腾讯 CSIG 后台开发工程师一 QUIC 是啥?1.1 什么是 QUIC?QUIC(Quick UDP Internet Connection)是谷歌推出的一...

腾讯技术工程 3006

心理学量表汇总 50多个 附下载

目录一、心理健康与精神病态量表二、行为问题量表三、人格评估量表四、智力测验一、心理健康与精神病态量表1.一般症状自评量表(SCL-90)症状自评量表 (The self-report symptom inventory ,Symptom checklist ,90,简称 SCL90) 有 90 个评定项目 , 每个项目分五级评分 , 包含了比较广泛的精神病症状学内容, 从感觉、 情 感、思维、意识、行为直至生活习惯、人际关系、饮食等均有涉及,能准确刻划被试的自觉 症状,能较好地反映被试的问题及其严重程度和变

南七小僧的学海无涯 1902

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

QUIC协议原理分析

本文主要介绍 QUIC 协议产生的背景和核心特性。 QUIC 概述 Quic 全称 quick udp internet connection [1],“快速 UDP 互联网连接”,(和英文 quick 谐音,简称“快”)是由 google 提出的使用 udp 进行多路并发传输的协议。 Quic 相比现在广泛应用的 http2+tcp+tls 协议有如下优势 [2]: 减少了 TCP ...

生命不息,奋斗不止 2195

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

谈谈QUIC协议原理

QUIC,又名HTTP3,是近年来诞生的非常厉害的传输协议,它利用UDP解决了当前基于TCP协议的HTTP的许多问题,提升了在弱网环境下的网络通信体验。让我们来一探究竟! 1.1 什么是QUIC? QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于UDP的传输协议,它实现了TCP + HTTPS + HTTP/2的功能,目的是保证可靠性的同时...

KOwzb的博客 1557

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

✔《每天30分钟吃透一个前沿新技术——HTTP/3协议特性与QUIC原理》

请描述HTTP/3对前端性能优化的影响。

yong_su的博客 1493

网络通信原理之TCP,UDP,QUIC

网络通信原理 TCP-UDP-QUIC

m0_60259116的博客 4313

QUIC 协议原理、特点与 HTTP/3 支持

QUIC协议是由Google开发的基于UDP的传输协议,旨在解决TCP在延迟和拥塞控制方面的局限。它通过0-RTT快速连接建立、多路复用、内置加密等特性显著提升了网络性能。QUIC采用TLS 1.3实现端到端加密,支持连接迁移和流量控制,在移动网络和实时通信中表现优异。相比TCP,QUIC减少了握手延迟,避免了队头阻塞,并具备更好的网络适应性。虽然存在部署复杂性和兼容性挑战,但QUIC已成为HTTP/3的基础协议,未来将持续优化性能与安全性。

m0_63797448的博客 2336

【自整理】QUIC核心原理和握手过程

每个QUIC包都有自己独立的号码,如果丢失了某个QUIC包,就相应地知道丢失了QUIC包里的什么数据流,这样就只需要重传必要的数据包以此来解决TCP的。划分为传输层协议,但需要依托UDP完成应用进程之间的传输;划分为应用层协议,因为QUIC其实是在应用层实现的。【QUIC核心原理和握手过程-哔哩哔哩】 https://b23.tv/8bs8L0G。

October1025的博客 458

QUIC协议连接原理和特性

QUIC全称 Quick UDP Internet Connection(快速UDP互联网连接),是由Google提出的使用UDP协议进行多路并发传输的协议。目的是保证可靠性的同时降低网络延迟。QUIC相比现在广泛应用的HTTP/2.x + TCP + TLS协议主要有这些优势:减少了TCP三次握手及TLS握手时间、改进的拥塞控制、避免HOL(队头阻塞)的多路复用、连接迁移、前向冗余纠错。

you_you_lu的博客 3189

聚焦于 QUIC 协议的拥塞控制机制,结合您之前的问题(TCP、UDP、ICMP、MQTT、HTTP、串口、USB 等),我将详细讲解 QUIC 拥塞控制的原理、算法、与 TCP/UDP 的对比

聚焦于 QUIC 协议的拥塞控制机制,结合您之前的问题(TCP、UDP、ICMP、MQTT、HTTP、串口、USB 等),我将详细讲解 QUIC 拥塞控制的原理、算法、与 TCP/UDP 的对比,并提供 C# 代码示例(基于 MsQuic 或其他库)展示 QUIC 通讯的实现。1.3 QUIC 拥塞控制机制QUIC 的拥塞控制在 RFC 9002 中定义,默认基于 TCP 的算法(如 NewReno、CUBIC),但实现更灵活。QUIC 设计目标是提高性能、降低延迟,特别适合 HTTP/3 和实时应用。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 1065
上一篇: 服务启停优化方案探讨
下一篇: TCP粘包问题及各方解决方案
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ปรัชญา แค้วคำมูล

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值