首页 > 其他分享 >QUIC(更新中... ...)

QUIC(更新中... ...)

时间:2024-07-15 17:19:54浏览次数:16  
标签:... 阻塞 更新 RTT QUIC 服务器 连接 客户端

 

本文档只记录我个人认为应该着重进行一下笔记的部分。

RFC

QUIC 基本内容介绍在RFC 9000,加密的实现在9001,丢包检测和拥塞机制在9002。

简介

是由Google开发的一种基于UDP的传输层协议,旨在提高网络传输的性能和安全性。关键要素:UDP 443端口,将TLS 1.3内置在QUIC协议报文中,提升了握手过程的安全性。同时,利用了TLS 1.3的0-RTT和1-RTT连接机制,提升了传输效率。

一些概念

连接、流、帧、报文,他们到底什么样的层级关系?

1-RTT和0-RTT

TLS 1.3的1-RTT(首次连接一定用这个)和0-RTT(主要用于重连)连接机制。

 1-RTT连接建立

  • 概念:1-RTT连接是指客户端发送ClientHello后,服务器响应ServerHello,客户端在接收到这个响应后,才可以发送应用数据。这个过程需要一次往返时间(1-RTT)。
  • 适用场景:1-RTT适用于首次建立连接或者未能使用0-RTT的情况。
  • 安全性:1-RTT提供了完整的握手过程,确保了更高的安全性,适用于对安全性要求较高的应用场景。

 0-RTT连接建立

  • 概念:在0-RTT连接中,客户端可以在发送ClientHello消息的同时,开始发送应用数据。这意味着客户端不需要等待服务器的响应就可以开始传输数据,从而显著减少延迟。
  • 适用场景:0-RTT通常用于重连场景,而不会用于首次建立连接的场景。前提是客户端之前已经与服务器建立过安全连接,并且服务器支持0-RTT。
  • 安全性:尽管0-RTT能减少延迟,但由于初始消息未经过完整的握手过程,因此存在重放攻击的风险。TLS 1.3对0-RTT数据的使用有一定的限制,以降低风险。比如:1)0-RTT仅适用于那些在之前的连接中已经确定的应用数据。这些数据必须是在之前的会话中被接受并理解的内容,服务器不应对新类型的数据进行处理;2)服务器需要确认哪些客户端可以使用0-RTT;3)客户端必须带着session ticket。

QUIC也是有序的,为什么说QUIC在拥塞机制上,可以避免TCP的队头阻塞问题?

TCP拥塞机制:会有队头阻塞的问题,是比较好理解的。就是一个TCP连接,只有一条流,这个流一共有1,2,3,4...100号的数据包,这时候2丢了,那么3,4...100号的数据包,哪怕已经送到了服务器,服务器也不处理,它要等客户端重传了2,才会处理,这就是队头阻塞。当然更坏的情况是,随机丢了不止一个数据包,比如2丢了,15丢了,25丢了等等,那对应的后面都要等等等;

QUIC拥塞机制:不会有队头阻塞,这只是个相对的说法。对于QUIC来说,它一个QUIC连接里,可以传送很多条流(多路复用)。每一个流里面其实也是有序的,后面的先到了,前面的没到,那也一样要队头阻塞。但是QUIC一个连接同时发了很多的流,每个流都出现队头阻塞的概率是很低的,同时,每个流的使命也是独立的。这样的话,总有一些流已经先存在服务器并且有效处理了,就不用像TCP一样,2没到,等2,2到了,处理3,4,发现5又没到,又要等待5到了,才能继续处理7,8。从这个意义上说,避免了队头阻塞。你可以理解为,假定,TCP和QUIC要发送同样的一个西瓜,QUIC给服务器喂瓜的方式,是把这个瓜,砍成了很多瓣,扔给了服务器,可能某些瓣有些阻塞,但是其他瓣在它阻塞的时候,已经送给服务器,并被服务器吃下肚了。而TCP则是一个完整的西瓜,直接给服务器,卡住了,就等着处理好,才能继续吃。整体时间算起来,肯定是QUIC要快。

 

标签:...,阻塞,更新,RTT,QUIC,服务器,连接,客户端
From: https://www.cnblogs.com/1234roro/p/18303377

相关文章

  • 彻底关闭win10的自动更新
    原文地址:https://mp.weixin.qq.com/s?__biz=MzAwMzQyODc5Ng==&mid=2651553635&idx=1&sn=6fd3f4d3aa6dfa04f1725a4a1eefc71e&chksm=80c487b0b7b30ea6bcb2094b3a24ebbccfe5cb8c159a754bcbe284445fc44ed644d0572a162e&scene=27✔方法1.Windows设置要想关闭Win10自动更新,......
  • yarn更新依赖报错:Extracting tar content of undefined failed, the file appears to
    今天从一个git库里更新代码,用yarn安装依赖一直报错。提示如下:Extractingtarcontentofundefinedfailed,thefileappearstobecorrupt,百思不得其解,查了资料说淘宝的镜像源不能用了。用yarninstall--registryhttps://mirrors.huaweicloud.com/repository/npm/,这样解决了......
  • Django项目中Ajax的应用,博客分类文章阅读,左右栏目自动更新
    从数据库读取博客分类数据,放到左侧栏目,右侧栏目根据左侧点击的博客分类名进行自动更新对应的所有分类博客文章,在右侧显示出来.models.py定义的博客数据库fromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportUserclassPost(models.Model):title=mo......
  • 【Python】 深入了解 Python 字典的 | 更新操作
    我白天是个搞笑废物表演不在乎夜晚变成忧伤怪物撕扯着孤独我曾经是个感性动物小心地感触现在变成无关人物                     ......
  • 八股文笔记(持续更新)
    提示:本笔记基于【新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)】https://www.bilibili.com/video/BV1yT411H7YK?p=7&vd_source=a91dafe0f846ad7bd19625e392cf76d8总结面试职业技能总结如何找的合适的项目项目模块的深度学习如何深......
  • Git提交时出现Merge branch ‘master‘ of ...之解决方法
    参考文章:https://gitcode.csdn.net/65ea8a4f1a836825ed794712.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTQ1MTY5NywiZXhwIjoxNzIxMjkxNTE4LCJpYXQiOjE3MjA2ODY3MTgsInVzZXJuYW1lIjoibWFudG91eW91eW91In0.-wDA8k8JLiSglywMGl6-Q1FSLkDiWW9_spoG16tpdtA......
  • C++惯用法:do...while(0)的妙用
    目录1.引言2.do...while(0)消除goto语句3.用do...while(0)包裹复杂的宏4.防止意外错误5.避免变量作用域问题1.引言        在C++中,do...while(0) 通常是用来做循环用的,然而我们做循环操作可能用for和while要多一些。经常看到一些开源代码会出现do...while(0)......
  • CSS 样式缓存不更新
    来自......
  • KEIL出现error: L6002U: Could not open file ...报错
     在对MSPM0L1306进行工程移植时,依照参考方法更新头文件路径后出现一个报错:.\Objects\empty_LP_MSPM0L1306_nortos_keil.axf:error:L6002U:Couldnotopenfile../../../../../../source/ti/driverlib/lib/keil/m0p/mspm0l11xx_l13xx/driverlib.a:Nosuchfileordirec......
  • 帧更新
    帧率观察:Debug.Log("**帧更新Time:"+Time.time);//游戏时间,也就是从开始到现在的时间长度Debug.Log("**帧更新Time:"+Time.deltaTime);//距离上一次更新的时间差帧率是不固定的Unity不支持固定帧率,但可以设置一个近似帧率Application.targetFrameRate=60;......