HTTP3.0与2.0区别

1,137 阅读3分钟

总结

3.0转用UDP弃用TCP,改造了之前UDP的不安全性不稳定性,实现了TCP+TLS。

HTTP 2.0

2.0的优势

2.0的优势:多路复用,头部压缩,服务端推送,流控

image.png

2.0的连接方式

2.0采用的是TCP连接跟TLS安全,TCP需要三次握手四次挥手,TLS验证需要公钥私钥密钥校验,因此客户端与服务器端的连接次数会变多,

image.png

2.0 TCP弊端

建立连接时间长,本质上是TCP的三次握手四次挥手问题,导致RTT(数据包一来一回的时间消耗)变多

UDP的优势

  • 无连接状态,即不需要三次握手,四次挥手
  • 系统资源要求少
  • 可以一对多

为了解决TCP的RTT多的问题,决定改造UDP,因为改造比解决要简单,所以在UDP的基础上改造一个具备TCP有点的协议,因此就出现了QUIC(快速UDP互联网连接)

image.png

HTTP3.0

QUIC解决队头阻塞问题

  1. 队头阻塞就是一个数据包影响了后面的数据传输
  2. HTTP2.0使用了多路复用解决了队头阻塞问题,但是TCP协议依然存在该问题
  3. TCP协议在收到数据以后,这部分数据可能是乱序到达的,TCP必须将数据整合才能给上层使用,如果其中某个数据丢失了,就必须等丢包的数据重新上传以后,再数据整合传给上层使用,所以就会出现某个丢包数据影响整个连接。
  4. QUIC是基于UDP实现的,一个连接上可以有多个流,流与流之间是互不影响的,当一个流出现丢包影响范围很小,所以解决了队头阻塞问题。

0RRT建立连接

衡量网络建链的常用指标就是RRT,就是数据包一来一回的时间消耗

image.png RTT包括三部分:往返传播时延,网络设备内排队时延,应用程序数据处理时延

image.png

  • HTTPS的协议要建立完整的链接包括:TCP协议和TLS加密,总共需要最少2-3的RRT,普通的HTTP协议最少也要一个RRT才能完成握手
  • QUIC协议可以实现第一个包就包含实际数据

image.png

  • 简单说就是基于TCP和TLS的HTTP2.0在发送真正的数据包之前要花费部分时间来完成握手和加密协商,完成以后才能进行真正的数据传输
  • QUIC第一个数据包就可以发送业务数据,可以节省很多时间
  • QUIC的0RRT是针对非首次连接来说的,首次连接是做不到的

首次连接

  1. 客户端像首次连接的服务端发送client hello请求
  2. 服务端生成两个随机数p,g,同时生成一个私钥,然后通过p,g计算公钥,服务端将这些数据发送给客户端
  3. 客户端随机生成一个私钥,拿出数据中的p,g,计算公钥
  4. 客户端使用私钥和服务器端的公钥,生成一个加密数据的密钥
  5. 客户端用密钥加密数据,同时把自己的公钥传给服务端
  6. 服务端根据客户端的公钥和自己的私钥解析密钥
  7. 密钥只生成一个,后续一直变化公钥私钥
  8. 服务端用新的公钥私钥加密数据发送给客户端,客户端根据服务端传输的新公钥和自己原来的私钥解密密钥,再解密数据

而TCP每次都要三次握手四次挥手,UDP在完成首次连接以后,后面的连接用前面生成的密钥来加密解密数据就可以了,所以实现了0RRT

数据来源:baijiahao.baidu.com/s?id=167780…