[e2e] Question on ssthresh setting in RFC 2581
detlef.bosau at web.de
Sat May 13 06:13:43 PDT 2006
O.k., one day later....
Daniel Minder wrote:
>can anybody explain why equation (3) in RFC 2581 is
> ssthresh = max (FlightSize / 2, 2*SMSS)
>and why this has changed from RFC 2001 where min(rwnd, cwnd)/2 was used.
at least one remark is made in rfc2581 itself:
> Implementation Note: an easy mistake to make is to simply use cwnd,
> rather than FlightSize, which in some implementations may
> incidentally increase well beyond rwnd.
The motivation is clear: The sender must not send more data to the
network than the receiver is able / willing to accept.
What I´m curious about: Exactly _this_ is the semantics of rwnd. Thus,
even if cwnd exceeded rwnd this would be no problem because the
min(rwnd,*) would restrict the sender appropriately.
In addition, I´m not comfortable with the use of "flightsize" here.
Basically, CWND provides an estimate for the path´s capacity. In
addition, if more than one flow share a common path CWND provides an
estimate for the fair share of the path´s capacity. The purpose of using
a common AIMD scheme for all senders is to have the individual CWND
values converge to the same sawtooth function. When we use flightsize
here, the iteration scheme is not necessarily identical for different
senders, and I´m not quite sure whether this could affect the
convergence of the individual CWND functions.
>In some postings, I found that FlightSize is usually equal to min(rwnd,
>cwnd) - but not always. According to the RFC, flightsize is "the amount of
>data that has been sent but not yet acknowledged".
And this may actually exceed the receiver´s window as rwnd may change
However: It´s the purpose of CWND to estimate the path´s capcaity in
oder to provide propoer _congestion_ control.
Preventing the sender to exceed the receiver´s capacity is subject to
_flow_ control which is ensured by rwnd.
>Let's assume that 10 packets have been sent. If all 10 get lost, flightsize
>is 10 and ssthresh will be set to 5. But if only the last 4 get lost (and no
>more packets are to be sent), flightsize is 4 and ssthresh will be set to 2.
That´s the reason why I´m not comfortable with the use of flightsize
here. Even flightsitze is an estimate and thus may be wrong.
Particularly in the timeout case, we do not know how many packets have
been lost. Whe only know that our current capacity estimate is too large.
So, admittedly only one night later, perhaps things appear different to
me tomorrow or next week ;-), I´m not totally convinced that RFC 2001
was broken here. Which leads to the question: Why did we fix it?
Mail: detlef.bosau at web.de
Mobile: +49 172 681 9937
More information about the end2end-interest