Implementing Network Coding #3470
Replies: 1 comment 4 replies
-
Hi @scopedog, I don't really understand what you're trying to do.
If I understand correctly, you're saying that you would ACK a packet you did not receive? This would be very bad. Best case, the peer would never retransmit the data in that lost packet; worst case, the peer might have skipped the packet number on purpose and would treat an ACK of a non-existent packet as a fatal error for the connection. |
Beta Was this translation helpful? Give feedback.
-
I'm currently implementing Network Coding to MsQuic which is supposed to drastically reduce packet retransmissions in packet loss.
See "Network Coding Meets TCP" https://ieeexplore.ieee.org/document/5061931 or search with Random Network Coding for more details.
However, I'm struggling with how to handle lost packets around QuicConnRecvDatagramBatch() in core/connection.c.
What I want to do:
Even if there was a lost packet, the receiver should not exclude it from next ACK. For example, suppose packet 101 and 103 were received but 102 was lost. In a certain condition, the lost packet can be ignored and the receiver sends ACK with the largest packet 103 and the first ACK range with non 0 (maybe 10, 20....).
What I did:
For the lost packet, I used QuicAckTrackerAddPacketNumber() and QuicAckTrackerAckPacket() (or QuicRangeAddValue(&Tracker->PacketNumbersToAck, LostPacketNumber)) so that it is not treated as lost in the next ACK. However, it causes disconnection between server and client. I also created dummy Packet to do other things but the things don't seem that simple.
I tried so many other things and don't remember everything I did but what else should I do to handle the lost packet correctly?
Once I publish my research paper, I'll put my source code at github.
Thank you.
Beta Was this translation helpful? Give feedback.
All reactions