没有合适的资源?快使用搜索试试~ 我知道了~
linux htb流量控制使用实例
4星 · 超过85%的资源 需积分: 50 19 下载量 85 浏览量
2010-08-30
15:32:06
上传
评论
收藏 109KB DOC 举报
温馨提示
试读
17页
linux htb流量控制使用实例,及htb的实现原理,实现不同类型流量进行分类控制
资源推荐
资源详情
资源评论
TC 原理介绍
Linux 操作系统中的流量控制器 TC(Traffic Control)用于 Linux 内核的流量控制,主
要是通过在输出端口处建立一个队列来实现流量控制。
Linux 流量控制的基本原理如下图所示。
接收包从输入接口(Input Interface)进来后,经过流量限制(Ingress Policing)丢弃不
符合规定的数据包,由输入多路分配器(Input De-Multiplexing)进行判断选择:如果接收
包的目的是本主机,那么将该包送给上层处理;否则需要进行转发,将接收包交到转发块
(Forwarding Block)处理。转发块同时也接收本主机上层(TCP、UDP 等)产生的包。转
发块通过查看路由表,决定所处理包的下一跳。然后,对包进行排列以便将它 们传送到输
出接口(Output Interface)。一般我们只能限制网卡发送的数据包,不能限制网卡接收的
数据包,所以我们可以通过改变发送次序来控制传输速率。Linux 流量控制 主要是在输出
接口排列时进行处理和实现的。
TC 规则
流量控制方式
SHAPING(限制)
'''' 当流量被限制,它的传输速率就被控制在某个值以下。限制值可以大大小于有效带宽,
这样可以平滑突发数据流量,使网络更为稳定。shaping(限制)只适 用于向外的流量。
SCHEDULING(调度)
'''' 通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。SCHEDULING(调
度)也只适于向外的流量。
POLICING(策略)
'''' SHAPING 用于处理向外的流量,而 POLICIING(策略)用于处理接收到的数据。
DROPPING(丢弃)
'''' 如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。
流量控制处理对象
流量的处理由三种对象控制,它们是:qdisc(排队规则)、class(类别)和 filter(过滤器)。
QDISC(排队规则)
QDisc(排队规则)是 queueing discipline 的简写,它是理解流量控制(traffic control)的基
础。无论何时,内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配
置的 qdisc(排队规则)把数据包加入队列。然 后,内核会尽可能多地从 qdisc 里面取出数据
包,把它们交给网络适配器驱动模块。最简单的 QDisc 是 pfifo 它不对进入的数据包做任何
的处理,数据 包采用先入先出的方式通过队列。不过,它会保存网络接口一时无法处理的
数据包。Ò
QDISC 的类别如下:
1. CLASSLESS QDisc(不可分类 QDisc)
a) 无类别 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 的简写,适合于把流速降低到某个值。
b) 不可分类 QDisc 的配置
如果没有可分类 QDisc,不可分类 QDisc 只能附属于设备的根。它们的用法如 下:
''' tc qdisc add dev DEV root QDISC QDISC-PARAMETERS
要删除一个不可分类 QDisc,需要使用如下命令:
''' tc qdisc del dev DEV root
一个网络接口上如果没有设置 QDisc,pfifo_fast 就作为缺省的 QDisc。
2. CLASSFUL QDISC(分类 QDisc)
可分类的 QDisc 包括:
CBQ
CBQ 是 Class Based Queueing(基于类别排队)的缩写。它实现了一个丰富的连接共享类
别结构,既有限制(shaping)带宽的能力,也具有带宽优先级管理的能力。带 宽限制是通过
计算连接的空闲时间完成的。空闲时间的计算标准是数据包离队事件的频率和下层连接(数
据链路层)的带宽。
HTB
HTB 是 Hierarchy Token Bucket 的缩写。通过在实践基础上的改进,它实现了一个丰富
的连接共享类别体系。使用 HTB 可以很容易地保证每个类别的带宽,虽然它也允许特定的
类可 以突破带宽上限,占用别的类的带宽。HTB 可以通过 TBF(Token Bucket Filter)实现带
宽限制,也能够划分类别的优先级。优先级,在同一层次中类被处理的次序(8 是最低的优
先级,1 最高)。
PRIO
PRIO QDisc 不能限制带宽,因为属于不同类别的数据包是顺序离队的。使用 PRIO
QDisc 可以很容易对流量进行优先级管理,只有属于高优先级类别的数据包全部发送完毕 ,
才会发送属于低优先级类别的数据包。为了方便管理,需要使用 iptables 或者 ipchains 处理
数据包的服务类型(Type Of Service,ToS)。
CLASS(类)
某 些 QDisc(排队规则)可以包含一些类别,不同的类别中可以包含更深入的 QDisc(排队规
则),通过这些细分的 QDisc 还可以为进入的队列的数据包 排队。通过设置各种类别数据包
的离队次序,QDisc 可以为设置网络数据流量的优先级。
FILTER(过滤器)
Filter(过滤器)用于为数据包分类,决定它们按照何种 QDisc 进入队列。无论何时数据包进
入一个划分子类的类别中,都需要进行分类。分类的方法可 以有多种,使用 fileter(过滤器)
就是其中之一。使用 filter(过滤器)分类时,内核会调用附属于这个类(class)的所有过滤器,
直到返回 一个判决。如果没有判决返回,就作进一步的处理,而处理方式和 QDISC 有关。
需要注意的是,filter(过滤器)是在 QDisc 内部,它们不能作为主体。
操作原理
类(Class)组成一个树,每个类都只有一个父类,而一个类可以有多个子类。某些 QDisc(例
如:CBQ 和 HTB)允许在运行时动态添加类,而其它的 QDisc(例如:PRIO)不允许动态建立
类。允许动态添加类的 QDisc 可以有 零个或者多个子类,由它们为数据包排队。此外,每
个类都有一个叶子 QDisc,默认情况下,这个叶子 QDisc 使用 pfifo 的方式排队,我们也可
以使用 其它类型的 QDisc 代替这个默认的 QDisc。而且,这个叶子叶子 QDisc 有可以分类,
不过每个子类只能有一个叶子 QDisc。
当一个数据 包进入一个分类 QDisc,它会被归入某个子类。我们可以使用以下三种方式为
数据包归类,不过不是所有的 QDisc 都能够使用这三种方式。
tc 过滤器(tc filter)
如果过滤器附属于一个类,相关的指令就会对它们进行查询。过滤器能够匹配数据包头所
有的域,也可以匹配由 ipchains 或者 iptables 做的标记。
剩余16页未读,继续阅读
资源评论
- linuxlinuxlinuxlinux2014-12-25讲的还算详细~
shenzhoushuma
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功