2012年3月1日星期四

模拟国内某些小区adsl的带宽限制

这类网络在速率超出带宽限制后就直接丢包,不会缓存数据,即采用的是police而不是shape。

要用linux的流量控制模拟这种情况,需要在ingress上采用流量控制,这里使用linux的eth0做包转发

tc qdisc add dev eth0 ingress

可以用tc qdisc show dev eth0来查看,可以看到id为"ffff:"的qdisc就是ingress对应的qdisc的id:

qdisc ingress ffff: parent ffff:ffff1 ------------

接下来添加一条过滤规则,并设置限速策略,将目标地址为64.104.177.71的包过滤出来,如果要匹配任意地址,可以使用0.0.0.0/0

tc filter add dev eth0 parent ffff: protocol ip prio 20 u32 match ip dst 64.104.177.71 police rate 800kbit burst 10k drop flowid :1


这里flowid :1是比较费解的,很少有提及,看到一个比较合理的解释是:

“ As fas as I know,this qdisc is a dummy one, and flowid is just used with :1 because the traffic have to be redirected to something.”

也就是说过滤出来被drop掉的数据会被重定向到一个dummy的qdisc?

要查看filter是否生效可以用,但这里只能看到egress接口上面的

tc filter show dev eth0


对于ingress的filter,需要使用

tc filter show parent ffff: dev eth0

没有评论:

发表评论