当前位置: 代码迷 >> 综合 >> UDP可靠性传输协议(QUIC)
  详细解决方案

UDP可靠性传输协议(QUIC)

热度:101   发布时间:2023-10-23 11:35:09.0

目录

  • UDP与TCP对比
  • 可靠性机制
    • ACK机制
    • 重传机制
    • 流控控制
    • 序号机制
    • 重排机制
    • 窗口机制
  • UDP可靠性设计
    • UDP窗口流控
    • KCP(出于实时性考虑)
  • QUIC
    • 简述
    • 优点
    • 缺点
    • 报文格式
    • 建立低时延

UDP与TCP对比

UDP可靠性传输协议(QUIC)
UDP可靠性传输协议(QUIC)TCP可能出现粘包分包
UDP不可能,且一帧数据必须一次性读完,否则将丢失未读部分

可靠性机制

ACK机制

也就回应机制,每次收到一个包都回给予一次ack,让发送方知道对方已经接收到

重传机制

ARQ协议的三种模式
(1) 即停等式ARQ : 等待ACK, 规定事件内没有收到对面ACK,则重传该帧
UDP可靠性传输协议(QUIC)

(2) 回退n帧ARQ : 不等待对面ACK,每个包存在生命周期,生命结束之前没有收到ACK,则回退到该该包重新发包(错误帧之后的包已经发送过,任然需要重新发送
UDP可靠性传输协议(QUIC)

(3) 选择性重传ARQ : 不等待对面ACK,每个包存在生命周期,生命结束之前没有收到ACK,不需要回退到该该包重新发包, 仅需重发该包
UDP可靠性传输协议(QUIC)

流控控制

控制发送方发送速率,以防止收件方读取数据不及时,造成缓存满后丢弃数据包
(1) 收件方告知发送方缓存剩余空间,以便于发件方控制发送速率
(2) 如果发件方因为对方缓存已满而停止发送,则需要收件方适时通知发件方开发送
4. 拥塞控制
(1) 慢启动 :网络拥塞之后,尝试从少数包开始发送,逐渐按指数增长发送包,直到包数恢复到正常数量(因为带宽越来越大,该方案已废弃)
(2) 快恢复 : 网络拥塞之后,尝试从半数的包开始发送,逐次增多

序号机制

重排机制

窗口机制

UDP可靠性设计

UDP窗口流控

KCP(出于实时性考虑)

  1. RTO翻倍
    TCP超时计算为RTO时间不断翻倍
    KCP中超时计算为RTO时间不断乘以1.5(经验值,试验证明该值较好)

  2. 重传机制
    TCP使用回退N帧ARQ机制(全部重传)
    KCP使用选择性重传ARQ机制

  3. 快速重传
    出现跳包现象(接收方收到的包是不连续的,多个中间包缺失),此时不考虑RTO,优化丢包时候的传输效率

  4. ACK延迟
    TCP为了更好的利用宽带,延迟发送ACK,如此RRT时间较大
    KCP中可以设置是否延迟

  5. ACK、UNA
    5.1 解释UNA: 比如UNA 3,则表示告知sender,包0、1、2都已经收到,这个时候sender将释放掉包0、1、2,后续如果需要重传,这三个包也不会进入重传队列,
    5.2 KCP是ACK+UNA机制
    5.3 TCP是二选一

  6. 非退让流控
    TCP使用公平退让法则(发送窗口大小决定因素:发送缓存大小,接收端剩余缓存大小,丢包退让,慢启动),
    KCP可以配置跳过丢包退让以及慢启动,使得及时性更加强大

  7. 代码路径:https://github.com/skywind3000/kcp
    上面对于KCP讲解不太清除的可以前往github上学习,再readme中对于优化的性能部分做了很详细的讲解。
    UDP可靠性传输协议(QUIC)

UDP可靠性传输协议(QUIC)8. KCP代码架构
UDP可靠性传输协议(QUIC)

QUIC

简述

  1. 快速UDP网络连接
  2. Google提出的实验性网络传输协议
  3. 位于OSI网络模型传输层
  4. 用户态基于UDP实现的传输层
  5. 旨在解决TCP协议的缺陷并最终替代TCP协议,减少数据传输,降低连接建立延迟时间,加快网页传输速度
  6. 文档连接:https://quicwg.org/base-drafts/rfc9000.html

优点

  1. 灵活的拥塞控制机制(可自我实现,也可以决定是否使用)
  2. 无队头阻塞(每个stream分别独立,不互相影响)
  3. 可轻易实现数据迁移(切换网络环境后,不需要重新连接,继续之前的连接通道继续传输数据)
  4. 包头需要身份验证,包内数据加密,安全性方面比TLS有过之而无不及
  5. FEC向前纠错

缺点

  1. 放入内核影响大,所有系统都要更新
  2. 路由器、防火墙、还有很多中间设备都需要改

报文格式

其中Connection ID为连接号,可以减少三次握手四次挥手的次数
UDP可靠性传输协议(QUIC)UDP可靠性传输协议(QUIC)Frame Type:

  1. bit01: stream ID长度
  2. bit234: offset长度
  3. bit5 : 有无Data Length字段
  4. bit6: 指示该stream通道上 是否已结束发送数据,是否处于半关闭状态
  5. bit7: 标识该帧是否为stream帧

Stream ID 一个UDP通道上可以存在多个Stream流, 每个流中的报文的完整性相互独立,以此减少异常时候,回退的帧数

建立低时延

UDP可靠性传输协议(QUIC)UDP可靠性传输协议(QUIC)UDP可靠性传输协议(QUIC)