下一代互联网协议QUIC

举报
码乐 发表于 2024/03/06 14:00:14 2024/03/06
【摘要】 字数较多,请谨慎阅读 1 简介HTTP3 协议QUIC(Quick UDP Internet Connection)与HTTP/3有何关系?HTTP/3是第三个主要版本的HTTP协议。与其前任HTTP/1.1和HTTP/2不同,在HTTP/3中,将弃用TCP协议,改为使用基于UDP协议的QUIC协议实现。它最初被称为使用 QUIC 传输协议的 HTTP/2 语义,后来缩写为HTTP-over...

字数较多,请谨慎阅读

1 简介HTTP3 协议

  • QUIC(Quick UDP Internet Connection)与HTTP/3有何关系?

HTTP/3是第三个主要版本的HTTP协议。与其前任HTTP/1.1和HTTP/2不同,在HTTP/3中,将弃用TCP协议,改为使用基于UDP协议的QUIC协议实现。

它最初被称为使用 QUIC 传输协议的 HTTP/2 语义,后来缩写为HTTP-over-QUIC,一些人很快发现 HTTP/3 更加容易发音。
HTTP/3 使用 QUIC(快速 UDP 互联网连接),最初由 Google 于 2012年开发,作为SPDY (HTTP/2) 的继任者。

此变化主要为了解决HTTP/2中存在的队头阻塞问题。由于HTTP/2在单个TCP连接上使用了多路复用,受到TCP拥塞控制的影响,少量的丢包就可能导致整个TCP连接上的所有流被阻塞。

QUIC(快速UDP网络连接)是一种实验性的网络传输协议,由Google在2012开发,该协议旨在使网页传输更快。

在2018年10月28日的邮件列表讨论中,互联网工程任务组(IETF) HTTP和QUIC工作组主席Mark提出了将HTTP-over-QUIC更名为HTTP/3的正式请求,以“明确地将其标识为HTTP语义的另一个绑定,使人们理解它与QUIC的不同”,并在最终确定并发布草案后,将QUIC工作组继承到HTTP工作组。

在随后的几天讨论中,Mark Nottingham的提议得到了IETF成员的接受,他们在2018年11月给出了官方批准,认可HTTP-over-QUIC成为HTTP/3。

2019年9月,HTTP/3支持已添加到Cloudflare和Chrome(Canary build)。Firefox Nightly在2019年秋季之后添加支持。2022年6月6日,IETF正式标准化HTTP/3为RFC9114。

  • 什么是 HTTP/3?

HTTP/3 是超文本传输协议 (HTTP) 的主要修订版,该协议是支撑 Web 信息传输的技术。

HTTP/3 在 QUIC 之上运行,QUIC 是一种加密的通用传输协议,可在单个连接上多路复用多个数据流。

QUIC 最初由 Google 开发。该协议利用对用户数据报协议 (UDP) 的空间拥塞控制。

HTTP、HTTP/2 和 HTTP/3 之间是什么关系?

虽然 HTTP 实际上是“HTTP-over-TCP”,而 HTTP/2 可以被描述为“HTTP-over-TCP”,但 HTTP/3 最好描述为“HTTP/2-over-QUIC”。

在 2020 年亚洲黑帽虚拟会议期间,Google 工程师 Nick Harper 深入解释了 QUIC 和 HTTP/3 与 HTTP/2 的比较。

2 对比 HTTP/2和HTTP/3

安全研究人员才刚刚开始接触 HTTP/2,但网络的推动者和震动者已经在推出更新:HTTP/3。

该技术提供了性能提升和安全优势,但前提是我们克服了未来的许多部署问题,因为一位专家告诉我们,最好将其视为对网络工作方式的进化而不是革命性变化。

HTTP / 3:

对HTTP协议的重大修订,以实现更快、更可靠的网页浏览。
建立在QUIC传输协议之上。
提供改进的连接建立和多路复用等功能。
与以前的版本(HTTP/1.1和HTTP/2)相比,减少了延迟和拥塞。
例如:使用HTTP/3的网站可以更快地加载内容,提高响应速度,并提供更流畅的用户体验。

HTTP/2,QUIC:

一种安全可靠的传输协议,旨在改进TCP。
提供多路复用、连接迁移和前向纠错等功能。
减少连接设置时间,确保更快的数据传输。
用于网页浏览、视频会议、在线游戏等多种应用。
例如:使用QUIC的WebRTC呼叫提供更好的呼叫质量和更少的延迟。
在线多人游戏与QUIC提供更流畅的游戏和更少的延迟。

一个简单的对比图如下:

2.1 HTTP/3优点

  • 默认加密

所有连接都自动加密,连接建立速度更快,因为连接现在不再经过传统的TCP握手和TLS协商组合。

  • 性能提升
    HTTP/3 提高了性能,消除了HTTP/2的请求头阻塞,再加上零往返时间连接建立、丢失恢复简化和其他更改,提高了连接性能(特别是对于经常在次优网络条件下运行的移动设备)。

网络迁移支持,连接可以跨 IP 地址和网络移动而不会遇到中断。

切换到 QUIC 对解决 HTTP/2 的一个主要问题,即“请求头阻塞”还有很长的过程。

  • 可靠性提高:多路复用
    由于 HTTP/2 多路复用的并行性质对 TCP 的丢失恢复机制不可见,因此丢失或重新排序的数据包会导致所有活动事务停止,而不管特定事务是否受到丢失数据包的影响。

由于 QUIC 提供本机多路复用,因此丢失的数据包只会影响丢弃数据的流。

升级到 HTTP/3 的实际效果是减少互联网连接不良或有损的延迟。

  • 保密性更好

QUIC 几乎完全加密,这意味着 HTTP/3 也应该显着提高安全性。

技术官 表示,这种内置加密意味着中间操纵者 (MitM) 攻击的机会更少,而 QUIC 还包括其他有助于防止拒绝服务漏洞利用的功能。

QUIC 将其加密和传输握手结合在一起,允许在一次往返中连接到新服务器。
同样的技术允许快速恢复中断的连接,客户端在第一次飞行中发送加密的应用程序数据。

QUIC 使用 TLS 1.3 作为其加密握手的构建块。

  • 其他支持者认为的优点

HTTP/3 的支持者认为,与早期技术相比,该技术将提供更快的网站加载时间和更好的性能,尤其是在容易丢失的网络上。

Cloudflare 产品经理曼德尔 解释说:“简而言之,我们相信 HTTP/3 将使互联网对每个人都更好。HTTP/3 是 HTTP/2 的继任者,在加载网站时提供改进的性能。”

“HTTP/3 的用户将受益于更快的连接设置和更好的性能,这些网络具有大量的数据包丢失。这两项改进都确保了网站加载得更快、更可靠,”曼德尔解释说。

技术人员在谈论HTTP/3的好处时更加谨慎。

“性能也应该受益,尽管在实践中没有那么多,”他说。“对于网页加载等事情来说,删除行头屏蔽并不重要。”

“大多数收益将来自更短的握手时间设置,”他解释说,并补充说 HTTP/3 和 QUIC代表了“进化,而不是革命”。

“性能会更好,但对于网页浏览之类的事情来说,不会以一种超级引人注目的方式,”曼德尔说。“安全性应该更好,并防止多种攻击类型。”

HTTP/3 简化了 TCP 握手,即TCP的 3 次握手。它使用客户端和服务器之间的验证过程,该过程从客户端的请求开始,由服务器确认,并由客户端响应。

完成这三个步骤后,将建立通信通道,客户端现在可以连接到服务器以发送和接收数据。使用 QUIC 协议加速此过程的优点是 HTTP/3 在建立连接方面更快。

HTTP/3 不使用 TCP 作为每个会话的传输层,而是使用 QUIC,从而升级 TCP 慢启动。这对于游戏玩法和视频流来说将是巨大的。

总体而已,HTTP/3是针对HTTP/2的一次进化,因为:

    QUIC 流共享相同的连接;无需额外的握手即可创建新的握手。
    QUIC 流是独立传送的,因此影响一个流的数据包丢失不会影响任何其他流。
    QUIC 更新是独立的,不与操作系统更新绑定(就像 TCP 一样)。
    HTTP 级流映射在 QUIC 流之上,因此您可以获得 HTTP/2 的所有好处,而不会出现延迟。

它将 TCP 3 向握手与 TLS 1.3 握手相结合,因此您可以获得默认提供加密和身份验证的连接(并且建立连接的速度要快得多)。

虽然确实可以将一些 HTTP/2 功能映射到 QUIC之上,但它并不是所有功能的好解决方案,而这正是 HTTP/3 的用武之地。

3 开发库支持

为 QUIC and HTTP/3 实现了客户端或服务器逻辑的开源库有以下类型。

3.1 服务器的HTTP/3开发者工具包

  • LiteSpeed Web Serve
    2021年6月7日,LiteSpeed Web Server(及OpenLiteSpeed)6.0.2版本发布,并成为默认启用HTTP/3的首个版本。

  • Caddy
    Caddy 网页服务器v2.6.0(2022年9月20日发布)默认启用了HTTP/3。

  • Nginx
    Nginx 自1.25.0版本(2023年5月23日发布)开始支持HTTP/3。2020年6月,发布了支持HTTP/3的nginx技术预览版。 2023年2月,发布了支持HTTP/3的nginx二进制包。
    例如一个nginx的配置例子

下面是一个非常快速的 NGINX 配置和服务器实现示例。
当然,此服务器块需要与您的其他配置设置集成。

    server {
     listen 443 http3 quic reuseport; # UDP listener for QUIC+HTTP/3
     listen 443 ssl http2; # TCP fallback listener for HTTP/2

     ssl_protocols TLSv1.3; # QUIC requires TLS 1.3
     ssl_certificate ssl/www.example.com.crt;
     ssl_certificate_key ssl/www.example.com.key;

     add_header Alt-Svc 'quic=":443"'; # Advertise that QUIC is available
     add_header QUIC-Status $quic; # Sent when QUIC was used

    }
  • Nginx补丁
    Cloudflare发布了一个补丁,该补丁将quiche HTTP/3库集成到nginx中。

  • IIS服务
    Microsoft IIS 在Windows Server 2022/Windows 11上原生支持HTTP/3。
    HAProxy 自2.6版本(2022年5月31日发布)起支持 HTTP/3 over QUIC

3.2 客户端的支持库

现在大部分流行的浏览器都支持http3,比如chrome,edge。
它是 HTTP 协议的最新版本,是客户端和服务器之间跨 Web 数据交换的基础。
在 HTTP/1.1 中,安全层是可选的,很少在常规网站上使用。
直到谷歌和其他搜索引擎宣布了使用HTTPS的轻微排名因素,添加增加的安全层才变得普遍。

HTTP/3 支持更快、更可靠、更安全的 Web连接。
特别是,它改善了同时传输多个文件(例如每次加载网站时)。

而且,默认情况下,安全性是使用 TLS 1.3 的端到端加密来内置的,没有禁用它的选项。

也许这是显而易见的,但更快的网站等于更好的页面加载时间,这当然有助于 SEO。

3.3 实现HTTP/3的开发库工具包列表

名称 客户端 服务端 编程语言 所属公司 仓库链接
lsquic 支持 支持 C LiteSpeed https://github.com/litespeedtech/lsquic
nghttp3 支持 支持 C / https://github.com/ngtcp2/nghttp3
H2O 不支持 支持 C / https://github.com/h2o/h2o
curl 支持 不支持 C / https://github.com/curl/curl
MsQuic 支持 支持 C Microsoft https://github.com/microsoft/msquic
proxygen 支持 支持 C++ Facebook https://github.com/facebook/proxygen#quic-and-http3
Cronet 支持 支持 C++ Google https://github.com/chromium/chromium/tree/main/net/quic
.NET 支持 支持 C# Microsoft https://github.com/dotnet
quic-go 支持 支持 Go / https://github.com/quic-go/quic-go
http3 支持 支持 Haskell / https://github.com/kazu-yamamoto/http3
Kwik 支持 支持 Java / https://github.com/ptrd/kwik
Flupke 支持 支持 Java / https://bitbucket.org/pjtr/flupke
aioquic 支持 支持 Python / https://github.com/aiortc/aioquic
quiche 支持 支持 Rust Cloudflare https://github.com/cloudflare/quiche
neqo 支持 支持 Rust Mozilla https://github.com/mozilla/neqo
quinn 支持 支持 Rust / https://github.com/quinn-rs/quinn
s2n-quic 支持 支持 Rust Amazon Web Services https://github.com/aws/s2n-quic

3.4 现状

HTTP/3 的支持程度如何?
截至 2020 年 10 月,HTTP/3 协议是互联网草案标准,具有多种实现。

根据 W3Techs 的最新数据,前 1000 万个网站中有近 8% 支持 HTTP/3。

HTTP/3 在稳定版本的 Chrome(自 2019 年 12 月起)和 Firefox(自 2020 年 1 月起)浏览器中具有非默认支持。

3.5 HTTP/3推进的难点

Cloudflare 方面提前提供了部署 HTTP/3 时需要克服的困难点。
这包括让该技术与负载平衡器和深度数据包检测设备(所谓的“中间盒”)配合使用,以及建立浏览器支持:

为支持 QUIC 和 HTTP/3 而构建的软件是新的,并且正在迅速发展。
“我们很高兴看到强大的跨行业合作伙伴关系在解决出现的互操作性问题方面运作良好。随着标准和各种实现的成熟,我们希望继续发现和修复问题。

网络之间的传输提供商(在某些情况下甚至是 ISP)可能会运行历史上对 UDP 流量充满敌意的中间盒。
“为了释放QUIC的全部优势并允许所有客户端使用它,一些具有敌对中间盒的网络可能需要进行配置调整。为许多服务器操作员启用 QUIC 很复杂。”

例如,对于 Cloudflare 的客户来说,启用 HTTP/3 非常简单:只需点击仪表板上的 HTTP/3 切换开关,任何使用兼容浏览器访问其站点的人都可以通过新协议访问它。

客户支持仍然不是完全主流。“Google Chrome 最近在 QUIC 上为 ~95% 的浏览器启用了 HTTP/3;
我们预计其他主要浏览器供应商也会效仿,因为带有 QUIC IETF 标准的 HTTP/3 已经进入了最终草案。Firefox和Safari在成熟的早期阶段都有支持。

Cloudflare 在一篇详细的技术博客文章中解释了它是如何为 HTTP/3 做准备的,该博客文章很好地介绍了该技术。

技术官补充说,一些网络将“有意识地阻止QUIC,因为防火墙”可以不再跟踪连接设置或QUIC传输标头信息。

“数据包编号、确认、选项…都是在QUIC中加密的,”该技术官解释道。
“QUIC 仅在加密时才有效,而浏览器目前不能很好地使用自签名证书或’内部’根证书。”

需要调整负载均衡器以处理 QUIC 的连接 ID 和连接迁移功能。

技术官补充说,像0-RTT(往返时间)这样的高级功能具有很强的安全性,包括创建会话票加密密钥和防止重放攻击。

4 小结:未来展望

QUIC 和 HTTP/3 何时会成为主流技术?
QUIC 很复杂,因为 HTTP/2 连接不能像 HTTP/1.1 升级到 HTTP/2 一样简单地升级到 QUIC。这是因为 QUIC 在 UDP 而不是 TCP 上运行。

鉴于这种实现障碍,Marx 说,在接下来的几年里,HTTP/3 “可能是你在使用内容交付网络或外部服务提供商时得到的东西,而不是你在自己的服务器上设置的东西(对大多数人来说)”。

QUIC仍然是一个非常强大的协议,许多性能的提升将会随之而来,因为该协议比TCP更容易发展/调整,并且会出现新的最佳实践。

“尽管如此,它仍然非常复杂,更广泛的社区需要时间才能真正了解它是如何工作的以及如何使用它。”

它有如下实际的应用场景优点:

  • 网站加载:

在拥挤的网络中,使用HTTP/3的网站比使用HTTP/2的网站加载速度更快。单个QUIC连接可以同时处理多个请求,减少延迟并改善用户体验。

  • 视频会议:

使用QUIC的视频呼叫将比使用TCP的呼叫更稳定,更不容易中断。QUIC的特性,如连接迁移和前向纠错,确保无缝通信,即使在网络波动。

  • 在线游戏:

使用QUIC的在线多人游戏将提供更流畅的游戏体验,减少延迟。QUIC提供了更快的数据传输和有效的数据包丢失恢复,从而提高了响应能力,减少了玩家的挫败感。

结论:

HTTP/3和QUIC在增强互联网通信方面都发挥着重要作用。
HTTP/3侧重于更快、更可靠地交付web内容,而QUIC则作为底层支持。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。