ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 流量控制

流量控制

原创 Linux操作系统 作者:眼镜男 时间:2009-07-25 13:39:06 0 删除 编辑

在linux操作系统中流量控制器(TC)主要是在输出端口处建立一个队列进行流量控制,控制的方式是基于路由,亦即基于目的IP地址或目的子网的网络号的流量控制。流量控制器TC,其基本的功能模块为队列、分类和过滤器。Linux内核中支持的队列有,Class Based Queue ,Token Bucket Flow ,CSZ ,First In First Out ,Priority ,TEQL ,SFQ ,ATM ,RED。配置和使用流量控制器TC,主要分以下几个方面:分别为建立队列、建立分类、建立过滤器和建立路由,另外还需要对现有的队列、分类、过滤器和路由进行监视。

1.先介绍下QoS的概念:

QoS是一种控制机制,它提供了针对不同用户或者不同数据流才用相应不同的优先级,或者是根据应用程序的要求,保证数据流的性能达到一定的水准。 QoS的保证对于容量有限的网络来说是十分重要 的,特别是对于串流多媒体应用,例如VoIP和 IPTV等,因为这些应用常常需要固定的传输率,对延时也比较敏感。

2.保持 QoS 
•  实质上有两种方式提供QoS保证。 
– 第一种,就是简单地提供大量的资源,用丰富、安全的余量设备应付预期中的“高峰”需求。这样既好又简单,然而有人认为这种方式代价昂贵,而且不能应对高峰需求超越预期的情形,部署额外的资源也很耗费时间。 
– 第二种是要求用户预约带宽,并且仅在能够提供可靠服务的前提下接受预约。

为什么要介绍Qos呢,因为我们做流量控制就是为了保证Qos。我们怎样对流量进行控制,通过什么来控制呢。这就需要我们看一下ip表头了,其中Type of Service 这个东东很重要,我们要利用这个东东来分析,根据具体网络的情况进行流量控制。

下面的这个图是IP封包的表头

4 bits 4 bits 8 bits 3 bits 13 bits

Version IHL Type of Service Total Length
Identification Flags Fragmentation Offset
Time To Live Protocol Header Checksum
Source Address
Destination Address
Options Padding
Data

这里只讲Type of Service 的定义,因为我们接下来的内容都是和它相关的:
Type of Service
指IP資料封包在傳送中所設定的服務品質,一共由8bits組成,每個bit的組合使用
設定如下: 
000­­­­­ Routine 設定其IP的順序,0為正常,其餘值依序優先度越高. 
­­­0­­­­ Minimize­Delay 16 (0x10) 延遲的要求,0為正常的延遲,1為低延的要求. 
­­­­0­­­ Maximize­Throughput 8 (0x08) 通訊量的要求,0為正常的通訊量,1為高通訊的要求. 
­­­­­0­­ Maximize­Reliability 4 (0x04) 可靠性的要求,0為正常的可靠度,1為高可靠性的要.
­­­­­­0­ Minimize­Cost 2 (0x02)最小消费.
­­­­­­­0 Not Used 未使用.
服务类型(TOS)字段包括一个3bit的优先权子字段(现在已被忽略),4bit 的TOS子字段和1bit未用位但必须置0。 
4bit的TOS分别代表:最小时延 、最大吞吐量、最高可靠性和最小费用。 
4bit中只能置其中1bit。如果所有4bit均为0,那么就意味着是一般服务。
例如:
SSH 
            交互式连接,最小延迟 
SCP
            非交互式连接,最大吞吐量 

Tc用于Linux内核的流量控制。流量控制包括以下几种方式:

SHAPING(限制)
当流量被限制,它的传输速率就被控制在某个值以下。限制值可以大大小于有效带宽,这样可以平滑突发数据流量,使网络更为稳定。shaping(限制)只适用于向外的流量。

SCHEDULING(调度)
通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。SCHEDULING(调度)也只适于向外的流量。

POLICING(策略)
SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。

DROPPING(丢弃)
如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。

流量的处理由三种对象控制,它们是:qdisc(排队规则)、class(类别)和filter(过滤器)。

QDisc(排队规则)是queueing discipline的简写,它是理解流量控制(traffic control)的基础。无论何时,内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。然后,内核会尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。
最简单的QDisc是pfifo它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。不过,它会保存网络接口一时无法处理的数据包。

CLASS(类)
某些QDisc(排队规则)可以包含一些类别,不同的类别中可以包含更深入的QDisc(排队规则),通过这些细分的QDisc还可以为进入的队列的数据包排队。通过设置各种类别数据包的离队次序,QDisc可以为设置网络数据流量的优先级。

FILTER(过滤器)
filter(过滤器)用于为数据包分类,决定它们按照何种QDisc进入队列。无论何时数据包进入一个划分子类的类别中,都需要进行分类。分类的方法可以有多种,使用fileter(过滤器)就是其中之一。使用filter(过滤器)分类时,内核会调用附属于这个类(class)的所有过滤器,直到返回一个判决。如果没有判决返回,就作进一步的处理,而处理方式和QDISC有关。
需要注意的是,filter(过滤器)是在QDisc内部,它们不能作为主体。
CLASSLESS QDisc(不可分类QDisc)
无类别QDISC包括:
[p|b]fifo
使用最简单的qdisc,纯粹的先进先出。只有一个参数:limit,用来设置队列的长度,pfifo是以数据包的个数为单位;bfifo是以字节数为单位。
pfifo_fast
在编译内核时,如果打开了高级路由器(Advanced Router)编译选项,pfifo_fast就是系统的标准QDISC。它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。而三个波段(band)的优先级也不相同,band 0的优先级最高,band 2的最低。如果band里面有数据包,系统就不会处理band 1里面的数据包,band 1和band 2之间也是一样。数据包是按照服务类型(Type of Service,TOS)被分配多三个波段(band)里面的。
red
red是Random Early Detection(随机早期探测)的简写。如果使用这种QDISC,当带宽的占用接近于规定的带宽时,系统会随机地丢弃一些数据包。它非常适合高带宽应用。
sfq
sfq是Stochastic Fairness Queueing的简写。它按照会话(session--对应于每个TCP连接或者UDP流)为流量进行排序,然后循环发送每个会话的数据包。
tbf
tbf是Token Bucket Filter的简写,适合于把流速降低到某个值。
不可分类QDisc的配置
如果没有可分类QDisc,不可分类QDisc只能附属于设备的根。它们的用法如下:
tc qdisc add dev DEV root QDISC QDISC-PARAMETERS 
要删除一个不可分类QDisc,需要使用如下命令:
tc qdisc del dev DEV root

一个网络接口上如果没有设置QDisc,pfifo_fast就作为缺省的QDisc。


CLASSFUL QDISC(分类QDisc)
可分类的QDisc包括:
CBQ
CBQ是Class Based Queueing(基于类别排队)的缩写。它实现了一个丰富的连接共享类别结构,既有限制(shaping)带宽的能力,也具有带宽优先级管理的能力。带宽限制是通过计算连接的空闲时间完成的。空闲时间的计算标准是数据包离队事件的频率和下层连接(数据链路层)的带宽。
HTB
HTB是Hierarchy Token Bucket的缩写。通过在实践基础上的改进,它实现了一个丰富的连接共享类别体系。使用HTB可以很容易地保证每个类别的带宽,虽然它也允许特定的类可以突破带宽上限,占用别的类的带宽。HTB可以通过TBF(Token Bucket Filter)实现带宽限制,也能够划分类别的优先级。
PRIO
PRIO QDisc不能限制带宽,因为属于不同类别的数据包是顺序离队的。使用PRIO QDisc可以很容易对流量进行优先级管理,只有属于高优先级类别的数据包全部发送完毕,才会发送属于低优先级类别的数据包。为了方便管理,需要使用iptables或者ipchains处理数据包的服务类型。
类(Class)组成一个树,每个类都只有一个父类,而一个类可以有多个子类。某些QDisc(例如:CBQ和HTB)允许在运行时动态添加类,而其它的QDisc(例如:PRIO)不允许动态建立类。
允许动态添加类的QDisc可以有零个或者多个子类,由它们为数据包排队。

此外,每个类都有一个叶子QDisc,默认情况下,这个叶子QDisc使用pfifo的方式排队,我们也可以使用其它类型的QDisc代替这个默认的QDisc。而且,这个叶子叶子QDisc有可以分类,不过每个子类只能有一个叶子QDisc。 



 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21996817/viewspace-610422/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 策略路由实验
下一篇: 流量控制实验
请登录后发表评论 登录
全部评论

注册时间:2009-06-28

  • 博文量
    30
  • 访问量
    31684