跳到主要内容

19. 帧类型和格式

19. 帧类型和格式 (Frame Types and Formats)​

如第 12.4 节所述, 数据包包含一个或多个 frames. 本节描述核心 QUIC frame types 的格式和语义.

19.1 PADDING Frames​

PADDING frame (type=0x00) 没有语义值. PADDING frames 可用于增加数据包大小. Padding 可用于将 Initial packet 增加到所需的最小大小, 或为受保护的数据包提供针对流量分析的保护.

19.2 PING Frames​

端点可以使用 PING frames (type=0x01) 验证其对端是否仍然存活, 或检查到对端的可达性. PING frame 不包含额外字段.

19.3 ACK Frames​

接收方发送 ACK frames (types 0x02 and 0x03), 用于告知发送方它们已经接收并处理的数据包. ACK frame 包含一个或多个 ACK Ranges. ACK Ranges 标识已确认的数据包.

19.3.1 ACK Ranges​

每个 ACK Range 由按 packet number 降序交替出现的 Gap 和 ACK Range Length 值组成.

19.3.2 ECN Counts​

ACK frame 使用最低有效位 (即 type 0x03) 指示 ECN 反馈, 并报告已接收的 QUIC 数据包, 这些数据包在其 IP header 中带有关联的 ECT(0), ECT(1), 或 CE ECN codepoints.

19.4 RESET_STREAM Frames​

端点使用 RESET_STREAM frame (type=0x04) 突然终止 stream 的发送部分.

19.5 STOP_SENDING Frames​

端点使用 STOP_SENDING frame (type=0x05) 表示根据应用请求, 传入数据在接收时即被丢弃.

19.6 CRYPTO Frames​

CRYPTO frame (type=0x06) 用于传输加密握手消息. 除 0-RTT 外, 它可以在所有 packet types 中发送.

19.7 NEW_TOKEN Frames​

服务器发送 NEW_TOKEN frame (type=0x07), 向客户端提供一个 token, 供客户端在未来连接的 Initial packet header 中发送.

19.8 STREAM Frames​

STREAM frames 隐式创建一个 stream 并携带 stream data. STREAM frame 采用 0b00001XXX 形式 (即从 0x08 到 0x0f 的值集合).

19.9 MAX_DATA Frames​

MAX_DATA frame (type=0x10) 用于流量控制, 告知对端可在整个连接上发送的数据总量上限.

19.10 MAX_STREAM_DATA Frames​

MAX_STREAM_DATA frame (type=0x11) 用于流量控制, 告知对端可在一个 stream 上发送的数据量上限.

19.11 MAX_STREAMS Frames​

MAX_STREAMS frame (type=0x12 or 0x13) 告知对端允许其打开的给定类型 streams 的累计数量.

19.12 DATA_BLOCKED Frames​

当发送方希望发送数据但因连接级流量控制而无法发送时, SHOULD 发送 DATA_BLOCKED frame (type=0x14).

19.13 STREAM_DATA_BLOCKED Frames​

当发送方希望发送数据但因 stream 级流量控制而无法发送时, SHOULD 发送 STREAM_DATA_BLOCKED frame (type=0x15).

19.14 STREAMS_BLOCKED Frames​

当发送方希望打开 stream 但因其对端设置的最大 stream 限制而无法打开时, SHOULD 发送 STREAMS_BLOCKED frame (type=0x16 or 0x17).

19.15 NEW_CONNECTION_ID Frames​

端点发送 NEW_CONNECTION_ID frame (type=0x18), 向其对端提供可替代的 connection IDs, 这些 ID 可在连接迁移时用于打破可关联性.

19.16 RETIRE_CONNECTION_ID Frames​

端点发送 RETIRE_CONNECTION_ID frame (type=0x19), 表示它将不再使用其对端签发的某个 connection ID.

19.17 PATH_CHALLENGE Frames​

端点可以使用 PATH_CHALLENGE frames (type=0x1a) 检查到对端的可达性, 并在连接迁移期间进行路径验证.

19.18 PATH_RESPONSE Frames​

PATH_RESPONSE frame (type=0x1b) 作为对 PATH_CHALLENGE frame 的响应发送.

19.19 CONNECTION_CLOSE Frames​

端点发送 CONNECTION_CLOSE frame (type=0x1c or 0x1d), 通知其对端连接正在关闭. type 为 0x1c 的 CONNECTION_CLOSE frame 用于指示 QUIC 层的错误或无错误. type 为 0x1d 的 CONNECTION_CLOSE frame 用于指示使用 QUIC 的应用发生错误.

19.20 HANDSHAKE_DONE Frames​

服务器使用 HANDSHAKE_DONE frame (type=0x1e) 向客户端指示握手确认.

19.21 扩展 Frames​

QUIC frames 不使用自描述编码. 因此, 端点需要理解所有 frames 的语法, 才能成功处理数据包. 这允许对 frames 进行高效编码, 但也意味着端点不能发送其对端未知类型的 frame.

希望使用新 frame 类型的 QUIC 扩展 MUST 首先确保对端能够理解该 frame. 端点可以使用 transport parameter 来表示其愿意接收 extension frame types.