The problem

Some of the people who are using an ADSL or Cable broadband service, notice a significant slowdown of their downstream when the upstream is fully used. This situation is most commonly witnessed when running a File Sharing software such as KaZaa, eMule, BitTorrent, etc. Most of the users just manually cap their File Sharing programs to solve this, but using several such programs simultaneously while keeping the upstream not saturated is rather difficult.

This is not a problem with the broadband service itself, but rather with the way the most widely used TCP/IP protocol works along with asymmetric links such as ADSL and Cables. RFC3449 ( covers this issue thoroughly.

During a TCP/IP session, data is sent in both ways. One side sends data, the other acknowledges the data with relatively small 'ACK' packets. When you upload data, TCP/IP starts sending at a speed faster than your fully utilized upstream. This causes the send queues of your modem to fill, and the most of the ACKs that your computer is trying to send for your download connections are delayed and may be dropped, reducing the speed of your overall downloads to no more than the speed of your uploads, and even less.

How to overcome

Let the queuing take place in your computer and not in the modem, and let it be aware of the asymmetry of the link and prioritize the delivery of ACK packets along the upstream.

Each operating system has a different way of configuring this. I'll try to cover some of the common ones.


First, make sure your kernel has Quality Of Service support compiled in or as modules, and that you have got the iproute package installed and working. Run:

tc qdisc add dev ppp0 root tbf rate 220kbit latency 50ms burst 1540

Replace 220 with your upstream capacity minus a few percents, and ppp0 with the name of the device that connects your to the network (most commonly, ppp0). Make sure this command gets to run every time the device is up'ed. For more information about QoS read the Linux Advanced Routing & Traffic Control HOWTO (


Latest versions of Windows have a built-in QoS support. There are also several commercial and non commercial tools for throttling bandwidth and implementing Quality Of Service, for various versions of Windows. I can't recommend on any. (I am not using Windows, so I haven't dealt with this there. your suggestions would be happily added)