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

Fred Baker fred at cisco.com
Tue Jul 1 16:56:01 PDT 2008

```On Jul 1, 2008, at 3:52 PM, slblake at petri-meat.com wrote:
> Quoting John Day <day at std.com>:
>> No kidding. There are some textbook authors who have helped with this
>> too.  I was shocked to see Stallings say in one of his books,
>> something
>> to the effect of 'In the early 90s we discovered network traffic
>> wasn't
>> Poisson.'  (!)  We had known *that* since the 70s!!! I remember prior
>> to 1976 scouring the literature looking for work that was closer to
>> real, i.e. didn't assume Poisson, or would give us the tools to get
>> closer to real.
>
> The following paper may be of interest to those following this thread:
>
> T. Karagiannis, M. Molle, M. Faloutsos, and A. Broido,
> "A Nonstationary Poisson View of Internet Traffic",
> IEEE Infocom 2004.
> http://www.ieee-infocom.org/2004/Papers/33_3.PDF

As the paper notes, the Poisson model tends to be a limiting case -
its results will be similar to but more conservative than one would
expect in reality. I use the equations too, because they are simple,
but with that caveat very explicitly in place.

The thing that I find a little hard to grasp is why folks might have
thought the network was Poisson in the first place.

A model such as M/M/1 says that traffic arrives completely randomly
with no effect by one transmission on another, and departs equally
randomly. By implication, packet size is random, whether uniformly
distributed or gaussian distributed. Now think about the applications
you know of. In TCP traffic, I once read that 40% of all traffic was
pure Acks and therefore 40 bytes long, and mss-sized packets were
another perhaps 35%, with the remainder being randomly distributed
between the two. And TCP has three linkages between transmissions: the
arrival of data generally triggers the transmission of an Ack, the
arrival of an Ack generally triggers the transmission of more data,
and data, when transmitted, is usually in bursts of 2-3 packets. It's
not random, plain and simple. It is ack-clocked, and in many cases is
somewhat deterministic.

Further, if there was a random process generating data, it would be at
one interface. After the data went through the queuing structures of
that interface, it would go to another interface, and another. Traffic
that goes through multiple queuing systems even if it was Poisson in
the beginning, has a different distribution. It is by definition an
*erlang* distribution.

I think the thing that makes Gaussian and Poisson models attractive is
the relative simplicity of their math. With Gaussian models we can
discuss standard deviations, and with poisson models we can pull
formulae out of textbooks. But in both cases, they are more
conservative than we observe, and have predictive only to the extent
that they are used as conceptual limits.
```