You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I think the following issue exists in the pseudo code:
For a new ACK block, OnAckReceived() first calls OnPacketAcked(), where OnPacketAckedCC() reduces bytes_in_flight by the sizes of whichever packets were ACKed.
Then,OnAckReceived() calls DetectLostPackets(), which reduces bytes_in_flight for every packet that it determines to be lost. That can cause bytes_in_flight to become zero.
Next, SetLossDetectionTimer() is called. The first thing that does is to cancel the loss_detection_timer when bytes_in_flight is zero.
So when and how are the packets that were declared lost retransmitted?
The text was updated successfully, but these errors were encountered:
I think endpoint should actively resend lost packets without timer. The endpoint already knows which packets are lost, so it can just start to resend them. After they are sent, start timer again.
Yes, just as in TCP, the timer is not used to retransmit any data determined lost by fast retransmit.
In the "Loss Detection" section it says:
"If a packet is lost, the QUIC transport needs to recover from that loss, such as by retransmitting the data, sending an updated frame, or abandoning the frame. For more information, see Section 13.2 of {{QUIC-TRANSPORT}}."
@larseggert : That is correct behavior because even though packets have been deemed lost, nothing has been resent yet. bytes_in_flight == 0 means that there's nothing to start a timer for. When the lost data is retransmitted in new packets, OnPacketSent gets called, which sets the timer.
I think the following issue exists in the pseudo code:
For a new ACK block,
OnAckReceived()
first callsOnPacketAcked()
, whereOnPacketAckedCC()
reducesbytes_in_flight
by the sizes of whichever packets were ACKed.Then,
OnAckReceived()
callsDetectLostPackets()
, which reducesbytes_in_flight
for every packet that it determines to be lost. That can causebytes_in_flight
to become zero.Next,
SetLossDetectionTimer()
is called. The first thing that does is to cancel theloss_detection_timer
whenbytes_in_flight
is zero.So when and how are the packets that were declared lost retransmitted?
The text was updated successfully, but these errors were encountered: