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.)