quic协议的演进之路

LiveVideoStack_ LiveVideoStack_     2022-12-17     103

关键词:

当通过网络传输数据时,一种新的协议QUIC(Quick UDP Internet Connection,快速UDP互联网连接)正在成为FAANG的默认选择。本篇文章描述了QUIC协议是如何克服其他版本HTTP的限制脱颖而出的。

 

FAANG是美国市场上五大最受欢迎和表现最佳的科技股的首字母缩写,即Facebook、Apple、Amazon、Netflix和Google。

 

HTTP的演进

 

HTTP属于应用层传输协议,运行于TCP/IP之上。现在它已成为万维网中数据交换的基础。HTTP包括4个稳定版本:HTTP/0.9、HTTP/1.0、HTTP/1.1 和HTTP/2。HTTP/3于2018年首次提出,目前已获得全球2/3 web浏览器的支持。

HTTP/0.9(1991)

 

HTTP/0.9是HTTP的第一个版本,用作W3C的底层通信协议。它是一个非常简单的客户端-服务器、请求-响应、使用Telnet的协议,只支持GET命令(作为请求方法)和超文本协议(作为响应类型)。该协议不包含HTTP消息头,且发送响应后,连接会立即断开。

 

HTTP/1.0(1996)

 

 

 

 

HTTP/0.9极其简单,且使用非常受限。新的HTTP版本HTTP/1.0引入了很多新特性,使它更加通用。这些新的特性包括:

 

  • 每次HTTP 请求/响应都会重新建立TCP连接

  • 添加了对 POST 和 HEAD 方法的支持

  • 协议头带有版本号、协议类型、状态码字段

  • 响应类型:超文本、脚本、媒体、样式表

  • 支持keep-alive连接,但默认情况下它是“关闭”的

 

HTTP/1.1(1997)

 

 

HTTP/1.0的主要缺陷是:它在每次请求\\响应时都要建立新的TCP连接。这种做法非常耗时,且影响客户端和服务器的性能。HTTP/1.1的出现解决了这一问题:

 

  • 单个TCP连接上可以传送多个HTTP请求和响应

  • 添加了对 PUT、DELETE、TRACE、OPTIONS 方法的支持

  • 默认持久连接

 

HTTP/2(2015)

 

随着流媒体内容的增加,网站也开始变得越来越复杂。为了满足这种需求,HTTP/1.1的功能不断扩展:首次支持多个TCP连接,并试验性地引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求但扩展不可能无止境,最终需要采用一个新的协议,于是HTTP/2出现了,该协议包括如下重大改进:

 

  • 多路复用:这是HTTP/2的一个特性,允许同时通过单个TCP连接发起多重请求-响应消息。每次HTTP请求-响应都被分割成二进制帧,客户端和服务器都以二进制帧为基本单位发送消息(请求和响应)。通过多路复用,客户端无需再等待上一个请求完成就可以发送多重请求。这样,HTTP/2便解决了HTTP队头阻塞(HoL)的问题。如图所示:

 

 

  • 头部压缩:使用 HPACK 压缩消息头

  • 非阻塞下载

  • 支持服务器推送

  • 采用二进制分帧,不再是纯文本

  • 解决了队头阻塞问题

 

HTTP/3(2018)

 

通过多路复用,HTTP/2解决了队头阻塞问题。但如果TCP流中出现了丢包,根据TCP的拥塞控制机制,其他数据流就只能等待丢包被重新发送和接收。所以,TCP的队头阻塞问题在HTTP/2中依然存在。

 

HTTP/3通过使用基于UDP的传输协议QUIC解决了这一问题。

 

HTTP/3是自HTTP/2之后最新且最主要的HTTP版本。因为HTTP/3本身就是为QUIC协议设计的,所以也被描述为基于QUIC的HTTP/2。HTTP/3的目标是通过使用谷歌的QUIC协议提供快速、可靠安全的网络连接。HTTP/3包括以下特性:

 

  • 使用基于UDP的QUIC作为传输协议

  • 解决了TCP队头阻塞问题

  • 使用QPACK头部压缩机制

  • 提供更快页面加载时间

 

 

HTTP/2 VS HTTP/3

 

下图展示了HTTP/2和HTTP/3两者的对比:

 

 

 

相同点:

 

HTTP/2 和 HTTP/3 使用相同的语法和语义结构,并且适用于同一请求/响应方法、状态码和协议字段。此外,两者都使用设计相似的头部压缩算法(HPACK 和 QPACK)。

 

不同点:

特性

HTTP/2

HTTP/3

传输层协议

TCP

基于UDP的QUIC

头部压缩算法

HPACK

QPACK

队头阻塞问题

解决HTTP队头阻塞

同时解决HTTP和TCP 队头阻塞

握手协议

TCP  + TLS

QUIC

加密协商

可通过TLS(默认版本为1.2,后续版本可选)与ALPN协议扩展进行协商

使用用于QUIC协议的Alt-Svc(以 TLS 1.3 作为 TLS 的最低版本)

握手时间

因为需要TCP和TLS 握手,所以更慢

QUIC协议直接处理数据流,所以更快

QUIC是一种新的多路传输层网络协议标准,建立在 UDP 之上。QUIC的主要目标是通过减少页面加载时间提升用户体验,并提高HTTPS的传输性能。它在本质上是TCP+TLS+HTTP/2。

设计HTTP/3的目的就是要充分利用 QUIC 的优势。QUIC 协议本身可以处理数据流,所以排除了 TCP 队头阻塞问题。

 

QUIC 的一些关键特性包括:

  • 基于UDP

  • 使用没有队头阻塞的连接复用

  • 重构TCP的关键机制(连接复用、连接建立、拥塞控制、可靠性),并成为可靠的传输协议

 

 

交换数据包

 

对于典型的QUIC协议,客户端和服务器之间交换了三种类型的数据包,如下图所示:

 

 

QUIC连接建立和安全的净荷包

 

1. 安全的首包

首先,客户端在一个CRYPTO 帧中传输包含TLS 1.3 Client Hello的首包。Client Hello包含不同类型的的扩展项,如目标服务器的SNI(Server Name Indication,服务器名称指示 )、QUIC 传输参数、压缩证书等,以及客户端支持的压缩方法和不同的加密套件。

 

如果服务器接受QUIC和TLS 1.3参数,它也会在CRYPTO帧中发送包含对客户端首包确认信息和TLS 1.3 Server Hello的首包信息。Server Hello中包含被服务器接收的加密套件和不同的扩展(如密钥共享、支持的版本等)。在客户端接收到 Server Hello后,会向服务器发送一个ACK确认包。

 

这三个首包都可能包含一个填充帧,以根据需要增加数据包的大小。

 

2. 握手包

客户端和服务器之间的首包被交换以后,服务器会发送一个握手数据包,其中包含余下的服务器端消息,如证书、与服务器身份验证相关的加密扩展。客户端会验证这些证书,然后QUIC 握手以客户端发送的握手消息结束。

 

3. 安全的净荷包

一旦安全的QUIC连接建立,客户端与服务器之间的信息便可以安全传输。

 

QUIC 0-RTT

 

为了缩短建立新连接的时间,QUIC采用0-RTT。在这里,如果客户端之前使用1-RTT连接到服务器,则服务器必须存储与流量控制相关的传输参数的副本,如 initial_max_data、initial_max_stream_data_bidi_local 等。

 

下一次,在QUIC 0-RTT模式中,客户端立即开始与服务器的数据传输,不需要等待握手完成。

 

然而,0-RTT也有设计上的缺陷:允许重放攻击

 

我们为什么要用QUIC?

 

传统的TCP协议是建立在操作系统层和中间路由模块之上实现的,它的握手阶段信息很容易被这些中间模块篡改而变得不安全。

 

但QUIC协议是在UDP之上的用户级(如浏览器)中实现的,因此它更加灵活、对用户更友好,并且能够在短时间内支持更多设备。

 

在 QUIC 中,传输相关的信息被不同的保护层加密,握手包在传输链路上不容易被识别和修改。因此它提供了更安全的网络数据传输。

延伸阅读:

QUIC Version 1 (RFC 9000) 作为标准化版本现已发布

一文看懂WebTransport

QUIC助力Snapchat提升用户体验

新一代直播传输协议SRT

三十年TCP与七年QUIC 谁才是未来?

 

翻译 / Alex 

技术Review / 袁荣喜

原文链接:

https://blogs.keysight.com/blogs/tech/nwvs.entry.html/2021/07/16/road_to_quic-DGa5.html

特别说明:原作者Anubhab Sahu已授权本文的翻译与发布,特此感谢。


 

 详情请扫描图中二维码或点击阅读原文了解大会更多信息。

今日头条架构演进之路——高压下的架构演进专题(含ppt)

今日头条架构演进之路——高压下的架构演进专题(含PPT)导读:高可用架构在6月25日举办了『高压下的架构演进』专题沙龙,进行了闭门私董会研讨及对外开放的四个专题的演讲,期望能促进业界应对峰值方法及工具的讨论,... 查看详情

服务端配置quic协议

【SRSQUIC】志宏:srs引入quic选型QUIC代理服务的实现尝鲜部署NginxQuic使用google的openssl库编译nginxquic 查看详情

quic协议文档翻译——什么是quic

...TPbqphgySwSNSDHLq9D5Bty4FSU/editQUIC是一个谷歌提出的新的互联网协议。QUIC解决出现在现在网络协议的一些传输层和应用层的问题,而且几乎不需要应用更改。QUIC和TCP+TLS+HTTP2十分相似,但是基于UDP实现。使用QUIC作为一个独立的协议可... 查看详情

云原生技术专题-servicemesh-技术演进之路

ServiceMesh技术演进之路有一篇非常著名的文章叫《ServichMesh模式》它详细的介绍了它如何从最初的原始的状态一步一步的演进成现在的这种形态的,我们对网络控制相关的逻辑是没有一个清晰的概念,通常都是通过突发问题的解... 查看详情

基于quic协议的http/3

HTTP/2存在一些比较严重的与TCP协议相关的缺陷,但由于TCP协议僵化,我们几乎不可能通过修改TCP协议自身来解决这些问题,那么解决问题的思路是绕过TCP协议,发明一个TCP和UDP之外的新的传输协议。但是这也面临着和修改TCP一样... 查看详情

斗鱼api网关演进之路(代码片段)

...汉站,斗鱼资深工程师张壮壮在活动上做了《斗鱼API网关演进之路》的分享。OpenRestyxOpenTalk全国巡回沙龙是由OpenResty社区、又拍云发起,邀请业内资深的OpenResty技术专家,分享OpenResty实战经验,增进OpenResty使用者的交流与学习,... 查看详情

quic协议初探-ios实践(代码片段)

...//mp.weixin.qq.com/s/NbewZ1NU49qSjIcdFrpotw|导语本文主要介绍了QUIC协议,以及初步研究的过程,用实践证明了QUIC协议在iOS平台的可行性1、QUIC介绍(1)QUIC(QuickUDPInternetConnections)协议是一种全新的基于UDP的web开发... 查看详情

服务端高并发分布式架构演进之路

写的非常好,值得收藏。转载地址:服务端高并发分布式架构演进之路 查看详情

各大互联网公司架构演进之路汇总

各大互联网公司架构演进之路汇总点击上方“Hollis”关注我,精彩内容第一时间呈现。全文字数:800阅读时间:2分钟大型网站架构演化历程大型网站架构技术一览支付宝和蚂蚁花呗的技术架构及实践支付宝的高可用与容灾架构... 查看详情

最佳实践服务端高并发分布式架构演进之路

...,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。特别说明:本文以... 查看详情

淘宝从几百到千万级并发的十四次架构演进之路!

淘宝服务端高并发分布式架构演进之路 中v中 关注 0.4 2019.06.0513:37 字数6273 阅读136评论0喜欢51.概述本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会... 查看详情

quic协议原理分析(转)

之前深入了解了一下HTTP1.1、2.0、SPDY等协议,发现HTTP层怎么优化,始终要面对TCP本身的问题。于是了解到了QUIC,这里分享一篇之前找到的有意义的文章。原创地址:https://mp.weixin.qq.com/s/vpz6bp3PT1IDzZervyOfqw作者介绍:lancelot,腾讯... 查看详情

quic/http3协议简析

从HTTP的进化历史讲起,细说使用协议的变迁,了解原因发现问题,解码QUIC在HTTP3中的支撑作用,共同探讨HTTP3的未来。HTTP、HTTP2和HTTP3先和大家来回顾一下HTTP的历史,看看HTTP3相比HTTP、HTTP2都有哪些改进和升级的地方。HTTPVSHTTP2... 查看详情

quic/http3协议简析

从HTTP的进化历史讲起,细说使用协议的变迁,了解原因发现问题,解码QUIC在HTTP3中的支撑作用,共同探讨HTTP3的未来。HTTP、HTTP2和HTTP3先和大家来回顾一下HTTP的历史,看看HTTP3相比HTTP、HTTP2都有哪些改进和升级的地方。HTTPVSHTTP2... 查看详情

阿里云文件存储的高性能架构演进之路

...级技术专家田磊磊进行了《阿里云文件存储的高性能架构演进之路》的报告。10月27日下午,2018中国计算机大会上举办了主题“数据中心计算”的技术论坛,一起探讨解决数据中心所面临的挑战。论坛上,阿里云分布式存储团队... 查看详情

最佳实践京东实时计算架构演进之路

...据量的增长,不断进行革新。二、京东实时计算架构演进之路2.1 订单量万级、百万级(以京东海外站为例)在订单量万级、百万级别的时候ÿ 查看详情

caddy域名配置与quic协议

1:配置域名和服务器 因为要支持QUIC协议必须要有自己的域名和安全证书,因此需要有自己的域名服务器,首先自己购买一个域名,然后和阿里云公网之前申请的大陆服务器进行域名绑定,绑定后访问网页的时候显示没有备案... 查看详情

google的quic华丽转身成为下一代网络协议:http/3.0

...,HTTP/3.0标准就要被制定了。据IETF透露,HTTP-over-QUIC实验协议将被重命名为HTTP/3,并成为HTTP协议的第三个正式版本。IETF是InternetEngineeringTaskForce的缩写,意思是互联网工程任务小组,主要负责互联网标准的开发和推动。被他们“... 查看详情