QUIC 基于UDP的多路复用和安全传输 (draft-ietf-quic-transport-24)
QUIC: 基于UDP的多路复用和安全传输 (draft-ietf-quic-transport-24)1. 介绍QUIC是一种多路复用的安全传输为目标的协议。提供如下特性:
复用Stream
Stream和连接级别的流量控制
低延迟连接建立
连接迁移和NAT重绑定的快速恢复
认证且加密的头部和负载(payload)QUIC使用UDP作为TCP的替代,来避免对旧客户端操作系统和中间件的改动要求。QUIC对所有头部进行认证,并且对大部分交换的数据进行加密,包括信令,来避免中间件引入额外的依赖。
2. Streams(流)QUIC中的流,为应用提供一种轻量的,有序字节流抽象。流可以是单向或双向的。QUIC单向流几乎可以看做无限长度的“消息”的概念。
流可以通过发送数据创建。其他与流管理相关的操作,结束(ending),取消(cancelling)和流量控制,都是以最小化负荷为目的设计的。比如,单个STREAM帧可以打开、携带数据以及关闭一个流。流也可以长期存在于整个连接期间。
流可以被任意端创建,可以与其他流并发地发送数据,也可以被取消。QUIC不会不确保不同流之间的字节数据的有序性。
在流量控制约束和流限制下,QUIC可以并发地处理任意数量的流,任意数量的数据。
2.1 流的类型和id流可以是单向或双向的。单向流向一个方向承载数据:从流的发起者到对端。双向流允许两个方向发送数据。一个连接中的流都被数字标记,也就是流ID(stream ID),流ID是一个62位整数(0 ~ 2^62-1),且连接中的所有流ID都是唯一的。流ID是可变长度的整数。在一条连接中,QUIC端不能复用流ID。流ID的最低有效位(0x1)表明了流的发起者。客户端发起的流都是偶数ID(该位设为0),服务端发起的则为奇数ID(该位设为1)导数第二低有效位(0x2)可以区分是双向流(该位设为0)还是单向流(该位设为1)可以用下表概括:
12345678910111213+------+----------------------------------+| Bits | Stream Type |+------+----------------------------------+| 0x0 | Client-Initiated, Bidirectional || | ||
...