31|HTTP3:甩掉TCP、TLS的包袱,构建⾼效⽹络31|HTTP3:甩掉TCP、TLS的包袱,构建⾼效⽹络
前⾯两篇⽂章我们分析了HTTP/1和HTTP/2,在HTTP/2出现之前,开发者需要采取很多变通的⽅式来解决
HTTP/1所存在的问题,不过HTTP/2在2018年就开始得到了⼤规模的应⽤,HTTP/1中存在的⼀⼤堆缺陷都
得到了解决。
HTTP/2的⼀个核⼼特性是使⽤了多路复⽤技术,因此它可以通过⼀个TCP连接来发送多个URL请求。多路复
⽤技术能充分利⽤带宽,最⼤限度规避了TCP的慢启动所带来的问题,同时还实现了头部压缩、服务器推送
等功能,使得⻚⾯资源的传输速度得到了⼤幅提升。在HTTP/1.1时代,为了提升并⾏下载效率,浏览器为
每个域名维护了6个TCP连接;⽽采⽤HTTP/2之后,浏览器只需要为每个域名维护1个TCP持久连接,同时
还解决了HTTP/1.1队头阻塞的问题。
从⽬前的情况来看,HTTP/2似乎可以完美取代HTTP/1了,不过HTTP/2依然存在⼀些缺陷,于是就有了
HTTP/3。和通常⼀样,介绍HTTP/3之前,我们先来看看HTTP/2到底有什么缺陷。
TCP的队头阻塞TCP的队头阻塞
虽然HTTP/2解决了应⽤层⾯的队头阻塞问题,不过和HTTP/1.1⼀样,HTTP/2依然是基于TCP协议的,⽽
TCP最初就是为了单连接⽽设计的。你可以把TCP连接看成是两台计算机之前的⼀个虚拟管道,计算机的⼀
端将要传输的数据按照顺序放⼊管道,最终数据会以相同的顺序出现在管道的另外⼀头。
接下来我们就来分析下HTTP/1.1协议栈中TCP是如何传输数据的。为直观理解,你可以参考下图:
正常情况下的TCP传输数据过程
通过上图你会发现,从⼀端发送给另外⼀端的数据会被拆分为⼀个个按照顺序排列的数据包,这些数据包通
过⽹络传输到了接收端,接收端再按照顺序将这些数据包组合成原始数据,这样就完成了数据传输。
不过,如果在数据传输的过程中,有⼀个数据因为⽹络故障或者其他原因⽽丢包了,那么整个TCP的连接就
会处于暂停状态,需要等待丢失的数据包被重新传输过来。你可以把TCP连接看成是⼀个按照顺序传输数据
的管道,管道中的任意⼀个数据丢失了,那之后的数据都需要等待该数据的重新传输。为了直观理解,你可
以参考下图: