Subject: Re: viewgraphs on revisions to RFC 2001

From: Kacheong Poon <[email-masked]>
Date: Wed, 23 Sep 1998 19:13:06 -0700 (PDT)

>     5A.  When a non-duplicate ACK arrives that covers "recover",
> 	 follow step 5 above.  When a non-duplicate ACK arrives
> 	 that does not cover "recover" (i.e., a "partial ack"),
> 	 retransmit the first unacknowledged segment.  (This is
> 	 "NewReno".) Do not change cwnd or ssthresh, but deflate
> 	 the congestion window by removing the additive term with
> 	 the count of duplicate acknowledgements.  For the first
> 	 partial ACK that arrives, also reset the retransmit timer.

A very late reply...  Just to repeat what I mentioned in the IETF meeting. The
reason to reset the retransmit timer only for the first partial ACK is to
avoid a stop and go behaviour.  But this also limits the number of segments
NewReno can recover.  An implementation with a coarse grain timer, like in BSD
RTO is in the order of 500ms, can recover more segments than an implementation
with a finer grain timer.  The number of segments which can be recovered also
depends on the RTT.  For a satellite link, RTT is ~520ms.  Say with BSD, RTO
may be 1.5s for such link.  That means NewReno can only recover 2 additional
segments before a timeout happens.  And for such LFN, TCP window is usually
very large.  It is likely that more than 3 segments can be dropped in a window.
 In [H96], the algorithm suggested is a little bit different from the above. 
During the fast retransmit phase, a slow start like mechanism is used.  That
means for one RTT, more than one segment can be recovered.  NewReno can only
recover one segment.  This reduces the impact of stop and go behaviour.  This
is more aggressive and can potentially retransmit quite a few duplicate
segments.  But for LFN, this can be a big help.  For relatively small window
and short RTT, the gain is small compared to NewReno.

							K. Poon.
							[email-masked]