从HTTP/1.0开始,一直到HTTP/2,不管应用层协议如何改进,TCP一直以来都是HTTP协议的基础,主要是因为他能提供可靠连接。
但是,从HTTP 3.0开始,这个情况就有所变化了。
因为,在最新推出的HTTP 3.0中,已经彻底启用TCP协议了。
TCP队头阻塞
我们知道,TCP传输过程中会把数据拆分为一个个按照顺序排列的数据包,这些数据包通过网络传输到了接收端,接收端再按照顺序将这些数据包组合成原始数据,这样就完成了数据传输。
但是如果其中的某一个数据包没有按照顺序到达,接收端会一直保持连接等待数据包返回,这时候就会阻塞后续请求。这就发生了TCP队头阻塞。
HTTP/1.1的管道化持久连接也是使得同一个TCP链接可以被多个HTTP使用,但是HTTP/1.1中规定一个域名可以有6个TCP连接。而HTTP/2中,同一个域名只是用一个TCP连接。
所以,在HTTP/2中,TCP队头阻塞造成的影响会更大,因为HTTP/2的多路复用技术使得多个请求其实是基于同一个TCP连接的,那如果某一个请求造成了TCP队头阻塞,那么多个请求都会受到影响。
TCP握手时长
我们都知道TCP的可靠连接是基于三次握手与四次挥手实现的。但是问题是三次握手是需要消耗时间的。
TCP三次握手的过程客户端和服务器之间需要交互三次,那么也就是说需要额外消耗1.5 RTT。
RTT:网络延迟(Round Trip Time)。他是指一个请求从客户端浏览器发送一个请求