天天看点

QUIC协议设计(一)-QUIC的特点前言一、TCP的缺点二、QUIC是什么总结

文章目录

  • 前言
  • 一、TCP的缺点
    • 1.名词解释
      • 1.1 BDP
      • 1.2 TCP拥塞控制
      • 1.3 AIMD
      • 1.4 RTT
      • 1.5 队头阻塞
      • 1.6 TLS
      • 1.7 DTLS
    • 2.缺点说明
      • 2.1 高BDP下的低效
      • 2.2 带宽分配不公平
      • 2.3 高延时
  • 二、QUIC是什么
    • 1.发展过程
    • 2.协议模型
    • 3.特点
      • 3.1 0-RTT(或1-RTT)建立连接
      • 3.2 改进的拥塞控制(解决TCP低效、不公)
      • 3.3 无队头阻塞的多路复用(解决TCP高延时)
      • 3.4 连接迁移
      • 3.5 支持可靠和不可靠传输
      • 3.6 精细的流量控制
  • 总结

前言

随着HTTP3标准的发布,HTTP3基于的QUIC协议受到越来越多的关注。

一、TCP的缺点

TCP协议是目前计算机网络通信中最流行的协议之一。但是,随着网络环境的变化,TCP愈发显露出一些缺点。

在介绍缺点前,先了解一些名词。

1.名词解释

1.1 BDP

bandwidth-delay product,即带宽时延积。带宽时延积 = 传播时延(s)*带宽(bit/s) 。

等同在任何特定时间该网络线路上的最大数据量——已发送但尚未确认的数据。

1.2 TCP拥塞控制

TCP是基于丢包的拥塞控制,发生超时重传或者收到3个重复确认,就会触发拥塞算法,减小拥塞窗口。

最大发送窗口(swnd)=min(远端剩余接收窗口rwnd,本地发送窗口swnd,拥塞窗口cwnd) 。

1.3 AIMD

additive increase multiplicative decrease,即和式增加,积式减少,是TCP的拥塞控制算法。

特点是,拥塞窗口的大小增加慢(和式增加),减小很快(积式减少)。

1.4 RTT

Round-Trip Time,即往返时间。

是指从数据完全发送完(完成最后一个bit推送到数据链路上),到发送方接收到确认的时间。

1.5 队头阻塞

Head-of-Line blocking或HOL blocking。是指第一个数据包(队头)受阻而导致整列数据包传输受阻。

参见:http相关的队头阻塞有哪些

1.6 TLS

Transport Layer Security,即传输层安全协议。

HTTPS中的“s”就是指TLS,它是基于TCP的协议。常见的有TLS1.2、TLS1.3。

1.7 DTLS

Datagram Transport Layer Security,即数据包传输层安全协议。

基于TLS扩展,支持UDP协议,DTLS1.0 基于 TLS 1.1,DTLS 1.2 基于 TLS 1.2 。

2.缺点说明

2.1 高BDP下的低效

这个问题是TCP的拥塞控制机制引起的。

在高BDP(带宽时延积)网络(如高速广域网)下,TCP协议发送效率低下。

以前网络环境差,TCP为了适配低速网络,设计上偏向于慢慢地控制网络中的数据流量变大,来防止整个网络的拥塞。

TCP的拥塞控制算法AIMD会“和式增加,积式减少”,导致拥塞窗口快速减小后,不能快速增大,最终减少了发送窗口大小,降低了发送速率,浪费了高BDP的网络资源。

2.2 带宽分配不公平

这个问题仍然是TCP的拥塞控制机制引起的。

TCP带宽分配不均,RTT(往返时间)较小的占用较大的带宽。因为TCP的每轮RTT后,CWND(拥塞窗口)会增加,因此,RTT较小的,CWND就大,发送窗口也相应变大。

2.3 高延时

TCP的高延时主要是由队头阻塞引起的。

基于TCP的HTTP协议,有更多的队头阻塞问题,参见名词解释中的“1.5 队头阻塞”。

二、QUIC是什么

1.发展过程

QUIC发展过程如图所示:

QUIC协议设计(一)-QUIC的特点前言一、TCP的缺点二、QUIC是什么总结

重点是分为了2个分支:gQUIC和iQUIC,

两者的区别主要在于安全传输层的差异,gQUIC使用了自定义安全机制,iQUIC使用了TLS协议。

下面的介绍,都是特指iQUIC。

2.协议模型

协议模型如下图所示:

QUIC协议设计(一)-QUIC的特点前言一、TCP的缺点二、QUIC是什么总结

QUIC基于UDP协议,

一对客户端和服务端可以有多个连接Connection,

每个连接Connection都有各自的Connection ID,

一个Connection中包含多个stream流,

stream有各自的stream ID。

3.特点

QUIC是由Google首先提出的基于UDP的传输协议,

它是一个安全通用的应用层协议,它面向连接,在客户端及服务端之间建立有状态的交互。有如下特点:

3.1 0-RTT(或1-RTT)建立连接

QUIC基于TLS1.3建立连接,实现了0-RTT(1-RTT),

而TCP+TLS1.2建立连接需要3.5RTT。

3.2 改进的拥塞控制(解决TCP低效、不公)

QUIC默认使用Cubic拥塞控制算法,并支持换算法。

单调递增的报文号解决了TCP重传歧义,算法中的RTT度量更准确。

3.3 无队头阻塞的多路复用(解决TCP高延时)

QUIC为单个连接提供了可复用的多stream(流),

stream本身各自保证有序性,stream之间不存在依赖关系,

解决了单个TCP连接由于严格按序交付引发的队头阻塞。

3.4 连接迁移

QUIC用Connection ID代替了TCP的五元组标识一个连接,

变更IP(切换网络、NAT重绑等)时可以使用Connection ID避免重新建立连接。

3.5 支持可靠和不可靠传输

QUIC的可靠传输使用stream帧,

在扩展协议中(RFC9221),

还支持了不可靠传输的DATAGRAM帧。

3.6 精细的流量控制

流量控制是指,接收方需要限制流量以防发送方速度太快造成冲击或被恶意发送方消耗大量内存。

QUIC在stream和connection这2个层次都支持类似TCP的流量控制。

总结

这一章初步认识了QUIC协议,下一章介绍QUIC握手的巧妙设计。

继续阅读