Hi, Lars,
In QUIC, as the packet containing only ACK frame also consumes a packet number,
I have a question about how the peer manages its "ACK map" for making SACK and
moves forward this gap?
For example, the Client sends data to the Server, and the Server sends SACKs.
If the SACK with packet number 21 from the Server gets lost, the Client will
not get the number-21 SACK packet.
Later when the Server sends data to the Client, there will always be a gap (21)
when the Client sends SACK , as the Client can never know if the lost number-21
packet is a stream DATA or SACK-only packet.
To make it more clear:
Client Server
... ...
pkt 10 (DATA) --->
<--- pkt 20 (ACK: [10..0])
pkt 11 (DATA) --->
pkt 12 (DATA) --->
pkt 13 (DATA) --->
!<--- pkt 21 (ACK: [12..11])
!<--- pkt 22 (ACK: [13..11])
!<--- pkt 23 (DATA)
!<--- pkt 24 (DATA)
pkt 14 (DATA) --->
<--- pkt 25 (ACK: [14: 11])
<--- pkt 26 (DATA)
pkt 15 (ACK: [26..25] [20..0]) ---> ?
pkt 21-24 from Server are all lost, what will Server do after receiving
pkt 15 from Client, to tell Client that the lost pkt 21-22 are ACKs and
the lost pkt 23-24 are DATA, and the gaps in ACK map in Client should
keep 22-23 only?
Thanks.