How does QUIC manage its stream reassembly window sizes? I suppose it's easier since it's all in userland.
I doubt applications would provide more reliable information to the QUIC library than they would to the kernel.
The main difference as I understand it is that QUIC allows multiple separate TCP-like streams to exist on the same negotiated and encrypted connection. It's not fundamentally different from simply establishing multiple TLS over TCP connections with separate windows, it just allows you to establish the equivalent of multiple TLS + TCP connections with a single handshake.
- as noted by another commenter, you can send multiple streams in a single connection, so a lost packet for one stream does not necessarily affect others.
- QUIC sends ACK as a bitmap instead of a single number (TCP only sends the number of the highest continuous stream byte seen). Senders can see that one packet was lost, but that the packets following were successfully received. For long/fat pipes this prevents the sender from re-transmitting packets following the single lost packet.