HTTP3 QUIC数据包重传机制

1. 数据包编号(Packet Number)

每个 QUIC 数据包都有一个唯一的包编号,这个编号是全局递增的,而不是像 TCP 那样基于字节的序列号。包编号的独立性使得 QUIC 能够快速检测到哪些数据包丢失,并决定需要重传哪些包。

2. ACK 帧和确认机制

QUIC 使用 ACK 帧来确认接收到的数据包,并提供详细的丢包信息。ACK 帧包含以下信息:

  • 已接收数据包的最高包编号
  • 确认的接收包编号范围
  • 丢失的包编号

3. 快速重传和恢复机制

当发送方接收到 ACK 帧后,会根据确认的信息判断哪些数据包需要重传。QUIC 实现了多种重传策略以确保高效的数据传输:

基于时间的重传

  • 超时重传:如果发送方在预期的时间内没有收到某个数据包的确认,会触发超时重传。QUIC 通过计算RTT(往返时间)和网络抖动来动态调整重传超时时间。

基于确认的重传

  • 快速重传:如果接收到的 ACK 帧中表明一个数据包被确认丢失,发送方会立即重传该数据包,而无需等待超时。这种机制类似于 TCP 中的快速重传,但由于 QUIC 的包编号机制,执行更高效。

4. 独立的流和帧

  • QUIC 中的数据传输基于流和帧,每个流都是独立的,包含多个帧。帧的类型包括数据帧、ACK 帧、握手帧等。丢包重传只涉及具体丢失的帧,而不会影响其他流中的帧。这种设计避免了传统 TCP 中的队头阻塞问题。
    在 QUIC 和 HTTP/3 中,数据传输的单位是“包”(packet)和“帧”(frame)

    • QUIC 包(Packet):QUIC 在 UDP 之上实现,每个 QUIC 包可以包含多个不同类型的帧。包是传输的最小单位,通过网络进行传输。
    • HTTP/3 帧(Frame):HTTP/3 数据被分割成帧进行传输。帧是 HTTP/3 协议中的数据单元,一个 QUIC 包可以包含多个 HTTP/3 帧

5. 拥塞控制

  • QUIC 实现了现代的拥塞控制算法(如 BBR),确保在网络状况变化时能够动态调整发送速率,优化带宽利用和数据传输效率。QUIC 的拥塞控制机制与重传机制相结合,提高了整体传输性能。

6. 流量控制

  • QUIC 为每个流和整个连接分别实现了流量控制。发送方在发送数据前会检查流量控制窗口,确保不会发送超过接收方处理能力的数据量。这有助于在重传时避免网络拥塞和接收方过载。

QUIC 和 HTTP/3 数据传输示例

流程图示

Client                            Server
   |                                 |
   |--- QUIC Packet 1 (Frame 1,2) -->|
   |--- QUIC Packet 2 (Frame 3,4) -->|
   |--- QUIC Packet 3 (Frame 5,6) -->| (Lost)
   |--- QUIC Packet 4 (Frame 7,8) -->|
   |--- QUIC Packet 5 (Frame 9,10) ->|
   |                                 |
   |<--- ACK (ack=1,2,4,5; lost=3) - |
   |                                 |
   |--- Retransmit QUIC Packet 3 --->|
   |                                 |
   |<--- ACK (ack=3) --------------- |
   |                                 |

①数据包发送过程

  1. 客户端发送 QUIC 包

    • 客户端发送多个 QUIC 包(包 1、2、3、4、5),每个包包含一个或多个 HTTP/3 帧
    • 包 1、2、4、5 被成功接收,但包 3 丢失(包 3 可能包含 HTTP/3 的数据帧和控制帧)
  2. 服务器接收 QUIC 包

    • 服务器接收到包 1、2、4、5,并发送 ACK 帧,确认接收的包编号,同时指出包 3 丢失

②丢包检测和重传

  1. 客户端接收 ACK 帧

    • 客户端接收到服务器的 ACK 帧,包含确认接收到的包编号(1、2、4、5)和丢失的包编号(3)
  2. 客户端触发重传

    • 客户端检测到包 3 丢失,立即准备重传包 3。由于 QUIC 的快速重传机制,客户端无需等待超时即可重传丢失的包
  3. 客户端重传 QUIC 包 3

    • 客户端重传包 3,确保丢失的数据能够重新传输到服务器。包 3 仍然包含原始的 HTTP/3 帧,以便服务器进行处理

③数据包确认和传输完成

  1. 服务器接收重传的 QUIC 包 3

    • 服务器成功接收到重传的包 3,更新接收状态,并发送新的 ACK 帧,确认包编号 3
  2. 客户端接收最终 ACK

    • 客户端接收到服务器的 ACK 帧,确认所有包已成功传输,传输过程完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值