[e2e] Question on ssthresh setting in RFC 2581

Detlef Bosau 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?


Detlef Bosau
Galileistrasse 30
70565 Stuttgart
Mail: detlef.bosau at web.de
Web: http://www.detlef-bosau.de
Mobile: +49 172 681 9937

More information about the end2end-interest mailing list