[e2e] Why do we need TCP flow control (rwnd)?

Lachlan Andrew lachlan.andrew at gmail.com
Sun Jun 29 15:53:14 PDT 2008

2008/6/28 David P. Reed <dpreed at reed.com>:
> Without fantasizing about possible imaginary justifications for which there
> is no evidence, what real problem exists?

Greetings David,

Perhaps the biggest current problem is the one that David Wei
mentioned, which occurs when the buffer is small relative the the BDP,
but the receiver is fast.

As you pointed out, RWND should  not  really measure the free buffer
size, but that is (I believe) what it is currently defined to do.  If
the receiver has a negligible buffer, but can keep up with the
transmission rate, setting RWND to the free buffer space needlessly
restricts the transmission rate.

Even if the buffer is approximately one BDP, a single loss will cause
this buffer to fill up, causing the sending rate in subsequent RTTs to
drop to approximately zero, even though SACK can allow full
utilisation to be maintained without overrunning the buffer.  As well
as wasting one RTT, this breaks the ACK clock.

Also, as Michael pointed out, OSes (at least Linux) currently allocate
individual buffers per flow, wasting a lot of memory.  (Perhaps the
small-buffer problem would go away if a large common buffer was
allocated, in which case it is an implementation rather than protocol


Lachlan Andrew Dept of Computer Science, Caltech
1200 E California Blvd, Mail Code 256-80, Pasadena CA 91125, USA
Ph: +1 (626) 395-8820 Fax: +1 (626) 568-3603

More information about the end2end-interest mailing list