当前位置: 首页 > news >正文

【知识点随笔分析 | 第五篇】简单介绍什么是QUIC

前言:

        随着互联网的快速发展,传统的基于TCP的协议开始显现出一些局限性。TCP在连接建立和拥塞控制方面存在一定的延迟,这可能导致用户在访问网页、观看视频或玩网络游戏时感受到不必要的等待时间。而QUIC作为一种新兴的传输协议,试图解决这些问题并提升网络连接的性能。

目录

前言:

什么是QUIC

QUIC的连接过程:

QUIC为什么可以简短握手次数:

QUIC的优势:

QUIC如何解决UDP缺陷:

小知识点:

总结:

 


 

什么是QUIC

        QUIC(Quick UDP Internet Connections)是新一代的互联网传输协议,旨在优化网络连接的速度和安全性。它是基于UDP(User Datagram Protocol)协议的,与传统的基于TCP(Transmission Control Protocol)的协议有所不同。

QUIC的设计目标是减少网络延迟并提高连接速度,以提供更好的用户体验。为了实现这一目标,QUIC引入了一些创新性的技术和特性。

目前,QUIC已经被许多主流的浏览器和服务提供商支持,并逐渐在互联网上得到广泛应用。它特别适用于传输实时的流媒体、在线游戏和实时通信等需要低延迟和高吞吐量的应用场景。

QUIC的连接过程:

QUIC的连接过程如下:

  1. 客户端发起连接请求:客户端使用QUIC协议创建一个UDP数据包(称为Initial Packet),其中包含握手信息和加密密钥的初始化。该数据包发送到服务器的QUIC端口。

  2. 服务器响应:服务器接收到客户端的Initial Packet后,使用预共享的密钥解密该数据包,并验证客户端的身份。如果验证通过,服务器使用新的加密密钥生成一个响应数据包(称为Handshake Packet),其中包含服务器的握手信息和密钥材料。

  3. 客户端验证服务器:客户端接收到服务器的Handshake Packet后,使用预共享的密钥解密该数据包,并验证服务器的身份。如果验证通过,客户端生成自己的加密密钥,并创建第二个握手数据包(称为Handshake Packet),其中包含客户端的握手信息和密钥材料。

  4. 握手完成:服务器接收到客户端的Handshake Packet后,进行身份验证和密钥解密。如果一切正常,服务器发送一个确认数据包(称为Handshake Packet),表示握手过程完成。

  5. 数据传输:一旦握手完成,双方可以开始传输数据。QUIC协议允许在同一连接上同时进行多个数据流,这意味着可以并行传输多个数据块。数据包在发送和接收时会进行加密和解密。

QUIC的连接过程相对较快,因为它减少了握手阶段的往返次数,并且使用了加密来保护数据的安全性。此外,QUIC还具有拥塞控制和流量控制等机制,以保证数据传输的可靠性和性能。我们再来为大家介绍一下QUIC为什么可以减少握手阶段的往返次数:

QUIC为什么可以简短握手次数:

QUIC可以缩减握手往返次数,主要有以下原因:

  1. 合并握手和加密:传统的TCP+TLS握手是分两个阶段进行的,首先进行TCP三次握手建立连接,然后再进行TLS握手进行加密。而QUIC将握手和加密过程合并在一起,通过使用预共享的密钥加快了握手过程。

  2. 零往返时间(0-RTT)握手:QUIC引入了0-RTT模式,允许客户端在第一次建立连接时就发送数据。这是通过客户端在首次握手时发送了一些加密的令牌(称为“乞丐模式”或“全新连接”)来实现的,服务器在接收到这些令牌后可以直接使用它们解密数据。

  3. 快速恢复:当QUIC连接中断或丢失时,QUIC协议可以更快地从中断处恢复。它使用前一个有效连接的密钥材料,因此可以避免重新执行完整的握手过程。

通过以上技术优化,QUIC能够减少握手往返次数,在建立连接时节省了时间。这对于减少延迟、提高效率和改善用户体验非常重要,特别是在网络条件较差或移动网络环境下。但需要注意的是,这种缩减握手往返次数的优势可能会受到网络和服务器端实现的限制。

QUIC的优势:

  1. 多路复用与流量控制:QUIC是一种基于UDP协议的可靠传输协议,支持多路复用(Multiplexing)和流量控制(Flow Control)。它通过在一个QUIC连接上同时传输多个应用层数据流(Stream),避免了TCP中队头阻塞(Head-of-Line Blocking)的问题。同时,QUIC还支持流量控制,在每个数据流上维护了一个独立的接收窗口(Receive Window),避免了接收方被发送方的过量传输所淹没。

  2. 全速加密:QUIC提供了全速加密(Always-on Encryption)的机制,即所有数据传输都是加密的。这一特性可以保证传输协议和传输内容的安全性,防止数据被窃听和篡改。在QUIC协议中,加密是与连接建立同时完成的,不需要单独进行TLS握手等额外过程。

  3. 快速握手:QUIC采用0-RTT模式,使得连接建立速度更快。在QUIC连接中,第一次连接时,客户端可以将一些信息(如会话秘钥等)预先发送给服务器,服务器可以利用这些信息进行验证,从而跳过授权和秘钥交换的步骤,提高了连接建立的速度。

  4. 质量保证:QUIC协议使用自适应拥塞控制(Adaptive Congestion Control)机制,通过实时感知网络拥塞程度,并调整传输速率,从而保证数据传输的质量。在丢包等异常情况下,QUIC还能够重新组装数据包,提高了数据传输的可靠性。

  5. 可扩展性:由于QUIC中采用了多路复用的机制,使得它具备更好的可扩展性,能够适应不同网络场景下的需求。同时,QUIC还支持快速握手、全速加密等特性,可以有效地提高网络传输的效率和安全性,满足了现代Web应用对传输性能和安全性的要求。

综上所述,QUIC具有多路复用流量控制全速加密快速握手拥塞控制等特性,能够有效地提高网络传输的性能和安全性,适用于各种网络环境和应用场景。

而QUIC是如何解决UDP协议在传输数据包时的数据包顺序问题以及丢包问题呢?

QUIC如何解决UDP缺陷:

  1. 数据包顺序:QUIC使用了序列号来标识和排序数据包,确保它们以正确的顺序被接收和处理。每个数据包都带有一个序列号,接收端可以根据序列号将数据包按照正确的顺序组装起来。如果有数据包丢失或乱序到达,接收端可以请求重传并将数据包按照正确的序列号进行排序。

  2. 丢包恢复:QUIC采用了快速重传和快速恢复机制,以减少丢包对传输性能的影响。当发生丢包时,接收端可以快速通知发送端,发送端会根据接收端的通知进行快速重传,避免等待重传定时器到期。同时,接收端使用快速恢复机制来更快地恢复其它丢失的数据包,而不必等待所有数据包的重传,从而减少了网络传输的停顿时间。

  3. 流控制和拥塞控制:QUIC内建了流控制和拥塞控制的机制来适应不同的网络条件。流控制确保发送端不会发送过多的数据,以避免接收端的缓冲区溢出。拥塞控制调整发送数据的速率以避免过度拥塞网络。这些机制可以帮助QUIC在遇到丢包情况时,根据网络状况进行自适应调整,保证传输的可靠性和性能。

总的来说,QUIC在应用层通过序列号快速重传快速恢复机制,以及内建的流控制和拥塞控制来解决数据包顺序和丢包问题。这些机制使得QUIC能够在基于UDP的传输中提供可靠和高效的数据传输。

小知识点:

什么是队头阻塞?

        队头阻塞(Head-of-Line Blocking)是指在网络中,由于某个数据包的丢失或延迟,导致后续的数据包无法继续传输和处理,从而造成数据流的堵塞。这种情况发生在基于顺序传输的协议中,例如TCP,以及基于传统HTTP/1.1的多个请求在同一个连接上串行执行时。

具体来说,在一个基于顺序传输的协议中,数据包的传输和接收必须按照严格的顺序进行,即每个数据包都必须在前一个数据包被成功接收之后才能进行处理。如果前面的某个数据包丢失、延迟或出现其他故障,后续的数据包就会被阻塞在队列中,无法继续传输和处理,直到问题得到解决,导致网络传输效率降低。

队头阻塞问题特别突出在高延迟、高丢包的网络环境中,例如无线网络或卫星网络。由于TCP的拥塞控制机制,一个丢失或延迟的数据包会被视为网络拥塞的征兆,导致TCP慢启动机制的触发,进而减慢整个数据流的传输速度。

为了解决队头阻塞问题,一些新的协议和技术被提出,例如QUIC和HTTP/2。它们采用了多路复用和并行传输的机制,允许多个请求和响应在同一个连接上同时进行,从而避免了队头阻塞问题,提高了网络的利用率和性能。

QUIC是如何解决队头阻塞问题的?

QUIC协议使用了多路复用(Multiplexing)的机制来避免队头阻塞问题。多路复用将应用层的数据流划分为多个独立的流(Stream),每个流可以独立地传输和处理数据。这样即使某个数据包出现丢失或延迟,不会影响其他数据包的传输和处理。

具体来说,QUIC协议在传输过程中将数据包分为多个数据流,并组成一个数据报(Datagram)进行传输。每个数据流都有一个唯一的标识符,称为Stream ID。发送方将数据包按照Stream ID进行打包,然后在网络中进行传输。接收方通过Stream ID来区分不同的数据流,并对数据包进行解包和处理。

由于每个数据流都是独立的,因此某个数据包的丢失或延迟只会影响到该数据流,而不会影响到其他数据流的传输。如果某个数据流出现问题,其他数据流仍然可以继续传输,避免了队头阻塞的问题,提高了传输的效率和并发性。

总结:

QUIC(Quick UDP Internet Connections)是一种基于UDP协议的高性能、可靠的传输协议。相比于传统的TCP协议,在连接建立、拥塞控制、数据传输等方面都有着显著的改进和优势。

首先,QUIC利用了多路复用技术,将应用层的数据流划分为多个独立的流,避免队头阻塞问题,提高了传输效率和并发性。每个数据流都有独立的标识符,可以独立地传输和处理数据,即使某个数据流出现问题,其他流仍然可以继续传输。

其次,QUIC采用了快速握手和0-RTT连接恢复等机制,减少了连接建立和重连过程的延迟。QUIC使用了类似TLS的加密和认证机制保证数据的安全性和隐私。

此外,QUIC还具备拥塞控制和流量控制等功能,能够有效地适应各种网络环境和带宽条件,提供更稳定和可靠的传输性能。

总的来说,QUIC通过在传输层引入新的协议,优化了数据的传输效率、可靠性和安全性,对于网络应用来说具有重要的意义。随着QUIC的逐渐普及和成熟,越来越多的互联网服务和应用将受益于这项技术,并为用户提供更快速、可靠和安全的网络体验。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

69e9169c980f43e0aad31ff9ada88a9c.png

 

相关文章:

【知识点随笔分析 | 第五篇】简单介绍什么是QUIC

前言: 随着互联网的快速发展,传统的基于TCP的协议开始显现出一些局限性。TCP在连接建立和拥塞控制方面存在一定的延迟,这可能导致用户在访问网页、观看视频或玩网络游戏时感受到不必要的等待时间。而QUIC作为一种新兴的传输协议,试…...

vscode ssh 远程免密登录开发

存放代码的机器运行 sshd, vscode 所在机器保证可以通过 ssh 登录服务器vscode 机器通过 ssh-keygen 生成 ssh 公私钥对(已有可以忽略)将客户端的 id_rsa.pub 加入到服务器的鉴权队列 cat id_rsa.pub >> authorized_keysvscode 配置ssh登录即可.ctrlp, remote-ssh: open …...

辅助驾驶功能开发-测试篇(2)-真值系统介绍

1 真值系统概述 1.1 真值评测系统核心应用 快速构建有效感知真值,快速完成感知性能评估,快速分析感知性能缺陷。 主要应用场景包括: 1. 感知算法开发验证: 在算法开发周期中,评测结果可以作为测试报告的一部分,体现算法性能的提升。 2. 遴选供应…...

运行程序时msvcr110.dll丢失的解决方法,msvcr110.dll丢失5的个详细解决方法

在使用电脑的过程中,我们经常会遇到各种问题,其中之一就是 msvcr110.dll 丢失的问题。msvcr110.dll 是 Microsoft Visual C Redistributable 的一个组件,用于支持使用 Visual C 编写的应用程序。如果您的系统中丢失了这个文件,您可…...

已解决 Bug——IndexError: index 3 is out of bounds for axis 0 with size 3问题

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…...

WEB3 solidity 带着大家编写测试代码 操作订单 创建/取消/填充操作

好 在我们的不懈努力之下 交易所中的三种订单函数已经写出来了 但是 我们只是编译 确认了 代码没什么问题 但还没有实际的测试过 这个测试做起来 其实就比较的麻烦了 首先要有两个账号 且他们都要在交易所中有存入 我们还是先将 ganache 的虚拟环境启动起来 然后 我们在项目…...

c++-vector

文章目录 前言一、vector介绍二、vector使用1、构造函数2、vector 元素访问3、vector iterator 的使用4、vector 空间增长问题5、vector 增删查改6、理解vector<vector< int >>7、电话号码的字母组合练习题 三、模拟实现vector1、查看STL库源码中怎样实现的vector2…...

十四天学会C++之第二天(函数和库)

1. 函数的定义和调用 在C中&#xff0c;函数是组织和结构化代码的关键工具之一。它们允许您将一段代码封装成一个可重复使用的模块&#xff0c;这有助于提高代码的可读性和维护性。 为什么使用函数&#xff1f; 函数在编程中的作用不可小觑。它们有以下几个重要用途&#xf…...

蓝桥杯每日一题2023.10.3

杨辉三角形 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 40分写法&#xff1a; 可以自己手动构造一个杨辉三角&#xff0c;然后进行循环&#xff0c;用cnt记录下循环数的个数&#xff0c;看哪个数与要找的数一样&#xff0c;输出cnt #include<bits/stdc.h> using na…...

JavaScript系列从入门到精通系列第十二篇:JavaScript中对象的简介和对象的基本操作以及JavaScript中的属性值和属性名

文章目录 前言 一&#xff1a;对象分类 1&#xff1a;内建对象 2&#xff1a;宿主对象 3&#xff1a;自建对象 二&#xff1a;对象的基本操作 1&#xff1a;创建对象 2&#xff1a;向对象中添加属性 3&#xff1a;读取对象中的属性 4&#xff1a;修改对象中的属性 三…...

OpenCV实现视频的追踪(meanshift、Camshift)

目录 1&#xff0c;meanshift 1.1 算法流程 1.2 算法实现 1.3 代码实现 1.4 结果展示 1&#xff0c;meanshift 1.1 算法流程 1.2 算法实现 1.3 代码实现 import numpy as np import cv2 as cv# 读取视频 cap cv.VideoCapture(video.mp4)# 检查视频是否成功打开 if n…...

并查集详解(原理+代码实现+应用)

文章目录 1. 并查集概念2. 并查集原理2.1 合并2.1 找根 3. 并查集实现3.1 结构定义3.2 FindRoot&#xff08;找根&#xff09;3.3 Union&#xff08;合并&#xff09;3.4 IsInSet&#xff08;判断两个值是否在一个集合里&#xff09;3.5 SetCount&#xff08;并查集中集合个数&…...

第k小的数

补充习题: 第k小的数 问题描述 有两个正整数数列,元素个数分别为 N N N和 M M M.从两个数列中分别任取一个数相乘,这样一共可以得到 N M N\times M NM个数,询问这 N M N\times M NM个数中第 K K K小的数是多少. 数据范围: N , M < 200000 , K < 2.1 ∗ 1 0 10 , …...

基于electron25+vite4创建多窗口|vue3+electron25新开模态窗体

在写这篇文章的时候&#xff0c;查看了下electron最新稳定版本由几天前24.4.0升级到了25了&#xff0c;不得不说electron团队迭代速度之快&#xff01; 前几天有分享一篇electron24整合vite4全家桶技术构建桌面端vue3应用示例程序。 https://www.cnblogs.com/xiaoyan2017/p/17…...

红米手机 导出 通讯录 到电脑保存

不要搞什么 云服务 不要安装什么 手机助手 不要安装 什么app 用 usb 线 连接 手机 和 电脑 手机上会跳出 提示 选择 仅传输文件 会出现下面的 一个 盘 进入 MIUI目录 然后进入 此电脑\Redmi Note 5\内部存储设备\MIUI\backup\AllBackup\20230927_043337 如何没有上面的文件&a…...

常见web信息泄露

一、源码(备份文件)泄露 1、git泄露 Git是一个开源的分布式版本控制系统&#xff0c;在执行git init初始化目录的时候&#xff0c;会在当前目录下自动创建一个.git目录&#xff0c;用来记录代码的变更记录等。发布代码的时候&#xff0c;如果没有把.git这个目录删除&#xff…...

找不到VCRUNTIME140_1.dll怎么办,VCRUNTIME140_1.dll丢失的5个解决方法

在当今的数字时代&#xff0c;我们的生活和工作都离不开电脑。然而&#xff0c;随着科技的发展&#xff0c;我们也会遇到各种各样的问题。其中&#xff0c;VCRUNTIME140_1.dll丢失的问题是许多人都会遇到的困扰。这个问题可能会导致许多应用程序无法正常运行&#xff0c;给我们…...

C#生成自定义海报

安装包 SixLabors.ImageSharp.Drawing 2.0 需要的字体&#xff1a;宋体和微软雅黑 商用的需要授权如果商业使用可以使用方正书宋、方正黑体&#xff0c;他们可以免费商用 方正官网 代码 using SixLabors.Fonts; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Draw…...

BP神经网络的MATLAB实现(含源代码)

BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念&#xff0c;是一种按照误差逆向传播算法训练的多层前馈神经网络&#xff0c;是应用最广泛的神经网络模型之一 具体数学推导以及原理在本文不做详细介绍&#xff0c;本文将使用MATLAB进行B…...

AES和Rijndael的区别

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:密码学实践强化训练–【目录】 👈👈👈“Rijndael” 这个词的中文谐音可以近似地发音为 “瑞恩达尔”。请注意,这只是一种近似的发音方式,因为该词是荷兰姓氏 “Ri…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...

【Linux】使用1Panel 面板让服务器定时自动执行任务

服务器就是一台24小时开机的主机&#xff0c;相比自己家中不定时开关机的主机更适合完成定时任务&#xff0c;例如下载资源、备份上传&#xff0c;或者登录某个网站执行一些操作&#xff0c;只需要编写 脚本&#xff0c;然后让服务器定时来执行这个脚本就可以。 有很多方法实现…...