I have an ADSL modem at my house. Its rather slow on the ol' upload; brutally slow would be a nice way to put it. I have been slowly uploading a lot of pictures to a remote server during which time I have hit the 20KB/sec limit rather hard and repeatedly. Now, I understand an upload cap but the problem is when you use too much of your upstream data bandwidth for an upload it restricts the number of other things you can do at the same time (i.e. surf the web)!
I have come across a fantastic little script called WonderShaper that has you enter in a few simple data points and then enables traffic shaping so that users can still do other tasks while a majority of the upstream bandwidth is taken up by picture uploading.
I might have gotten a bit ahead of myself in the above so here is a very simple high level view of what traffic shaping is and how it works. The link above has a lot of the same information so I am not going to re-type it, I link.
Traffic Shaping in a nutshell is the process of restricting streams of data so that they do not take up all your bandwidth. If you want, think of your data stream like a stream of water. Now, traffic shaping is the gardening nozzle that can force that single stream of water into many other smaller streams. This analogy falls apart a little when you introduce the notion of priority (now some streams in your nozzle get bigger when required but then shrink down again) but for the high level description this will suffice. This is very closely related to another concept : Quality of Service (which takes the same notion but applies it slightly differently).
There is an entire handbook at The Linux Advanced Routing and Traffic Control HOW TO. Its advanced stuff (I only skimmed for what I needed) but there is some wickedly neat stuff that you can do to your network traffic under Linux.
UPDATE:
Of note: I am running Fedora Core 3 on a fairly new 2.6 based kernel with no troubles. The only change to the script I made was to change 'tc' to '/sbin/tc'.
