# HTTP3.0

首先我们要清楚HTTP/1.0,HTTP/2.0都是基于TCP的,而HTTP/3.0是通过UDP建立的,基于QUIC(quick UDP Internet Connection)协议!

# 特性

# 连接迁移

TCP四元组,一条tcp的唯一性标识:

  • 源IP
  • 源端口
  • 目的IP
  • 目的端口

源IP,源端口一般比较稳定,但是目的IP,目的端口会由于网络元素等原因发生改变,一旦改变,那么此条tcp就会断开。由于QUIC基于UDP协议,所以一条UDP协议不再由四元组表示,而是以客户端随机产生的一个64位数字作为ID标识,只要ID不变,那么这条UDP就会存在,维持连接,上传呢个业务逻辑就感受不到变化

# 无队头阻塞

队头阻塞原因:

  • HTTP层队头阻塞
  • TCP层队头阻塞

HTTP2.0的多路复用解决了HTTP层的队头阻塞问题,但是TCP的队头阻塞依然存在,当数据包超时确认或者丢失,会等待重传,因此会阻塞当前窗口向右滑动,造成阻塞。而QUIC是基于udp的,创新点在于QUIC依靠一个严格的单调递增的packet序列,一个数据包里还会有streamID和streamoffset偏移量,即使中途发生丢包或者超时确认,后面的数据包不会等待,等到接收完之后根据ID和offset即可完成重新拼装,从而避免这种问题

# 自定义的拥塞控制

tcp协议是在传输层,默认存在于系统中,而QUIC在应用层,当想要依据实际情况来重定义拥塞算法的时候,QUIC显然更加灵活

# 前向安全和前向纠错

都说udp不太靠谱,但是Google给QUIC加上了这个机制:每发送一组数据之后,就对这组数据进行异或运算(效率高),并将结果也发送出去,那么接收方就有两份数据版本,可以对初始数据进行纠错和校验。以此保证了可靠性。