[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[altq:1763] Re: Regulating incomming TCP bandwidth...



On Fri, 31 Jan 2003, Martin Bundgaard wrote:

> For the regulation to work, of course, altq would need moderate TCP
> awareness, in order to determine the size of outgoing TCP packets and
> regulate ACK-bandwidth accordingly.
> [...]
> If no, is it already on the drawing board?

I gave a little more thought to the problem you are trying to address,
and my intial answer ("Not that I'm aware of") is partially incorrect.

Down the road, you may very well be able to do that. What you need is:

- a filtering mechanism that has the ability to filter packets based on
TCP flags

The version of altq in OpenBSD-current already uses pf(4) as a packet
filter. It seems that the trend for future versions of altq would be
to use packet filters already provided by the OS rather than the ALTQ
classifier/filter, because they are more flexible/more powerful, and
already there. When this is in place, you can do what you suggest, but
that does not take care of the potential fairness problem.

- the ability to change filters dynamically, in your case, by creating
a new filter every time a new connection is set up, and discarding one
when a connection is terminated, and modifying the guaranteed ACK bandwidth
for each TCP connection on the fly.

Dynamic modification of the filters is a very desirable feature, that
has been on the board for a while, but is not trivial to implement.
There are already hooks in place in the current stable version
(altq-3.1), but they don't do anything (yet). Eventually, this may very
well be supported. My concern is then the scalability issue. The
freebsd-net mailing-list archive has some numbers about the number of
rules ipfw can handle given a particular architecture andf a particular
link speed, and I am afraid that, unless you are using a powerful
machine on a relatively slow link, you will simply not be able to keep
up with the link speed.

As a start, you may want to try out either ipfw if you're under FreeBSD,
or altq in OpenBSD-current, which is pf-based. I know that pf(4) in
OpenBSD has a stateful feature, which allow for keeping track of things
on a per-connection basis. How you would use it to provide fairness in
your ACK limiting scheme is not clear to me at this point, since I don't
know much about pf(4), or how it's used in the OpenBSD-current version
of altq. (I did not look at the code in details.)


-- 
Nicolas Christin
Ph.D. Candidate, University of Virginia, Computer Science
http://www.cs.virginia.edu/~nicolas