Subject: Re: TCP fast retransmit
To: Greg Troxel <gdt@ir.bbn.com>
From: Noritoshi Demizu <demizu@dd.iij4u.or.jp>
List: tech-net
Date: 12/20/2004 15:24:30
Greg,

I am sorry for my late response.

I think your example is (perhaps, intentionally) just the same case as
the trace in the original post.

Quoted from http://mail-index.netbsd.org/tech-net/2004/12/09/0004.html
 > 21:57:57.109150 reciever.65518 > sender.ssh: . ack 1809 win 32708 <nop,nop,timestamp 5559 5559> (DF)
 > 21:57:57.134611 reciever.65518 > sender.ssh: . ack 1809 win 32850 <nop,nop,timestamp 5559 5559> (DF)

At first, I thought that the sender could guess whether the second ACK
above is a dup ACK or a window update by introducing some algorithm,
because human brain can guess.  But there exists some uncertainty,
because the sender does not know the exact size of receiver's buffer
and MSS that the receiver uses.  So...

> This last ack really is a dupack in this case, but can't be treated as
> such, and I think that was the point of the notion of 'freezing the
> window', and continuing to report the old window, perhaps until an ack
> is sent which advances the ack point.

I agree that "freezing the window" is a good idea.  I think senders
should apply receiver's silly window syndrome avoidance algorithm
(RFC1122 section 4.2.3.3) to duplicate ACK segments.

Section 4.2.3.3 of RFC1122 says as follows.

 >                 The suggested SWS avoidance algorithm for the receiver
 >                 is to keep RCV.NXT+RCV.WND fixed until the reduction
 >                 satisfies:
 >
 >                      RCV.BUFF - RCV.USER - RCV.WND  >=
 >
 >                             min( Fr * RCV.BUFF, Eff.snd.MSS )
 >
 >                 where Fr is a fraction whose recommended value is 1/2,
 >                 and Eff.snd.MSS is the effective send MSS for the
 >                 connection (see Section 4.2.2.6).  When the inequality
 >                 is satisfied, RCV.WND is set to RCV.BUFF-RCV.USER.

By following this algorithm, the right window edge may not be advanced
by duplicate ACKs in your example and in the trace of the original post.

I am not sure whether it may be advanced by data segments in the same
case.  I think it is advanced now without any negative effects.  But
if we strictly follow this algorithm, it may not in my understanding.

Regards,
Noritoshi Demizu