写点什么

HTTP/3 为什么正迅速吞噬世界?

作者 | Robin Marx 

  • 2023-11-12
    北京
  • 本文字数:2263 字

    阅读完需:约 7 分钟

大小:1.18M时长:06:54
HTTP/3为什么正迅速吞噬世界?

超文本传输协议(HTTP)作为互联网的基石,一直在网页加载、视频流传输、应用获取数据等方方面面发挥重要作用。

 

去年,负责定义互联网技术的互联网工程任务组(IETF)将该协议的最新版本 HTTP/3 定为标准。在此之后,HTTP.3 及相关 QUIC 协议在公共网络上迅速普及。尽管不同来源和测量方法给出的结果略有差别,但目前普遍认为全球 19%到 50%的 Web 服务器和网络均已支持 HTTP/3。

 

由于这些新协议得到谷歌和 Meta 等大公司的广泛应用,我们认为,当前互联网流量中已经有很大一部分在使用 HTTP/3。

 

在本篇文章中,我将介绍一些背景信息,介绍 HTTP/3 解决了哪些问题、它是如何执行的、为什么能够得到迅速普及,以及 HTTP/3 仍然面临哪些有待克服的障碍。

 

我们为什么需要 HTTP/3?

 

网络协议所描述的,是数据如何在网络上的两个实体之间(通常是用户设备和 Web 服务器)进行通信。因为市场上有多家公司在为网络开发软件,因此通信协议必须确保标准化,以便所有软件之间都可以“互操作”。换句话说,各软件能够在遵循相同规则的基础之上相互理解。

 

在实践当中,我们往往不会使用单一某种协议,而是同时使用多种协议的组合。其中各项协议都有自己的作用和规则(详见图一)。这样的设计是为了保障灵活性和可复用性——无论大家使用的是 Wi-Fi、固网还是 4G/5G,都能使用完全相同的 HTTP 逻辑。



图 1 HTTP/2 与 HTTP/3 的协议栈,如何将多项协议组合起来以提供完整的互联网功能

 

不少初期互联网协议早在上世纪 80、90 年代就已经被定为标准,这意味着它们在设计上考虑的是几十年前的需求和限制。虽然其中一些协议经受住了时间的考验,但也有不少已经明显有些过时了。大多数问题倒是可以通过变通和一些小技巧进行解决,可也有一些到了不得不变的时候。其中最典型的就是传输控制协议(TCP),它的作用是确保数据能够可靠地在互联网上往来传输。

 

为什么说 TCP 已经不适合如今的 Web

 

HTTP/1.1 和 HTTP/2 正常运作的前提,就是以 TCP 为基础。具体来讲,在客户端和服务器间交换 HTTP 请求/响应之前,必须先建立起 TCP 连接。

 

随着时间推移,人们做出了不少努力来更新 TCP,并解决其中一些影响效率的问题——例如,TCP 会将网页视为单个文件,而非由数百个独立文件构成的集合。虽然部分更新已经取得成功,但多数影响较大的更新(例如 TCP 多路径和 TCP Fast Open)花了近十年时间才在公共互联网上实际落地。

 

革新 TCP 的主要挑战,在于互联网上成千上万的设备各有各的 TCP 协议实现。除了大家第一时间能想到的手机、笔记本电脑和服务器,还有路由器、防火墙、负载均衡器等其他类型的“中间装置”。也就是说,如果我们想要更新 TCP,就必须等待这些设备中的大部分都对自己的协议实现做更新,而这明显是个需要耗时数年的艰辛过程。

 

QUIC 解决方案

 

面对这个几乎无解的问题,最靠谱的办法反而是直接出台一种全新方案、直接替换掉 TCP。这套替代方案就是 QUIC 协议,但也有不少人半开玩笑地将其称为 TCP 2.0。这个昵称其实并无不妥,因为 QUIC 中确实包含许多与 TCP 相同的高级功能,只是做了一系列关键性调整。

 

其中最大的变化就是 QUIC 与传输层安全(TLS)协议的深度集成。TLS 负责加密网络上的敏感数据,也就是 HTTPS 中的 S(安全)。在 TCP 协议下,TLS 仅加密实际 HTTP 数据(参见图二);对于 QUIC,TLS 还会对 QUIC 协议本身的大部分内容进行加密。也就是说,TCP 当中对所有中间件均可见(且可更改)的元数据(例如数据包编号、连接关闭信号等),在现在的 QUIC 中将仅供客户端和服务器使用。

 


图 2 TCP+TLS 与 QUIC 之间的加密差异。可以看到,QUIC 中被加密的不仅仅是 HTTP 数据

 

此外,由于 QUIC 的加密程度更高,所以对它的变更或新功能添加要比 TCP 简单得多——即只需要更新客户端和服务器,因为中间件无论如何也无法解密元数据。这就让 QUIC 成为一种面向未来的协议,能帮助我们快速解决种种新兴挑战。

 

当然,这种额外的加密机制也有助于增强新协议的总体安全性和隐私性。虽然 TCP+TLS 非常适合保护信用卡或电子邮件内容等个人敏感数据,但却仍容易受到复杂(隐私)攻击的影响。而且随着 AI 技术的快速发展,这些攻击的实施门槛也越来越低。通过进一步加密此类元数据,QUIC 协议无疑能够更好地应对精心策划的恶意攻击。

 

QUIC 还包含诸多其他与安全相关的功能,包括防御分布式拒绝服务(DDoS)攻击、以及防放大和 RETRY 数据包等功能。

 

最后,与 TCP 相比,QUIC 还带来了大量效率和性能改进,包括更快的连接握手(参见图三)、消除“队头阻塞”问题、更好的数据包丢失检测/恢复,以及处理用户切换网络的方法(我们将在后续文章中具体介绍)。



图 3 QUIC 在设置上拥有更快的连接速度,因为它能将“传输”三向握手与 TLS 加密会话相结合,性能优于 TCP+TLS 中的两个独立过程

 

我们真正需要的并不是 HTTP/3,而是 QUIC

 

最初,我们也曾尝试保留 HTTP/2 并进行增量式调整,希望能在底层用上 QUIC(毕竟当初保留这么多协作元素和可复用协议,意义也就在于此)。但很明显,QUIC 与 TCP 之间存在着巨大差异,HTTP/2 根本无法全部兼容。因此,互联网工程任务组才决定专门为 QUIC 制作新的 HTTP 版本,这就是现在的 HTTP/3。

 

HTTP/3 与 HTTP/2 几乎相同,二者的主要区别就体现在 QUIC/TCP 之上各项功能的技术实现。但由于 HTTP/3 能够使用 QUIC 的全部新功能,因此在加载网页和流媒体视频时将带来更好的性能表现。也正是这个优势,让 HTTP/3 得到了市场的广泛认可和快速接纳。

 

原文链接:


https://blog.apnic.net/2023/09/25/why-http-3-is-eating-the-world/


相关阅读:


HTTP/3 发布了,我们来谈谈 HTTP/3

基于 QUIC 协议的 HTTP/3 正式发布

从 HTTP 到 HTTP/3 的发展简史

HTTP/3 与 HTTP/2 的性能对比

2023-11-12 08:007484

评论 1 条评论

发布
用户头像
真正推进很难吧,毕竟大量的基建(路由器之类的)都是支持tcp类型的,QUIC道阻且长
2023-11-23 10:44 · 北京
回复
没有更多了
发现更多内容

无脚本自动化测试

FunTester

Java面试题解析:如何使用ReentrantLock的条件变量,让多个线程顺序执行?

千锋IT教育

记一次多个Java Agent同时使用的类增强冲突问题及分析

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

钉钉全栈化实践总结-前端篇

阿里技术

前端 钉钉 全栈

最佳实践|用腾讯云AI图像能力实现AI作画

牵着蜗牛去散步

腾讯云 腾讯 AI

区块链DAPP开发成本差别如此之大?深圳区块链公司告诉你

W13902449729

dapp dapp开发 区块链开发

云原生时代数据库技术趋势与场景选型

OceanBase 数据库

“基础-中级-高级”Java后端25个技术栈面试题集结

程序知音

Java java面试 后端技术 Java面试八股文

动态路由协议一

初学者

协议 路由 11月月更

深圳区块链DAPP程序开发未来发展简介

W13902449729

dapp开发

5款宝藏办公软件,高质量打工人必备!

淋雨

OCR 办公软件 IDM

Karmada大规模测试报告发布:突破100倍集群规模

华为云开发者联盟

云计算 云原生 华为云 企业号十月 PK 榜

RocketMQ 在同程旅行的落地实践

Apache RocketMQ

消息队列 Apache RocketMQ

不只是负载均衡,活字格智能集群的架构与搭建方案

葡萄城技术团队

动态路由协议

初学者

协议 路由 11月月更

大数据生态中的 RocketMQ 5.0

Apache RocketMQ

消息队列 Apache RocketMQ

华为阅读年度会员4折,万元好礼抢先看

叶落便知秋

大咖分享 | 如何构建 Alluxio 审计日志分析系统

Alluxio

分布式 Alluxio 大数据 开源 数据编排 审计日志

网易云信 toB 质量保障体系实践

网易云信

质量保障 PaaS平台

直播预告 | PolarDB for PostgreSQL - 共享存储在线扩容

阿里云数据库开源

数据库 postgresql 阿里云 开源 polarDB

Hexo+Github搭建个人博客教程(二)

程序员余白

Hexo 博客搭建 11月月更

MSE 结合 Dragonwell,让 Java Agent 更好用

阿里巴巴云原生

阿里云 微服务 云原生

BI智慧工程行业应用方案丨文末获取三重资源包

葡萄城技术团队

【网易云信】网易云信 toB 质量保障体系实践

网易智企

质量保障 PaaS平台

【kafka思考】最小成本的扩缩容副本设计方案

石臻臻的杂货铺

kafka 11月月更

快速实现无人车远程控制开发——实践类

阿里云AIoT

阿里云 物联网 远程控制

Hexo框架+Github 搭建免费静态博客教程(一)

程序员余白

Hexo Github' 博客搭建 11月月更

复杂A/B实验如何设计?火山引擎DataTester帮你落地!

字节跳动数据平台

大数据 数据 火山引擎 A/B测试

2022最全Java面试八股文,已经帮助512人进入大厂(备战明年春招必看)

程序知音

Java java面试 java架构 后端技术 Java面试八股文

探究多线程和异步

C++后台开发

多线程 后端开发 异步 linux开发 C++开发

头一次见!阿里牛人上传的600页JVM垃圾优化笔记飙升GitHub榜首

程序知音

Java JVM 性能调优 java架构 后端技术

HTTP/3为什么正迅速吞噬世界?_架构/框架_InfoQ精选文章