HTTP3(QUIC)详解

文章目录

  • 一、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阻力

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch LSTM模型深度解析:参数设置全指南

本文主要依据 Pytorch 中LSTM官方文档 ,对其中的 模型参数 、 输入 、 输出 进行详细解释。 目录 基本原理 模型参数 Parameters 输入Inputs: input, (h_0, c_0) 输出Outputs: output, (h_n, c_n) 变量Variables 备注 基本原理 首先我们看下面这个LSTM图&am…

应届毕业之本科简历制作

因为毕设以及编制岗位面试,最近好久没有更新了,刚好有同学问如何制作简历,我就准备将我自己制作简历的流程分享给各位,到此也算是一个小的结束,拿了工科学位证书毕业去做🐂🐎了。 简历主要包含内…

# Kafka_深入探秘者(3):kafka 消费者

Kafka_深入探秘者(3):kafka 消费者 一、kafka 消费者、消费组 1、Kafka 消费者是消费组的一部分,当多个消费者形成一个消费组来消费主题时,每个消费者会收到不同分区的消息。假设有一个 T1 主题,该主题有…

Spring+SpringMVC+MyBatis整合

目录 1.SSM介绍1.1 什么是SSM?1.2 SSM框架1.2.1 Spring1.2.2 SpringMVC1.2.3 MyBatis 2.SSM框架整合2.1 建库建表2.2 创建工程2.3 pom.xml2.4 log4j.properties2.5 db.properties2.6 applicationContext-dao.xml2.7.applicationContext-tx.xml2.8 applicationContex…

移远通信SC200L(展锐SL8541E)Linux系统修改分区大小

一、确定大小 由于默认的根文件分区大小仅500M,/lib目录移植个app都放不进去,这谁受得了? userdata分区却有6G,匀一点。 在 prebuilts/pac-binary/sl8541e/ 下有分区信息表 sl8541e-emmc-marlin2.xml: 找到system项&a…

MyBatis-Plus常用注解详解与实战应用

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了大量的常用注解,使得开发者能够更方便地进行数据库操作。 MyBatis-Plus 提供的注解可以帮我们解决一些数据库与实体之间相…

高校新生如何选择最优手机流量卡?

一年一度的高考已经结束了,愿广大学子金榜题名,家长们都给孩子准备好了手机,那么手机流量卡应该如何选择呢? 高校新生在选择手机流量卡时,需要综合考量流量套餐、费用、网络覆盖、售后服务等多方面因素,以下…

怎么用Excel生成标签打印模板,自动生成二维码

环境: EXCEL2021 16.0 问题描述: 怎么用excel生成标签打印模板自动生成二维码 解决方案: 在Excel中生成标签打印模板并自动生成二维码,可以通过以下几个步骤完成: 1. 准备数据 首先,确保你的Excel表…

【PyTorch单点知识】神经元网络模型剪枝prune模块介绍(上)

文章目录 0. 前言1. 剪枝prune主要功能分类2. torch.nn.utils.prune中的方法介绍3. PyTorch实例3.1 BasePruningMethod3.2PruningContainer3.3 Identity3.4RandomUnstructured3.5L1Unstructured 4. 总结 0. 前言 按照国际惯例,首先声明:本文只是我自己学…

【AI大模型】驱动的未来:穿戴设备如何革新血液、皮肤检测与营养健康管理

文章目录 1. 引言2. 现状与挑战3. AI大模型与穿戴设备概述4. 数据采集与预处理4.1 数据集成与增强4.2 数据清洗与异常检测 5. 模型架构与训练5.1 高级模型架构5.2 模型训练与调优 6. 个性化营养建议系统6.1 营养建议生成优化6.2 用户反馈与系统优化 7. 关键血液成分与健康状况评…

Win11最适合打游戏的版本推荐:畅玩游戏,告别卡顿!

在Win11电脑操作中,用户不仅可以进行办公、学习等操作,也可以畅玩喜欢的游戏。如果喜欢打游戏的用户,就可以安装上适合打游戏的系统版本。但许多新手用户不知道去哪里找到最适合打游戏的Win11系统版本?以下小编就给大家带来这样的…

el-upload 上传图片及回显照片和预览图片,文件流和http线上链接格式操作

<div v-for"(info, index) in zsjzqwhxqList.helicopterTourInfoList" :key"info.id" >编辑上传图片// oss返回线上地址http链接格式&#xff1a;<el-form-itemlabel"巡视结果照片":label-width"formLabelWidth"><el…

Appium APP测试学习

1、安装client编程库(客户端) (1)如果遇到以下问题可以使用全路径安装 (2)安装后导致selenium升级&#xff0c;导致某些方法失效&#xff1a;如find_element_by_id。解决方法&#xff1a;卸载两个安装包&#xff0c;后面重新安装 2、安装appium Server:&#xff08;服务端&…

【论文阅读】场景生成及编辑3D定位论文阅读

<div id"content_views" class"htmledit_views" style"user-select: auto;"><div class"kdocs-document"> 前置知识 归纳偏置 关于归纳偏置的理解&#xff1a;首先推荐一篇解释归纳偏置非常好的博客&#xff1a;浅谈归纳…

【PostgreSQL】AUTO_EXPLAIN - 慢速查询的日志执行计划

本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。 一、介绍 在本文中&#xff0c;我们将了解 PostgreSQL AUTO_EXPLAIN功能的工作原理&#xff0c;以及为什么应该使用它来收集在生产系统…

高考十字路口:24年考生如何权衡专业与学校的抉择?

文章目录 每日一句正能量前言专业解析理工科专业商科专业人文社科专业艺术与设计专业个人经验与思考过程结论 名校效应分析名校声誉与品牌效应资源获取学术氛围就业优势个人发展结论 好专业和好学校的权衡个人职业目标行业需求教育质量资源和机会学术氛围就业优势经济和地理位置…

SVM算法-人脸识别背后技术详解

引言 支持向量机&#xff08;SVM&#xff09;是一种强大的监督学习算法&#xff0c;广泛应用于分类和回归任务中。本文将详细介绍SVM算法在人脸识别任务中的应用&#xff0c;并通过代码示例来展示其背后的技术精髓。我们将分三大部分来展开&#xff0c;本部分将重点介绍SVM算法…

SpringBoot2+Vue3开发博客管理系统

项目介绍 博客管理系统&#xff0c;可以帮助使用者管理自己的经验文章、学习心得、知识文章、技术文章&#xff0c;以及对文章进行分类&#xff0c;打标签等功能。便于日后的复习和回忆。 架构介绍 博客管理系统采用前后端分离模式进行开发。前端主要使用技术&#xff1a;Vu…

网管工作实践_02_IP/MAC地址管理工具

1、ipconfig命令格式及参数 ipconfig是内置于Windows的TCP/IP应用程序&#xff0c;用于显示本地计算机网络适配器的MAC地址和IP地址等配置信息&#xff0c;这些信息一般用来榆验手动配置的TCP/IP设置是否正确。当在网络中使用 DHCP服务时&#xff0c;IPConfig可以检测计算机中分…

利用定时器1产生全双工软件串口

代码; /*《AVR专题精选》随书例程3.通信接口使用技巧项目&#xff1a;使用AVR定时器1和外中断实现全双工软件串口文件&#xff1a;softuart.c说明&#xff1a;软件串口驱动文件作者&#xff1a;邵子扬时间&#xff1a;2012年12月16日*/ #include "softuart.h"// 内部…