In Linux, a single download can use all available bandwidth, so that any other connection can't be started. (e.g. if I am downloading updates, I can't surf the web at the same time)

Is there a way to set some kind of fair queueing between different connection, to allow for sharing?

I checked tc with sfq qdisc, but it seems one has to tune it to the current available bandwidth, which could be difficult on xDSL, where maximum downstream bandwidth could not be fully available depending on the provider.

Many cablemodem and ADSL users
experience horrifying latency while
uploading or downloading. They also
notice that uploading hampers
downloading greatly. The wondershaper
neatly addresses these issues,
allowing users of a router with a
wondershaper to continue using SSH
over a loaded link happily.

I tried it and it works! Unfortunately, one has to measure downstream and upstream bandwidth before launching it (it uses tc in the end), so it's not adaptive. I wonder how Win* does it, though.
–
MetiuSep 18 '09 at 12:55

A quicker temporary fix that may yield some benefit is to write a couple of iptables rules for outgoing packets to give a different Type-Of-Service for SYN packets (i.e. what is sent for a new connection request - a new web page to load) and incoming SYN-ACK.

You could probably extend this to test for port number(s) too etc and maybe make use of the state table that iptables keeps for connection sessions.

I've personally never tried any applications for bandwidth throttling, but if you'd like a good place to see some applications for Linux, check out the "external links" section of the Bandwidth throttling Wikipedia entry.