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

news2024/12/23 8:19:20

前言:

        随着互联网的快速发展,传统的基于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.coloradmin.cn/o/1054473.html

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

相关文章

Java编程技巧:swagger2、knif4j

目录 1、springbootswagger2knif4j2、springbootswagger3knif4j3、springcloudswagger2knif4j 1、springbootswagger2knif4j 2、springbootswagger3knif4j 3、springcloudswagger2knif4j 注意点: Api注解:Controller类上的Api注解需要添加tags属性&a…

P1311 [NOIP2011 提高组] 选择客栈(小小的也很可爱【指小动规】)

[NOIP2011 提高组] 选择客栈 题目描述 丽江河边有 n n n 家很有特色的客栈,客栈按照其位置顺序从 1 1 1 到 n n n 编号。每家客栈都按照某一种色调进行装饰(总共 k k k 种,用整数 0 ∼ k − 1 0 \sim k-1 0∼k−1 表示)&am…

stm32 - 中断

stm32 - 中断 中断向量表NVIC 嵌套中断向量控制器优先级 中断向量表 自定义的中断服务函数,由编译器随机指定函数地址 stm32的中断,由于硬件的限制,只能跳到固定的地址执行程序 为了能让硬件跳转到一个不固定的中断函数中, 需要在…

基于Qt Creator开发的坦克大战小游戏

目录 介绍开发环境技术介绍安装说明项目目录设计思想项目介绍运行演示知识点记录Gitee源码链接 介绍 !!!资源图片是从网上免费下载,源码都是原创,供个人学习使用,非盈利!!&#xff…

Acwing 836. 合并集合

Acwing 836. 合并集合 题目描述思路讲解代码展示 题目描述 思路讲解 并查集&#xff1a;代码短&#xff0c;思路精巧&#xff0c;面试常见。 近乎O&#xff08;1&#xff09;的时间复杂度。 代码展示 #include<iostream>using namespace std;const int N 100010; in…

Python海洋专题四之水深地图图像修饰

Python海洋专题四之水深地图图像修饰 海洋与大气科学 上期会修改画布大小、坐标轴字体 没有对数据本身进行修改 本期内容 1&#xff1a;修改colormap&#xff01; 2&#xff1a;倒置colormap 3&#xff1a;加上colorbar、调整其显示位置和字体大小 1&#xff1a;修改colo…

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…

意大利储能公司【Energy Dome】完成1500万欧元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于意大利米兰的储能公司Energy Dome今日宣布已完成1500万欧元B轮融资。 本轮融资完成后&#xff0c;Energy Dome的融资总额已经达到了5500万欧元&#xff0c;本轮融资的参与者包括阿曼创新发…

【Java 进阶篇】JDBC插入数据详解

在Java应用程序中&#xff0c;与数据库交互是一项常见的任务。其中&#xff0c;插入数据操作是一种基本的数据库操作之一。本文将详细介绍如何使用Java JDBC&#xff08;Java Database Connectivity&#xff09;来执行插入数据操作。无论您是初学者还是有一定经验的开发人员&am…

好题分享

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

【centos7】centos7卸载gitlab

一、GitLab安装 1. 安装依赖包 yum install -y curl policycoreutils-python openssh-server 2. 安装lrzsz&#xff08;如已经安装可忽略&#xff09; yum -y install lrzsz 3. 下载rpm包 cd /usr/local wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gi…

spring security(二)--授权

零.前情提要 这篇文章主要借鉴B站三更大大关于spring security的教程&#xff0c;这篇文章的大部分内容也来自于那个教程&#xff0c;写这个的主要目的是记录加强印象&#xff0c;总结&#xff0c;并且在文章中我也有穿插自己的想法。 前面的文章【spring security教程&#…

java Spring Boot 将日志写入文件中记录

我们之前的一套操作来讲 日志都是在控制台上的 但 如果你的项目在正式环境上跑 运维人员突然告诉你说日志报错了&#xff0c;但你日志只在控制台上&#xff0c;那公司项目如果访问量很大 那你是很难在控制台上找到某一条日志的 这时 我们就可以用文件把它记下来 我们打开项目 …

python使用mitmproxy和mitmdump抓包在电脑上抓包(二)

在我的上篇文章中&#xff0c;主要记录如何安装mitmproxy和抓取https流量。参考链接&#xff1a; python使用mitmproxy和mitmdump抓包在电脑上抓包-CSDN博客 本篇主要使用python配合mitmdump来抓包和处理返回包&#xff0c;更加灵活&#xff0c;这也是mitmproxy(mitmdump)的最…

快看看你的手机有没有:谷歌Android全面封杀此类软件!

谷歌坐不住了&#xff0c;因为Android应用商店中&#xff0c;充斥着大量可窃取用户数据的应用&#xff0c;所以必然要出手整治了。 一款名叫“SonicSpy”软件是整个事情的导火索&#xff0c;而该应用是典型的窃取用户数据的应用&#xff0c;其除了可以从手机中提取个人数据外&…

一维数组和二维数组的使用(一)

目录 导读1. 一维数组1.1 一维数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储 2. 二维数组2.1 二维数组的创建2.2 二维数组的初始化2.3 二维数组的使用2.4 二维数组在内存中的存储 博主有话说 导读 本篇主要讲解一维数组和二维数组的创建和使用&…

【Redis】redis基本数据类型详解(String、List、Hash、Set、ZSet)

目录 RedisString(字符串)List(列表)Hash(字典)Set(集合)ZSet(有序集合) Redis Redis有5种基本的数据结构&#xff0c;分别为&#xff1a;string&#xff08;字符串&#xff09;、list&#xff08;列表&#xff09;、set&#xff08;集合&#xff09;、hash&#xff08;哈希&a…

【Django笔记】认证系统

使用Django 的认证系统实现用户信息验证 在前面使用migrate 命令进行数据迁移时候&#xff0c;生成了auth_user表 ,该表中存放了用户信息可以用来登录Django自带的Admin 管理后台。 创建Admin 后台管理账号 python manage.py createuperuser E:\data\python\djaongo_prj\gu…

看完这篇 教你玩转渗透测试靶机Vulnhub——Healthcare:1

Vulnhub靶机Healthcare:1渗透测试详解 Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;漏洞发现SQL注入&#xff1a;③&#xff1a;SQL注入漏洞利用&#xff1a;④&#xff1a;反弹Shell…

【开发篇】七、RedisTemplate与StringRedisTemplate + Jedis与Lettcus

文章目录 1、RedisTemplate详解2、常用方法3、关于IDEA的报黄4、RedisTemplate和StringRedisTemplate的区别5、如何通用RedisTemplate和StringRedisTemplate6、Jedis7、Jedis的连接池8、封装Jedis工具类8、RedisTemplate底层实现技术切换 1、RedisTemplate详解 RedisTemplate是…