Linux 的带宽管理系统

二没追求

二没追求

2016-01-29 19:44

Linux 的带宽管理系统,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 兆的带宽。

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

# tc qdisc add dev eth0 root handle 10: cbq bandwidth 10Mbit avpkt 1000

其含义是:我们配置了 eth0 的队列规定,root 表示这是根(root)规定,其句柄 (handle)设定为 10:'。 其类型为 CBQ。带宽为 10 M,平均包大小为 1000 字节。
下面生成根类(root class):

# tc class add dev eth0 parent 10:0 classid 10
展开更多 50%)
分享

猜你喜欢

Linux 的带宽管理系统

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux 的带宽管理系统

Linux系统中的文件管理

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux系统中的文件管理

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

linux包管理和系统更新

服务器
linux包管理和系统更新

浅析Linux系统帐户的管理和审计

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
浅析Linux系统帐户的管理和审计

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Linux系统管理技巧大荟萃

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux系统管理技巧大荟萃

Linux指令篇:系统管理--groupdel

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux指令篇:系统管理--groupdel

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

将服务器端文件夹下的文件 按文件建立的时间先后排序

将服务器端文件夹下的文件 按文件建立的时间先后排序

读核日记(四)

读核日记(四)
下拉加载更多内容 ↓