tc使用的例子

无分类qdisc使用例子

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

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

tc�Cs 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�Cs 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�Cs

在本机执行

Iperf�Cc 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 命令


你可能感兴趣的:(网卡,parent,带宽,缓冲区,流量)