Opened 3 weeks ago

Last modified 5 days ago

#2650 new enhancement

PeerState.java: rework ACK resend logic

Reported by: jogger Owned by: zzz
Priority: major Milestone: undecided
Component: router/transport Version: 0.9.43
Keywords: Cc:
Parent Tickets: Sensitive: no

Description

The current ACK resend logic is a leftover from freenet. Randomised resends over 5 minutes help nothing if we want the resend to prevent a 1000 ms timeout on the other end. Any reasonable assumptions about failure rates lead to the choice between 0 and 1 resends. A single resend costs 4 bytes and possibly prevents a retransmit so this seems to be a good choice for typical error rates around 1%.
So I propose to do a single resend with a gap of ACK_FRQUENCY, which will in almost all cases be fast enough to prevent a possible retransmission and avoid being hit by two consecutive packets failing.

Subtickets

Change History (2)

comment:1 Changed 7 days ago by zzz

Status: newinfoneeded_new

Please point us to the file and line number or method in question

comment:2 Changed 5 days ago by jogger

Status: infoneeded_newnew

This aims at reducing the duplicates received to near zero, as a double ACK should get through at any reasonable rate of packet loss. A quick hack revealed this is in fact possible.

Needs a single unified data structure for all full ACKs noting a send time.

Thus needs to rework nearly all ACK methods in PeerState? as well as modifications to packet builder and ACKsender.

Note: See TracTickets for help on using tickets.