HTTP/3
HTTP2的缺点
由于http2基于tcp实现,缺点如下
1队头阻塞问题没有解决
2TCP和TLS握手的延迟
3网络迁移需要重新连接
队头阻塞
TCP丢包后,整个TCP都要等待重传,阻塞所有请求
握手延迟
发起HTTP请求时,需要经历TCP三次握手和TLS四次握手的过程,经历3RTT时延
且由于TCP具有拥塞控制的特性,会有慢启动过程,同样造成减速
网络迁移需要重新连接
TCP连接由源IP地址,目标IP地址,源端口,目标端口组成,如果IP地址或者端口变动,需要TCP和TLS重新握手,不利于移动设备环境
解决方法,使用UDP
QUIC协议的特点
HTTP3在应用层实现了QUIC协议,拥有类似TCP的连接管理,拥塞窗口,流量控制的网络特性,相当于将不可靠的UDP变得可靠,所以不用担心数据包丢失的问题
优点:无队头阻塞,更快的连接建立,连接迁移
无队头阻塞
QUIC也可以在一条连接上并发传输多个stream,由于UDP不关心数据包丢失,因此不会出现队头阻塞, 而QUIC会为每个数据包设置唯一表示序号,某个流丢失数据包时,即便其他数据包全部传到,也无法读取,直到重传该数据包,而其他流不会受到该数据包的影响
更快的连接建立
TLS和TCP是分层的,因此需要握手两次,而UDP不需要握手,只需要QUIC协议握手,因此只需要1RTT,确认双方的连接ID
但QUIC并不是与TLS分层,QUIC包含TLS,其帧内包含TLS的记录,且使用TLS1.3只需要1RTT完成链接和密钥协商,二次链接时,数据包可以和QUIC握手信息一起发送达成0RTT
连接迁移
通过QUIC协议建立的连接ID来标记两个端点,客户端和服务端各自选择一组ID来标记自己,网络变化后,只需要保存上下文信息,如连接ID,TLS密钥等就可以复用原链接
HTTP3协议
和2一样采用二进制帧结构,HTTP3不需要定义Stream(stream 标识不需要了),头部只有类型和长度,头部压缩算法采用QPACK,也采用静态表,动态表和huffman编码,QPACK中静态表扩大到91项,动态表解码方式改变,由于丢包会导致HPACK算法中接收方无法更新动态表,QUIC采取两个单向流,一个叫QPACK Encoder Stream,将字典传递给对方,一个叫QPACK Decoder Stream,用于响应对方,告诉对方自己接收到了对方发来的字典,这两个流专门用来同步动态表
浙公网安备 33010602011771号