首页 > 其他分享 >HTTP/3 介绍

HTTP/3 介绍

时间:2022-09-02 20:22:23浏览次数:62  
标签:TLS 协议 HTTP TCP 介绍 QUIC 连接

HTTP/2 存在的缺陷:

队头阻塞

HTTP/2 多个请求是跑在一个 TCP 连接中的,那么当 TCP 丢包时,整个 TCP 都要等待重传,那么就会阻塞该 TCP 连接中的所有请求。

因为 TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整且有序的,如果序列号较低的 TCP 段在网络传输 中丢失了,即使序列号较高的 TCP 段已经被接收了,应用层也无法从内核中读取到这部分数据,从 HTTP 视角看,就是请求被阻塞了。

TCP 和 TLS 的 握手时延

  • 发起HTTP 请求需要经过 TCP 三次握手和 TLS(1.2) 四次握手的·1过程。共 3 个 RTT 后才能发出请求数据。
  • TCP 具有 【拥塞控制】的特性,对于刚建立连接的 TCP 会有个【慢启动】的过程。它会对 TCP 连接产生“减速”效果。

网络迁移需要重新连接

基于 TCP 传输协议的 HTTP 协议,是通过四元组(源 IP、源端⼝、⽬的 IP、⽬的端⼝)确定⼀条 TCP 连接。

当 IP 地址或端口号变动时,需要 TCP 和 TLS 重新握手。

这不利于移动设备切换网络的场景,如 4G 网络环境切换成 WIFI,意味着 IP 地址变化了。

解决办法:

HTTP/3 把 传输层协议替换成 UDP;还基于 UDP 协议在 应用层 实现了 QUIC 协议。

UDP不需要连接,没有握手和挥手过程,所以 自然比 TCP 快。

QUIC 协议具有类似 TCP 的连接管理、拥塞窗口、流量控制的网络特性。相当于将不可靠传输的 UDP 协议变成“可靠”的。

QUIC 协议

优点:

无队头阻塞

QUIC 协议也有 Stream 与 多路复用的概念。

QUIC 连接上的多个 Stream 之间都是独立的。某个流发生了丢包,只会影响该流。

更快地建立连接

HTTP/3 在传输数据前也需要 QUIC 协议握手,但只需 1 RTT。

握手的目的是为确认双方的【连接 ID】。

QUIC 内部包含了 TLS 1.3,它在自己的帧会携带 TLS 里的 “记录”。因此仅需 1 RTT 就可以 同时 完成建立连接与密钥协商。甚至在第二次连接时,应用数据包可以和 QUIC 握手信息(连接信息 + TLS 信息)一起发送,达到 0 RTT 的效果。

连接迁移

QUIC 协议没有用四元组的方式来“绑定”连接。

而是通过【连接 ID】来标记通信的两个端点。即使移动设备的网络变化导致IP地址改变,只要仍保有上下文信息(连接 ID 、TLS 密钥等),就可以“无缝”对接。

HTTP/3 直接使用 QUIC 里的 Stream

HTTP/2 和 HTTP/3 帧格式对比

HTTP/3 的头部压缩算法

QPACK

QPACK

  • 与 HTTP/2 中的 HPACK 编码⽅式相似, HTTP/3 中的 QPACK 也采⽤了静态表、动态表及 Huffman 编码。
  • 静态表有91项。
  • QUIC 有两个特殊的单向流(mean:只有一端可以发送消息)。用来同步双方的动态表。

解决了 HTTP/2 的问题:动态表具有时序性。如果首次出现的请求包丢失了,后续收到的请求则不能根据动态表上的 index 来解码出 HPACK 头部。因为对方还没建立好动态表。因此请求会阻塞直到 首次丢失的那个数据包重传过来。

标签:TLS,协议,HTTP,TCP,介绍,QUIC,连接
From: https://www.cnblogs.com/tiddler/p/16651122.html

相关文章

  • HTTP/2 牛逼在哪
    先说说HTTP/1.1协议的性能问题原因:延迟难以下降并发连接有限队头阻塞问题HTTP头部巨大且重复不支持服务器推送消息HTTP/1.1自身采用的优化手段:将多张小图......
  • 自我介绍
     我叫张城玮,来自有着中俄双子城美誉的黑龙江省黑河市。读即这关键词的问题,我想我的三个关键词即是坚持,钻研,和乐观。首先,坚持于我而言,是我生命中至关重要的一部分,无论是面......
  • jenkins 无法连接仓库:Command “git ls-remote -h -- https://gitee.com/jddk/vueDemo
    HTTPS方式连接远程仓库问题我在码云用的非公开的项目,提示无法连接......
  • vue打包报错built files are meant to be served over an HTTP server.
    Tip:builtfilesaremeanttobeservedoveranHTTPserver.Openingindex.htmloverfile://won'twork.这个其实就是个提示并不是报错。其实这句话是告诉......
  • 打开WordPress网站时,出现Http500错误怎么办?
    在用PHP+IIS+WordPress搭建博客系统时,我们最不想看到的就是报错,尤其是http500的错误,有时真是一头雾水,摸不到头脑。有时升级主题或插件,也会莫名其妙的报这个错误,对于没有编......
  • gzip 介绍和使用
    gzip介绍和使用用法gzip[OPTION]...[FILE]...常用参数-d--decompress解压-c--stdout保留原始文件,把压缩/解压流重定向到新文件(如:gzip-caa>aa.gz)-l......
  • Linux命令-按照与使用(13)为初学者介绍的 Linux tee 命令(6 个例子)
    转载地址:为初学者介绍的Linuxtee命令(6个例子)有时候,你会想手动跟踪命令的输出内容,同时又想将输出的内容写入文件,确保之后可以用来参考。如果你想寻找这相关的工具,那......
  • Zookeeper介绍
    zookeeper文件系统组成zookeeper本质上是文件系统+通知机制组成的zookeeper文件系统说明树形的文件系统,在树形文件系统当中,每一个节点就是存储数据的位置,节点同时兼顾......
  • 虚拟现实技术主要场景运用介绍_vr技术特征是什么_华锐互动
    1.地产行业通过楼盘虚拟可体现楼盘在未来的真实景观、周边的环境及配套设施,可以验证客户所购买的单位与周边环境的协调关系、通过该户型的窗户可真切的看到未来属于自己的......
  • 1-linux内核专栏介绍
    1-linux内核TCP重传率高影响QPS(TPS):每秒钟request/事务数量TCP重传是发生在哪些服务器(IP地址)之间,哪些业务上(服务端口),以及为什么会重传(SYN_SENT)。1 18:21:58 10.17.1......