前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Quic学习心得

Quic学习心得

作者头像
陌无崖
发布2020-07-27 17:50:41
1.2K0
发布2020-07-27 17:50:41
举报

不忘初心,砥砺前行

什么是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 不变,这条连接依然维持着,上层业务逻辑感知不到变化,不会中断,也就不需要重连。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang技术杂文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是QUIC
  • 为什么出现quic
    • 队头阻塞问题
      • 握手延迟问题
        • quic的出现
        • quic特性
          • quic如何建立连接
            • quic的拥塞控制
              • 流量控制
                • 多路复用
                  • 连接迁移
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档