保护私人版权,尊重他人版权。转载请注明出处并附带页面链接
HTTP 2.0
HTTP 2.0是在2015年推出,目前主流HTTP协议。HTTP 2.0多路复用解决了HTTP1.x的重复建立连接浪费时间问题。
TCL连接(三次握手):
- 一去(SYN)
- 二回(SYN+ACK)
- 三去(ACK)
TCL连接时间 = 1.5RTT
HTTP交易时间:请求和返回 = 1RTT
TLS连接:连接时间 = 1.5RTT
浏览器给服务器发送的Client Hello消息(一去)
服务器给浏览器发送的Server Hello消息(二回)
浏览器给服务器发送的Key Exchange消息(三去)
HTTPS通信时间总和 = TCP连接时间 + TLS 连接时间 + HTTP交易时间 = 1.5 RTT + 1.5 RTT + 1 RTT = 4 RTT
HTTP2.0连接共享复用第一个连接的TCL和TLS连接,节省了3RTT。

HTTP 2.0不足:
- 建立连接时间长(本质上是TCP的问题)
- 队头阻塞问题(多个HTTP流使用同一个TCP连接,遵守同一个流量状态控制。只要第一个HTTP流丢包等待重传时遭遇到拥塞,剩下的HTTP流无法发出去)
- 移动互联网领域表现不佳(弱网环境)
TCP/UDP协议
TCP协议(Transmission Control Protocol)
a.面向连接的传输控制协议. 在收发数据前,必须和对方建立可靠的连接
b.无差错的数据传输
c.按序传输(数据总是会按照发送的顺序到达)
d.未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)
UDP协议(User Data Protocol)
a. 非连接的用户数据报协议. 传输数据之前源端和终端不建立连接
b. 有差错的数据传输.
c. 不进行流量控制
d. 不可靠,可能会丢包. 不维护连接状态
HTTP 3.0
HTTP 3.0弃用TCP协议,改用基于UDP协议的QUIC协议。
QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议,集成了TCP可靠传输机制、TLS安全加密、HTTP /2 流量复用技术。
由于UDP不需要连接,不会带来附加的RTT时间,因此,基于QUIC协议的页面加载时间变成了2.5RTT。
另外,完成QUIC交易的连接的SessionID会缓存在浏览器内存里,如果用户再次打开该页面,无需重新TLS连接,服务器直接根据SessionID在缓存里查找对应的加密参数,并完成加密。因此加载耗时=HTTP交易事件=1RTT
QUIC协议可以实现在第一个包就可以包含有效的应用数据

还解决HTTP 2.0不足队头阻塞问题,基于UDP协议实现的,在一条链接上可以有多个流,流与流之间是互不影响的,当一个流出现丢包影响范围非常小,从而解决队头阻塞问题。
QUIC协议
1. 首次连接:客户端和服务端的密钥协商和数据传输过程
2. 非首次连接:首次连接客户端会将config存储下来,后续再连接时可以直接使用
3. 前向安全问题:指密钥泄漏也不会让之前加密的数据被泄漏,影响的只有当前,对之前的数据无影响
4. 前向纠错:增加数据通讯可信度的方法,在单向通讯信道中,一旦错误被发现,其接收器将无权再请求传输
5. 连接迁移:TCP协议使用五元组来表示一条唯一的连接,QUIC协议基于UDP实现使用64位的随机数作为连接的ID,并使用该ID表示连接,网络切换不需要重连。
