总结
3.0转用UDP弃用TCP,改造了之前UDP的不安全性不稳定性,实现了TCP+TLS。
HTTP 2.0
2.0的优势
2.0的优势:多路复用,头部压缩,服务端推送,流控
2.0的连接方式
2.0采用的是TCP连接跟TLS安全,TCP需要三次握手四次挥手,TLS验证需要公钥私钥密钥校验,因此客户端与服务器端的连接次数会变多,
2.0 TCP弊端
建立连接时间长,本质上是TCP的三次握手四次挥手问题,导致RTT(数据包一来一回的时间消耗)变多
UDP的优势
- 无连接状态,即不需要三次握手,四次挥手
- 系统资源要求少
- 快
- 可以一对多
为了解决TCP的RTT多的问题,决定改造UDP,因为改造比解决要简单,所以在UDP的基础上改造一个具备TCP有点的协议,因此就出现了QUIC(快速UDP互联网连接)
HTTP3.0
QUIC解决队头阻塞问题
- 队头阻塞就是一个数据包影响了后面的数据传输
- HTTP2.0使用了多路复用解决了队头阻塞问题,但是TCP协议依然存在该问题
- TCP协议在收到数据以后,这部分数据可能是乱序到达的,TCP必须将数据整合才能给上层使用,如果其中某个数据丢失了,就必须等丢包的数据重新上传以后,再数据整合传给上层使用,所以就会出现某个丢包数据影响整个连接。
- QUIC是基于UDP实现的,一个连接上可以有多个流,流与流之间是互不影响的,当一个流出现丢包影响范围很小,所以解决了队头阻塞问题。
0RRT建立连接
衡量网络建链的常用指标就是RRT,就是数据包一来一回的时间消耗
RTT包括三部分:往返传播时延,网络设备内排队时延,应用程序数据处理时延
- HTTPS的协议要建立完整的链接包括:TCP协议和TLS加密,总共需要最少2-3的RRT,普通的HTTP协议最少也要一个RRT才能完成握手
- QUIC协议可以实现第一个包就包含实际数据
- 简单说就是基于TCP和TLS的HTTP2.0在发送真正的数据包之前要花费部分时间来完成握手和加密协商,完成以后才能进行真正的数据传输
- QUIC第一个数据包就可以发送业务数据,可以节省很多时间
- QUIC的0RRT是针对非首次连接来说的,首次连接是做不到的
首次连接
- 客户端像首次连接的服务端发送client hello请求
- 服务端生成两个随机数p,g,同时生成一个私钥,然后通过p,g计算公钥,服务端将这些数据发送给客户端
- 客户端随机生成一个私钥,拿出数据中的p,g,计算公钥
- 客户端使用私钥和服务器端的公钥,生成一个加密数据的密钥
- 客户端用密钥加密数据,同时把自己的公钥传给服务端
- 服务端根据客户端的公钥和自己的私钥解析密钥
- 密钥只生成一个,后续一直变化公钥私钥
- 服务端用新的公钥私钥加密数据发送给客户端,客户端根据服务端传输的新公钥和自己原来的私钥解密密钥,再解密数据
而TCP每次都要三次握手四次挥手,UDP在完成首次连接以后,后面的连接用前面生成的密钥来加密解密数据就可以了,所以实现了0RRT