自学内容网 自学内容网

[QUIC] QUIC Frames

PADDING


PADDING Frame {
   
Type (i) = 0x00,
}

这个帧用于增加 QUIC 包的大小。

对于 Initial 包, 可以用它来增加包大小以达到要求的最小包的大小限制。

填充 QUIC 包以对抗流量分析。

这个帧的大小为1字节,表明自己是一个 PADDING 帧。


PING


PING Frame {
Type (i) = 0x01,
}

通信双方可以使用 PING 帧来验证对方是否依然在线或者对方节点是否可达。

这个帧的大小为1字节,表明自己是一个 PING 帧, 不携带任何数据。

对于 PING 帧的接收方,需要为携带此 PING 帧的 QUIC 包发送 ACK.

当没有长时间没有上层应用程序数据需要传输时, 为了防止链接因为空间超时而被关闭,可以通过发送 PING 帧来保持当前连接不被断掉。


ACK


接收方通过发送 ACK 帧来通知发送方它成功接收并处理了相关的 QUIC 包。

ACK 帧中可以包含一到多个 ACK 范围(ACK Ranges). ACK 范围表明确认接收的包。

ACK Frame {
   
Type (i) = 0x02..0x03,
Largest Acknowledged (i),
ACK Delay (i),
ACK Range Count (i),
First ACK Range (i),
ACK Range (..) ...,
[ECN Counts (..)],
}

Largest Acknowledged: 整数, 表示当前接收方接收并发送确认的最大包编号.

ACK Delay: 整数, 表明发送当前 ACK 的延迟(Delay). 单位是 milliseconds.

计算公式:delay = ACK Delay * (2 ^ ack_delay_component(transport parameter))

不直接在这里编码原始 delay 值的原因是:想用最少的字节数来编码更大的范围,以牺牲精确度为代价。

ACK Range Count: 表示当前帧中 ACK Ranges 的 ACK 范围的数量。

First ACK Range: 整数, 表示在当前 Largest Acknowledged包之前的连续的包的数量。

也就是, 当前 ACK范围的最小 Packet Number 是 Largest Acknowledged - First ACK Range

ACK Ranges: 包含一组 ACK 范围,通知发送方我们已经成功接收并处理。 它有着特殊的编码规则,后边描述。

ECN Counts: 略


ACK 范围


原文地址:https://blog.csdn.net/m0_64218465/article/details/143564451

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!