Subject: More TCP changes for review
To: None <tech-net@netbsd.org>
From: Charles M. Hannum <abuse@spamalicious.com>
List: tech-net
Date: 01/27/2005 20:32:39
I've implemented some more changes to TCP, but I'd like some input on whether 
they make sense and are worthwhile before committing them.

1) dupseg_fix_=true from NS: do not count a segment with completely duplicate 
data as a duplicate ack.  This can occur due to duplicate packets in the 
network, or due to fast retransmit from the other side.

2) dupack_reset_=false from NS: do not reset the duplicate ack counter or exit 
fast recovery if we happen to get data or a window update along with a 
duplicate ack.

3) In the "very old ack" case that itojun added, send an ACK before dropping 
the segment, to try to update the other side's send sequence number.

4) Check the ssthresh crossover point with >= rather than >.  Otherwise we 
start to do "exponential" growth immediately following recovery, where we 
should be doing "linear".  This is what NS does.


There are still a couple of outstanding questions:

a) When in fast recovery and processing a dataless duplicate ack, we silently 
drop urgent pointer updates (by using "goto drop").  Is this correct?

b) NS does not consider whether the send window is being updates when it 
decides whether it has a duplicate ack.  Why do we?  (Obviously if we didn't, 
we'd have to change the "goto drop"s to avoid throwing out the window 
update.)