您的位置:首页 > 运维架构 > Linux

linux TC

2016-03-14 16:00 591 查看

原文链接:

/article/2376659.html

brctl addbr br0

brctl addif br0 eth1

ifconfig br0 192.168.119.7

ifconfig eth0 10.10.106.230

echo 1 > /proc/sys/net/ipv4/ip_forward

在实际的项目中,由于需要控制下载和上传的带宽,为特定的用户提供可靠的带宽保证。

上传时使用的是WAN口即用来连接外网的,在我们的设备上面有wifi和LAN接口,分别提供内部的俩种上网方式。

因此在设备上面创建虚拟设备br0,

brctl addbr br0

brctl addif br0 eth1

brctl addif br0 ath0

ifconfig br0 192.168.119.7

ifconfig eth0 10.10.106.230

echo 1 > /proc/sys/net/ipv4/ip_forward

br0上面设置如下命令:

tc qdisc del dev br0 root

tc qdisc add dev br0 root handle 302:0 htb default 43

tc class add dev br0 parent 302:0 classid 302:1 htb rate 4096Kbit ceil 4096Kbit

tc class add dev br0 parent 302:1 classid 302:42 htb rate 512Kbit ceil 4096Kbit prio 0

tc filter add dev br0 parent 302:0 prio 42 u32 match u32 0xaabb 0x0000ffff at -16 match u32 0xccdd0106 0xffffffff at -12 flowid 302:42

tc qdisc add dev br0 parent 302:42 handle 42: sfq perturb 10

tc class add dev br0 parent 302:1 classid 302:43 htb rate 512Kbit ceil 4096Kbit prio 100

tc qdisc add dev br0 parent 302:43 handle 43: sfq perturb 10

eth0上面设置如下命令:

tc qdisc del dev eth0 root

tc qdisc add dev eth0 root handle 301:0 htb default 42

tc class add dev eth0 parent 301:0 classid 301:1 htb rate 512Kbit ceil 512Kbit

tc class add dev eth0 parent 301:1 classid 301:9 htb rate 100Kbit ceil 512Kbit prio 0

tc filter add dev eth0 parent 301:0 protocol ip prio 3 u32 match ip src 192.168.119.6 flowid 301:9

tc qdisc add dev eth0 parent 301:9 handle 9: sfq perturb 1

tc class add dev eth0 parent 301:1 classid 301:42 htb rate 100Kbit ceil 512Kbit prio 4

tc qdisc add dev eth0 parent 301:42 handle 42: sfq perturb 10

tc -s class show dev eth0

查看设置相关的命令如下:

tc -s class show dev eth0

tc qdisc ls dev eth0

tc class ls dev eth0

tc -s -d filter show dev eth0

#简单显示指定设备的队列状况

tc qdisc ls dev eth0

#详细显示指定设备的队列状况

tc –s qdisc ls dev eth0

#简单显示指定设备的分类状况

tc class ls dev eth0

#详细显示指定设备的分类状况

tc –s class ls dev eth0

#显示过滤器的状况

tc –s filter ls dev eth0

tc -s -d filter show dev eth0

使用TC命令流量控制的时候,创建的qdisc,class,filter的基本顺序如下:

其基本使用步骤为:

1) 针对网络物理设备(如以太网卡eth0)绑定一个CBQ队列

2) 在该队列上建立分类

3) 为每一分类建立一个基于路由的过滤器

4) 最后与过滤器相配合,建立特定的路由表

#将一个cbq队列绑定到网络物理设备eth0上,其编号为1:0;网络物理设备eth0的实际带宽为10Mbit,包的平均大小为1000字节;包间隔发送单元的大小为8字节,最小传输包大小为64字节。

/sbin/tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit avpkt 1000 cell 8 mpu 64

#创建根分类1:1;分配带宽为10Mbit,优先级别为1。该队列的最大可用带宽为10Mbit,实际分配的带宽为10Mbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为1,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为1Mbit。

/sbin/tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate 10Mbit maxburst 20 allot 1514 prio 1 avpkt 1000 cell 8 weight 1Mbit

#创建分类1:2,其父分类为1:1,分配带宽为64Kbit,优先级别为8。该队列的最大可用带宽为10Mbit,实际分配的带宽为64Kbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为8,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为100Kbit,且不可借用未使用带宽。

/sbin/tc class add dev eth0 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate 64Kbit maxburst 20 allot 1514 prio 8 avpkt 1000 cell 8 weight 100Kbit bounded

#创建分类1:3,其父分类为1:1,分配带宽为64Kbit,优先级别为9。该队列的最大可用带宽为10Mbit,实际分配的带宽为64Kbit,可接收冲突的发送最长包数目为20字节;最大传输单元加MAC头的大小为1514字节,优先级别为9,包的平均大小为1000字节,包间隔发送单元的大小为8字节,相应于实际带宽的加权速率为100Kbit,且不可借用未使用带宽。

/sbin/tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 10Mbit rate 64Kbit maxburst 20 allot 1514 prio 9 avpkt 1000 cell 8 weight 100Kbit bounded

#在分类底下,创建队列,使用sfq随即公平队列

/sbin/tc qdisc add dev eth0 parent 1:2 sfq quantum 1514b perturb 15

/sbin/tc qdisc add dev eth0 parent 1:3 sfq quantum 1514b perturb 15

#限制各ip地址的下载带宽,使用u32过滤器,对目的地址进行分类,对应已经创建的队列

/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.111.1.116 flowid 1:2

/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.111.1.66 flowid

*******************************类似的TC命令如下*********************************************

ebtables -t broute -D BROUTING -i eth0 -j mark --mark-set 301 --mark-target CONTINUE

ebtables -t broute -D BROUTING -i eth0 -s aa:bb:cc:dd:01:06 -j mark --mark-set 991 --mark-target CONTINUE

ebtables -t broute -F

ebtables -t broute -A BROUTING -i eth0 -j mark --mark-set 301 --mark-target CONTINUE

ebtables -t broute -A BROUTING -i eth0 -s aa:bb:cc:dd:01:06 -j mark --mark-set 991 --mark-target CONTINUE

上面是通过ebtables对特定的数据包mark上标签。

tc qdisc del dev br0 root

tc qdisc add dev br0 root handle 302:0 htb default 43

tc class add dev br0 parent 302:0 classid 302:1 htb rate 4096Kbit ceil 4096Kbit

tc class add dev br0 parent 302:1 classid 302:42 htb rate 2048Kbit ceil 4096Kbit prio 0

tc filter add dev br0 parent 302:0 prio 42 u32 match u32 0xaabb 0x0000ffff at -16 match u32 0xccdd0106 0xffffffff at -12 flowid 302:42

tc qdisc add dev br0 parent 302:42 handle 42: sfq perturb 10

tc class add dev br0 parent 302:1 classid 302:43 htb rate 2048Kbit ceil 4096Kbit prio 100

tc qdisc add dev br0 parent 302:43 handle 43: sfq perturb 10

tc qdisc del dev eth0 root

tc qdisc add dev eth0 root handle 301:0 htb default 42

tc class add dev eth0 parent 301:0 classid 301:1 htb rate 512Kbit ceil 512Kbi

tc class add dev eth0 parent 301:1 classid 301:9 htb rate 100Kbit ceil 400Kbit prio 0

tc filter add dev eth0 parent 301:1 prio 9 handle 991 fw flowid 301:9

tc qdisc add dev eth0 parent 301:9 handle 9: sfq perturb 10

tc class add dev eth0 parent 301:1 classid 301:42 htb rate 200Kbit ceil 512Kbit prio 0

tc qdisc add dev eth0 parent 301:42 handle 42: sfq perturb 10

----------------------------------------------------------------------------

tc qdisc del dev eth1 root

tc qdisc add dev eth1 root handle 301:0 htb default 42

tc class add dev eth1 parent 301:0 classid 301:1 htb rate 8Mbit ceil 8Mbit

tc class add dev eth1 parent 301:1 classid 301:43 htb rate 3Mbit ceil 8Mbit prio 0 burst 30k

tc class add dev eth1 parent 301:1 classid 301:9 htb rate 4Mbit ceil 8Mbit prio 4 burst 30k

tc filter add dev eth1 parent 301:0 protocol ip prio 3 u32 match ip dst 192.168.119.111 flowid 301:9

tc filter add dev eth1 parent 301:0 protocol ip prio 3 u32 match ip dst 192.168.119.12 flowid 301:43

tc qdisc del dev eth0 root

tc qdisc add dev eth0 root handle 301:0 htb default 42

tc class add dev eth0 parent 301:0 classid 301:1 htb rate 8Mbit ceil 8Mbit

tc class add dev eth0 parent 301:1 classid 301:43 htb rate 3Mbit ceil 8Mbit prio 0 burst 30k

tc class add dev eth0 parent 301:1 classid 301:9 htb rate 4Mbit ceil 8Mbit prio 4 burst 30k

tc filter add dev eth0 parent 301:0 protocol ip prio 3 u32 match ip src 192.168.119.111 flowid 301:9

tc filter a

################################类似的TC命令如下############################################

#set the env vlaue

DOWNLINK_Mbit=4

let DOWNLINK=$DOWNLINK_Mbit*1024

UPLINK=512

#UP MIN

UP_WCDMA_MIN=160

UP_WLAN_MIN=20

UP_LAN_MIN=20

#DOWN MIN

DOWN_WCDMA_MIN=350

DOWN_WLAN_MIN=100

DOWN_LAN_MIN=200

#UP MAX

UP_WCDMA_MAX=$UPLINK

UP_WLAN_MAX=$UPLINK

UP_LAN_MAX=$UPLINK

#DOWN MAX

DOWN_WCDMA_MAX=$DOWNLINK

DOWN_WLAN_MAX=$DOWNLINK

DOWN_LAN_MAX=$DOWNLINK

#priority

PRIO_WCDMA=1

PRIO_WLAN=2

PRIO_LAN=2

#uplink interface #PPP0

DEV_UP=eth0

#download interface

DEV_DOWN=eth1

#mpc8313 $DEV_UP IP:

IP0=192.168.1.1

#PHONE IP

IP_WCDMA=192.168.1.2

#WLAN IP

IP_WLAN=192.168.1.3

#LAN IP

IP_LAN=192.168.1.4

#clean existing down and up qdisc

echo "cleaning the old qdisc rule ......."

iptables -t mangle -F

tc qdisc del dev $DEV_UP root 2> /dev/null > /dev/null

tc qdisc del dev $DEV_DOWN root 2> /dev/null > /dev/null

tc qdisc del dev $DEV_DOWN ingress 2> /dev/null > /dev/null

echo "start setting the Qos......."

#setting the uplink

tc qdisc add dev $DEV_UP root handle 1:0 htb default 30 r2q 20

tc class add dev $DEV_UP parent 1:0 classid 1:1 htb rate ${UPLINK}Kbit

tc class add dev $DEV_UP parent 1:1 classid 1:10 htb rate ${UP_WCDMA_MIN}Kbit ceil ${UP_WCDMA_MAX}Kbit prio $PRIO_WCDMA burst 15k quantum 20000

tc class add dev $DEV_UP parent 1:1 classid 1:20 htb rate ${UP_WLAN_MIN}Kbit ceil ${UP_WLAN_MAX}Kbit prio $PRIO_WLAN burst 15k quantum 20000

tc class add dev $DEV_UP parent 1:1 classid 1:30 htb rate ${UP_LAN_MIN}Kbit ceil ${UP_LAN_MAX}Kbit prio $PRIO_LAN burst 15k quantum 20000

tc qdisc add dev $DEV_UP parent 1:10 handle 10: sfq perturb 5

tc qdisc add dev $DEV_UP parent 1:20 handle 20: sfq perturb 5

tc qdisc add dev $DEV_UP parent 1:30 handle 30: sfq perturb 5

#set the uplink route filter

iptables -t mangle -A POSTROUTING -o $DEV_UP -s $IP_WCDMA -j MARK --set-mark 1

iptables -t mangle -A POSTROUTING -o $DEV_UP -s $IP_WLAN -j MARK --set-mark 2

iptables -t mangle -A POSTROUTING -o $DEV_UP -s $IP_LAN -j MARK --set-mark 3

tc filter add dev $DEV_UP parent 1:0 protocol ip prio 10 handle 1 fw classid 1:10

tc filter add dev $DEV_UP parent 1:0 protocol ip prio 10 handle 2 fw classid 1:20

tc filter add dev $DEV_UP parent 1:0 protocol ip prio 10 handle 3 fw classid 1:30

#set the downlink

tc qdisc add dev $DEV_DOWN root handle 2: htb default 30

tc class add dev $DEV_DOWN parent 2: classid 2:1 htb rate ${DOWNLINK}Kbit

tc class add dev $DEV_DOWN parent 2:1 classid 2:10 htb rate ${DOWN_WCDMA_MIN}Kbit ceil ${DOWN_WCDMA_MAX}Kbit prio $PRIO_WCDMA burst 30k

tc class add dev $DEV_DOWN parent 2:1 classid 2:20 htb rate ${DOWN_WLAN_MIN}Kbit ceil ${DOWN_WLAN_MAX}Kbit prio $PRIO_WLAN quantum 20000 burst 30k

tc class add dev $DEV_DOWN parent 2:1 classid 2:30 htb rate ${DOWN_LAN_MIN}Kbit ceil ${DOWN_LAN_MAX}Kbit prio $PRIO_LAN quantum 20000 burst 30k

tc qdisc add dev $DEV_DOWN parent 2:10 handle 10: sfq perturb 5

tc qdisc add dev $DEV_DOWN parent 2:20 handle 20: sfq perturb 5

tc qdisc add dev $DEV_DOWN parent 2:30 handle 30: sfq perturb 5

#set the downlink route filter

tc filter add dev $DEV_DOWN parent 2:0 protocol ip prio 10 u32 match ip dst $IP_WCDMA flowid 2:10

tc filter add dev $DEV_DOWN parent 2:0 protocol ip prio 10 u32 match ip dst $IP_WLAN flowid 2:20

tc filter add dev $DEV_DOWN parent 2:0 protocol ip prio 10 u32 match ip dst $IP_LAN flowid 2:30

sleep 1s

echo "Finish!The QOS has started!"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: