UDP承载之上的可靠流

UDP只提供数据报基础,QUIC在其上建立有状态连接,并向应用提供单向或双向的有序字节流。流内数据按偏移组织,重复收到的同一位置可以去重;QUIC流不是把每个UDP报文原样当成应用消息边界。

多个流可在同一连接内交错发送,协议不规定不同流之间的字节必须按同一个全局顺序交付。一个流等待缺失数据,不必因为这个顺序缺口阻止另一个流交付已具备的数据;应用若需要跨流先后关系,仍须自行表达。

参考:[1]

共享连接仍要控制资源

QUIC既限制单个流可发送的数据范围,也限制所有流合计的数据量,并限制对端能开启的流数。这些约束保护接收端的缓冲和并发资源,发送方不能因另一个流还有空间,就超过当前流或连接的限制。

流之间交付独立,也不等于它们拥有无限独立的网络容量。同一连接仍进行拥塞控制;丢失、可用带宽及应用处理速度会影响整体表现。HTTP/3利用QUIC的流,但QUIC本身并不规定HTTP的方法、状态码或缓存语义。

参考:[1] [2]

连接标识、迁移与安全

连接标识让连接身份不只依赖当前IP地址和端口,为客户端网络迁移或NAT重新绑定提供基础。但迁移仍受握手状态、路径验证及对端参数约束,并非任意地址变化都自动成功;新路径的拥塞与往返估计也需要相应处理。

QUIC结合TLS进行密钥建立与数据保护,但安全传输不会消除应用的重复执行问题。0-RTT早期数据具有跨连接重放风险,服务器可拒绝它,应用必须说明哪些操作可安全重放。连接恢复得更早与业务操作只执行一次,不能视为同一个保证。

参考:[1] [3]