您现在的位置是:首页 >技术杂谈 >从HTTP3的横空出世,看各版本HTTP的区别与联系网站首页技术杂谈
从HTTP3的横空出世,看各版本HTTP的区别与联系
HTTP1.1的缺点:
-
发送一次请求需要等待响应之后才能再次请求(队头阻塞);
-
每次重复传输头信息;
HTTP2的优化及缺点:
-
支持连接的多路复用(仅应用层);
-
HAPCK算法压缩头信息;
过程:
2.1 建立连接:通过tcp3次握手 建立连接;TLS握手建立安全连接
2.2 慢启动预热
2.3 传输数据:应用层可以发送多个协议,但传输层TCP协议要求数据包必须顺序传输,数据包丢失会影响后续数据包发送效率(队头阻塞问题仍然存在)
2.4 关闭连接
HTTP3:
插曲:TCP升级方案:
-
fast Open:缩短连接建立时间
-
BBR拥塞控制算法:避免网络拥塞和队头阻塞
升级方案的痛点在于:1.涉及系统和设备的代码更新,测试和部署;2.版本的兼容性
TCP的更换方案:QUIC(Quick Udp Internet Connections)
-
在用户空间实现类似TCP的流量控制,拥塞控制和重传机制,确保稳定性
基于 QUIC 的 HTTP3 的优点:
-
安全性高:集成TLS v1.3,加密是default 而非 optional
-
建立连接快:http2建立连接需要最多3RTT(TCP 1 + TLSv1.2 2),最少2RTT(TCP 1 + TLSv1.3 1),QUIK基于UDP建立连接只需要1RTT
-
无队头阻塞:QUIC引入 connect 和 stream 概念,多个 stream 组成一个 connect,stream 之间相互独立,丢包只会影响对应 stream 的后续数据包发送,而不会影响其他 stream,此机制在一定程度上缓解甚至消除了队头阻塞。
-
连接迁移:一条TCP连接由4元素(src-ip,src-port,des-ip,des-port),现实生活中在wifi 和 移动网络的切换时IP发生变化,因此需要重新建立TCP连接。一条 QUIC 连接由 一个64位随机数 ID 作标识,只要 ID 不变,就不会重新建立连接。
-
避免协议僵化:基于用户空间的协议,独立于kernel,可以在应用层进行部署更新
HTTP3/QUIC 存在的阻力:
-
加密级别高,许多防火墙不支持 QUIC
-
UDP 常被用于网络攻击(DDoS攻击),一些网络选择阻止 UDP,以减轻网络攻击的影响
-
对于新协议浏览器和服务器支持不完善,存在兼容性,功能完整性等问题。