tc 限速脚本实例

#!/bin/bash
DEV="tun0"
UPLINK=300
#下行downlink 3200 k 大概一半左右,以便能够得到更多的并发连接
DOWNLINK=2048
VIP1="192.168.1.159/32"
VIP2="192.168.1.163/32"

start_routing() {
        echo -n "start......"
        #tc qdisc del dev $DEV root >null 2&>1
        #删除原来的队列
        #1.增加一个根队列,没有进行分类的数据包都走这个1:24是缺省类:
        tc qdisc add dev $DEV root handle 1: htb default 24
        #1.1增加一个根队下面主干类1: 速率为$UPLINK k
        tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit prio 0
        #1.1.1 在主干类1下建立第一叶子类,这是一个最高优先权的类.需要高优先和高速的包走这条通道,比如SYN,ACK,ICMP等
        tc class add dev $DEV parent 1:1 classid 1:11 htb rate $[$UPLINK]kbit ceil ${UPLINK}kbit prio 1
        #1.1.2 在主类1下建立第二叶子类 ,这是一个次高优先权的类。比如我们重要的crm数据.
        tc class add dev $DEV parent 1:1 classid 1:12 htb rate $[$UPLINK-150]kbit ceil ${UPLINK-50}kbit prio 2
        #1.2 在根类下建立次干类 classid 1:2 。此次干类的下面全部优先权低于主干类,以防重要数据堵塞.
        tc class add dev $DEV parent 1: classid 1:2 htb rate $[$UPLINK-150]kbit prio 3
        #1.2.1 在次干类下建立第一叶子类,可以跑例如http,pop等.
        tc class add dev $DEV parent 1:2 classid 1:21 htb rate 100kbit ceil $[$UPLINK-150]kbit prio 4
        #1.2.2 在次干类下建立第二叶子类。不要太高的速度,以防发大的附件大量占用带宽,例如smtp等
        tc class add dev $DEV parent 1:2 classid 1:22 htb rate 30kbit ceil $[$UPLINK-160]kbit prio 5
        #1.2.3 在次干类下建立第三叶子类。不要太多的带宽,以防大量的数据堵塞网络,例如ftp-data等,
        tc class add dev $DEV parent 1:2 classid 1:23 htb rate 15kbit ceil $[$UPLINK-170]kbit prio 6
        #1.2.4 在次干类下建立第四叶子类。无所谓的数据通道,无需要太多的带宽,以防无所谓的人在阻碍正务.
        tc class add dev $DEV parent 1:2 classid 1:24 htb rate 5kbit ceil $[$UPLINK-250]kbit prio 7
      
        #1.3 在主干类1下建立第三叶子类,给VIP用户(尽量不限速)
        tc class add dev $DEV parent 1: classid 1:3 htb rate $[$UPLINK+1000]kbit prio 3
       
        #在每个类下面再附加上另一个队列规定,随机公平队列(SFQ),不被某个连接不停占用带宽,以保证带宽的平均公平使用:
        #SFQ(Stochastic Fairness Queueing,随机公平队列),SFQ的关键词是“会话”(或称作“流”) ,
        #主要针对一个TCP会话或者UDP流。流量被分成相当多数量的FIFO队列中,每个队列对应一个会话。
        #数据按照简单轮转的方式发送, 每个会话都按顺序得到发送机会。这种方式非常公平,保证了每一
        #个会话都不会没其它会话所淹没。SFQ之所以被称为“随机”,是因为它并不是真的为每一个会话创建
        #一个队列,而是使用一个散列算法,把所有的会话映射到有限的几个队列中去。
        #参数perturb是多少秒后重新配置一次散列算法。默认为10
        tc qdisc add dev $DEV parent 1:11 handle 111: sfq perturb 5
        tc qdisc add dev $DEV parent 1:12 handle 112: sfq perturb 5
        tc qdisc add dev $DEV parent 1:3 handle 13: sfq perturb 5
        tc qdisc add dev $DEV parent 1:21 handle 121: sfq perturb 10
        tc qdisc add dev $DEV parent 1:22 handle 122: sfq perturb 10
        tc qdisc add dev $DEV parent 1:23 handle 133: sfq perturb 10
        tc qdisc add dev $DEV parent 1:24 handle 124: sfq perturb 10
        echo "队列设置成功.done."
        echo -n "设置包过滤 Setting up Filters......"
        #这里设置过滤器,handle 是iptables作mark的值,让被iptables 在mangle链做了mark的不同的值选择不同的通
        #道classid,而prio 是过滤器的优先级别.
        tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11
        tc filter add dev $DEV parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12
        tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:21
        tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:3
        tc filter add dev $DEV parent 1:0 protocol ip prio 4 handle 4 fw classid 1:22
        tc filter add dev $DEV parent 1:0 protocol ip prio 5 handle 5 fw classid 1:23
        tc filter add dev $DEV parent 1:0 protocol ip prio 6 handle 6 fw classid 1:24
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值