HTTP/3 如何处理丢包?

How does HTTP/3 handle packet loss?

HTTP/2 和 HTTP/3 之间的主要区别之一是从 TCP 切换到 UDP。

据我了解,TCP通过验证没有数据包丢失来验证数据完整性。再次请求任何丢失的数据包以确保正确接收所有数据。

对于 UDP,没有这样的验证。如果数据包丢失,那就这样吧。

话虽这么说,如果我在 HTTP/3 上发出请求并且丢失了一个数据包,是否有一种机制可以确保我获得所有数据,或者是否存在我的响应丢失的风险数据包?

If packets are lost then so be it.

不,对于 UDP,它不是 “就这样吧”,但这取决于 UDP 之上的协议是否关心数据包丢失、重复和重新排序关心。例如,对于 RTP(VoIP 中的实时音频等),有一些数据包丢失是可以的,因为不管怎样,稍后到达的数据包都没有用(音频必须是低延迟的)。重新排序和复制在 RTP 中使用协议固有序列号处理。

对于HTTP/3,数据丢失是不可接受的。 HTTP/3 建立在 QUIC 之上,而 QUIC 建立在 UDP 之上。数据包丢失在 QUIC 中处理(参见 QUIC Loss Detection and Congestion Control)。因此 HTTP/3 基本上是建立在可靠传输 (QUIC) 之上,就像 HTTP/1 和 HTTP/2 是建立在可靠传输层 (TCP) 之上一样。