QUIC 服务器生成连接 ID 还是只生成客户端?

Does a QUIC server generate a Connection ID or just the client?

QUIC 服务器生成连接 ID 还是只生成客户端?有人说有一个源 CID 和一个目标 CID,其他人说每个连接只有一个 CID。有人确定吗?

QUIC 规范在 section 5.1 中定义了连接 ID。

从headers长的数据包结构可以推断出有一个源连接ID和一个目的连接ID,但是5.1节明确指出同一个端点可能有多个连接ID。

短headers的数据包只携带目标连接ID。

综上所述,在逻辑层面,一个QUIC连接是由一组连接ID标识的。单个端点可能有源和目标连接 ID;它们至少是 1 个源连接 ID 和 1 个目标连接 ID,但可以有更多,并且它们的数量不需要相同(例如,对于单个连接,可能有 N 个源连接 ID 和 M 个目标连接 ID,其中 N != M).

有关详细信息,请参阅 QUIC specification

客户端和服务器都生成(1 个或多个)连接 ID,对等方应将其用于发送的数据包。例如。服务器生成客户端应在其发送的数据包中使用(作为目标)的连接 ID。

当然这意味着一个bootstrap问题(客户端无法知道服务器将生成哪个连接ID),因此从客户端到服务器的第一个数据包包含一个随机目标连接ID;收到后,服务器将自己生成一个连接 ID 并将其传回给客户端,以便客户端可以在它发送的后续数据包中使用该连接 ID。