Subject: new version of TCP Congestion Control

From: Mark Allman <[email-masked]>
Date: Fri, 18 Dec 1998 12:51:21 -0500

Folks-

We just sent in a new version of the ``TCP Congestion Control'' I-D
(which will be draft-ietf-tcpimpl-cong-control-02.txt).  It should
be available from the archives soon.  You can grab a copy of the
I-D, as well as context and word diffs between this version and the
last version at:

    http://gigahertz.lerc.nasa.gov/~mallman/share/tcpimpl/

The following changes were either minor editting nits or in response
to things raised in the last call period...

-Minor wording tweaks
-Changed the allowed initial window from 1*MSS to up to 2*MSS, per
 the short discussion in Orlando.
-We deleted the MSS definition and replaced it with two new
 definitions.  SMSS, which is the segment size the sender uses (per
 the MTU or Path MTU Discovery, or whatever).  And, RMSS is the
 segment size announced by the receiver in the MSS option (or the
 default, if the option is not used).  Hopefully, by using more
 specific terms, we have made the text more clear.

We believe there is strong concensus for this document now and plan
is to send this document to the IESG soon (probably next week with
the newreno draft, assuming no large objections to that document
appear before the WG last-call ends next Tuesday).

allman

---

From: Neal Cardwell <[email-masked]>
Date: Wed, 23 Dec 1998 15:40:05 -0800 (PST)

There seems to be a small ambiguity in section 3.1, "Slow Start and
Congestion Avoidance":

    The slow start algorithm
    is used when cwnd < ssthresh, while the congestion avoidance
    algorithm is used when cwnd > ssthresh.  When cwnd and ssthresh are
    equal the sender may use either slow start or congestion avoidance.

    During slow start, a TCP increments cwnd by at most MSS bytes for
    each ACK received that acknowledges new data.  Slow start ends when
    cwnd exceeds ssthresh (or, optionally, when it reaches it, as noted
    above); or when cwnd reaches rwnd; or when congestion is observed.

This last sentence says that slow start ends when cwnd reaches rwnd. This
seems to confuse things a bit. I suspect this sentence is alluding to the
fact that the exponential growth in sending rate that we usually associate
with slow start is going to stop when cwnd hits the rwnd ceiling. But it's
my understanding from reading the popular TCP implementations that the
more fundamental aspect of slow start -- the increase of cwnd by SMSS
bytes for each ACK received -- continues even when cwnd is above rwnd, as
long as cwnd is still below (or at) ssthresh.

So either
 a) TCP is supposed to exit slow start (stop the exponential growth of
cwnd) when cwnd reaches rwnd. This makes a lot of sense, but i don't think
this is what most TCP implementations do, and i don't think this is what
the draft is proposing. If it is proposing this, then i think the draft
should be more explicit about what TCP is supposed to do when cwnd hits
rwnd.
   or
 b) TCP is not supposed to exit slow start (stop the exponential growth of
cwnd) when cwnd reaches rwnd. In this case, i guess the "or when cwnd
reaches rwnd; " phrase above should be omitted from the draft.

Happy Holidays!
neal

ps: btw, i guess the "MSS" in the second paragraph above should be "SMSS".