[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lwip-devel] [bug #27329] dupacks by unidirectional data transmit
From: |
Kieran Mansley |
Subject: |
[lwip-devel] [bug #27329] dupacks by unidirectional data transmit |
Date: |
Thu, 29 Oct 2009 14:39:33 +0000 |
User-agent: |
Opera/9.80 (X11; Linux i686; U; en) Presto/2.2.15 Version/10.00 |
Update of bug #27329 (project lwip):
Status: Fixed => In Progress
Assigned to: goldsimon => kieranm
Open/Closed: Closed => Open
_______________________________________________________
Follow-up Comment #5:
I think this needs more work: I didn't think about it enough before.
If data are being sent unidirectional from host1 to host2, then host2 should
not be getting duplicate ACKs. (From Stevens TCP/IP Illustrated Vol II, p970.)
Its only a duplicate ack if:
1) It doesn't ACK new data
2) length of received packet is zero (i.e. no payload)
3) the advertised window hasn't changed
4) There is outstanding unacknowledged data
5) The ACK is == biggest ACK sequence number so far seen (snd_una)
If it passes all five, should process as a dupack:
a) dupacks < 3: do nothing
b) dupacks == 3: fast retransmit
c) dupacks > 3: increase cwnd
If it only passes 1-3, should reset dupack counter (and add to stats, which
we don't do in lwIP)
If it only passes 1, should reset dupack counter
Our problem in lwIP is that we don't maintain a snd_una sequence variable,
and once we've moved everything from unacked to unsent, we can't distinguish
unacknowledged data we've sent once already from data we've never sent.
Most obviously we need to add a test for tcplen != 0 before counting a packet
as a dupack. (Clause 2 above). I would like to restructure the code a little
to more closely match the description above, so I've reopened this to work on
that.
_______________________________________________________
Reply to this item at:
<http://savannah.nongnu.org/bugs/?27329>
_______________________________________________
Message sent via/by Savannah
http://savannah.nongnu.org/