网站运营
位置:首页>> 网站运营>> Linux环境使用TC进行服务器流量控制方法(2)

Linux环境使用TC进行服务器流量控制方法(2)

 来源:Asp之家 发布时间:2010-08-17 18:47:00 

标签:服务器,Linux,流量

三、TC命令格式:

加入

tc qdisc [ add change replace link ] dev DEV [ parent qdisc-id root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]

tc class [ add change replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ]

tc filter [ add change replace ] dev DEV [ parent qdisc-id root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id

显示

tc [-s -d ] qdisc show [ dev DEV ]

tc [-s -d ] class show dev DEV tc filter show dev DEV

查看TC的状态

tc -s -d qdisc show dev eth0

tc -s -d class show dev eth0

删除tc规则

tc qdisc del dev eth0 root

实例

一、下载

下载限制单个IP

tc qdisc add dev eth0 root handle 1: htb r2q 1

tc class add dev eth0 parent 1: classid 1:1 htb rate 30mbit ceil 60mbit

tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.1.2 flowid 1:1

就可以限制192.168.1.2的下载速度为30Mbit最高可以60Mbit

r2q,是指没有default的root,使整个网络的带宽没有限制

下载整段IP

tc qdisc add dev eth0 root handle 1: htb r2q 1

tc class add dev eth0 parent 1: classid 1:1 htb rate 50mbit ceil 1000mbit

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

sfq,他可以防止一个段内的一个ip占用整个带宽。

TC简介


在Linux中,TC有二种控制方法CBQ和HTB.HTB是设计用来替换CBQ的。它是一个层次式的过滤框架。TC包括三个基本的构成块: 队列规定qdisc(queueing discipline )、类(class)和分类器(Classifiers)。

队列(queueing discipline):用来实现控制网络的收发速度。通过队列,Linux可以将网络数据包缓存起来,然后根据用户的设置,在尽量不中断连接(如 TCP)的前提下来平滑网络流量。需要注意的是,linux对接收队列的控制不够好,所以我们一般只用发送队列,即“控发不控收”。它封装了其他两个主要 TC组件(类和分类器)。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。然后,内核会 尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。

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

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

class用来表示控制策略。很显然,很多时候,我们很可能要对不同的IP实行不同的流量控制策略,这时候我们就得用不同的class来表示不同的控制策略了。

filter用来将用户划入到具体的控制策略中(即不同的class中)。比如,现在,我们想对xxa,xxb两个IP实行不同的控制策略 (A,B),这时,我们可用filter将xxa划入到控制策略A,将xxb划入到控制策略B,filter划分的标志位可用u32打标功能或 IPtables的 set-mark(大多使用iptables来做标记)功能来实现。

目前,TC可以使用的过滤器有:fwmark分类器,u32分类器,基于路由的分类器和RSVP分类器(分别用于IPV6、IPV4)等;其 中,fwmark分类器允许我们使用 Linux netfilter 代码选择流量,而u32分类器允许我们选择基于 ANY 头的流量 .需要注意的是,filter(过滤器)是在QDisc内部,它们不能作为主体。

数据包->iptables(在通过iptables时,iptables根据不同的ip来设置不同的mark)->TC(class)->TC(queue)。

0
投稿

猜你喜欢

手机版 网站运营 asp之家 www.aspxhome.com