QUIC(Quick UDP Internet Connections)是一种基于UDP的传输层协议,由Google开发,旨在解决TCP协议在现代网络应用中的一些限制。QUIC协议在设计上提供了更快的连接建立时间、减少的延迟、更好的多路复用性能以及连接迁移的能力。随着QUIC的发展,HTTP/3协议被设计为在其之上运行,以利用QUIC的优势。

互联网通信协议的演进

在过去的三十年里,HTTP (超文本传输​​协议)一直是互联网的支柱。借助 HTTP,我们能够浏览网页、下载文件、播放电影等。它在TCP( 传输控制协议 上运行,TCP 协议存在一些限制,导致 Web 应用程序响应速度较慢。

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

过去几年中,QUIC 的采用率呈指数级增长。谷歌、Facebook、Pinterest 等大多数科技公司都已开始采用 HTTP/3.0,该协议在传输层使用 QUIC。这些公司的网站性能在使用 HTTP/3.0 和 QUIC 后得到了显著改善。

TCP 和 UDP 如何工作?

TCP(传输控制协议)和 UDP(用户数据报协议)是传输层协议。这些协议管理往返于任何电子设备的互联网数据包流。

TCP(传输控制协议)工作流程

三次握手建立连接:

  • SYN:客户端向服务器发送一个SYN(同步序列编号)数据包,请求建立连接。
  • SYN-ACK:服务器收到SYN数据包后,回复一个SYN-ACK数据包,表示同意建立连接。
  • ACK:客户端收到SYN-ACK后,发送ACK(确认)数据包,完成连接建立。

  • 数据传输:客户端和服务器开始发送数据,每个数据包都有序列号,以确保正确排序。
  • 流量控制:TCP使用窗口机制来控制发送速率,防止接收方被数据淹没。
  • 拥塞控制:TCP动态调整发送速率,以避免网络拥塞。
  • 数据确认:接收方发送ACK数据包,确认收到的数据。
  • 超时重传:如果数据包未被确认,发送方会在超时后重传。
  • 四次挥手终止连接:任一方都可以发起断开连接的请求,通过四次挥手过程来关闭连接。

TCP 是一种有状态且可靠的协议。它保证将所有数据包从一个设备传送到另一个设备。UDP是一种无连接协议。与 TCP 不同,客户端和服务器之间不需要三方握手。客户端将数据包发送到服务器,而不等待服务器的确认。

UDP 无法保证 100% 的数据包传输。数据包可能会丢失,可能无法到达其他设备。UDP 不像 TCP 那样可靠。由于没有初始握手,UDP 比 TCP 快得多。出于性能原因,UDP 主要用于音乐/视频等流数据应用。

UDP(用户数据报协议)工作流程:

  • 无连接建立:UDP是无状态的,不需要建立连接。
  • 数据发送:应用程序直接发送数据报到目标地址,无需事先建立连接。
  • 数据报传输:数据报通过IP网络传输,但UDP不保证数据报的顺序或完整性。
  • 可选的拥塞控制:UDP本身不提供拥塞控制,但应用程序可以实现自己的机制。
  • 无确认机制:UDP不提供数据报的确认或重传机制,如果需要,应用程序必须自己实现。
  • 快速传输:由于没有建立连接和确认机制,UDP可以更快地发送数据。
  • 适用场景:UDP适用于对实时性要求高的应用,如语音和视频通信,以及某些类型的在线游戏。

HTTP协议的演进

经过多次优化和性能改进。大多数现代设备使用HTTP 1.1 / HTTP 2.0HTTP 3.0。让我们回顾一下 HTTP 的历史,了解该协议经历的重大变化。

  1. HTTP/0.9 (1991)

    • 最初的HTTP版本,仅支持简单的文本请求,没有HTTP头和持久连接。
  2. HTTP/1.0 (1996)

    • 引入了HTTP头,支持请求和响应的多种类型。
    • 每个请求/响应都需要一个新的TCP连接,增加了连接建立和关闭的开销。
  3. HTTP/1.1 (1999)

    • 持久连接(Persistent Connections) :通过Connection: keep-alive头部,允许在一个TCP连接上发送多个请求和响应,减少了连接建立和关闭的频率。
    • 管道化(Pipelining) :允许客户端在等待第一个响应之前发送多个请求,但服务器必须按顺序响应,这仍然可能导致队头阻塞。
    • 缓存控制:引入了更多的缓存控制机制,如ETags和Last-Modified。
    • 范围请求:支持请求资源的一部分,有助于实现断点续传。

什么是队头阻塞?如上图所示,您有三个文件 - 图像、文本和视频。视频文件较大,传输时间较长。由于视频文件需要更多时间,因此会阻止图像和文本文件的发送。

  1. HTTP/2.0 (2015)

    • 二进制协议:采用二进制格式,提高了解析效率。
    • 多路复用:允许在单个TCP连接上并行交错发送多个请求和响应,解决了队头阻塞问题。
    • 头部压缩:减少了请求和响应头部的大小,提高了传输效率。
    • 服务器推送:服务器可以主动向客户端推送资源,减少了客户端请求的轮次。

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

这带来了性能提升,并在应用层解决了队头阻塞问题。然而,在 TCP 层,如果出现数据包丢失,则必须等待数据包重新传输。

在数据包丢失的情况下,多路复用解决方案无法按预期发挥作用。事实上,如果数据包丢失率超过 5%,HTTP 1.1 的性能要优于 HTTP 2.0。线头阻塞问题从应用层转移到了传输层。

什么是 QUIC?

QUIC协议的设计目标是在高延迟和不稳定的网络环境下提高网络应用程序的性能和可靠性。

QUIC(Quick UDP Internet Connections)是一种由Google开发的基于UDP的传输层协议,旨在提高网络通信的速度和效率。它通过实现低延迟的连接建立、多路复用的数据传输、网络路径迁移以及安全措施,确保了数据传输的保密性、完整性和可用性。

QUIC协议的关键特性包括:

  • 低延迟连接建立: 通过结合TLS握手和QUIC握手,QUIC能够在单个往返中完成连接的建立,减少了连接建立的延迟。
  • 多路复用: QUIC支持在同一连接上并行发送多个数据流,从而避免了队头阻塞问题,提高了数据传输的效率。
  • 连接迁移: QUIC使用Connection ID来标识连接,这使得即使在网络环境变化(如从Wi-Fi切换到移动数据)时,连接也能保持不断开。
  • 安全性: QUIC协议包括了类似于TLS的安全特性,确保了数据传输的安全性。
  • 流量控制和拥塞控制: QUIC实现了流量控制和拥塞控制机制,以防止发送方过载网络或接收方,同时保持网络通信的高效性。

QUIC协议的这些特性使其成为HTTP/3的基础,HTTP/3是超文本传输协议的最新版本,它利用QUIC协议的优势来提供更快、更安全、更可靠的Web浏览体验。随着QUIC的逐步标准化和部署,它已经开始对互联网的性能和用户体验产生积极的影响。

为什么选择QUIC?

QUIC协议的工作原理可以概括为以下几个关键方面:

  • 基于UDP:QUIC运行在UDP之上,利用UDP的无状态和低延迟特性,无需经过三次握手过程,三次握手过程会增加额外的开销并增加延迟,同时避免了TCP的某些限制,如队头阻塞。

QUIC 将 TLS 握手和 QUIC 握手合并到一个调用中。从而优化了握手过程并提高了性能。

  • 快速连接建立:QUIC使用0-RTT(零往返时间)握手,允许客户端在第一个数据包中发送应用程序数据,而不需要等待服务器的确认,从而减少了连接建立的延迟。

QUIC 通过将 TLS 握手与连接设置相结合来最大限度地减少延迟。这也称为0-RTT (零往返时间)。它可以更快地建立连接并提高 Web 应用程序的性能。

  • 多路复用:QUIC支持在同一连接上并行传输多个数据流,每个数据流独立进行流量控制和拥塞控制,从而避免了队头阻塞问题。

QUIC 为每个流(要传输的文件)创建一个 UUID。它使用 UUID 来标识流。然后通过单个通道发送多个流。通过多路复用,QUIC 可以通过单个通道发送多个数据流。它极大地帮助了下载多个文件(即图像、Javascript、CSS 等)的客户端应用程序。

  • 流控制和拥塞控制:QUIC实现了类似于TCP的流控制和拥塞控制机制,确保数据传输的稳定性和效率。
  • 数据包重传:由于 QUIC 在 UDP 上工作,数据包会丢失吗?不会的, QUIC能够检测丢失的数据包,并进行选择性重传,而不是重传整个连接的数据,这提高了传输效率。

<!---->

  • 安全性:QUIC内置了类似于TLS的安全特性,确保数据传输的加密和完整性。

QUIC 可在 TLS 1.3 上运行,可提供更好的安全性。此外,它还会加密协议的大部分内容,而 TCP 和 TLS 则仅加密 HTTP 负载。与 TCP 相比,QUIC 更能抵御安全攻击。

  • 连接迁移:QUIC使用Connection ID来标识连接,这使得即使客户端更换了网络,连接也能无缝迁移,而不需要重新建立。
  • 数据包格式:QUIC的数据包分为Header和Data两部分,Header是明文传输,包含必要的控制信息,而Data部分是加密传输的,包含实际的应用数据。
  • 版本协商:QUIC支持版本协商机制,允许客户端和服务器协商使用最合适的QUIC版本。
  • 服务器推送:类似于HTTP/2,QUIC也支持服务器推送功能,允许服务器在客户端请求之前主动发送资源。
  • 自定义扩展:QUIC协议允许自定义扩展,以适应不同的应用需求。

QUIC与TCP/UDP的比较

  1. 与TCP的比较

    • 连接建立:QUIC支持0-RTT握手,可以在单个往返中完成连接建立,而TCP需要三次握手,导致更高的延迟。
    • 队头阻塞:QUIC通过多路复用技术避免了TCP中的队头阻塞问题,允许并行传输多个数据流。
    • 连接迁移:QUIC支持在网络变化时的连接迁移,而TCP在这种情况下通常需要重新建立连接。
    • 拥塞控制和重传:QUIC实现了与TCP相似的拥塞控制和数据包重传机制,但进行了优化以适应QUIC的快速连接特性。
  2. 与UDP的比较

    • 可靠性:QUIC提供了类似于TCP的可靠性保证,包括数据包顺序、重传和流量控制,而UDP是无状态的,不保证数据包的顺序或可靠性。
    • 延迟:QUIC利用UDP的低延迟特性,同时通过0-RTT握手减少了连接建立的延迟。
    • 安全性:QUIC内置了加密和安全特性,类似于TLS,而UDP本身不提供安全性。
    • 多路复用:QUIC支持多路复用,允许在单个连接上并行发送多个数据流,而UDP不支持。

总的来说,QUIC结合了TCP的可靠性和UDP的低延迟特性,同时通过多路复用、快速连接建立和连接迁移等特性,提供了一种更适合现代网络应用的传输协议。QUIC的这些优势使其成为HTTP/3的基础,为Web通信提供了更快、更安全、更可靠的解决方案。

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/3和QUIC共同构成了下一代Web通信的基础,它们通过解决传统HTTP和TCP协议的限制,提供了一种更高效、更现代的网络通信方式。随着越来越多的浏览器和服务器开始支持HTTP/3和QUIC,我们可以期待未来的网络应用将更加快速和响应灵敏。


程序员小詹
7 声望0 粉丝