linux带宽管理系统tc配置(qos)Linux包含复杂的带宽管理系统TC(流量控制,TrafficControl)。该系统支持分类、优先、共享和输入、输出流量限制等。这套系统可以与专用的带宽管理系统相媲美。tc包括三个基本的构成块:队列规定qdisc(queueingdiscipline)、类(class)和分类器(Classifiers).流量的处理也是由这三种对象控制的。QDISC(队列规则)QDisc(队列规则)是queueingdiscipline的简写,队列规定可以看作设备的流量/数据包管理器。队列规定内封装了其他两个主要TC组件(类和分类器),控制数据的流动。它是理解流量控制(trafficcontrol)的基础。无论何时,内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。然后,内核会尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。最简单的QDisc是pfifo它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。不过,它会保存网络接口一时无法处理的数据包。队列规则包括FIFO(先进先出),RED(随机早期探测),SFQ(随机公平队列)和令牌桶(TokenBucket),类基队列(CBQ),CBQ是一种超级队列,即它能够包含其它队列(甚至其它CBQ)。CLASS(类)某些QDisc(排队规则)可以包含一些类别,不同的类别中可以包含更深入的QDisc(排队规则),通过这些细分的QDisc还可以为进入的队列的数据包排队。通过设置各种类别数据包的离队次序,QDisc可以为设置网络数据流量的优先级。FILTER(过滤器)filter(过滤器)用于为数据包分类,决定它们按照何种QDisc进入队列。无论何时数据包进入一个划分子类的类别中,都需要进行分类。分类的方法可以有多种,使用fileter(过滤器)就是其中之一。使用filter(过滤器)分类时,内核会调用附属于这个类(class)的?目前,TC可以使用的过滤器有:fwmark分类器,u32分类器,基于路由的分类器和RSVP分类器(分别用于IPV6、IPV4)等;其中,fwmark分类器允许我们使用Linuxnetfilter代码选择流量,而u32分类器允许我们选择基于ANY头的流量.需要注意的是,filter(过滤器)是在QDisc内部,它们不能作为主体。实例一、下载下载限制单个IP(eth0内网卡)tcqdiscadddeveth0roothandle1:htbr2q1tcclassadddeveth0parent1:classid1:1htbrate3000kbitburst10ktcfilteradddeveth0parent1:protocolipprio16u32matchipdst192.168.111.168flowid1:1就可以限制192.168.111.168的下载速度为300kB下载整段IPtcqdiscadddeveth0roothandle1:htbr2q1tcclassadddeveth0parent1:classid1:1htbrate3000kbitburst10ktcfilteradddeveth0parent1:protocolipprio16u32matchipdst192.168.111.0/24flowid1:1就可以限制192.168.111.0到255的带宽为3000k了,实际下载速度为200k左右。这种情况下,这个网段所有机器共享这200k的带宽。还可以加入一个sfq(随机公平队列)tcqdiscadddeveth0roothandle1:htbr2q1tcclassadddeveth0parent1:classid1:1htbrate3000kbitburst10ktcqdiscadddeveth0parent1:1handle10:sfqperturb10tcfilteradddeveth0parent1:protocolipprio16u32matchipdst192.168.111.168flowid1:1红色的是加入的,他可以防止一个段内的一个ip占用整个带宽。二、上传上传和下载一样,只是把eth0改成eth1,改到外网卡上三、删除tc规则tcqdiscdeldeveth0root只把根规则删除就行了实际中一般写两个脚本(以添加单个人的IP为例)1.添加tc规则的脚本###########第一个人的IP下载################tcqdiscadddeveth0roothandle1:htbr2q1tcclassadddeveth0parent1:classid1:1htbrate3000kbitburst10ktcfilteradddeveth0parent1:protocolipprio16u32matchipdst192.168.254.211flowid1:1########第二个人的IP,第二个人只需要这一行就行,前两行是设置规则和类的####tcfilteradddeveth0parent1:protocolipprio16u32matchipdst192.168.254.5flowid1:1###########第一个人的IP上传################tcqdiscadddeveth1roothandle1:htbr2q1tcclassadddeveth1parent1:classid1:1htbrate3000kbitburst10ktcfilteradddeveth1parent1:protocolipprio16u32matchipdst192.168.254.211flowid1:1########第二个人的IP,第二个人只需要这一行就行,前两行是设置规则和类的####tcfilteradddeveth1parent1:protocolipprio16u32matchipdst192.168.254.5flowid1:1