• 数据流
    • 流量控制(Flow control)
    • 流标识符
    • 流并发
    • 收发数据
    • 流优先度

    数据流

    数据流(Streams)在QUIC中提供了一个轻量级、有序的字节流的抽象化。

    QUIC中有两种基本的数据流类型:

    • 从发起者到对等端(Peer)的单向数据流。

    • 双向均可发出数据的双向数据流。

    连接端点的任意一方都可以建立这两种数据流,数据流之间可并行、交错地传输,并且可以被取消。

    通过QUIC发送数据需要建立一个或多个数据流。

    流量控制(Flow control)

    每个数据流都有独立的流量控制,端点可以通过此实现内存控制和反压(back pressure)。数据流的创建本身也有流量控制,连接双方可以声明最多愿意创建几个流ID。

    流标识符

    数据流通过一个无符号的62比特整数标识,也称流ID。流ID的最低2位比特用于识别流的类型(单向或双向)和流的发起者。

    流ID的最低1位比特(0x1)用于识别流的发起者。客户端发起双数(最低位置0)流,服务器发起单数(最低位置1)流。

    第2个比特(0x2)识别单/双向流。单向流始终置1,双向流则置0。

    流并发

    QUIC允许任意数量的并发流。端点通过闲置最大流ID来控制并发活动的传入流数量。

    每个端点指定自己的最大流ID数,并只对对等端端点有效。

    收发数据

    端点使用流来收发数据,这是流的最终用途。QUIC数据流是有序的字节流抽象。但是,不同流之间是无序的。

    流优先度

    如果正确设置了各流的优先度,流复用机制可以显著提升应用的效率。使用其他多路复用协议(如HTTP/2)的经验表明,有效的优先度划分策略对效率具有显著的正面影响。

    QUIC本身没有提供交换优先度信息的报文。接收优先度信息依赖于使用QUIC的应用层。应用层可以定义所有复合其语义的优先度方案。

    基于QUIC使用HTTP/3时,优先度信息在HTTP层完成。