分享

linux带宽管理系统tc配置(QOS)

 sven_ 2014-03-17

    Linux 包含复杂的带宽管理系统 TC (流量控制,Traffic Control)。该系统支持分类、优先、共享和输入、输出流量限制等。这套系统可以与专用的带宽管理系统相媲美。

    tc 包括三个基本的构成块: 队列规定qdisc(queueing discipline )、类(class)和分类器(Classifiers).流量的处理也是由这三种对象控制的。

    QDISC(队列规则)

  QDisc(队列规则)是queueing discipline的简写,队列规定可以看作设备的流量/数据包管理器。队列规定内封装了其他两个主要TC组件(类和分类器),控制数据的流动。

    它是理解流量控制(traffic control)的基础。无论何时,内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。然后,内核会尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。

  最简单的QDisc是pfifo它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。不过,它会保存网络接口一时无法处理的数据包。

    队列规则包括FIFO(先进先出),RED(随机早期探测),SFQ(随机公平队列)和令牌桶(Token Bucket),类基队列(CBQ),CBQ 是一种超级队列,即它能够包含其它队列(甚至其它CBQ)。

  CLASS(类)

  某些QDisc(排队规则)可以包含一些类别,不同的类别中可以包含更深入的QDisc(排队规则),通过这些细分的QDisc还可以为进入的队列的数据包排队。通过设置各种类别数据包的离队次序,QDisc可以为设置网络数据流量的优先级。

  FILTER(过滤器)

  filter(过滤器)用于为数据包分类,决定它们按照何种QDisc进入队列。无论何时数据包进入一个划分子类的类别中,都需要进行分类。分类的方法可以有多种,使用fileter(过滤器)就是其中之一。使用filter(过滤器)分类时,内核会调用附属于这个类(class)的?

   目前,TC可以使用的过滤器有:fwmark分类器,u32分类器,基于路由的分类器和RSVP分类器(分别用于IPV6、IPV4)等;其中,fwmark分类器允许我们使用 Linux netfilter 代码选择流量,而u32分类器允许我们选择基于 ANY 头的流量 .

  需要注意的是,filter(过滤器)是在QDisc内部,它们不能作为主体。

 

实例

一、下载

下载限制单个IP(eth0内网卡)

tc qdisc add dev eth0 root handle 1: htb r2q 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 3000kbit burst 10k
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.111.168 flowid 1:1
就可以限制192.168.111.168的下载速度为300kB

 

下载整段IP

tc qdisc add dev eth0 root handle 1: htb r2q 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 3000kbit burst 10k
tc filter add dev eth0 parent 1: protocol ip prio 16 u32
match ip dst 192.168.111.0/24 flowid 1:1

就可以限制192.168.111.0 到255 的带宽为3000k了,实际下载速度为200k左右。
这种情况下,这个网段所有机器共享这200k的带宽。

 

还可以加入一个sfq(随机公平队列)

tc qdisc add dev eth0 root handle 1: htb r2q 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 3000kbit burst 10k

tc qdisc add dev eth0 parent 1:1 handle 10: sfq perturb 10
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.111.168 flowid 1:1

红色的是加入的,他可以防止一个段内的一个ip占用整个带宽。

 二、上传

上传和下载一样,只是把eth0改成eth1,改到外网卡上

三、删除tc规则 

 tc qdisc del dev eth0 root

 只把根规则删除就行了

 


实际中一般写两个脚本(以添加单个人的IP为例)

1.添加tc规则的脚本

###########第一个人的IP下载################
tc qdisc add dev eth0 root handle 1: htb r2q 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 3000kbit burst 10k
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.254.211 flowid 1:1

########第二个人的IP,第二个人只需要这一行就行,前两行是设置规则和类的####
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.254.5 flowid 1:1

###########第一个人的IP上传################
tc qdisc add dev eth1 root handle 1: htb r2q 1
tc class add dev eth1 parent 1: classid 1:1 htb rate 3000kbit burst 10k
tc filter add dev eth1 parent 1: protocol ip prio 16 u32 match ip dst 192.168.254.211 flowid 1:1

 

########第二个人的IP,第二个人只需要这一行就行,前两行是设置规则和类的####
tc filter add dev eth1 parent 1: protocol ip prio 16 u32 match ip dst 192.168.254.5 flowid 1:1

 

 再有人的IP可以继续添加

2.删除 tc规则的脚本

 tc qdisc del dev eth0 root          这是内网卡,下载的

 tc qdisc del dev eth1 root          外网卡,上传的

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多