【知识点随笔分析 | 第五篇】简单介绍什么是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

 

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

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

相关文章

[React] 性能优化相关 (一)

文章目录 1.React.memo2.useMemo3.useCallback4.useTransition5.useDeferredValue 1.React.memo 当父组件被重新渲染的时候,也会触发子组件的重新渲染,这样就多出了无意义的性能开销。如果子组件的状态没有发生变化,则子组件是不需要被重新渲…

好题分享

1.Problem - G - Codeforces (1)题意 (2)思路 因为最多13次,那么不如我们就问13次,然后考虑把每一个位置重新按二进制拆分成一个下标,因为C(13,6) > 1000,因此在数量上是满足得,我…

番外6:下载+安装+配置Linux

#########配置Linux---后续 step08: 点击编辑虚拟机设置,选择下载好的映像文件.iso进行挂载; step09: 点击编辑虚拟机选项,选择UEFI启动模式并点击确定; step10: 点击开启虚拟机,选择Install rhel ; 备注&…

LeetCode_离散化差分_困难_2251.花期内花的数目

目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个下标从 0 开始的二维整数数组 flowers ,其中 flowers[i] [starti, endi] 表示第 i 朵花的花期从 starti 到 endi (都包含)。同时给你一个下标从 0 开始大小为 n 的…

如何离线安装和使用pymysql操作mysql数据库

一、应用背景 在企业内部网络要使用python操作mysql数据库。然而,python未自带访问MySQL数据库的函数库pymysql,需要另外安装。网上有很多安装pymysql都需要互联网支持。本文主要阐述如何离线安装pymysql,并简要介绍pymysql如何进行mysql操作。 pymysq…

某房产网站登录RSA加密分析

文章目录 1. 写在前面2. 抓包分析3. 扣加密代码4. 还原加密 1. 写在前面 今天是国庆节,首先祝福看到这篇文章的每一个人节日快乐!假期会老的这些天一直在忙事情跟日常带娃,抽不出一点时间来写东西。夜深了、娃也睡了。最近湖南开始降温了&…

SpringBoot整合数据库连接

JDBC 1、数据库驱动 JDBC(Java DataBase Connectivity),即Java数据库连接。简而言之,就是通过Java语言来操作数据库。 JDBC是sun公司提供一套用于数据库操作的接口. java程序员只需要面向这套接口编程即可。不同的数据库厂商&…

【Java 进阶篇】JDBC Connection详解:连接到数据库的关键

在Java中,要与数据库进行交互,需要使用Java数据库连接(JDBC)。JDBC允许您连接到不同类型的数据库,并执行SQL查询、插入、更新和删除操作。在JDBC中,连接数据库是一个重要的步骤,而Connection对象…

Pikachu靶场——PHP反序列化漏洞

文章目录 1. PHP反序列化1.1 反序列化代码审计1.2 漏洞防御 1. PHP反序列化 可参考我写的另一篇博客:反序列化漏洞及漏洞复现。 序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象: class S{publi…

JavaScript Web APIs第三天笔记

Web APIs - 第3天 进一步学习 事件进阶,实现更多交互的网页特效,结合事件流的特征优化事件执行的效率 掌握阻止事件冒泡的方法理解事件委托的实现原理 事件流 事件流是对事件执行过程的描述,了解事件的执行过程有助于加深对事件的理解&…

C 语言关键字_at_的使用

查看一些老旧代码的时候看到有这么一段。 这个函数是轮询执行的,但是sourceinsight却没有找到vs_ucLedSegDutyRam的定义,全局搜索才找得到,结果发现原来它的定义很奇特。 里面用了_at_这个东西 _at_是让定义的vs_ucLedSegDutyRam首地址定义在…

【AI视野·今日NLP 自然语言处理论文速览 第四十期】Mon, 25 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 25 Sep 2023 Totally 46 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers ReConcile: Round-Table Conference Improves Reasoning via Consensus among Diverse LLMs Authors Justin C…

机器学习之SGD, Batch, and Mini Batch的简单介绍

文章目录 总述SGD(Stochastic Gradient Descent)(随机梯度下降)Batch (批量)mini Batch (迷你批量) 总述 SGD, Batch, and Mini Batch是可用于神经网络的监督学习计算权重更新的方案,即∆wij。 SGD(Stochastic Gradi…

竞赛 基于设深度学习的人脸性别年龄识别系统

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习机器视觉的…

市场调研的步骤与技巧:助你了解市场需求

在当今快速发展的市场中,进行有效的市场研究对于了解消费者的行为、偏好和趋势至关重要。适当的市场研究可以帮助公司获得对目标受众的有价值的见解,创造更好的产品和服务,并提高客户满意度。今天,小编和大家一起讨论一下怎么做市…

[Linux] 6.VMware虚拟机网络配置

在VMware虚拟机下可以在虚拟网络编辑器看到三种模式 一、Bridged(桥接模式) 桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。 真机、虚拟机都有自己的ip地址,能互相通讯,而且能上网。 功能齐全,但…

Arduino ESP32/ESP8266 +ST7735 1.8“tft中秋小时钟

Arduino ESP32 ST7735 1.8"tft中秋小时钟 🌼原作者B站视频: ESP32中秋小时钟,表盘自动切换,代码开源,原图可下载(案例应用) 🎞tft ST7735 128160 1.8" 显示效果:(由于原作…

MD5 绕过第二式:数组绕过

文章目录 参考环境推荐阅读强类型比较运算符雾来哈希碰撞目标 王小云院士与白宫密码王小云院士两度破译白宫密码白宫密码亮剑十年磨一剑 雾散曲径通幽WarningPHP 中的数组与 md5()尝试绕过PHP8 下的致命错误 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯…

JavaScript中如何确定this的值?如何指定this的值?

🎀JavaScript中的this 在绝大多数情况下,函数的调用方法决定了this的值(运行时绑定)。this不能在执行期间被赋值,并且在每次函数呗调用时this的值也可能会不同。 🍿如何确定this的值: 在非严格…

【React】React组件生命周期以及触发顺序(部分与vue做比较)

最近在学习React,发现其中的生命周期跟Vue有一些共同点,但也有比较明显的区别,并且执行顺序也值得讨论一下,于是总结了一些资料在这里,作为学习记录。 v17.0.1后生命周期图片 初始化阶段 由ReactDOM.render()触发 —…