Featured image of post QUIC 如何在速度和安全性方面取代 TCP?

QUIC 如何在速度和安全性方面取代 TCP?

 

原文链接how-quic-is-displacing-tcp-for-speed

引言

在过去的三十年中,HTTP(超文本传输协议)一直是互联网的支柱。我们能够浏览网页、下载文件、流式传输电影等,都是因为HTTP。这个协议多年来不断发展,见证了重大的改进。

HTTP协议是一个应用层协议,工作在TCP(传输控制协议)之上。TCP协议有一些限制,导致网络应用程序响应性较差。

谷歌开发了一种改变游戏规则的传输协议QUIC,以克服TCP的缺点。QUIC几年前被标准化并加入到IETF(互联网工程任务组)。

在过去几年中,QUIC的采用呈指数级增长。大多数科技公司,如谷歌、Facebook、Pinterest等,已经开始采用使用QUIC作为传输层的HTTP/3.0。这些公司在使用HTTP/3.0和QUIC后,其网站性能有了显著提升。

让我们开始我们的旅程,了解QUIC如何取代TCP。我们首先将了解一些基本的TCP和UDP网络概念。之后,我们将看看HTTP的演变,以及每个版本是如何克服前一个版本的限制的。然后,我们将了解QUIC是什么以及它的工作原理。我们将探讨为什么QUIC的性能比TCP高。

TCP和UDP是如何工作的?

TCP(传输控制协议)和UDP(用户数据报协议)是传输层协议。这些协议管理互联网数据包流向和来自任何电子设备的过程。让我们详细了解这两个协议是如何工作的。

TCP

TCP是一种基于连接的协议。客户端与服务器建立连接,然后发送数据。TCP连接是通过一种称为三次握手的机制建立的。下图展示了三次握手过程:

TCP 三次握手过程

这个过程包括三个步骤:

  1. SYN - 客户端向服务器发送一个SYN数据包。

  2. ACK - 服务器接收到SYN后,通过ACK数据包向客户端发送确认。

  3. SYN-ACK - 客户端收到服务器的ACK数据包后,最终通过SYN-ACK向服务器发送确认。

TCP是一个有状态和可靠的协议。它保证从一台设备到另一台设备的所有数据包的传输。此外,它允许客户端和服务器使用相同的连接进行通信。

UDP

UDP是一种无连接协议。与TCP不同,客户端和服务器之间没有三次握手。客户端向服务器发送数据包,不等待服务器的确认。

UDP不能保证100%的数据包传输。数据包可能会丢失,可能无法到达另一台设备。UDP不像TCP那样可靠。

由于没有初始握手,UDP比TCP快得多。出于性能原因,UDP主要用于流式数据应用程序,如音乐/视频。

这是一个流行的互联网梗,对TCP/UDP进行了调侃:

TCP VS UDP 梗

到目前为止,我们已经了解了TCP和UDP协议是如何工作的。现在让我们探索HTTP协议,这是一个应用层协议。

HTTP的演变

Tim Berners-LeeCERN开发的HTTP的第一个版本是在1989年。从那时起,该协议经历了多次优化和性能改进。大多数现代设备使用HTTP 1.1/ HTTP 2.0HTTP 3.0。让我们回顾一下HTTP的历史,了解协议经历的重大变化。

HTTP/1.0

在最初的HTTP/0.9版本之后,HTTP/1.0开始支持头、请求体、文本文件等。客户端每次使用HTTP从服务器获取数据时,都必须创建一个TCP连接。这导致在建立连接时显著浪费资源。

HTTP/1.1

这个协议增加了对重用客户端和服务器之间现有TCP连接以获取新数据的支持。这是通过HTTP头keep-alive实现的。

如果客户端想要获取10个JavaScript文件,那么它将与服务器建立一个连接。然后,它将重用相同的连接来获取这10个文件,而不是为每个文件创建一个新连接。

这导致资源浪费减少和性能提升,因为它避免了创建多余的连接。然而,一个主要的缺点是众所周知的_队头阻塞_问题。

下图展示了_队头阻塞_问题。

队头阻塞

让我们通过一个例子来理解这个概念。如上图所示,你有3个文件 - 图像、文本和视频。视频文件体积较大,传输时间会更长。由于视频文件传输时间较长,它会阻塞图像和文本文件的发送。

HTTP/2.0

HTTP 2.0通过多路复用解决了_队头阻塞_问题。通过多路复用,多个文件可以通过同一个TCP连接发送。

HTTP/2.0中的多路复用

这导致了性能提升,并解决了应用层面的队头阻塞问题。然而,在TCP层面,如果发生数据包丢失,它必须等待数据包重传。

多路复用解决方案在数据包丢失的情况下并不像预期的那样有效。实际上,如果数据包丢失超过5%,HTTP 1.1的性能比HTTP 2.0更好。_队头阻塞_问题从应用层转移到了传输层。

下图展示了单个数据包丢失如何导致多个流延迟:

HTTP/2.0中的数据包丢失导致重传和流延迟

当一个数据包丢失时,TCP将其后续数据包存储在其缓冲区中,直到收到丢失的数据包。然后TCP使用重传来获取丢失的数据包。HTTP无法看到TCP重传。因此,在这种情况下,不同的流会看到传输延迟。

什么是QUIC?

在过去的几个部分中,我们看到了TCP有一些固有的限制,如三次握手和队头阻塞。这些限制可以通过增强TCP或用新协议替换TCP来解决。

尽管增强TCP很简单,但TCP存在于最低层,与操作系统紧密耦合。简单来说,TCP的代码存在于内核层而不是用户空间。考虑到大量的设备,实施内核空间的更改将需要大量的时间才能到达所有用户。

因此,谷歌提出了一种新的协议QUIC,作为TCP的替代品。像TCP一样,QUIC也是一个传输层协议。然而,它位于用户空间而不是内核空间。这使得它容易更改和增强,与TCP不同。

QUIC在UDP之上工作。它通过使用UDP克服了TCP的限制。它只是一个在UDP之上的层或包装器。该包装器添加了TCP的功能,如拥塞控制、数据包重传、多路复用等。它内部使用UDP,并在其上添加了TCP的最佳功能。

下图显示了QUIC如何适应网络栈:

带有QUIC的网络栈

现在我们已经了解了QUIC的基础知识,让我们深入了解这个协议的工作原理。

QUIC是如何工作的?

QUIC握手

QUIC在UDP上工作,它不需要经过三次握手过程。三次握手过程增加了额外的开销,增加了延迟。因此,QUIC通过减少连接延迟来提高性能。

在TCP的情况下,还有一个额外的用于TLS的握手,这也增加了延迟。QUIC将TLS握手和QUIC握手合并为一个调用。它优化了握手过程并提高了性能。

可靠性

您可能会想“既然QUIC在UDP上工作,数据包会丢失吗?”。答案是不。QUIC在UDP堆栈上添加了可靠性。它实现了数据包重传,以防它没有收到必要的数据包。例如:如果服务器没有收到来自客户端的第5个数据包,协议将检测到它并要求客户端重新发送相同的数据包。

多路复用

与TCP类似,QUIC也实现了多路复用。客户端可以使用单个通道同时传输多个文件。QUIC为每个流(传输的文件)创建一个UUID。它使用UUID来识别流。然后,多个流通过单个通道发送。

下图展示了QUIC中多路复用是如何工作的:

QUIC中的多路复用

QUIC还通过其多路复用解决了TCP面临的队头阻塞问题。如果一个流遭受数据包丢失,只有该流会受到影响。QUIC中的流是独立的,不会影响彼此的工作。

安全性

此外,QUIC 还支持 TLS 1.3(传输层安全性)。这保证了数据的安全性和保密性。TLS 加密了 QUIC 协议的大部分内容,例如数据包编号和连接关闭信号。

为什么选择QUIC?

  • 降低延迟 - QUIC通过将TLS握手与连接建立结合起来,最小化了延迟。这也被称为0-RTT(零往返时间)。它实现了更快的连接建立,并提高了网络应用程序的性能。
  • 多路复用 - 通过多路复用,QUIC可以在单个通道上发送多个数据流。这对于下载多个文件(如图像、JavaScript、CSS等)的客户端应用程序非常有用。
  • 连接迁移 - 使用QUIC,您可以在不出现任何问题的情况下从一种网络接口切换到另一种(例如从Wi-Fi切换到移动数据)。这对于移动设备很重要,并提高了用户体验。
  • 提高安全性 - QUIC使用TLS 1.3,提供更好的安全性。此外,它还加密了协议的大部分,与只加密HTTP有效载荷的TCP和TLS不同。与TCP相比,它更能抵御安全攻击。
  • 广泛支持 - 自其诞生以来,它的采用率一直在上升。这进一步加强了它的有效性。

HTTP/3和QUIC

HTTP/3是超文本传输协议(HTTP)的最新版本。它内部使用QUIC而不是TCP。它旨在为现代网络提供更有效和安全的基础。它拥有QUIC提供的所有优势。

HTTP/3由IETF标准化。今天,很大一部分互联网流量依赖于HTTP/3。以下是显示HTTP/3采用率的图表:

HTTP/3.0 采用率
从上述图表中可以看出,采用率已经飙升至30%,并逐渐超越了HTTP/1.1。按照目前的发展速度,HTTP/3.0将在未来几年逐渐超越HTTP/2.0

结论

自三十年前HTTP诞生以来,互联网已经走过了漫长的道路。HTTP的演变使在线体验更加高效和响应迅速。随着现代应用程序需求的增长,我们意识到了底层协议如TCP的固有限制。

谷歌开发了改变游戏规则的协议QUIC。它利用UDP并解决了TCP的所有不足。降低延迟、多路复用、增强安全性和连接迁移是QUIC的一些显著特点。QUIC带来的创新解决了队头阻塞等问题。

像谷歌和Facebook这样的大型科技公司通过在HTTP/3中采用QUIC,在性能上取得了显著提升。随着采用率的上升和日益增长的支持,HTTP/3将成为互联网通信的标准。在未来几年,互联网将发展并过渡到HTTP/3,以实现效率、可靠性和性能。

参考文献

  1. TCP VS UDP 梗
  2. 为什么HTTP/3.0正在吞噬世界?
  3. Pinterest现在使用HTTP/3.0
  4. 与谷歌对等 - QUIC
Licensed under CC BY-NC-SA 4.0
最后更新于 Jun 14, 2024 09:38 CST
使用 Hugo 构建
主题 StackJimmy 设计