Subject: Re: TCP limited transmit
To: None <mallman@grc.nasa.gov>
From: Sean Doran <smd@ebone.net>
List: tech-net
Date: 11/29/2000 06:08:11
| 				/* limited transmit algorithm */
| 				} else if (do_lim_xmit &&
| 					   (tp->t_extra < (2 * tp->t_segsz))) {
| 				    tp->t_extra += tp->t_segsz;
| 				    tp->snd_cwnd += tp->t_extra;
| 				    (void) tcp_output (tp);
| 				    tp->snd_cwnd -= tp->t_extra;
| 				    goto drop;

Why not, instead of touching the cwnd at all, just modify tcp_output()
to send a segment if t_extra is non-zero (post-decrementing t_extra), 
otherwise send or not send as usual?   I am nervous about inflating
snd_cwnd in the presence of potential congestion, no matter how
carefully one tries to do the bookkeeping to do later deflation.
(Your draft is equally paranoid: "The congestion window MUST NOT be changed
when these new segments are transmitted".) 

You need to zero t_extra when you get dupack #3, when you get a
non-duplicate ack, or when you do an RTO.   The first case is sensible
paranoia; in principle any dupack (4, 5, 6, 7, ...) is an indication
that a packet has exited the network, but if you have a full FIFO
somewhere that overflowed causing the drop that triggers the dupacks, 
continuing to pour packets into it will never let it drain.  

"Three" should be changeable easily, in case some day there is
consensus that FT/FR should trigger on a different number of
duplicate ACKs.

| Also note that everywhere that t_dupacks is set to zero, t_extra
| should also be set to zero (as shown above).

Hopefully that's all the cases. :-)

	Sean.