【知识点随笔分析 | 第五篇】简单介绍什么是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的连接过程如下:
-
客户端发起连接请求:客户端使用QUIC协议创建一个UDP数据包(称为Initial Packet),其中包含握手信息和加密密钥的初始化。该数据包发送到服务器的QUIC端口。
-
服务器响应:服务器接收到客户端的Initial Packet后,使用预共享的密钥解密该数据包,并验证客户端的身份。如果验证通过,服务器使用新的加密密钥生成一个响应数据包(称为Handshake Packet),其中包含服务器的握手信息和密钥材料。
-
客户端验证服务器:客户端接收到服务器的Handshake Packet后,使用预共享的密钥解密该数据包,并验证服务器的身份。如果验证通过,客户端生成自己的加密密钥,并创建第二个握手数据包(称为Handshake Packet),其中包含客户端的握手信息和密钥材料。
-
握手完成:服务器接收到客户端的Handshake Packet后,进行身份验证和密钥解密。如果一切正常,服务器发送一个确认数据包(称为Handshake Packet),表示握手过程完成。
-
数据传输:一旦握手完成,双方可以开始传输数据。QUIC协议允许在同一连接上同时进行多个数据流,这意味着可以并行传输多个数据块。数据包在发送和接收时会进行加密和解密。
QUIC的连接过程相对较快,因为它减少了握手阶段的往返次数,并且使用了加密来保护数据的安全性。此外,QUIC还具有拥塞控制和流量控制等机制,以保证数据传输的可靠性和性能。我们再来为大家介绍一下QUIC为什么可以减少握手阶段的往返次数:
QUIC为什么可以简短握手次数:
QUIC可以缩减握手往返次数,主要有以下原因:
-
合并握手和加密:传统的TCP+TLS握手是分两个阶段进行的,首先进行TCP三次握手建立连接,然后再进行TLS握手进行加密。而QUIC将握手和加密过程合并在一起,通过使用预共享的密钥加快了握手过程。
-
零往返时间(0-RTT)握手:QUIC引入了0-RTT模式,允许客户端在第一次建立连接时就发送数据。这是通过客户端在首次握手时发送了一些加密的令牌(称为“乞丐模式”或“全新连接”)来实现的,服务器在接收到这些令牌后可以直接使用它们解密数据。
-
快速恢复:当QUIC连接中断或丢失时,QUIC协议可以更快地从中断处恢复。它使用前一个有效连接的密钥材料,因此可以避免重新执行完整的握手过程。
通过以上技术优化,QUIC能够减少握手往返次数,在建立连接时节省了时间。这对于减少延迟、提高效率和改善用户体验非常重要,特别是在网络条件较差或移动网络环境下。但需要注意的是,这种缩减握手往返次数的优势可能会受到网络和服务器端实现的限制。
QUIC的优势:
-
多路复用与流量控制:QUIC是一种基于UDP协议的可靠传输协议,支持多路复用(Multiplexing)和流量控制(Flow Control)。它通过在一个QUIC连接上同时传输多个应用层数据流(Stream),避免了TCP中队头阻塞(Head-of-Line Blocking)的问题。同时,QUIC还支持流量控制,在每个数据流上维护了一个独立的接收窗口(Receive Window),避免了接收方被发送方的过量传输所淹没。
-
全速加密:QUIC提供了全速加密(Always-on Encryption)的机制,即所有数据传输都是加密的。这一特性可以保证传输协议和传输内容的安全性,防止数据被窃听和篡改。在QUIC协议中,加密是与连接建立同时完成的,不需要单独进行TLS握手等额外过程。
-
快速握手:QUIC采用0-RTT模式,使得连接建立速度更快。在QUIC连接中,第一次连接时,客户端可以将一些信息(如会话秘钥等)预先发送给服务器,服务器可以利用这些信息进行验证,从而跳过授权和秘钥交换的步骤,提高了连接建立的速度。
-
质量保证:QUIC协议使用自适应拥塞控制(Adaptive Congestion Control)机制,通过实时感知网络拥塞程度,并调整传输速率,从而保证数据传输的质量。在丢包等异常情况下,QUIC还能够重新组装数据包,提高了数据传输的可靠性。
-
可扩展性:由于QUIC中采用了多路复用的机制,使得它具备更好的可扩展性,能够适应不同网络场景下的需求。同时,QUIC还支持快速握手、全速加密等特性,可以有效地提高网络传输的效率和安全性,满足了现代Web应用对传输性能和安全性的要求。
综上所述,QUIC具有多路复用、流量控制、全速加密、快速握手、拥塞控制等特性,能够有效地提高网络传输的性能和安全性,适用于各种网络环境和应用场景。
而QUIC是如何解决UDP协议在传输数据包时的数据包顺序问题以及丢包问题呢?
QUIC如何解决UDP缺陷:
-
数据包顺序:QUIC使用了序列号来标识和排序数据包,确保它们以正确的顺序被接收和处理。每个数据包都带有一个序列号,接收端可以根据序列号将数据包按照正确的顺序组装起来。如果有数据包丢失或乱序到达,接收端可以请求重传并将数据包按照正确的序列号进行排序。
-
丢包恢复:QUIC采用了快速重传和快速恢复机制,以减少丢包对传输性能的影响。当发生丢包时,接收端可以快速通知发送端,发送端会根据接收端的通知进行快速重传,避免等待重传定时器到期。同时,接收端使用快速恢复机制来更快地恢复其它丢失的数据包,而不必等待所有数据包的重传,从而减少了网络传输的停顿时间。
-
流控制和拥塞控制: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的逐渐普及和成熟,越来越多的互联网服务和应用将受益于这项技术,并为用户提供更快速、可靠和安全的网络体验。
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!
相关文章:
【知识点随笔分析 | 第五篇】简单介绍什么是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✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂🦖…...
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中,函数是组织和结构化代码的关键工具之一。它们允许您将一段代码封装成一个可重复使用的模块,这有助于提高代码的可读性和维护性。 为什么使用函数? 函数在编程中的作用不可小觑。它们有以下几个重要用途…...
蓝桥杯每日一题2023.10.3
杨辉三角形 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 40分写法: 可以自己手动构造一个杨辉三角,然后进行循环,用cnt记录下循环数的个数,看哪个数与要找的数一样,输出cnt #include<bits/stdc.h> using na…...
JavaScript系列从入门到精通系列第十二篇:JavaScript中对象的简介和对象的基本操作以及JavaScript中的属性值和属性名
文章目录 前言 一:对象分类 1:内建对象 2:宿主对象 3:自建对象 二:对象的基本操作 1:创建对象 2:向对象中添加属性 3:读取对象中的属性 4:修改对象中的属性 三…...
OpenCV实现视频的追踪(meanshift、Camshift)
目录 1,meanshift 1.1 算法流程 1.2 算法实现 1.3 代码实现 1.4 结果展示 1,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(找根)3.3 Union(合并)3.4 IsInSet(判断两个值是否在一个集合里)3.5 SetCount(并查集中集合个数&…...
第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新开模态窗体
在写这篇文章的时候,查看了下electron最新稳定版本由几天前24.4.0升级到了25了,不得不说electron团队迭代速度之快! 前几天有分享一篇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是一个开源的分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个.git目录,用来记录代码的变更记录等。发布代码的时候,如果没有把.git这个目录删除ÿ…...
找不到VCRUNTIME140_1.dll怎么办,VCRUNTIME140_1.dll丢失的5个解决方法
在当今的数字时代,我们的生活和工作都离不开电脑。然而,随着科技的发展,我们也会遇到各种各样的问题。其中,VCRUNTIME140_1.dll丢失的问题是许多人都会遇到的困扰。这个问题可能会导致许多应用程序无法正常运行,给我们…...
C#生成自定义海报
安装包 SixLabors.ImageSharp.Drawing 2.0 需要的字体:宋体和微软雅黑 商用的需要授权如果商业使用可以使用方正书宋、方正黑体,他们可以免费商用 方正官网 代码 using SixLabors.Fonts; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Draw…...
BP神经网络的MATLAB实现(含源代码)
BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络模型之一 具体数学推导以及原理在本文不做详细介绍,本文将使用MATLAB进行B…...
AES和Rijndael的区别
快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:密码学实践强化训练–【目录】 👈👈👈“Rijndael” 这个词的中文谐音可以近似地发音为 “瑞恩达尔”。请注意,这只是一种近似的发音方式,因为该词是荷兰姓氏 “Ri…...
【数据结构】—堆详解(手把手带你用C语言实现)
食用指南:本文在有C基础的情况下食用更佳 🔥这就不得不推荐此专栏了:C语言 ♈️今日夜电波:水星—今泉愛夏 1:10 ━━━━━━️💟──────── 4:23 …...
关于算法复杂度的几张表
算法在改进今天的计算机与古代的计算机的区别 去除冗余 数据点 算法复杂度 傅里叶变换...
蓝桥杯每日一题2023.10.1
路径 - 蓝桥云课 (lanqiao.cn) 题目分析 求最短路问题,有多种解法,下面介绍两种蓝桥杯最常用到的两种解法 方法一 Floyd(求任意两点之间的最短路)注:不能有负权回路 初始化每个点到每个点的距离都为0x3f这样才能对…...
第三章:最新版零基础学习 PYTHON 教程(第十节 - Python 运算符—Python 中的运算符重载)
运算符重载意味着赋予超出其预定义操作含义的扩展含义。例如,运算符 + 用于添加两个整数以及连接两个字符串和合并两个列表。这是可以实现的,因为“+”运算符被 int 类和 str 类重载。您可能已经注意到,相同的内置运算符或函数对于不同类的对象显示不同的行为,这称为运算符…...
Nacos 实现服务平滑上下线(Ribbon 和 LB)
前言 不知道各位在使用 SpringCloud Gateway Nacos的时候有没有遇到过服务刚上线偶尔会出现一段时间的503 Service Unavailable,或者服务下线后,下线服务仍然被调用的问题。而以上问题都是由于Ribbon或者LoadBalancer的默认处理策略有关,其…...
c/c++里 对 共用体 union 的内存分配
对union 的内存分配,是按照最大的那个成员分配的。 谢谢...
博途SCL区间搜索指令(判断某个数属于某个区间)
S型速度曲线行车位置控制,停靠位置搜索功能会用到区间搜索指令,下面我们详细介绍区间搜索指令的相关应用。 S型加减速行车位置控制(支持点动和停车位置搜索)-CSDN博客S型加减速位置控制详细算法和应用场景介绍,请查看下面文章博客。本篇文章不再赘述,这里主要介绍点动动和…...
(三)激光线扫描-中心线提取
光条纹中心提取算法是决定线结构光三维重建精度以及光条纹轮廓定位准确性的重要因素。 1. 光条的高斯分布 激光线条和打手电筒一样,中间最亮,越像周围延申,光强越弱,这个规则符合高斯分布,如下图。 2. 传统光条纹中心提取算法 传统的光条纹中心提取算法有 灰度重心法、…...
递归与分治算法(1)--经典递归、分治问题
目录 一、递归问题 1、斐波那契数列 2、汉诺塔问题 3、全排列问题 4、整数划分问题 二、递归式求解 1、代入法 2、递归树法 3、主定理法 三、 分治问题 1、二分搜索 2、大整数乘法 一、递归问题 1、斐波那契数列 斐波那契数列不用过多介绍,斐波那契提出…...
Java之SpringCloud Alibaba【六】【Alibaba微服务分布式事务组件—Seata】
一、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 在关系数据库中,一个事务由一组SQL语句组成。 事务应该具有4个属性: 原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity) ∶个事务…...
营销型的物流网站模板/百度分公司
一、.net篇 1 .netApi查看器,里面包含了C#几乎所有的库函数,遇到不懂的库,直接搜索查看就行了。 2 .netC#源函数和库的源码查看器,只需要把元函数或者库在网站中搜索,就可以看到封装的源码了 3 .net portability anal…...
做歌手的网站/色盲测试图片
$(#add_submit_ajax).click(function(){$.ajax({url: /ajax_add_app,// data: {user: 123,host_list: [1,2,3,4]},data: $(#add_form).serialize(),type: "POST",dataType: JSON, // 内部 让jQuery把返回的 json字符串 转成json对象 traditional: true, //当发送的…...
国外做珠宝的网站有哪些/windows优化大师好吗
SpringBoot2.x系列教程之SpringBoot2.x配置大全04_DataSource配置 DataSource相关配置:spring.dao.exceptiontranslation.enabled: 是否开启PersistenceExceptionTranslationPostProcessor,默认为truespring.datasource.abandon-when-percentage-full: 设定超时被废…...
哈尔滨网站开发论坛/站长统计幸福宝下载
可能需要注意 硬链接软连接 基本 自由软件基金会 自由软件基金会(Free Software Foundation,FSF)是一个致力于推广自由软件、促进计算机用户自由的美国民间非盈利性组织。。其主要工作是执行GNU计划,开发更多的自由软件&#…...
巩义公司做网站/网站推广优化c重庆
并发编程的重点也是难点是数据同步、线程安全、锁。要编写线程安全的代码,其核心在于对共享和可变的状态的访问进行管理。共享意味着变量可以由多个线程访问,而可变则意味着变量的值在其生命周期内可以发生变化。当多个线程访问某个状态变量且其中有一个…...
武汉网站制作与建设/网页制作模板的网站
具体实现方法 第一步: 我们打开想要转载的博客,然后鼠标右键就会出现下面的菜单: 第二步: 点击【审查元素】,就会出现HTML页面的代码,或者:我们使用快捷键,直接按下F12 选中“article_content”&#…...