2011年9月25日星期日

使用Linux Traffic Control控制带宽

Linux Traffic Control 是内核直接提供的网络功能,用来管理和控制包传输过程,在2.2和2.4内核中已经成为非常成熟的网络质量管理技术。以下用一个非常简单的例子说明:
* 场景:控制网卡eth0上文件下载的带宽至512kbit/s

step1: 为eth0创建默认的包传输控制队列:
# tc qdisc add dev eth0 root handle 1:0 htb

step2: 创建一个质量控制分类:限速 256 kbit/s, 最大 512 kbit/s
# tc class add dev eth0 parent 1:1 classid 1:6 htb rate 256kbit ceil 512kbit

step3: 在 eth0 上创建一个规则来应用刚才创建好的分类。这里简单使用目的地址来测试
# tc filter add dev eth0 parent 1:0 protocol ip prio 5 u32 match ip dst YOUR-HOST-IP flowid 1:6

查看eth0上规则是否创建成功:
# tc filter show dev eth0

好了,下来你可以用另一台机器试试效果:
# wget http://YOUR-HOST-IP/sample-file

你可以用 iptraf 来查看下载速度,是不是没那么快了?如果要取消刚才创建的规则,也很容易:
# tc filter del dev eth0 parent 1:0 protocol ip prio 5 u32 match ip dst YOUR-HOST-IP flowid 1:6

如果你持续查看下载速度的话,可以非常直观的看到速度立即回复到了之前的水平 :)