世界变化真快,转眼就到了HTTP3的时代。HTTP协议发展的时间轴是这样的:

image-20230720163016287

TCP的问题

TCP存在队头拥塞

image-20230720172943680

image-20230720173005131

image-20230720173103173

QUIC

QUIC(Quick UDP Internet Connections)是一种通用、安全、多路复用的传输层新型网络协议。它的目的是替代TCP(目前是互联网上用于数据传输的主流协议)。2012年,QUIC协议由当时还在谷歌任职的Jim Roskind开发。2013年,QUIC正式对外公布。

2015年,QUIC被提交给IETF进行标准化,但是直到六年以后,也就是2021年5月,IETF才发布了第一版标准化的QUIC,被命名为RFC 9000。同时,IETF还发布使用了QUIC的HTTP/3标准化版本。

QUIC吸纳了很多与TCP类似的属性,还有TLS加密,将它们置于UDP传输之上的应用层中。

HTTP3

HTTP/3终于标准化2022年6月6日,IETF QUIC和HTTP工作组成员Robin Mark在推特上宣布,历时5年,HTTP/3终于被标准化为 RFC 9114 ,这是HTTP超文本传输协议的第三个主要版本。同时, HTTP/2也被更新为新的RFC 9113。Robin写道,新发布的HTTP/3标准将与RFC 9204(QPACK header压缩) 和 RFC 9218(可扩展的优先级)一起为Web打开重要的新篇章。

image-20230719154025929

为了改进http1.x的一些问题,http2引入了不少新特性;但由于历史沉积的原因,大量的IT基础设置都是基于TCP/IP协议存在的,短时间不可能颠覆式的更改;http2也只是在TCP协议之上做了封装,缓解了燃眉之急;然而http2无法跨越TCP传输拥塞的问题,某个TCP包的丢失,会导致后续包的重传并确认。

理论上想要根本解决这个问题需要重新设计一套能取代TCP的协议,这太难了,一个IPV6协议现在都没有普及,因为不兼容。

http2遗留的一些问题,比如TCP拥塞重传,在无线网大行其道的当下尤其突出。为了在兼容现有基础设施的基础上,解决这些问题,人类找到了一直被冷落的UDP协议,并在此基础上现实了很多TCP和http2的优秀特性,那就是QUIC协议,并最终提出了HTTP3标准。

下图也能比较形象的反应HTTP家族间的异同:

image-20230720102048315

基于QUIC协议的HTTP3

从上图你可以看到 HTTP/3 有一个关键的改变,那就是它把下层的 TCP“抽掉”了,换成了 UDP。因为 UDP 是无序的,包之间没有依赖关系,所以就从根本上解决了“队头阻塞”。

你一定知道,UDP 是一个简单、不可靠的传输协议,只是对 IP 协议的一层很薄的包装,和 TCP 相比,它实际应用的较少。

不过正是因为它简单,不需要建连和断连,通信成本低,也就非常灵活、高效,“可塑性”很强。

所以,QUIC 就选定了 UDP,在它之上把 TCP 的那一套连接管理、拥塞窗口、流量控制等“搬”了过来,“去其糟粕,取其精华”,打造出了一个全新的可靠传输协议,可以认为是“新时代的 TCP”。

HTTP3的问题

由于基于UDP协议,基础网络设备只知道这是一个UDP包,而UDP包存在严重的安全隐患,比如DDoS洪水攻击。几乎所有的电信运营商都会“歧视”UDP包,有些甚至完全禁止UDP包传输。

HTTP3应用之路并没有想象中的那么光鲜。

参考阅读:

https://zhuanlan.zhihu.com/p/431672713

https://zhuanlan.zhihu.com/p/552446351

(完)