1. 基本的构成块
tc 包括三个基本的构成块: 队列规定(queueing discipline )、类(class)和分类器(Classifiers) 。
队列规定可以看作设备的流量/数据包管理器。 队列规定内封装了其他两个主要TC组件(类和分类器),控制数据的流动。
目前,有一些设备队列规定可以用来管理设备,包括类基队列(CBQ),优先级和CSZ (Clark-Shenker-Zhang)等。CBQ 是一种超级队列,即它能够包含其它队列(甚至其它CBQ)。
类由设备队列规定来管理。类由若干规则(rule)构成,这些规则用以管理那个类所拥有的数据。例如,某类里的全部数据包都受到 1 Mbps的速率限度,而在午夜和早上6点的一段时间段内允许最高达 3 Mbps。
一些队列规定可以绑定到类上,包括FIFO(先进先出),RED(随机早期探测),SFQ(随机公平队列)和令牌桶(Token Bucket)。
如果设备上未绑定队列规定,则使用基本的FIFO。另外, CBQ,CSZ和优先级也能用于类,以及类的子类。这表明使用TC,可以轻松地建造非常复杂的流量控制。管理类的队列规定可以称为类队列规定(class queueing disciplines)。
一般地,类队列规定管理该类的数据和队列,能决定延迟、丢掉或者重新分类它管理的包。分类器或过滤器描述包,并且把他们映射到队列规定所管理的类。
这些过滤器通常都提供简单的描述语言,指定选择包、把包映射到类的方法。
目前,TC可以使用的过滤器有:fwmark分类器,u32分类器,基于路由的分类器和RSVP分类器(分别用于IPV6、IPV4)等;其中,fwmark分类器允许我们使用 Linux netfilter 代码选择流量,而u32分类器允许我们选择基于 ANY 头的流量 。所有的防火墙过滤器, 例如,ipchains,都能用来分类包。
TC代码位于内核,不同的功能块既能编译为模块,也能直接编进内核。 与内核代码或模块的通信和配置由用户级程序tc完成。
2. 示例
2.1 编译内核
首先要确保选中 Kernel/User netlink socket,因为只有这样 tc 才能通过 netlink 与内核通讯。
然后,把队列规定和分类器都编进内核。这其中包括:
QoS or fair queueing, CBQ packet scheduler, CSZ packet scheduler, the simplest PRIO pseudoscheduler, RED queue, SFQ queue, TBF queue, QoS support, rate estimator, packet classifier API, routing-tables-based classifier, U32 classifier, special RSVP classifier 和 special RSVP classifier for IPv6。
然后就是大家熟知的编译和安装过程了。
2.2 建立
[因特网] ---〈E3、T3 等〉--- [Linux 路由器] --- [Office+ISP]
eth1 eth0
上图中的 Linux 路由器有两个接口,不妨称之为 eth0 和 eth1。eth1 连接到路由器, eth0 连接到包括公司防火墙在内的子网上。
由于我们只能限制发送的内容,所以我们需要两套独立的、但可能非常相似的规则集。我们可以通过改变发送次序来控制传输速率。通过修改 eth0 上的队列,我们可以确定客户 的下载(download)速率;通过修改 eth1 上的队列,我们可以确定我们公司自己的用 户的上载(upload)速率。
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 管理系统 带宽 我们 队列 可以 规定 分类 管理 内核 Linux |
注册
个人空间
