HTTP / 3用UDP替换TCP以提高网络速度和可靠性 - thenewstack


当初之所以使用TCP,是因为TCP比UDP可靠,这是常识,但是这个常识是有上下文背景的,那就是基于可靠的底层网络。

HTTP / 2通过在同一连接上发送多个HTTP请求,允许应用程序同时处理请求,从而更好地利用网络带宽。但只有在网络运行良好时才能实现这些收益。你可以最大化你的吞吐量和带宽,因为TCP可以达到它可以达到的最大速度,并且所有并行连接都能以最快的速度运行。

这很好,直到网络连接出现问题,例如网络拥塞或在移动网络上从一个小区移动到另一个小区并且数据包丢失。TCP保证发送数据包的顺序是应用程序接收的顺序 - 所以如果你错过了一个,那么一切都必须停止,直到特定的数据包被重新传输。如果将多个请求复用到单个TCP连接上,则所有这些请求都必须停止并等待,即使丢失的数据包可能只影响其中一个。

这种“线路阻塞问题”是TCP固有的问题,使用UDP通过允许应用程序控制数据包的重传来修复它。它可以说数据包丢失,但它只影响这一个数据流,其他数据流可以继续。

这使得QUIC 在恶劣的网络条件下更加强大

HTTP / 3的连接迁移提议可以扩展在不同网络之间移动的稳健性,例如从Wi-Fi到移动宽带,这通常会因为IP地址的变化而破坏网络连接。通过此提议,您和服务器之间的标识符将不是IP地址,而是协议本身内的标识符。这将允许您在新网络上自动重新启动整个连接,因此您可以无缝地从Wi-Fi转到移动连接。原始互联网的一些假设是,存在相当固定的连接,我们现在正在进入一个非常移动的异构世界。

HTTP / 3还直接集成了TLS,QUIC对数据包传输的额外控制也具有优势。当事情通过互联网发送时,它们会被分解成数据包; 在TLS中,有一个传输数据缓冲区的概念。如果你想要真正有效率,你想要排列所有这些东西; 这是一个请求,我将对它进行加密并通过互联网进行传输,以便一次性收到所有这些请求并且不会分成较小的数据包,其中一些不会被延迟。如果您控制所有级别,如果您只是假设互联网是一种不可靠的发送数据包的方式,那么您可以控制发送内容的顺序,您可以控制加密它们的方式以及这些加密块如何传输。

与HTTP服务器的初始连接将更快,因为HTTP / 3取消了通常需要建立连接的一次往返安全。

使用TCP和TLS,连接设置以TCP握手开始:客户端发送SYN,服务器响应SYN + ACK,客户端使用ACK完成。然后在发送任何请求之前有一个TLS握手 - 它需要另一个类似的三个消息交换。QUIC在大多数时间将其压缩到单个交换。一个关键特性是0-RTT,它允许客户端立即发送请求; 这是TCP和TLS的一个选项,但你仍然需要等待TCP握手完成。

默认安全
集成TLS还可以提高安全性,因为身份验证和加密是由网络协议提供的,而不是像TLS这样的高级协议提供的 - 而且在HTTP / 3中内置TLS,使用它也不是可选的。
当站点使用HTTPS时,浏览器现在会在站点没有加密连接时向您发出警告,而不是显示锁定。HTTP / 3和QUIC是这个方向的另一个实现。
更多的QUIC是加密的,这包括攻击者可能尝试使用的元数据。除了一些有助于将数据包识别为QUIC数据包的比特之外,未加密的QUIC数据包的唯一部分是连接的不透明标识符。这包括TCP和TLS无法保护的内容,例如确认('我还要5个字节')。

加密实际上将简化部署QUIC,互联网往往会干扰新协议,加密将保护QUIC免受干扰。

UDP的主要缺点是数量较少的网络会显示阻塞或降级UDP的。在这种极少数情况下,我们有HTTP / 2可以依赖。

当用户访问站点时,他们的初始连接将通过HTTP或HTTP / 2,服务器将提供HTTP / 3作为替代; 了解提供该连接的标头的浏览器将记住它以供下次访问,但较旧的浏览器和设备将继续使用旧协议