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.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
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