1 限制流出速度
限制流出速度,主要通过tc这个工具,常用的有三个队列:
tbf队列,令牌桶队列,适用于流量×××;
cbq队列,分类的队列,用于实现精细的qos控制,配置复杂;
htb队列,分层的令牌桶队列,用于实现精细的qos控制,配置比cbq简单些;
通过tbf限制流程速度的例子:
tc qdisc add dev eth0 root tbf rate 51200kbit latency 50ms minburst 200k burst 200k
限制网卡eth0流出速度为51200kbit,正确的设置方法,和minburst这个参数有很大的关系,不同的硬件环境和系统需要具体调试。
通过htb实现不同目标地址的限速
删除
tc qdisc del dev eth0 root tbf
修改
tc qdisc change dev eth0 root tbf rate 2200kbit latency 5000ms burst 1540
查看当前队列
tc -s -d qdisc ls


通过htb队列,针对不同ip源限速
删除已有的队列
tc qdisc del dev eth0 root
建立一个htb根队列
tc qdisc add dev eth0 root handle 1: htb
建立一个父类1:1,速度为100mbit
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
建立一个子类1:10,速度50mbit,这里的50mbit包含在1:1的100mbit中
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 50mbit ceil 50mbit
指定1:10是一个随机公平队列
tc qdisc add dev eth0 parent 1:10 sfq perturb 10
通过过滤器,保证1.1.1.1这个ip通过1:1这个队列,优先级是2。
tc filter add dev eth0 protocol ip parent 1: prio 2 u32 match ip dst 1.1.1.1/32 flowid 1:1
通过过滤器,保证所有的其他ip通过1:10这个队列,优先级是50。
tc filter add dev eth0 protocol ip parent 1: prio 50 u32 match ip dst 0.0.0.0/0 flowid 1:10

2 限制流进速度
通过iptables 限制流进速度
#iptables -A INPUT -s 61.61.61.61/32 -m limit --limit 60/s -j ACCEPT
#iptables -A INPUT -s 61.61.61.61/32 -j DROP
限制ip每秒流进速度不超过60个,通过iptables不能精确控制网速,只能控制包的个数,具体数对可以用mtu乘包的个数计算。

推荐一本非常不错的书,Linux系统速度限制非常不错的参考资料,《Linux高级路由和流量控制》