Packets 和 Frames 概述
受保护的数据包 (Protected Packets)
基于不同的包类型, QUIC 使用不同等级的保护机制.
Version Negotoation
包不受保护.
Retry
包使用 AEAD 进行保护。
Initial
包使用 AEAD 进行保护, 但是使用的 Key 是由一个网络可见的值计算出来的。 因此 Initial
包没有有效的保护.
其他的包都是用 QUIC 握手过程中生成的 Key 进行加密签名保护。
合并数据包
QUIC 支持将多个 QUIC 包(QUIC Packet)放在一个UDP数据报(UDP Datagram)中发送。 这可以有效的较少使用的 UDP 数据报的数量。
Initial
, 0-RTT
和 Handshake
包中都包含一个 Length
字段, 根据他的值就可以知道当前包的长度。 虽然还有不包含 Length
字段的包, 但是他们只能放在 UDP数据报的最后。
将多个 QUIC 包合并到一个 UDP 数据报时,应该按照包加密等级(encryption level)递增的顺序放入 UDP 数据报中(Initial
, 0-RTT
, Handshake
和 1-RTT
), 这样有利于接收方在接收到数据报之后逐一解密。 (乱序的话,有可能解密下一个 QUIC 包需要前一个包中包含的 Key 信息,导致不必要的多次遍历这个数据报内容)。
应该将多个相同加密等级的帧放入同一个 QUIC 包中, 而不是将他们分别放入一个 QUIC 包,然后将多个 QUIC 包合并到同一个 UDP 数据报。
接收方可能会根据接收到的 UDP 数据报中的第一个QUIC 包中的 Connection Id
信息来路由当前接收到的数据,因此不要将包含不同的 Connection Id
的 QUIC 包合并到一起。 接收方如何接收到一个包含不同 Destionation