当前位置: 首页 > Web前端 > HTML

基于QUIC协议的HTTP-3你了解多少?

时间:2023-03-29 13:05:26 HTML

前言了解HTTP发展史:HTTP/0.9-HTTP/1.0-HTTP/1.1-HTTP/2.0多TCP连接最早的时候,HTTP是通过建立多条TCP连接来完成请求的,每一个请求都完成了当前的TCP连接将被关闭,新的请求需要建立新的TCP连接。缺点:每次请求都需要建立新的连接,造成性能损失;多次请求也会造成数据传输线上的数据重复,反之亦然。随着时间的推移,需要一个额外的协议来在端节点无误地提取所需的信息;安全性:在旧的HTTP协议上,CookieHack允许重用以前的工作会话来破解账户密码,因为HTTP1.1没有提供会话端点身份设施,以SSL/TLS的出现保证了会话的信息安全和保密性。keep-alive是在前面的基础上。加入keep-alive,主要解决每次都要建立新连接的问题。同时(时间可配置),同一个域名多次请求数据,只建立一次HTTP请求,达到提高请求效率的目的。缺点:请求数量有限(6~8)。请求一起发送到服务器,服务器需要按顺序一个一个响应缺点:阻塞问题,一个请求响应被阻塞,后面的响应也会被阻塞多路复用HTTP/2引入了两个很重要的概念:frame和stream(stream),服务端和客户端之间通过HTTP/2协议交换的双向文本格式帧序列称为“流”。HTTP协议的早期迭代一次只能传输一个流,每个流传输之间有一些时间延迟。多路复用意味着所有的请求都通过一个TCP连接同时完成。通过一个接一个地发送单个流来接收大量媒体内容是低效和资源密集型的。该层允许客户端和服务器将HTTP负载分解为小的、独立的和可管理的交错帧序列。然后在另一端重新组合此信息。多路复用之前的所有传输都基于基本文本。在多路复用中,它们基于二进制数据帧、消息和流的传输,因此可以实现乱序传输。多路复用对同一个域名下的所有请求都是基于流的,所以不存在同一个域的并行阻塞。好处总结如下:并行多路复用的请求和响应不会相互阻塞使用单个TCP连接来确保网络资源的高效使用,尽管传输多个数据流无需应用不必要的优化技巧-例如图像精灵、连接和域分片等-这会损害网络性能的其他方面减少延迟,更快的网络性能,更好的SEO减少运行网络和IT资源的OPEX和CAPEX除此之外,HTTP2具有许多其他方面的性能,安全性和可靠性的优势受益于介绍二进制协议、帧和流的概念。BodyHTTP/3HTTP/3是HTTP协议的第三个主要版本。与它的前身HTTP/1.1和HTTP/2不同,在HTTP/3中,TCP协议将被抛弃,取而代之的是基于UDP协议的QUIC协议。QUIC(QuickUDPInternetConnections)最早由谷歌于2012年部署,它依托于更底层的UDP协议,重新定义了网络层的边界,重新定义了“用户空间”中的握手、可靠性特性和安全特性,以及免去升级上网系统内核的麻烦。协议目录还是草稿,需要检查网站是否支持HTTP/3:http3check这个改动主要是为了解决HTTP/2中的head-of-lineblocking问题。由于HTTP/2在单个TCP连接上使用多路复用,在TCP拥塞控制的影响下,少量的丢包可能会导致整个TCP连接上的所有流都被阻塞。QUIC项目最初是作为TCP+TLS+HTTP/2的替代方案来改善用户体验,尤其是页面加载时间。IETF的QUIC工作组定义了传输层(QUIC)和应用层(HTTP/3)之间的明确界限,以及从QUICCrypto到TLS1.3的迁移。因为TCP是在操作系统内核和中间件中实现的,所以对TCP进行广泛的重大更改几乎是不可能的。然而,由于QUIC建立在UDP之上并且传输功能是加密的,因此它没有这样的限制。基于TCP+TLS和HTTP/2的QUIC和HTTP/3的主要特性包括减少连接建立时间——在常见情况下为0往返改善拥塞控制反馈多路复用,没有队头阻塞连接迁移传输可扩展性可选的不可靠交付HTTP/3(QUIC协议)新特性零RTT建立连接传统HTTP/2(所有HTTP/2浏览器都是基于HTTPS的)在传输数据之前需要三个RTT,即使是第一次TLS握手对称密钥缓存也需要两个RTT来传输数据;对于HTTP/3,QUIC集成了TLS加密功能,相比早期的TLS1.3版本有更多优势,其中最重要的是减少了握手所花费的RTT次数,传输数据只需要一次RTT,如果它被缓存,RTT可以减少到零。其核心是DH密钥交换算法:客户端向服务器请求数据。服务器生成三个随机数g、p、a,并用这三个随机数生成A。保留a后,将g,p,A(ServerConfig)传给客户端client生成随机数b,保留b后,用g,p,b三个随机数生成B客户端再用A,b,p生成秘钥K,用K加密HTTP数据,和B一起发送给服务端,服务端再用B,a,p得到相同的秘钥K,解密HTTP数据连接迁移传统连接通过源IP、源端口、目的IP、目的端口连接时,网络改变后重新建立连接需要很长时间;HTTP/3使用ConnectionID来维护连接,只要ConnectionID不变,仍然可以保持连接。修复了线头阻塞/多路复用TCP作为面向连接的协议,它等待每个请求的ACK以继续连接。一旦中间连接丢失,就会造成队头阻塞。HTTP/1.1中提出的Pipelining方式,单个TCP连接请求可以发送多次,但是仍然会存在中间请求丢失导致阻塞的问题。在HTTP/2中降低了请求粒度,以Frame的形式发送请求。但是在TCP层,Frames被组合成Streams进行传输。一旦Streams中的Frames丢失,后续的Streams将被阻塞。对于HTTP/2,浏览器默认会使用TLS传输。TLS根据Records组织数据。每个Record有16K,其中有12个TCP包。一旦其中一个TCP数据包出现问题,整个Record就无法解密。这就是为什么在网络环境较差的情况下,HTTP/2的传输速度比HTTP/1.1慢的原因。HTTP/3基于UDP传输,不保证连接可靠性,不存在队头阻塞的后果。同样,传输单元和加密单元都是Packet,这样也可以避免TLS下的head-of-lineblocking问题。拥塞控制热插拔:TCP的拥塞控制在传输层,QUIC可以在应用层操作和改变拥塞控制方式。ForwardErrorCorrection(FEC)):数据分包后,可以对每个包进行异或运算,运算结果随数据一起发送。一旦数据丢失,可以进行相应的计算。(Bandwidthfortime)PacketNumber单调递增:TCP不支持超时重传后接受两个ACK,导致RTT和RTO的计算出现偏差。HTTP/3对此进行了改进,一旦重传PacketN就会增加ACKDelay:HTTP/3在计算RTT时鲁棒性地考虑了服务器的ACK处理延迟。流量控制TCP使用滑动窗口来控制发送方的流量,但对接收方没有限制。.QUIC弥补了这个短板。在QUIC中,接收者从单个Stream和整个连接的角度动态调整接受窗口的大小。结束语HTTP/3QUIC协议是基于UDP实现的,同时也结合了TCP和TLS的优点。与TCP相比,提高了传输效率。虽然UDP确实为QUIC和HTTP/3提供了一些先天优势,但它也带来了一些挑战,TCP多年来一直是主流协议,但UDP不是,因此操作系统及其软件堆栈通常没有优化,这也需要技术研究和突破TLS是强制性的,旨在使中间设备难以篡改或嗅探流量。这也是为什么经常看到防火墙提供商和供应商将UDP协议视为一个问题并提供禁用它的方法,从而使中介机构更难检查、监视或过滤QUIC流量。经过这么多年的发展和IETF的推动,HTTP3协议肯定会越来越流行,主流的终端和操作系统也会支持HTTP3。同时,HTTPSoverTCP由于其兼容性和众多终端的拥趸,将继续占据一席之地。参考文章解密HTTP/2和HTTP/3新特性【维基百科】HTTP/3kinsta博客