QUIC协议学习笔记

本文参考了文章QUIC 协议详解 - 知乎,已经获得beichen大佬的授权。

一、简介

QUIC(Quick UDP Internet Connections)协议是一种新型的传输层协议,由Google开发并开源。它旨在解决TCP协议在高延迟和拥塞网络环境下的性能问题,提供更快速、更可靠的网络连接。QUIC协议基于UDP(User Datagram Protocol)实现,并内置了类似于TLS的加密和安全特性。

二、协议特性和优点

1. 更快的连接建立:QUIC协议的连接建立过程只需一个往返时间(RTT),而TCP+TLS的连接建立过程需要2-3个RTT。这使得QUIC协议在网络延迟较高的情况下具有更好的性能。

2. 内置安全特性:QUIC协议内置了基于TLS 1.3的加密和安全特性,提供了与传统的HTTPS类似的安全性和加密能力。通过将TLS 1.3的握手过程与传输层的连接建立过程相结合,QUIC实现了更快速、更高效的安全连接。

3. 避免队头阻塞:QUIC协议支持多路复用,允许在一个连接上同时传输多个独立的数据流。由于每个数据流都有自己的拥塞控制和丢包恢复机制,因此一个数据流上的丢包不会影响其他数据流的传输。这使得QUIC协议能够避免队头阻塞问题,提供更好的传输性能。

4. 连接迁移和恢复:QUIC协议支持连接迁移和快速连接恢复。当用户的网络环境发生变化(如从Wi-Fi切换到移动网络)时,QUIC协议可以更快地恢复连接,提供更好的用户体验。

5. 拥塞控制和丢包恢复:QUIC协议实现了自适应的拥塞控制算法和快速丢包恢复机制,可以在不同的网络环境下自动调整传输速率,以提高传输性能和可靠性。

由于QUIC协议在传输性能、延迟和安全性等方面具有优势,它已经被用作HTTP/3协议的底层传输层协议。这使得HTTP/3能够在许多场景下提供比HTTP/2更好的网络性能,特别是在网络延迟较高或拥塞较严重的情况下。然而,由于QUIC协议仍然是一项较新的技术,它的普及和支持程度尚不如TCP。在实际应用中,需要根据具体情况选择合适的传输层协议。

三、连接迁移和快速连接恢复

QUIC协议支持连接迁移和快速连接恢复的关键在于它的连接标识(Connection ID)机制和无状态重传(0-RTT)机制。

3.1 连接标识(Connection ID)

在QUIC协议中,每个连接都有一个或多个唯一的连接标识。连接标识是独立于客户端和服务器的IP地址和端口的,因此,当客户端或服务器的IP地址发生变化时(例如,在Wi-Fi和移动网络之间切换),连接标识仍然保持不变。这使得QUIC协议可以在不同的网络环境下维持同一个连接,实现连接迁移。

   当客户端检测到网络环境发生变化时,它可以使用新的IP地址和端口继续发送数据包,并在数据包中包含原始连接标识。服务器收到数据包后,可以根据连接标识识别出原始连接,并将数据包与原始连接关联。这样,即使IP地址和端口发生变化,QUIC连接仍然可以维持不中断,实现快速连接恢复。

3.2 无状态重传(0-RTT)

QUIC协议支持无状态重传,即在重新建立连接时,客户端可以立即发送数据包,而无需等待连接建立过程的完成。这使得QUIC协议在连接丢失或网络环境发生变化时能够更快地恢复连接,提供更好的用户体验。

   无状态重传的实现依赖于QUIC协议的安全特性。在首次建立连接时,客户端和服务器会协商一个加密密钥(Session Key)。当连接丢失或需要重新建立时,客户端可以使用已知的加密密钥立即加密并发送数据包,而无需等待新的密钥协商过程。服务器收到数据包后,可以使用原始密钥解密并处理数据包,从而实现快速连接恢复。

通过连接标识和无状态重传机制,QUIC协议可以实现连接迁移和快速连接恢复,从而在网络环境发生变化时提供更好的传输性能和用户体验。这使得QUIC协议在移动设备、无线网络等场景下具有优势。

 

四、拥塞控制

QUIC协议实现了自适应的拥塞控制算法和快速丢包恢复机制,以优化传输性能和可靠性。下面分别介绍这两个方面的实现:

4.1 自适应的拥塞控制算法:

QUIC协议支持多种拥塞控制算法,其中最常用的是基于TCP NewReno和CUBIC算法的自适应拥塞控制算法。这些算法能够根据网络状况动态调整传输速率,以提高传输性能和避免网络拥塞。

QUIC的拥塞控制算法主要包括以下几个阶段:

- 慢启动(Slow Start):在连接刚建立时,QUIC会快速增大传输速率,以尽快利用可用的网络带宽。在慢启动阶段,每收到一个确认数据包,拥塞窗口(Congestion Window)的大小会加倍。

- 拥塞避免(Congestion Avoidance):当拥塞窗口达到一个阈值(慢启动阈值,ssthresh)时,QUIC会进入拥塞避免阶段。在拥塞避免阶段,拥塞窗口的增长速率会变得更加缓慢,以避免引发网络拥塞。

- 快速恢复(Fast Recovery):当QUIC检测到数据包丢失时,它会进入快速恢复阶段。在快速恢复阶段,QUIC会减小拥塞窗口,以减轻网络拥塞。同时,QUIC会尽快重传丢失的数据包,以提高传输可靠性。

- 快速重传(Fast Retransmit):当QUIC收到多个重复确认(Duplicate ACK)时,它会认为数据包可能丢失,并立即重传丢失的数据包,而无需等待超时重传。这使得QUIC能够更快地恢复丢失的数据包,提高传输性能。

4.1.1 慢启动

QUIC协议的慢启动(Slow Start)是拥塞控制算法的一个重要组成部分。慢启动旨在在连接刚建立时快速增大传输速率,以尽快利用可用的网络带宽。慢启动的主要目标是在不引发网络拥塞的情况下,尽快找到合适的传输速率。

QUIC的慢启动过程如下:

1. 初始化:当QUIC连接建立时,发送端会初始化拥塞窗口(Congestion Window,cwnd)的大小,通常设置为一个较小的值(例如,初始拥塞窗口大小可以设置为3-10个最大报文段(MSS))。

2. 拥塞窗口增长:在慢启动阶段,每当发送端收到一个确认数据包(ACK),拥塞窗口的大小会加倍。这意味着拥塞窗口的增长速率是指数级的,使得传输速率能够在短时间内迅速增大。

3. 慢启动阈值:当拥塞窗口达到一个预先设定的阈值(慢启动阈值,ssthresh)时,QUIC会从慢启动阶段过渡到拥塞避免阶段。在拥塞避免阶段,拥塞窗口的增长速率会变得更加缓慢,以避免引发网络拥塞。慢启动阈值通常根据网络状况动态调整。

4. 丢包和超时:如果在慢启动过程中出现数据包丢失或超时,QUIC会认为网络可能出现拥塞。此时,QUIC会调整慢启动阈值(通常设置为当前拥塞窗口大小的一半)并减小拥塞窗口(通常重置为1个MSS),然后重新开始慢启动过程。这可以避免持续的网络拥塞和性能下降。

总之,QUIC协议的慢启动是拥塞控制算法的一个关键环节,它在连接建立初期快速增大传输速率,以充分利用网络带宽。当传输速率达到一个阈值或出现丢包和超时时,QUIC会调整拥塞窗口和慢启动阈值,以避免网络拥塞和性能下降。

4.2 快速丢包恢复机制:

QUIC协议实现了一种基于前向纠错(Forward Error Correction,FEC)的快速丢包恢复机制。前向纠错是一种通过发送冗余数据包来实现丢包恢复的技术。当数据包丢失时,接收端可以通过冗余数据包来恢复丢失的数据,而无需等待发送端重传。

在QUIC协议中,发送端可以为一组数据包生成一个冗余数据包,并将其与原始数据包一起发送。当接收端收到数据包时,如果检测到某个数据包丢失,它可以尝试使用冗余数据包来恢复丢失的数据。这使得QUIC协议可以在不依赖重传的情况下实现快速丢包恢复,从而提高传输性能。

需要注意的是,QUIC的快速丢包恢复机制可能会增加额外的带宽占用,因为发送端需要发送冗余数据包。在实际应用中,QUIC会根据网络状况和数据传输需求动态调整冗余数据包的发送策略,以平衡传输性能和带宽占用。

通过自适应的拥塞控制算法和快速丢包恢复机制,QUIC协议可以在不同的网络环境下自动调整传输速率,以提高传输性能和

4.3 丢包判断

QUIC协议判断丢包主要依赖于以下两种方法:确认数据包(ACK)的接收和重传超时(RTO)。

4.3.1. 确认数据包(ACK)的接收

在QUIC协议中,接收端会为每个收到的数据包发送确认数据包(ACK)。发送端通过接收确认数据包来判断数据包是否成功到达接收端。确认数据包中包含了接收端已收到的数据包的序号信息。

当发送端收到多个重复的确认数据包(Duplicate ACK)时,它会认为对应的数据包可能丢失。例如,如果发送端连续收到3个确认序号为10的确认数据包,那么发送端会认为序号为11的数据包可能丢失。此时,发送端会立即重传丢失的数据包,这称为快速重传(Fast Retransmit)。

4.3.2. 重传超时(RTO)

除了通过确认数据包来判断丢包外,QUIC还使用重传超时(RTO)机制来检测数据包丢失。当发送端发送数据包后,它会启动一个定时器,等待接收端的确认数据包。如果在预定的超时时间内没有收到确认数据包,发送端会认为数据包丢失,并触发重传。

重传超时时间(RTO)通常是基于往返时间(RTT)和往返时间变化(RTT Variance)来计算的。QUIC会动态调整RTO的值,以适应网络延迟和拥塞状况的变化。

总之,QUIC协议判断丢包主要依赖于确认数据包的接收和重传超时机制。通过这两种方法,QUIC可以检测数据包丢失,并触发相应的重传和拥塞控制策略,以提高传输性能和可靠性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值