Original Post
Hi, I'm developing my own network protocol (on top of udp) and I'd love to hear some input how to best implement my packet acknowledgement. At the moment I'm giving each packet a sequence number and acknowledge the last 32 received packets with the last received sequence number and a 32 bit vector for the consecutive packets. I think this is a very frequently used idea, but it has two essential disadvantages in my opinion: 1) If one side sends approximately 32 times more packets then the other side, packets get artificialy lost because some acks get skipped. This is not a big problem, because you simply can send empty packets which contain only acks to prevent it. 2) A bigger problem is if you have bursts of consecutive lost ack packets. Even if you assume that you have a 1:1 correspondence for send/received packets, each packet is acknowledged 32 times. And if these packets get lost you will never get an acknowledgement, although the other side has successfully received the packet. A simple solution would be to acknowledge not the latest 32 received packets, but the oldest 32 packets for which the other side hasn't received (and acknowledged) an ack. But I think this had the major drawback that your acks would probably lag behind. Has someone experience with this approach? Another idea would be to combine both ideas and acknowledge both the 32 latest and the 32 oldest packets in each step. But then you have to be very carefull that both vectors do not overlap. Perhaps someone has some new ideas or general input for me? TIA