限制流出速度,主要通过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
通过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高级路由和流量控制》
http://www.docin.com/p-4929331.html
通过组策略可以限制流出速度,在开始运行输入gpedit.msc
通过本地计算机---计算机配置----基于策略的qos选项,可以实现网络限速、源ip、基于应用的限速。
可以下载Windows Server 2003 Resource Kit Tools,安装后,运行安装目录下的tcmon.bat这个批处理安装。
http://www.microsoft.com/en-us/download/details.aspx?id=17657
然后网卡属性—服务—添加qos包队列服务。
然后运行tcmon.exe程序。
可以根据需要设置速率
需要过滤的ip
协议
但是这个工具我只在xp上测试通过, 在windows 2003上不能正常使用,查阅了许多国外的网站,也有许多人碰到类似的问题,目前没有找到解决的方法,推测是微软已经放弃了对这个工具的支持吧。另外这个工具只能现在流出速度,重启后需要重新配置。
windows系统还可以使用netlimit这个工具,这是一个收费工具,就不详细介绍了,官网是http://www.netlimiter.com/,上面有详细的介绍。
通过360卫生也可以实现限速的功能,但是只能基于应用。