quic rfc 9000

1.流

1.1 流类型及标识符

        流可以是单向的和双向的。单向的流只能在一个方向上发送数据:从流初始化端,发送到对端。双向的流允许客户端和服务器都发送数据。

        在一个连接中,流通过流ID的标志来辨别和区分。流ID是一个62位的整数,并且在一个连接中,所有的流ID都是独一无二的。

        流ID中最后一位标识的是流的发起者,客户端的流ID是偶数,该位被置为0,服务端发起的流ID是奇数,该位被置为1.        

        流ID的倒数第二位表示的是单向还是双向流,双向流被置为0,单向流被置为1.

        

        如果流不按照顺序使用,那么将会导致所有流ID低于当前流的都会被打开。

1.2 数据发送和接受

        流帧封装应用层发送的数据。客户端或者服务器使用流ID和在流帧的偏移量来保证数据包的顺序。

        客户端或者服务器必须将流数据以有序的字节流的形式传递更应用层。传递有序的字节流要求终端缓存接受到数据,直到达到了流量控制的上限。

        终端可以接受一个流的数据在同样的偏移量上多次。数据已经被接受过的可以被直接丢弃。处在同一个偏移量上的数据如果被重复发送多次,那么这个数据必须不能被改变。端点可以将在流内相同偏移处接收到不同数据视为类型PROTOCOL_VIOLATION 的连接错误。

        流是一个抽象的有序字节流,QUIC不感知除此以外的任何结构。流帧的边界在数据被传输、丢包后重传以及被传递给应用层接收者后,不会继续保留。

1.3 流的优先级

        如果分配给流的资源的优先级正确,则流多路复用会对应用程序性能产生重大影响。

        QUIC 不提供交换优先级信息的机制。 相反,它依赖于从应用程序接收优先级信息

        

19. 帧类型和格式

 19.1 PADDING FRAMES

        PADDING帧的类型为0x00,是没有任何意义的。填充可以用于填充初始包以达到被要求的最小包大小,或对受保护数据包进行流量分析提供保护。

19.2 PING FRAMES

        PING帧的类型为0x01,PING帧也是没有内容的。

19.3 ACK FRAMES

        接收方发送ACK帧(类型为0x020x03)通知发送方其发出的数据包已经收到并处理完成了。ACK帧包含一个或者多个ACK范围。ACK范围标识了被确认的数据包。如果帧类型为0x03ACK帧也会包含到目前为止在该连接上收到的带有相关ECN标记的QUIC数据包的累计值。QUIC实现必须准确处理这两种类型,并且,如果其对发送数据包采用了ECN,其应该使用ECN块中的信息管理其拥塞状态。

        QUIC的确认是不可撤销的。数据包一旦被确认,其就会维持在被确认状态,即使其没有出现在后续的ACK帧中。这一点不同于TCP选择性确认(SACK)

        属于不同数据包号空间的数据包可以使用相同的数值标识。数据包的一个确认需要同时标明数据包号数据包号空间

        不能确认版本协商和重试包,因为它们不包含数据包号。这些数据包与其依靠ACK帧,不如通过后续客户端发送的初始包隐式确认。ACK帧的格式如下所示:

                ​​​​​​​        ​​​​​​​        

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值