
当通过网络传输数据时,一种新的协议QUIC(快速UDP互联网连接)正在成为FAANG的默认选择。本文描述了QUIC协议如何克服其他版本HTTP的限制并脱颖而出。
FAANG是美国市场上最受欢迎、表现最好的五只科技股的首字母缩写,即脸书、苹果、亚马逊、网飞和谷歌。
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方法的支持。
协议报头具有版本号、协议类型和状态代码字段。
响应类型:超文本、脚本、媒体、样式表
支持保持活动连接,但它是关闭默认情况下。
HTTP/1.1(1997年)
HTTP/1.0的主要缺点是它需要在每次请求响应时建立一个新的TCP连接。这非常耗时,并且会影响客户端和服务器的性能。HTTP/1.1的出现解决了这个问题:
多个HTTP请求和响应可以在一个TCP连接上传输。
添加了对上传、删除、跟踪和选项方法的支持。
默认持久连接
HTTP/2(2015年)
随着流媒体内容的增加,网站变得越来越复杂。为了满足这种需求,HTTP/1.1的功能不断扩展:首次支持多个TCP连接,并试探性地引入了流水线机制,即在同一个TCP连接中,客户端可以同时发送多个请求。但是扩张可以没完没了,最后需要采用新的协议,于是HTTP/2出现了,它包括以下几个主要改进:
多路复用:这是HTTP/2的一个特性,它允许通过一个TCP连接同时发起多个请求-响应消息。每个HTTP请求-响应都被分成二进制帧,客户端和服务器都以二进制帧为基本单位发送消息(请求和响应)。通过多路复用,客户端可以发送多个请求,而无需等待最后一个请求完成。这样,HTTP/2解决了HTTP队列头阻塞(HoL)的问题。如图所示:
头压缩:使用HPACK压缩消息头。
非阻塞下载
支持服务器推送
采用二进制框架代替纯文本。
解决了队列头堵塞的问题。
HTTP/3(2018)
通过复用,HTTP/2解决了队列头阻塞的问题。但是,如果TCP流中存在丢包,根据TCP的拥塞控制机制,其他数据流只能等待丢包重新发送和接收。所以HTTP/2中仍然存在TCP队列头阻塞的问题。
HTTP/3通过使用基于UDP的传输协议QUIC解决了这个问题。
HTTP/3是自HTTP/2以来最新也是最重要的HTTP版本。因为HTTP/3本身是为QUIC协议设计的,所以也被描述为基于QUIC的HTTP/2。HTTP/3的目标是通过使用Google 快速协议。HTTP/3包括以下功能:
使用基于UDP的QUIC作为传输协议。
解决了TCP队列头阻塞问题。
使用QPACK报头压缩机制
提供更快的页面加载时间。
HTTP/2与HTTP/3
相同点:
HTTP/2和HTTP/3使用相同的语法和语义结构,并应用于相同的请求/响应方法、状态代码和协议字段。此外,它们都使用类似设计的报头压缩算法(HPACK和QPACK)。
差异:
特点HTTP/2HTTP/3传输层协议TCP基于UDP的QUIC头压缩算法HPACKQPACK队列头阻塞问题解决HTTP队列头阻塞问题解决HTTP和TCP队列头阻塞握手协议TCP TLSQUIC加密协商可以通过TLS(默认版本为1.2,可选以后版本)与ALPN协议扩展协商使用Alt-Svc (TLS 1.3为TLS最低版本)进行QUIC协议。握手时间比较慢是因为需要TCP和TLS握手,所以QUIC协议直接处理数据流,所以比较快。
QUIC是一种新的基于UDP的多通道传输层网络协议标准。QUIC的主要目标是通过减少页面加载时间和提高HTTPS的传输性能来改善用户体验。本质上是TCP TLS HTTP/2。
设计HTTP/3的目的是充分利用QUIC的优势。QUIC协议本身可以处理数据流,所以消除了TCP队列头阻塞的问题。
QUIC的一些主要特点包括:
基于UDP
无队列头阻塞的连接多路复用
TCP的关键机制(连接复用、连接建立、拥塞控制、可靠性)被重构,成为可靠的传输协议。
分组交换
对于典型的QUIC协议,客户端和服务器之间交换三种类型的数据包,如下图所示:
1.安全第一袋
首先,客户端在加密帧中传输包含TLS 1.3客户端问候的第一个数据包。Hello包含不同类型的扩展,如目标服务器的SNI(服务器名称指示)、QUIC传输参数、压缩证书等。以及客户端支持的压缩方法和不同的加密套件。
如果服务器接受QUIC和TLS 1.3参数,它还会发送包含客户端确认信息的第一个数据包信息加密帧中的第一个数据包和TLS 1.3服务器Hello。Hello包含加密套件和不同的扩展(如密钥共享、支持的版本等。)由服务器接收。客户端收到服务器Hello后,会向服务器发送一个ACK确认包。
所有三个报头可以包含填充帧,以根据需要增加分组大小。
握手
在客户机和服务器之间交换了第一个数据包之后,服务器发送一个包含其余服务器端消息的握手数据包,例如与服务器身份验证相关的证书和加密扩展。客户端验证这些证书,然后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中,与传输相关的信息被不同的保护层加密,握手包在传输链路上不容易被识别和修改。因此,它提供了更安全的网络数据传输。
翻译/Alex technical Review/袁荣喜原文链接:https://blogs . keysight . com/blogs/tech/nwvs . entry . html/2021/07/16/road _ to _ quic-dga5.html特别说明:原作者Anubhab Sahu已授权本文翻译出版。谢谢你。
japan quarterly 日本季刊









