Skip to content

Latest commit

 

History

History
executable file
·
42 lines (23 loc) · 3.25 KB

HTTP3.md

File metadata and controls

executable file
·
42 lines (23 loc) · 3.25 KB

前言

本文尝试总结HTTP3 相关的知识点

HTTP2 的问题

HTTP/2引入了多路复用等一些性能改进,但它仍然建立在TCP之上,而TCP的一些特性会导致HTTP/2的性能问题,例如:

  • 队头堵塞(Head-of-Line Blocking): TCP的一个连接上的数据流是有序的,这就导致了如果一个数据流遇到延迟,它会阻塞在它前面的所有数据流,这是因为TCP保持了顺序传输的特性
  • 连接复用限制: 尽管多路复用是 HTTP/2 的一项关键特性,但对于某些网络条件,例如高丢包率的网络,连接的复用可能会引入性能问题,因为连接可能需要被频繁重启。
  • 协议复杂性: HTTP/2 相对于之前的 HTTP 协议引入了更多的复杂性,包括帧、流、优先级等概念,这增加了实现和调试的难度。
  • 初始连接时的延迟: 在建立 HTTP/2 连接时,需要进行 TLS 握手。虽然 TLS 提供了安全性,但它会引入初始连接时的额外延迟。

虽然 TCP 缺陷重重,但是想修改 TCP更是举步维艰,主要原因是: TCP 的应用太广泛,几乎所有的网络应用都依赖于它。任何对TCP的修改都可能影响到数以亿计的现有设备和网络。在这么庞大和复杂的生态系统中进行修改需要极大的谨慎,以确保向后兼容性和平稳过渡。

HTTP/3与QUIC

基于上面的考虑,HTTP/3完全放弃了 TCP,转而使用 QUIC 协议,QUIC 是基于 UDP 的。

QUIC的连接建立和维护机制大致如下:

  • 0-RTT握手: QUIC支持0-RTT握手,允许在建立连接的过程中就可以发送数据。这是通过缓存先前连接的密钥信息来实现的,保证了安全性的同时降低了初始连接时的延迟。

  • 连接迁移: QUIC允许在不同网络之间进行连接迁移,这通过保留连接状态并在不同网络之间切换时继续使用连接状态来实现。这有助于设备在不同网络之间平滑切换而无需重新建立连接。

  • 流量控制: QUIC引入了基于流的流量控制,允许每个数据流独立控制其传输速率,避免了某个数据流占用过多资源的问题。

  • 错误恢复: QUIC具有内置的错误恢复机制,可以更快地适应网络中的丢包等问题。这有助于提高协议的可靠性和稳定性。

面临的挑战

虽然 HTTP/3看起来很美好,但是想要推进还需要很长的一段路要走:

  • 部署难度: HTTP/3作为一项新技术,需要网络服务提供商、网站和应用程序开发者等各方共同努力才能实现广泛的部署。一些旧有的设备和网络基础设施可能不支持HTTP/3,因此在整个互联网上的推广可能需要一段时间。

  • 中间设备和防火墙的兼容性: 一些中间设备和防火墙可能无法正确处理QUIC协议,因为它们通常设计用于处理TCP和UDP。这可能导致HTTP/3的连接被阻塞或引发问题,需要解决设备和防火墙的兼容性问题。

  • 性能优势依赖: HTTP/3的性能优势在于其基于QUIC的特性,尤其是在高延迟和高丢包率的网络条件下。然而,并非所有的网络都会同等受益于HTTP/3的性能提升,而在一些条件下,性能可能并不比HTTP/2更好。

参考