数据流

数据流(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层完成。

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""