简单聊聊更快、更稳、更高效的 QUIC 协议

目录

QUIC的起源和发展

QUIC 与 TCP 和 UDP 的比较

QUIC 的主要特性

QUIC 的工作原理

QUIC 的应用场景

小结


QUIC(Quick UDP Internet Connections,快速 UDP 互联网连接)是一种基于 UDP 协议的传输层协议,由 Google 首次提出,并已在 IETF(互联网工程任务组)的标准化过程中得到发展。QUIC 的设计目标是减少网络通信的延迟,提高连接的可靠性,并改善多路复用的性能。QUIC是HTTP/3的基础,在提升 Web 性能方面有显著的作用。

QUIC的起源和发展

QUIC 是由 Google 在2012年开发的,目的是解决 TCP 协议在现代网络环境中的一些局限性。2013年,Google 在其 Chrome 浏览器中实现了 QUIC,并在其服务中广泛部署。随后,QUIC 被提交给 IETF 进行标准化,并在多个草案的迭代中不断完善。

QUIC 与 TCP 和 UDP 的比较

在深入了解 QUIC 之前,先简单看下 TCP 和 UDP 这两种传统的传输协议。

  • TCP(传输控制协议):TCP 是一种面向连接的协议,提供可靠的数据传输服务。通过三次握手建立连接,使用流量控制、拥塞控制和重传机制来保证数据的顺序传输和完整性。但这些特性也导致了 TCP 在建立连接和恢复丢失数据包时存在延迟。
  • UDP(用户数据报协议):UDP 是一种无连接的协议,允许数据包在没有事先建立连接的情况下发送。UDP 的开销较小,但不保证数据包的顺序、完整性或可靠性。

QUIC 结合了 TCP 的可靠性和 UDP 的低延迟特点,并引入了新的特性。

QUIC 的主要特性

  1. 快速建立连接:QUIC 减少了握手的往返次数。在最佳情况下,只需要一个往返时间(0-RTT)就可以建立连接并开始数据传输,这种机制可以大大减少连接建立的时间,提高数据传输的效率。
  2. 加密和身份认证:QUIC 协议内置了 TLS 1.3,提供了端到端加密,并在协议层面确保了数据的安全性。在建立连接时,客户端和服务器会交换密钥,用于后续的数据传输。还支持双向身份认证,以保证数据的安全性。
  3. 多路复用:QUIC 允许多个独立的数据流在同一个连接上并行传输,而不会互相干扰。这消除了 TCP 中的队首阻塞问题,提高了数据传输的效率。
  4. 流量控制和拥塞控制:QUIC 实现了自己的流量控制和拥塞控制算法。可以避免因为数据发送过快而导致的接收方缓冲区溢出;当网络拥堵时,会自动降低发送速率,以避免加剧网络拥堵,可以更高效地利用网络带宽,并在网络条件变化时保持连接的稳定性。
  5. 连接迁移:QUIC 支持连接迁移功能,即使客户端的网络环境发生变化(如更换IP地址),连接也能保持不中断。
  6. 前向纠错:QUIC 支持前向纠错(FEC),可以减少在丢包环境下的重传。
  7. 无状态重置:QUIC 提供了无状态重置功能,允许无法继续维持状态的服务器优雅地关闭连接。

QUIC 的工作原理

以下是 QUIC 工作原理的简要概述:   

  1. 连接建立,当客户端与服务器建立连接时,会发送一个特殊的 QUIC 握手包,这个包包含了客户端支持的 QUIC 版本信息、客户端的传输参数以及 TLS 握手所需的信息。如果是 0-RTT 连接,客户端还可以在同一个握手包中发送加密的应用数据。服务器在收到握手包后,如果同意建立连接,会响应一个握手包,包含服务器的传输参数和 TLS 信息。一旦双方完成 TLS 握手,QUIC 连接就建立成功,双方就可以开始安全地交换应用数据了。
  2. 数据传输,在 QUIC 中,数据是通过独立的流进行传输的。每个流都是双向的,并且可以独立于其他流进行控制。这意味着如果一个流的数据包丢失,只会影响该流的数据传输,而不会阻塞其他流。
  3. 拥塞控制,QUIC 实现了自己的拥塞控制算法,如 Google 的 CUBIC 或 BBR,这些算法可以更有效地利用带宽,减少网络拥塞的影响。
  4. 连接迁移,QUIC 的连接是由连接ID(Connection ID)标识的,而不是传统的 IP 地址加端口号。即使客户端的网络环境发生变化(如 IP 地址改变),QUIC 连接也能保持稳定。
  5. 错误恢复,QUIC 有自己的错误恢复机制,能够快速识别丢包并进行重传,确认机制也比 TCP 更高效。
  6. 连接关闭,QUIC 允许立即关闭连接,不需要 TCP 那样经历 TIME_WAIT 状态,有助于资源的快速释放。

QUIC 的应用场景

由于 QUIC 具有无连接建立延迟、多路复用、快速重传、拥塞控制等优点,因此适用于需要高速、高效、安全的数据传输场景,例如:

  • 网页浏览:QUIC可以减少网页加载时间,提高用户体验。特别是对于动态网页和应用,如视频流、社交媒体、电子商务等。
  • 实时通信:QUIC适用于实时通信应用场景,如在线游戏、视频会议、即时通讯等。可以提供更稳定、更快速的数据传输服务。

小结

QUIC 的设计解决了 TCP 在现代互联网中遇到的一些关键问题,提供了一个更快、更可靠、更灵活的网络传输协议。随着HTTP/3标准的采用,QUIC 的应用也会越来越广泛。

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

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

相关文章

上个班而已

习惯性刷CSDN,发现了这么个主题,有意思。在我的字典里,“养生”这个条目已经被我删了。看过了太多的伪科学、贩卖焦虑、带货、自以为是,干脆眼不见为净。但程序员人均亚健康这句话真未必是个玩笑,所以还是凑个热闹聊上…

XML Schema中的elementFormDefault

XML Schema中的elementFormDefault,用以指明xml的元素是否必须有命名空间的前缀。 它的取值可以为qualified、或者unqualified。默认值为unqualified。 当取值为qualified时,xml元素前必须有命名空间作为前缀; 当取值为unqualified时&#x…

04.PostgreSQL是如何实现隔离级别的?

PostgreSQL是如何实现隔离级别的? 事务有哪些特性? 事务看起来感觉简单,但是要实现事务必须要遵守 4 个特性,分别如下: 原子性(Atomicity):一个事务中的所有操作,要么…

Istio新架构揭秘:环境化Mesh

自问世以来,Istio因其使用Sidecar(可编程代理与应用容器一同部署)而备受认可。这种架构选择使Istio用户能够享受其好处,而无需对其应用进行 drast 改变。这些可编程代理,与应用容器紧密部署在一起,因其能够…

CC++枚举类型与类型定义(typedef)

在C中,枚举类型(enum)和类型定义(typedef)都是用来为数据类型创建别名的机制。它们可以提高代码的可读性和维护性。 枚举类型(enum) 枚举类型是一种用户自定义的数据类型,用于定义…

java学习part27线程死锁

基本就是操作系统的内容 138-多线程-线程安全的懒汉式_死锁_ReentrantLock的使用_哔哩哔哩_bilibili

【大模型】更强的 ChatGLM3-6B 来了,开源可商用

【大模型】更强的 ChatGLM3-6B 来了,开源可商用 简介ChatGLM3-6B 环境配置环境搭建安装依赖 代码及模型权重拉取拉取 ChatGLM3-6B拉取 ChatGLM3-6B 模型权重及代码 终端测试网页测试安装 gradio加载模型并启动服务 参考 简介 ChatGLM3-6B ChatGLM3-6B 是 ChatGLM …

总结 SpringMVC 中的常用注解和用法

RequestMapping ??是?Spring?Web?MVC?应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的 路由映射的.? 表⽰服务收到请求时,?路径为?/sayHi?的请求就会调⽤?sayHi?这个⽅法的代码.?? 路由映射:?当⽤⼾访问⼀个?URL?时,?将⽤⼾的请求对应到程序中…

thinkphp控制器调用脚本

一、同步方式 //脚本配置示例protected function configure(){// 指令配置$this->setName(pltUpgrade)->addArgument(type, Argument::OPTIONAL, your type)->addOption(id, null, Option::VALUE_REQUIRED, upgrade id)->setDescription(PltUpgrade);}// 调用命令行…

基于STM32的四轴飞行器的控制系统(论文+源码)

1.系统设计 本次基于stm32单片机的四轴飞行器控制系统主要包括硬件和软件这两大部分,其中硬件部分是基于单片机的四轴飞行器控制系统实现的基石,其中主要STM32单片机负责整个系统功能的实现;NRF24L01无线模块负责对四轴飞行器的远程控制&…

rtmp 协议详解

1. handshake 1.1 概述 rtmp 连接从握手开始。它包含三个固定大小的块。客户端发送的三个块命名为 C0,C1,C2;服务端发送的三个块命名为 S0,S1,S2。 握手序列: 客户端通过发送 C0 和 C1 消息来启动握手过程。客户端必须接收到 S1 消息,然后…

MS721仪表总线收发器可Pin to Pin兼容TSS721A

MS721 是为 M-Bus 标准(EN1434-3)的应用而开发的单片收发电路。MS721 接口电路可以适应从站与主站之间的电压差,总线的连接没有极性要求,电路由主站通过总线供电,这样对于从站电池就不会增加额外的负载,同时…

轻量级万物分割SAM模型——MobileSAM安装实测摘要

目录 0、前言1、准备工作安装python环境说明安装说明 运行测试app安装依赖修改代码 2、实际测试效果自带图片测试其它图片测试1其它图片测试2 总结 0、前言 本文将介绍一种轻量级万物分割SAM模型——MobileSAM的安装和实测情况。SAM是meta公司的一种图像分割大模型&#xff0c…

二分+dp:[ARC120E] 1D Party

https://www.luogu.com.cn/problem/AT_arc120_e 考虑二分时间,然后设 d p ( i , 0 ) dp(i,0) dp(i,0) 表示第 i i i 个人开头往左走,掉头后剩余步数。 d p ( i , 1 ) dp(i,1) dp(i,1) 表示第 i i i 个人先往右走,最多走多少步就有掉头。 …

css中的 Grid 布局

flex布局和grid布局区别 flex布局是 一维布局grid布局是二维布局 flex布局示例 grid布局示例 grid 布局初体验 体验地址 <div class"wrapper"><div class"one item">One</div><div class"two item">Two</div&…

Asp.net core WebApi 配置自定义swaggerUI和中文注释,Jwt Bearer配置

1.创建asp.net core webApi项目 默认会引入swagger的Nuget包 <PackageReference Include"Swashbuckle.AspNetCore" Version"6.2.3" />2.配置基本信息和中文注释&#xff08;默认是没有中文注释的&#xff09; 2.1创建一个新的controller using Micr…

开源堡垒机Jumpserver

文章目录 开源堡垒机JumpserverJumpserver介绍安装环境部署安装jumpserver访问jumpserver的web界面 开源堡垒机Jumpserver Jumpserver介绍 Jumpserver 是全球首款完全开源的堡垒机&#xff0c;使用 GNU GPL v2.0 开源协议&#xff0c;是符合 4A 的运维安全审计系统。 Jumpse…

一、个人博客搭建保姆级教程-总篇

前言 首先说明一下&#xff0c;我们这套教程主要部署的是静态网页&#xff0c;即不涉及到JavaWeb、ASP.Net这些框架。直接使用nginx托管静态网页。 主要面向的是不希望花太多时间在搭建个人博客上的小伙伴、以及非程序员的小伙伴。 前置知识 当然了&#xff0c;搭建需要一些…

项目代码规范

Web端代码规范 Vue项目代码规范 一、命名规范 1、项目名 全部采用小驼峰命名式&#xff0c;例&#xff1a;camelCase&#xff08;小驼峰式命名法 —— 首字母小写&#xff09; 2、目录名 参照项目命名规则&#xff0c;有复数结构时&#xff0c;要采用复数命名法。例&#xff…

J-LINK J-FLASH 下载STM32单片机程序使用教程

J-LINK J-FLASH 下载STM32单片机程序使用教程 Chapter1 J-LINK J-FLASH 下载STM32单片机程序使用教程1.安装提供的 JLINK驱动程序2. 点击打开 J-Flash V7.223.点击 create a new project.&#xff08;使用后可以在软件菜单File保存这个烧写工程&#xff0c;后续直接打开使用即可…