Linux 的带宽管理系统

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

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)速率 。

比如说,公司连接到因特网的线路带宽为;10;兆,同时满足外部客户和公司自己用户的需要;此时,我们就需要一种策略,来进行管理和协调 。CBQ;就可以满足我们的要求 。

我们有两个主类:"ISP";和;"Office" 。我们可以决定,客户有;8;兆的带宽,Office用户有;2;兆的带宽 。

我们首先发布如下的命令:

推荐阅读