QUIC协议设计(一)-QUIC的特点

谷歌出品!读懂 QUIC 协议:更快、更高效的通信协议 在TCP里,如果一个segment传递丢失,那么后续segment乱序到达,也不会被应用层使用,只到丢失的segment重传成功为止,因此TCP实现的HTTP2的多路复用能力受到制约。QUIC解决了上面的歧义问题。与采用Sequence Number 标记不同的是,其使用的Packet Number标记严格单调递增,如果 Packet N 丢失了,那么重传时 Packet 的标识不会是 N,而是比 N 大的数字,比如N+M,这样发送方接收到确认消息时就能方便地知道 ACK 对应的是原始请求还是重传请求。 阅读详情


前言

随着HTTP3标准的发布,HTTP3基于的QUIC协议受到越来越多的关注。


一、TCP的缺点

TCP协议是目前计算机网络通信中最流行的协议之一。但是,随着网络环境的变化,TCP愈发显露出一些缺点。
在介绍缺点前,先了解一些名词。

1.名词解释

1.1 BDP

bandwidth-delay product,即带宽时延积。带宽时延积 = 传播时延(s)*带宽(bit/s) 。
等同在任何特定时间该网络线路上的最大数据量——已发送但尚未确认的数据。

1.2 TCP拥塞控制

TCP是基于丢包的拥塞控制,发生超时重传或者收到3个重复确认,就会触发拥塞算法,减小拥塞窗口。
最大发送窗口(swnd)=min(远端剩余接收窗口rwnd,本地发送窗口swnd,拥塞窗口cwnd) 。

1.3 AIMD

additive increase multiplicative decrease,即和式增加,积式减少,是TCP的拥塞控制算法。
特点是,拥塞窗口的大小增加慢(和式增加),减小很快(积式减少)。

1.4 RTT

Round-Trip Time,即往返时间。
是指从数据完全发送完(完成最后一个bit推送到数据链路上),到发送方接收到确认的时间。

1.5 队头阻塞

Head-of-Line blocking或HOL blocking。是指第一个数据包(队头)受阻而导致整列数据包传输受阻。
参见:http相关的队头阻塞有哪些

1.6 TLS

Transport Layer Security,即传输层安全协议。
HTTPS中的“s”就是指TLS,它是基于TCP的协议。常见的有TLS1.2、TLS1.3。

1.7 DTLS

Datagram Transport Layer Security,即数据包传输层安全协议。
基于TLS扩展,支持UDP协议,DTLS1.0 基于 TLS 1.1,DTLS 1.2 基于 TLS 1.2 。

2.缺点说明

2.1 高BDP下的低效

这个问题是TCP的拥塞控制机制引起的。
在高BDP(带宽时延积)网络(如高速广域网)下,TCP协议发送效率低下。
以前网络环境差,TCP为了适配低速网络,设计上偏向于慢慢地控制网络中的数据流量变大,来防止整个网络的拥塞。
TCP的拥塞控制算法AIMD会“和式增加,积式减少”,导致拥塞窗口快速减小后,不能快速增大,最终减少了发送窗口大小,降低了发送速率,浪费了高BDP的网络资源。

2.2 带宽分配不公平

这个问题仍然是TCP的拥塞控制机制引起的。
TCP带宽分配不均,RTT(往返时间)较小的占用较大的带宽。因为TCP的每轮RTT后,CWND(拥塞窗口)会增加,因此,RTT较小的,CWND就大,发送窗口也相应变大。

2.3 高延时

TCP的高延时主要是由队头阻塞引起的。
基于TCP的HTTP协议,有更多的队头阻塞问题,参见名词解释中的“1.5 队头阻塞”。

二、QUIC是什么

1.发展过程

QUIC发展过程如图所示:
在这里插入图片描述
重点是分为了2个分支:gQUIC和iQUIC,
两者的区别主要在于安全传输层的差异,gQUIC使用了自定义安全机制,iQUIC使用了TLS协议。
下面的介绍,都是特指iQUIC。

2.协议模型

协议模型如下图所示:
在这里插入图片描述
QUIC基于UDP协议,
一对客户端和服务端可以有多个连接Connection,
每个连接Connection都有各自的Connection ID,
一个Connection中包含多个stream流,
stream有各自的stream ID。

3.特点

QUIC是由Google首先提出的基于UDP的传输协议,
它是一个安全通用的应用层协议,它面向连接,在客户端及服务端之间建立有状态的交互。有如下特点:

3.1 0-RTT(或1-RTT)建立连接

QUIC基于TLS1.3建立连接,实现了0-RTT(1-RTT),
而TCP+TLS1.2建立连接需要3.5RTT。

3.2 改进的拥塞控制(解决TCP低效、不公)

QUIC默认使用Cubic拥塞控制算法,并支持换算法。
单调递增的报文号解决了TCP重传歧义,算法中的RTT度量更准确。

3.3 无队头阻塞的多路复用(解决TCP高延时)

QUIC为单个连接提供了可复用的多stream(流),
stream本身各自保证有序性,stream之间不存在依赖关系,
解决了单个TCP连接由于严格按序交付引发的队头阻塞。

3.4 连接迁移

QUIC用Connection ID代替了TCP的五元组标识一个连接,
变更IP(切换网络、NAT重绑等)时可以使用Connection ID避免重新建立连接。

3.5 支持可靠和不可靠传输

QUIC的可靠传输使用stream帧,
在扩展协议中(RFC9221),
还支持了不可靠传输的DATAGRAM帧。

3.6 精细的流量控制

流量控制是指,接收方需要限制流量以防发送方速度太快造成冲击或被恶意发送方消耗大量内存。
QUIC在stream和connection这2个层次都支持类似TCP的流量控制。

总结

这一章初步认识了QUIC协议,下一章介绍QUIC握手的巧妙设计。

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

相关推荐

QUIC(Quick UDP Internet Connection)协议概述

QUIC协议的概述

weixin_42982240的博客 5221

详解 gQUIC 加密握手算法(quic-crypto)中共享密钥的生成过程

1、基本概要 QUIC 传输的数据几乎都是要加密的,关于加密算法这里不做介绍,加密必然需要用到密钥; QUIC 中的加密密钥有两个 initial key 和 forword-secure key。前者用于实现 0-RTT 的握手,后者则用于握手成功以后整个会话的数据加密; QUIC 的密钥使用 Diffe-Hellman 算法生成; 2、解析 Diffe-Hellman 算法的密钥生成过...

chuanglan的专栏 8998

QUIC协议分析-基于quic-go

QUIC是由谷歌设计的一种基于UDP的传输层网络协议,并且已经成为。HTTP/3就是基于QUIC协议的。QUIC只是一个协议,可以通过多种方法来实现,目前常见的实现有Google的quiche,微软的msquic,mozilla的neqo,以及基于go语言的quic-go等。由于go语言的简洁性以及编译的便捷性,本文将选用进行quic协议的分析,该库是完全基于go语言实现,可以用于构建客户端或服务端。

lingshengxiyou的博客 1989

QUIC协议报文解析(三)

在前面的两篇文字里我们简单介绍了QUIC的发展历史,优点以及QUIC协议的连接原理。本篇文章将会以具体的QUIC报文为例,详细介绍QUIC报文的结构以及各个字段的含义。早期QUIC版本众多,主要有谷歌家的gQUIC,以及IETF致力于将QUIC标准化,即IETF QUIC(iQUIC),还有Facebook家的。早期各家的QUIC都有自己定制的字段,但总体是大同小异。与包头格式固定的 TCP 不同,QUIC 有两种类型的包头。建立连接的QUIC数据包需要包含的信息多,它使用长头格式。

ftzchina的博客 3325

QUIC协议初探-iOS实践

本文来自于腾讯Bugly公众号(weixinBugly), 作者:emilymmwang,未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/NbewZ1NU49qSjIcdFrpotw | 导语 本文主要介绍了QUIC协议,以及初步研究的过程,用实践证明了QUIC协议在iOS平台的可行性 1、QUIC介绍 (1)QUIC(Quick UDP

腾讯Bugly的专栏 8050

HTTP3.0:QUIC协议详解

QUIC就像是给UDP装上了加速器,再加上TCP的一些可靠性,摇身一变成为了一个又快又可靠的传输协议。传统的TCP握手需要三次来回(俗称“三次握手”),还得再加个TLS握手才能加密,整个过程就像是在相亲时反复确认“你是谁?而QUIC则完美解决了这个问题,每个流都是独立的,互不干扰。QUIC采用了类似TCP的拥塞控制机制,但它更灵活,可以根据网络状况动态调整传输速度,既能跑得快,又不会把网络“堵死”。理想和现实总是有一定的差距:虽然经过多年的推广的应用,但QUIC协议目前仍未达到大量普及的阶段,在。

ye_yumo的博客 1533

QUIC协议原理详解

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

Lce的专栏 1万+

QUIC协议详解

QUIC,发音同quick,是"Quick UDP Internet Connections"的简称,是一种通用的传输层网络协议。QUIC与TCP相同,是一种有连接的传输协议。但是与TCP不同的是QUIC是建立在UDP传输层协议之上的,实现了在两个端点之间的多路复用。QUIC的是在用户空间实现的,TCP/UDP则是在内核空间实现的。[2]QUIC所处的网络层次如下图所示。图源文献[1:1]。

2401_88755455的博客 1720

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

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

m0_63797448的博客 2336

32 | 未来之路:HTTP/3展望

在前面的两讲里,我们一起学习了 HTTP/2,你也应该看到了 HTTP/2 做出的许多努力,比如头部压缩、二进制分帧、虚拟的“流”与多路复用,性能方面比 HTTP/1 有了很大的提升,“基本上”解决了“队头阻塞”这个“老大难”问题。等等,你可能要发出疑问了:为什么说是“基本上”,而不是“完全”解决了呢?这是因为 HTTP/2 虽然使用“帧”“流”“多路复用”,没有了“队头阻塞”,但这些手段都是在应用层里,而在下层,也就是 TCP 协议里,还是会发生“队头阻塞”。这是怎么回事呢?让我们从协议栈的角度来仔细看一

阅读之后,对你有帮助,那就点个赞再走吧 692

快速UDP网络连接之QUIC协议介绍

QUIC的FEC是使用的XOR的方式,即发N + 1个包, 多发一个冗余的包,在正常数据的N个包里面任意一个包丢了,可以通过这个冗 余的包恢复出来,使用异或可以做到切换网络操持连接。由于原始包和重传包的序列号是一样的,客户端不知道服 务器返回的 ACK 包到底是原始包的,还是重传包的。新的传输层协议通常会经过严格的设计,分析和评估可重复的结果,证明候选协议对 现有协议的正确性和公平性,开发新的传输层协议和它在操作系统进行广泛部署之间 通常需要花费数年的时间。

琅嬛福地 4648

tcp,http,socket,websocket,QUIC协议

TCP:可靠、有序,但传输速度相对较慢,适合需要数据完整性保证的应用。HTTP:基于 TCP,广泛用于 Web 应用,适合请求-响应模型,但实时性较差。Socket:灵活的网络编程接口,适合双向通信和实时应用,但需要开发者处理底层细节。WebSocket:适合需要低延迟、实时双向通信的场景,如在线游戏和聊天应用。QUIC:基于 UDP 提供快速连接和低延迟,适用于流媒体、游戏和高性能 Web 应用(如 HTTP/3)。

yymagicer的博客 1718

GQUIC的pcap数据包

GQUIC数据包,用于了解GQUIC协议特征

quic:在内核空间优化的QUIC协议实现

quic:在内核空间优化的QUIC协议实现 项目介绍 QUIC(Quick UDP Internet Connections)是一种基于UDP的新型协议,旨在提供一种更快、更安全、更可靠的互联网传输方式。QUIC in Linux Kernel项目旨在将QUIC协议的核心实现集成到Linux内核中,以提高性能和效率,满足如SMB和NFS等内核消费者的需求。此项目通过在内核空间实现QUIC协议,为用...

gitblog_00597的博客 992

Python爬虫实战:西瓜视频m3u8解析与FFmpeg下载合并

网络爬虫与流媒体解析是Python工程实践中的常见需求,其核心在于通过HTTP请求获取数据并解析特定格式。m3u8作为HLS协议索引文件,将视频切分为ts分片,便于流式传输。结合FFmpeg的多线程处理能力,可高效完成分片下载与合并,技术价值在于提升视频处理效率。典型应用场景包括视频下载、离线缓存等。本文以西瓜视频为例,详细讲解如何使用requests库提取m3u8地址,并调用FFmpeg批量下载ts分片合并为mp4,涵盖请求伪装、索引解析及常见问题排查。

weixin_31856057的博客 15万+

SAP FICO实操:如何修改已发生业务数据的成本中心公司代码(附RKACOR06程序运行指南)

本文详细解析了SAP FICO系统中使用RKACOR06程序修改已发生业务数据的成本中心和公司代码的实操方法。通过实战案例分享,提供从前期准备到后期验证的全流程指南,帮助企业应对组织架构重组或财务核算体系调整时的数据迁移挑战,特别适用于跨公司代码的成本中心划转场景。

weixin_27303545的博客 192

QUIC 协议详解

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

优秀技术文章收录 5017

自定义控件三部曲视图篇(六)——RecyclerView系列之三自定义LayoutManager

前言:把握生命里的每一分钟,全力以赴我们心中的梦,不经历风雨 怎么见彩虹,没有人能随随便便成功 在第一篇中已经讲过,LayoutManager主要用于布局其中的Item,在LayoutManager中能够对每个Item的大小,位置进行更改,将它放在我们想要的位置,在很多优秀的效果中,都是通过自定义LayoutManager来实现的,比如: 可以看到这些效果都非常棒,通过这一节的学习,大...

启舰 1万+

QUIC协议简史

QUIC简史 QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于UDP的传输协议,它实现了TCP + HTTPS + HTTP/2的功能,目的是保证可靠性的同时降低网络延迟。因为UDP是一个简单传输协议,基于UDP可以摆脱TCP传输确认、重传慢启动等因素,建立安全连接只需要一的个往返时间,它还实现了HTTP/2多路复用、头部压缩等功能。 为什么要使用QUIC 众所周知UDP比TCP传输速度快,TCP是可靠协议,但是代价就是 双方确认数据而衍生的一系列消耗,可以参

查理王的博客 4010

Zynq UltraScale+ RFSoC实战:用XCZU49DR开发板实现雷达信号处理全流程

本文详细介绍了如何利用Xilinx Zynq UltraScale+ RFSoC系列中的XCZU49DR开发板,高效实现雷达信号处理全流程。文章深入剖析了该芯片集成的射频直采ADC/DAC、可编程逻辑与Arm多核处理器的异构计算优势,并通过实战案例展示了从环境搭建、硬件链路设计到软件优化的完整开发路径,为相控阵雷达等高性能应用提供了单芯片解决方案。

weixin_29291863的博客 578

springcloud+nacos+gateway+oauth2小聚会

在微服务工程中,Nacos作为目前主流的注册中心和配置中心,Spring Cloud Gateway作为目前主流的网关,下面引入spring security+oauth2+jwt作为认证和授权中心,进行简单的聊聊。

ldcaws的专栏 2646
上一篇: Linux内核的TCP源码入门(一)
下一篇: QUIC协议设计(二)-握手
lic721
博客等级 码龄17年 36粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值