首页 > 代码库 > tc使用的例子

tc使用的例子

无分类qdisc使用例子

需求针对eth1网卡出口带宽限制为100Mbit

这个就可以用无分类qdisc来做

tc–s qdisc ls dev eth1

tc qdisc add dev eth1 root tbf  rate200kbit latency 50ms burst 1540

带宽限制为200kbit,延迟为50ms,缓冲区为1540个字节

多用于很简单的规则限制

 

主要说一下有分类的qidsc例子

.假如我想针本机eth1出口流量,对目标ip10.1.1.1做流量的限制

1.tc–s qdisc ls dev eth1

2.tcqdisc del dev eth1 root

3.tcqdisc add dev eth1 root handle 1: htb

4.tcclass add dev eth1 parent 1:0 classid 1:1 htb rate 1000Mbit ceil 1000Mbit

5.tcclass add dev eth1 parent 1:1 classid 1:10 htb rate 500Mbit ceil 5Mbit

5.tcfilter add dev eth1 parent 1: protocol ip prio 1 u32 match ip dst 10.1.1.1/32  flowid 1:10 

说到ceil,就要说到令牌的概念了,tc里面个人理解令牌就是如果定义的带宽不够用了,比如上面的规则,如果到达目标ip10.1.1.1的本机eth1出口流量已经超过500Mbit,因为是htb规则它会去向父类为1:1去借带宽,这个借的带宽就叫做令牌,ceil是限制如果超过带宽限制,只允许向父类去借5Mbit的带宽

 

测试

10.1.1.1上面执行

Iperf–s

在本机执行

Iperf–c 10.1.1.1结果

[  3] local 10.13.144.228 port 22988 connectedwith 10.13.144.229 port 5001

[ ID]Interval       Transfer     Bandwidth

[  3] 0.0-10.3 sec  6.65 MBytes  5.40 Mbits/sec

最大带宽为5Mbit

 

 

二.比如说我想针对本机的80端口和22端口进行出口流量限制,其中80端口限制为500Mbit,22端口限制为400Mbit

tc qdisc add dev eth1 root handle 1: htb
tc class add deveth1 parent 1: classid 1:1 htb rate 1000Mbit

tc class add dev eth1 parent 1:1 classid 1:2 htb rate 500Mbitceil 600Mbit prio 1
tc class add deveth1 parent 1:1 classid 1:3 htb rate 400Mbit ceil 500Mbit prio 0
tc filter add deveth1 parent 1:0 prio 1 protocol ip handle 5 fw flowid 1:2
tc filter add deveth1 parent 1:0 prio 0 protocol ip handle 6 fw flowid 1:3
iptables -A OUTPUT -t mangle -p tcp --sport 80 -j MARK--set-mark 5
iptables -A OUTPUT-t mangle -p tcp --sport 22 -j MARK --set-mark 6

这上面涉及到了标记的概念,tc可以喝ipatblescgroup联合使用

也就是说iptables给由本机产生的端口8022打了个标记分别为56

tcfilter中应用到iptables的标记数,这就是iptables+tc的联合使用

 

 

.比如说我想针对本机的多个进程对出口流量进行限制

tc qdisc add dev eth1 root handle 1: htb
tc class add deveth1 parent 1: classid 1:1 htb rate 1000Mbit

tc class add dev eth1 parent 1:1 classid 1:2 htb rate 500Mbitceil 600Mbit prio 1
tc class add deveth1 parent 1:1 classid 1:3 htb rate 400Mbit ceil 500Mbit prio 0

tc filter add dev eth1 parent 1:0 prio 1 protocol ip handle1:2 cgroup

从上面我们可以看到filter里面调用class的时候写的是handle,而不是之前的flowid,在filter里,有几种分为u32,和iptables合用的规则,和cgroup合用的规则,这3种的语法是不一样的,如果用cgroup标签,把handle改成flowid就会报错

mount -t cgroup net_cls -o net_cls /cgroup/net_cls/

vim  /cgroup/net_cls/tasks,把进程号加到这个文件里

 

.如果要限制那条具体的命令

tc qdisc add dev eth1 root handle 1: htb
tc class add deveth1 parent 1: classid 1:1 htb rate 1000Mbit

tc class add dev eth1 parent 1:1 classid 1:2 htb rate 500Mbitceil 600Mbit prio 1
tc class add deveth1 parent 1:1 classid 1:3 htb rate 400Mbit ceil 500Mbit prio 0

tc filter add dev eth1 parent 1:0 prio 1 protocol ip handle1:2 cgroup

mount -t cgroup net_cls -o net_cls /cgroup/net_cls/

cgexec -gnet_cls:group 命令


tc使用的例子