HTTP3(QUIC)详解

news2024/11/19 7:28:48

文章目录

  • 一、HTTP3简述
  • 二、为什么不升级改造TCP而使用UDP?
  • 三、QUIC的实现
  • 四、HTTP3改进详解
    • 1. 快速连接建立(1-RTT初次建立,0-RTT恢复)
    • 2. 无队头阻塞(Head-of-Line Blocking)
      • 重传机制
      • HTTP/2 中的流
      • HTTP/3 中的流
    • 3. 移动性和连接迁移 connection id
    • 4. 更高的安全性 TLS1.3
    • 5. 更好的性能
    • 6. 避免协议僵化
    • 7. 高效的错误恢复和流量控制
  • 五、HTTP3阻力


其他HTTP版本知识内容见:http://t.csdnimg.cn/0b7i8

图片来源和知识参考:
【QUIC核心原理和握手过程】 https://www.bilibili.com/video/BV1Mg411s7mP/?share_source=copy_web
【HTTP/3是什么?为什么需要一个新版本?QUIC为什么基于UDP?】 https://www.bilibili.com/video/BV1Ru4y1f7Ph/?share_source=copy_web


一、HTTP3简述

---------摘自维基百科
HTTP/3是第三个主要版本的HTTP协议。与其前任HTTP/1.1和HTTP/2不同,在HTTP/3中,将弃用TCP协议,改为使用基于UDP协议的QUIC协议(快速的UDP网络连接)实现。
此变化主要为了解决HTTP/2中存在的队头阻塞问题。由于HTTP/2在单个TCP连接上使用了多路复用,受到TCP拥塞控制的影响,少量的丢包就可能导致整个TCP连接上的所有流被阻塞。


PS:http2利用二进制分帧实现多路复用,解决的是HTTP层(http1.1)的队头线性阻塞

  • HTTP/1.1 的队头阻塞: 在 HTTP/1.1 中,引入了持久连接和管道化(Pipelining),允许在一个连接中发送多个请求。然而,由于串行处理方式,如果一个请求处理变慢或被阻塞,后续所有的请求都会受到影响。这也是对头阻塞的一种表现。
  • 示例:一个浏览器发送了多个HTTP请求(A、B、C)给服务器。如果请求A处理得很慢或被阻塞,浏览器必须等待请求A完成后才能处理请求B和请求C,尽管请求B和C可以并行处理。这会导致对头阻塞。
    原文链接:https://blog.csdn.net/qq_62311779/article/details/139873062

HTTP/2仍然会存在对头阻塞(TCP的对头阻塞)的问题,那是因为HTTP/2其实还是依赖TCP协议实现的。

  • TCP传输过程中会把数据拆分为一个个按照顺序排列的数据包,这些数据包通过网络传输到了接收端,接收端再按照顺序将这些数据包组合成原始数据,这样就完成了数据传输。但是如果其中的某一个数据包没有按照顺序到达,接收端会一直保持连接等待数据包返回,这时候就会阻塞后续请求。这就发生了TCP队头阻塞。
  • HTTP/2虽然实现了多路复用,即在一个TCP连接上同时处理多个请求,但由于它是基于TCP协议的,当发生丢包时,TCP协议需要等待前面的包被成功接收后才会发送后面的包,这就导致了队头阻塞问题。

在这里插入图片描述


二、为什么不升级改造TCP而使用UDP?

TCP协议僵化,难以升级
在这里插入图片描述
UDP作为传统传输层协议,广泛的的设备都支持,避免升级和改造。
UDP协议快,低延时


三、QUIC的实现

详细了解QUIC协议可阅读维基百科:https://zh.wikipedia.org/wiki/QUIC

quic实现于用户空间(应用空间)

在这里插入图片描述

内核空间 vs 用户空间

  • 内核空间:这是操作系统内核执行的地方,具有最高的权限,直接控制硬件资源。内核空间中的代码具有高效率和低延迟,但修改和调试非常复杂,且需要系统级权限。
  • 用户空间:这是应用程序运行的地方,权限受到限制,无法直接访问硬件资源。用户空间中的代码易于修改和调试,但其操作需要通过系统调用与内核通信,这会带来一定的性能开销。

TCP/IP 协议栈实现

  • 传统的TCP/IP协议栈通常实现于内核空间。这意味着操作系统内核负责处理所有TCP/IP数据包的发送、接收、处理和路由。

    优点

    • 高效的网络数据包处理。
    • 可靠的内核级错误处理和拥塞控制。

    缺点

    • 修改和优化协议栈需要操作系统内核级别的更改,这很复杂且不易部署。
    • 开发和调试协议栈需要系统级权限,增加了开发难度。

QUIC的用户空间实现

  • QUIC协议栈在用户空间中实现。这意味着QUIC协议的所有逻辑处理都在应用程序级别完成,而不是在操作系统内核中。

    优点:

    1. 灵活性和可扩展性:因为QUIC协议在用户空间中实现,开发者可以更容易地修改、优化和扩展协议功能,而无需更改操作系统内核。这大大简化了协议的开发和部署过程。

    2. 独立更新:由于在用户空间中实现,QUIC协议的更新和升级可以通过简单的软件更新来实现,而不需要操作系统的更新。这对于快速迭代和发布新版本尤为重要。

    3. 应用级控制:应用程序可以更直接地控制和优化网络行为。例如,Google的BoringSSL库中实现了QUIC的加密和传输功能,能够更好地与应用需求相适应。

    用户空间实现的挑战

    1. 性能开销:由于需要在用户空间和内核空间之间进行系统调用,用户空间实现的网络协议可能面临性能开销。不过,QUIC通过UDP进行传输,避免了一些TCP的开销,并通过高效的用户空间实现技术(如零拷贝)来减小这些性能损失。

    2. 安全性:用户空间代码的安全性往往不如内核空间代码。因此,QUIC协议需要特别注意安全机制的设计和实现,确保数据传输的安全性。(这也是为什么内置了TLS1.3的原因)


四、HTTP3改进详解

在这里插入图片描述

1. 快速连接建立(1-RTT初次建立,0-RTT恢复)

  • RTT(Round-Trip Time),即往返时间,是在计算机网络中衡量数据包从发送端传输到接收端再返回发送端所花费的总时间。这个时间包括了数据包在网络中的传播时间、接收端处理并响应的时间,以及响应数据包再次传输回发送端的时间。

    关于TLS中的RTT讲解,请看:http://t.csdnimg.cn/pt57n

  • 低延迟连接建立:HTTP/3 使用 QUIC 协议,它结合了 UDP 和内置的 TLS 1.3,能够在一个往返时间(RTT)内完成连接建立,甚至支持 0-RTT 数据传输。

    • 1-RTT 握手:QUIC 协议设计允许在一次往返时间内完成连接建立。这通过集成的 TLS 1.3 实现,即在初始握手中完成加密密钥的协商。
    • 0-RTT 数据传输:如果客户端之前与服务器建立过连接,可以通过 0-RTT 数据传输机制在初次请求时就发送应用数据,进一步减少延迟。

HTTP2中的RTT
在这里插入图片描述

HTTP3中的RTT
在这里插入图片描述

2. 无队头阻塞(Head-of-Line Blocking)

TCP ----> UDP
联系流--->独立流
在这里插入图片描述

  • 改进的多路复用:HTTP/3 通过 QUIC 的多路复用能力,解决了 HTTP/2 中的队头阻塞问题,提高了传输效率和用户体验。

    实现机制

    • 独立的流控制:QUIC 使用独立的流控制每个流都有独立的拥塞控制和丢包恢复机制。这意味着一个流的丢包不会影响其他流的数据传输。
    • 帧级别的重传:QUIC 使用帧来传输数据,每个数据包可以包含多个帧。丢失的数据包只会影响该数据包中的帧,而不会影响其他数据包,只需重传相关的帧,而不会影响其他帧。这与 TCP 不同,TCP 会因为丢包而阻塞整个连接。

重传机制

HTTP3重传机制:请看 http://t.csdnimg.cn/fL11F

HTTP/2 中的流

基于 TCP 的流

  • 多路复用:HTTP/2 使用一个 TCP 连接来承载多个并行的流,每个流对应一个 HTTP 请求和响应对。流通过流 ID 区分,流 ID 在每个帧的头部指定。
  • 队头阻塞:由于 HTTP/2 基于 TCP,而 TCP 提供的是可靠、有序的传输保证,一个数据包的丢失会阻塞整个连接中的所有流,直到丢失的数据包被重传。
  • 流量控制:HTTP/2 实现了流量控制机制,允许发送方限制接收方的流量,以避免拥塞。流量控制在连接级别和流级别上同时实现。

具体实现

  • :数据被分割成多个帧,每个帧属于一个特定的流。帧类型包括数据帧、头部帧、优先级帧等。
  • 重传机制:依赖 TCP 层的重传机制。当一个 TCP 数据包丢失时,整个数据包(包括多个 HTTP/2 帧)需要重传。

HTTP/3 中的流

基于 QUIC 的流:

  • 独立的多路复用:HTTP/3 使用 QUIC 作为传输协议。QUIC 在 UDP 之上实现,每个在 QUIC 中都是独立的,多个流在同一 QUIC 连接中并行传输,互不干扰。
  • 无队头阻塞QUIC 提供独立的流控制和错误恢复机制,一个流的丢包只影响该流,而不会阻塞其他流。这解决了 HTTP/2 中的队头阻塞问题。
  • 流量控制:QUIC 提供独立的流量控制,每个流有单独的流量控制窗口,允许更精细的流量管理。

具体实现

  • :QUIC 也使用帧来传输数据。每个 QUIC 包可以包含多个帧,帧类型包括流帧、ACK 帧、握手帧等。
  • 重传机制QUIC 具有内置的快速重传机制。丢失的数据包会被快速检测到并重传,而不会影响其他包。每个流都有独立的包编号和确认机制,确保高效的数据传输。

3. 移动性和连接迁移 connection id

在这里插入图片描述

优点

  • 连接保持:当设备的网络环境变化(如从 Wi-Fi 切换到移动数据网络)时,HTTP/3 可以保持现有的连接不中断。

实现机制

  • 连接ID:QUIC 使用连接ID来标识连接,而不是依赖于 IP 地址和端口。这允许连接在网络变化时保持不变,只需更新连接ID即可。
  • 迁移支持:当客户端的网络环境变化时,可以通过发送新的连接ID来继续使用现有的连接,而无需重新建立连接。

HTTP2连接基于传输层TCP,根据四元组来建立一条连接的,也就是sip 、dip、sport、dport
HTTP3连接基于传输层QUIC,根据connection id标识和建立一条连接

在这里插入图片描述

4. 更高的安全性 TLS1.3

优点:

  • 内置强加密:HTTP/3 通过 QUIC 内置的 TLS 1.3 提供强大的安全性,保护数据的机密性和完整性。

实现机制:

  • TLS 1.3 集成:QUIC 协议在传输层直接集成了 TLS 1.3,简化了加密实现,并提供了更高的安全保障。每个数据包都是加密的,确保传输中的数据无法被窃听或篡改。
  • 快速密钥协商:通过快速密钥协商机制,QUIC 能够在连接建立时迅速协商加密密钥,减少初始握手时间。

5. 更好的性能

优点:

  • 低延迟和高吞吐量:HTTP/3 提供了更低的延迟(0-RTT)和更高的吞吐量,适用于实时应用和高流量网站。

实现机制:

  • 拥塞控制和丢包恢复:QUIC 使用现代的拥塞控制算法(如 BBR),提供更好的带宽利用和丢包恢复机制。每个流有独立的拥塞控制,优化了整体传输性能。
  • UDP 优化:通过使用 UDP 而不是 TCP,QUIC 避免了 TCP 的慢启动和其他性能瓶颈,同时利用 UDP 的灵活性进行高效的数据传输。

6. 避免协议僵化

优点

  • 独立于操作系统的实现:HTTP/3 和 QUIC 在用户空间实现,不依赖于操作系统内核,易于部署和更新。

实现机制

  • 用户空间实现:QUIC 协议栈在用户空间实现,允许开发者快速迭代和部署新特性和安全补丁,而无需等待操作系统的更新。
  • 独立的版本控制:由于在用户空间实现,QUIC 可以独立于操作系统进行版本控制和更新
    在这里插入图片描述

7. 高效的错误恢复和流量控制

优点:

  • 快速错误恢复:在发生数据包丢失时,HTTP/3 可以快速恢复,不会影响整个连接的传输效率。

实现机制:

  • 独立的错误恢复机制:每个流都有独立的错误恢复机制,确保丢失的数据包不会影响其他流的传输。QUIC 使用基于帧的重传机制,只重传丢失的数据包部分。
  • 细粒度的流量控制:QUIC 提供更细粒度的流量控制,允许对每个流单独进行流量管理,优化带宽利用。

五、HTTP3阻力

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1856741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年6月24日v1.0.3优雅草超级站长工具开发进度

https://doc.youyacao.com/9/2151 v1.0.3优雅草超级站长工具开发进度 2024年6月24日v1.0.3优雅草超级站长工具开发进度- 演示地址-可测试 https://test2.youyacao.com 介绍 本产品是一款针对站长使用的工具,针对网站域名的多维信息查询工具,本产品…

【自动控制原理课程设计】

利用频率法设计控制器,对象模型采用二阶传递函数,使得校正后的系统的性能指标满足: 1)位置误差系统kp10; 2)相角裕度y45; 3)幅值裕度h>10dB; 绘制出校正前后的Bode图,并进行闭环…

特征工程与数据预处理全解析:基础技术和代码示例

在机器学习和数据科学的世界里,数据的质量是建模成功与否的关键所在。这就是特征工程和数据预处理发挥作用的地方。本文总结的这些关键步骤可以显著提高模型的性能,获得更准确的预测,我们将深入研究处理异常值、缺失值、编码、特征缩放和特征…

Springboot拦截器使用及其底层源码剖析

博主最近看了一下公司刚刚开发的微服务,准备入手从基本的过滤器以及拦截器开始剖析,以及在帮同学们分析一下上次的jetty过滤器源码与本次Springboot中tomcat中过滤器的区别。正题开始,拦截器顾名思义是进行拦截请求的一系列操作。先给大家示例…

Java学习 - 网络TCP,UDP协议讲解

TCP协议 TCP协议特点 面向连接 应用程序在使用TCP协议之前,必须先建立TCP连接在数据传输完毕后,必须释放已经建立的TCP连接类似于打电话 点对点通信 TCP协议就像打电话,只能一对一,不能一对多或多对多 可靠传输 TCP协议能够保证…

分布式锁实现方案-基于Redis实现的分布式锁

目录 一、基于Lua看门狗实现 1.1 缓存实体 1.2 延迟队列存储实体 1.3 分布式锁RedisDistributedLockWithDog 1.4 看门狗线程续期 1.5 测试类 1.6 测试结果 1.7 总结 二、RedLock分布式锁 2.1 Redlock分布式锁简介 2.2 RedLock测试例子 2.3 RedLock 加锁核心源码分析…

OpenAI CTO谈GPT-5将达博士生智力水平;斯坦福评估排名前十两款来自中国

🦉 AI新闻 🚀 OpenAI CTO谈GPT-5将达博士生智力水平 摘要:美国达特茅斯工程学院采访了OpenAI首席技术官米拉・穆拉蒂,她表示GPT-4的智力相当于高中生,而GPT-5将在一年半后发布,预计达到博士生水平。穆拉蒂…

【Unity Shader】Alpha Blend(Alpha混合)的概念及其使用示例

在Unity和图形编程中,Alpha Blend(也称为Alpha混合)是一种用于处理像素透明度的技术。它允许像素与背景像素融合,从而实现透明或半透明的效果。Alpha Blend在渲染具有透明度的物体(如窗户、玻璃、水、雾等)…

闷热烦躁,精神倦怠?3个食疗方,5款好物,助您清凉度夏~

夏日,阳气旺盛,万物繁荣秀丽,但赤日炎炎似火烧,人们容易闷热、食欲不佳、四肢倦怠、萎靡不振等,再加上蚊虫多,更是让人烦躁不安! 5款清凉好物 赶走蚊虫 天气炎热,蚊子、小虫都来了…

webpack【实用教程】

基础配置 配置的拆分和合并 通常 webpack 的配置文件会有3个 webpack.common.js 公共配置(会被另外两个配置文件导入并合并)webpack.dev.js 开发环境的配置webpack.prod.js 生产环境的配置 开发环境的本地服务 在 webpack.dev.js 中配置 devServer:…

springboot加载bean的方式

在SpringBoot的大环境下,基本上很少使用之前的xml配置Bean,主要是因为这种方式不好维护而且也不够方便。 springboto注入bean主要采用下图几种方式, 1、注解装配Bean 1、使用Component等派生注解 只要在类上加类上加 Component 注解即可,该…

Kotlin 运行代码片段多种方式

目录 场景描述 一、Scratch files and worksheets in the IDE 1、Scratch files(草稿文件) 特点: Scratch files文件创建步骤: 功能解释: Scratch Buffer笔记文件: 2、Worksheets(工单) 1)、创建方式不同。 …

基于堆叠长短期记忆网络 Stacked LSTM 预测A股股票价格走势

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对…

思看科技冲刺上市疑云:募资用途遭强烈质疑,IPO前突击分红

近日,思看科技(杭州)股份有限公司(下称“思看科技”)已更新提交2023年最新财务资料,重启科创板IPO进程。贝多财经了解到,思看科技的上市申请于2023年6月获上交所受理,目前已进入问询…

简鹿文件批量重命名:一款文件批量改名高手都在用的工具

作为 IT 行业的搬砖民工,互联网的数据量爆炸性增长,文件管理成为了一项日益重要的任务。"简鹿文件批量重命名"应运而生,旨在为用户提供一个高效、灵活的解决方案,以应对繁琐的文件命名、排序、创建及属性修改等挑战。 这…

足底筋膜炎吃什么药最管用

足底筋膜炎在使用药物后未见明显改善,但通过使用“古顺、敷堂、筋膜”贴后病情得到了缓解。按疗程使用自愈了,这款筋膜贴通过其药物成分渗透到组织中,从根本上消除炎症,从而快速缓解症状,足底筋膜炎得到了明显的改善。…

【思科】IPv6 过渡技术 - 6to4隧道

【思科】IPv6 过渡技术 - 6to4隧道 实验要求实现思路6 to 4 特点注意点IPv4 转 IPv6 格式小技巧 配置R1基础配置OSPFv3 局域网可达 R2基础配置局域网环境(OSPFv3):IPv6 网络6 to 4 隧道 R3R4基础配置局域网环境(OSPFv3):IPv6 网络6 to 4 隧道 R5基础配置…

Apifox 快速入门教程

访问示例项目​ 可访问Apifox官网,下载并打开 Apifox 后,你将会看到由系统自动创建的“示例团队”,其中内含一个“示例项目”。 项目中自动生成了与宠物商店有关的数条接口。 手动新建接口​ 新建接口是开发者们最常用的功能之一。Apifox 能…

Java研学-RBAC权限控制(八)

九 登录登出 1 登录作用 判断员工是否有权限访问,首先得知道现在操作的人是谁,所以必须先实现登录功能 2 登录流程 ① 提供登录页面,可输入用户名与密码信息,并添加执行登录的按钮。(登录页面不能被拦截)…

微服务、多租户、单点登录、国产化形成的开源Java框架!

一、项目简介 JVS是软开企服构建的一站式数字化的开源框架,支持对接多种账户体系,支持多租户、支持Auth2、统一登录、单点登录等,支持原生开发、低代码/零代码开发应用。 二、框架核心功能 控制台(首页):采用配置化的方式 用户…