Quic学习心得

不忘初心,砥砺前行

什么是QUIC

首先看quic的全称是(Quick UDP Internet Connections),一种快速的UDP网络连接。由此可知quic是以UDP协议为基础的快速的网络传输协议。

为什么出现quic

队头阻塞问题

通常我们都知道传输控制协议(TCP)的目的是为两个端点之间提供发送数据的接口,并保证数据以完全相同的方式传递到另一端,为此在使用TCP传输数据时通常将数据包进行拆解, 并在传输过程中为其添加附加数据,附加数据包括用于检测丢失或者无序传输的数据包序列号,及允许检测数据包数据中的错误的校验和,当任何出现问题,就会触发ARQ自动重复请求,TCP会讲错误视为阻塞,停止传输直到错误解决或者失败,假如在传输数据的时候使用单个TCP连接传输数据,比如使用HTTP/2,尽管可以并发多个HTTP请求,但是一旦TCP连接出现问题,就会导致整个TCP连接阻塞。因此在弱网条件下,大量的丢包现象使得传输效率低下;

握手延迟问题

在使用TCP传输协议时,在发送数据之前必须要经过三次握手,如果存在TLS握手,至少需要两个RTT(这里的RTT指的是一次握手的往返时间),虽然保证了安全性,但是网络延迟非常高,比如开发音视频流的推流和拉流,存在延迟问题会影响用户体验。

quic的出现

为了解决传统协议在网络传输上的缺点,quic采用UDP协议,使用UDP可以直接进行传输数据,避免了银握手而产生的延迟问题,同时quic抽象出传输数据时逻辑流的概念,一个连接上可以并发多个流进行传输,且这些流互相独立,彼此不影响,解决了阻塞问题,同时quic还有很多自己特有的优势。比如改进的拥塞控制,流量控制等。

quic特性

quic如何建立连接

quic在建立连接之前客户端首先会发送一个hello的空包,当服务端收到会向客户端发送一个REJ包,包含了token和服务端证书,因此需要一次RTT握手完成,在此之后,quic再次发送数据的时候,会利用缓存中的token和证书直接向服务端发送信息,因此不需要任何RTT就能够传输数据;

quic的拥塞控制

网络出现拥塞一般指的是数据在传输的过程中过多的数据注入到网络,从而导致分组的丢失,此时发送方会继续重传,从而导致网络的拥塞程度更高。在重传的过程中TCP的seq保持不变,这样会导致一个问题就是客户端不知道收到的seq是重传的seq还是原始请求的seq,如下图所示,如果原始sql被判断成重传的seq,会导致RTT增大,如果重传的seq被判断成原始的seq,就会导致计算的RTT偏小。

quic采用自增式seq解决上述问题,重传之后的seq会比原有的seq大,当计算RTT时就不会计算错误,如下图所示:

流量控制

当客户端与服务端进行发送数据的时候,有可能因为发送者发送的速度太快,导致接收者来不及接收,因此会出现分组的丢失,因此为了解决这个问题,解决的根本应该是控制发送者的速度,因此服务端在进行TCP通信时,使用滑动窗口协议。

quic的流量控制是在此基础上的改进,分为了两类,第一类是连接上的流量控制,可以类比成TCP连接。第二类是逻辑流上的流量控制,可以类比为HTTP请求,quic对这两种类型分别进行流量控制。

如上图,对于quic中的可用窗口也会分为两类:

针对Connection:

可用窗口 = 最大窗口数 - 接收到的最大偏移数;

针对流:

可用窗口 = stream1可用 + stream2 + streamN

多路复用

没有队头阻塞的多路复用,在一条 QUIC 连接上可以并发发送多个 HTTP 请求 (stream)。且QUIC 一个连接上的多个 stream 之间没有依赖。这样假如 stream2 丢了一个 udp packet,也只会影响 stream2 的处理。不会影响 stream2 之前及之后的 stream 的处理;

连接迁移

当我们从wifi切换成数据时,通常需要重新切换网络,这样带来的后果就是网络连接中断,并重新建立连接,但是对于quic,一条 quic 连接不再以 IP 及端口四元组标识,而是以一个 64 位的随机数作为 ID 来标识,这样就算 IP 或者端口发生变化时,只要 ID 不变,这条连接依然维持着,上层业务逻辑感知不到变化,不会中断,也就不需要重连。

本文分享自微信公众号 - golang技术杂文(gh_ebbdb61f463e),作者:陌无崖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HashMap 学习心得

    1.构造 HashMap 底层数据结构线性数组,HashMap有一个静态内部类Entry,Entry有四个属性,key,value,next,hash ? En...

    Janti
  • Redis 学习心得

    最近两天利用黑夜的时间参加了一个关于 Redis 的学习,时间不长,一共两天,一天两个多小时。这次的学习感觉颇有收获,也很符合我的胃口。

    码农UP2U
  • openGauss学习心得

    虽然有贾老师课程中的一键安装openGauss脚本,但是为了更好的了解部署openGauss过程,还是按部就班的部署一遍。但是在倒数第二步检查预安装环境执行时因...

    玖柒的小窝
  • QUIC唯快不破,三个核心设计

    QUIC(Quick UDP Internet Connections)是由 google 提出的使用 udp 进行多路并发传输的协议,旨在为HTTP提供一个安...

    PengJie
  • Python学习心得(一)

    ~~缘 起~~ 2017年11月,一群编程零基础的小伙伴们成立了Python学习小组,12名学员从此夜以继日地奔赴学习的征程。一个月过去了,从在屏幕上用最简单的...

    企鹅号小编
  • Mercury Editor学习心得

    Mercury Editor自称是全特性HTML5编辑器。It  was built from the grond to help your team get ...

    用户1183026
  • angularjs directive学习心得

    transclude有三个选项,true, false, 和object.如果不显示指明的话,默认为false. 当为false的时候,则那个directiv...

    嘿嘿嘿
  • 七牛云技术分享:使用QUIC协议实现实时视频直播0卡顿!

    不做任何开发,就能实现弱网环境下实现实时视频直播零卡顿,听上去是不是天方夜谭?看完这篇文章你就知道,我们是如何做到的。

    JackJiang
  • 看 B 站,可以更快!

    现在用谷歌浏览器看 B 站视频,默认是用 HTTP/2 协议,它相比 HTTP/1.1 性能提高很多,但是其实看 B 站视频还能更快!

    小林coding
  • 视屏面试传输协议到底是TCP还是UDP

    又是一年一度的秋季校招开始了,以往的校招各个公司都会在公司现场或者学校现场安排学生进行现场面试?但是今年由于疫情的原因,不允许让同学在现场进行一个面试,所以今年...

    用户5397975
  • 让互联网更快:新一代QUIC协议在腾讯的技术实践分享

    如果:你的 App,在不需要任何修改的情况下就能提升 15% 以上的访问速度,特别是弱网络的时候能够提升 20% 以上的访问速度。

    JackJiang
  • 网络编程懒人入门(十二):快速读懂Http/3协议,一篇就够!

    本文中文译文由作者“ably.io”发布于公众号“高可用架构”,译文原题:《深入解读HTTP3的原理及应用》、英文原题:《HTTP/3 deep dive》(文...

    JackJiang
  • 网络编程懒人入门(十二):快速读懂Http/3协议,一篇就够!

    本文中文译文由作者“ably.io”发布于公众号“高可用架构”,译文原题:《深入解读HTTP3的原理及应用》、英文原题:《HTTP/3 deep dive》(文...

    JackJiang
  • shell脚本学习心得

    近来主要捣鼓ubuntu,大多数项目中都用到了sh脚本作为启动脚本等,以前只是大概明白如何使用,今天需要自己修改并运行脚本就碰到了很多问题,所以决定静下心来学习...

    魏守峰
  • REACT框架学习心得

    卡少
  • 博客 | Word2Vec 学习心得

    好嘛博主食言了。不过本文没什么干货,主要是前后看了大概一个星期,反复去读源码和解读文章,终于感觉这东西不那么云山雾罩了。同时也发现网上很多材料有点扯淡,99% ...

    AI研习社
  • innovus学习心得之一

    我是synopsys的重度用户,但是对于cadence的innovus工具,请叫我“小白”。

    白山头
  • 15、OSPF学习心得3

    (1) 首先检查DR和BDR字段是否为空,如果都为空(0.0.0.0)表明没有DR也没有BDR。

    py3study
  • HTTP/3干货总结

    Google(pbuh) 公司拥有最流行的 web 浏览器(Chrome)和两个最流行的网站(#1 Google.com #2 Youtube.com)...

    ConardLi

扫码关注云+社区

领取腾讯云代金券