TC流量控制学习文档

上传人:添*** 文档编号:189762007 上传时间:2021-08-07 格式:DOCX 页数:12 大小:77.63KB
返回 下载 相关 举报
TC流量控制学习文档_第1页
第1页 / 共12页
TC流量控制学习文档_第2页
第2页 / 共12页
TC流量控制学习文档_第3页
第3页 / 共12页
TC流量控制学习文档_第4页
第4页 / 共12页
TC流量控制学习文档_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《TC流量控制学习文档》由会员分享,可在线阅读,更多相关《TC流量控制学习文档(12页珍藏版)》请在金锄头文库上搜索。

1、traffic control(TC)学习文档11页 共 12页 目 录第一章. 概念21.1 Netem2第二章. 原理62.1 TC62.2 简单的无类队列规则8第三章. 实践应用9第一章. 概念Netem 是linux2.6及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽,传输延迟,丢包等网络故障情况。TC是linux系统中的一个工具,全名为traffic control(流量控制)。TC可以用来控制netem的工作模式。也就是说,如果想使用netem,需要至少两个条件,一个是内核中的netem功能被包含,另一个是要有

2、TC。通过TC,可以控制网络接口发送数据的速率,每个网络接口(如eth0)都有一个队列,用户管理和调度待发的数据。Tc的原理就是,通过设置不同类型的网络接口队列,从而改变数据包发送的速率和优先级,达到流量控制的目的。第二章. 原理Tc用于Linux内核的流量控制。2.1 基本概念流量控制包括以下几种方式:SHAPING(限制)当流量被限制,他的传输速率就被控制在某个值以下。限制值能够大大小于有效带宽,这样能够平滑突发数据流量,使网络更为稳定。shaping(限制)只适用于向外的流量。SCHEDULING(调度) 通过调度数据包的传输,能够在带宽范围内,按照优先级分配带宽。SCHEDULING(

3、调度)也只适于向外的流量。POLICING(策略)SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。DROPPING(丢弃)假如流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。流量的处理由三种对象控制,他们是:qdisc(排队规则)、class(类别)和filter(过滤器)。QDISC(排队规则)QDisc(排队规则)是queueing discipline的简写,他是理解流量控制(traffic control)的基础。无论何时,内核假如需要通过某个网络接口发送数据包,他都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。然后,内核

4、会尽可能多地从qdisc里面取出数据包,把他们交给网络适配器驱动模块。最简单的QDisc是pfifo他不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。但是,他会保存网络接口一时无法处理的数据包。CLASS(类)某些QDisc(排队规则)能够包含一些类别,不同的类别中能够包含更深入的QDisc(排队规则),通过这些细分的QDisc还能够为进入的队列的数据包排队。通过配置各种类别数据包的离队次序,QDisc能够为配置网络数据流量的优先级。 FILTER(过滤器)filter(过滤器)用于为数据包分类,决定他们按照何种QDisc进入队列。无论何时数据包进入一个划分子类的类别中,都需要

5、进行分类。分类的方法能够有多种,使用fileter(过滤器)就是其中之一。使用filter(过滤器)分类时,内核会调用附属于这个类(class)的任何过滤器,直到返回一个判决。假如没有判决返回,就作进一步的处理,而处理方式和QDISC有关。需要注意的是,filter(过滤器)是在QDisc内部,他们不能作为主体。2.2 TC实现原理TC在流量控制中使用的队列分为两类:1 无类队列 2 有类队列。无类队列比较简单,分类队列则有分类和过滤器等概念,比较复杂。 无类队列对进入网卡的数据流统一对待,不进行区分,无类队列形成的队列能够接受数据包以及重新编排、延迟、丢包,它可以对网卡流量进行整形,但是不能

6、细分各种情况,无类队列规定主要有pfifo_fast、tbf、sfq等,无类队列的流量整形手段主要是排序、限速、丢包。有类队列规定则是对进入网卡的数据包根据不同的需求以分类的方式区分对待的分类规定,数据包进入分类队列后,通过过滤器对数据包进行分类,过滤器返回一个决定,队列就根据这个返回的决定把数据包发送到相应的某一类队列中进行排队。每个子类可以再次使用他们的过滤器进行进一步的分类,直到不需要分类为止,数据包才会进入相关类的队列中进行排队。TC 包括三个基本的构成块:队列规定qdisc(queueing discipline)、类(class)和分类器(Classifiers)1)TC中的队列(

7、queueing discipline):用来实现控制网络的收发速度.通过队列,linux可以将网络数据包缓存起来,然后根据用户的设置,在尽量不中断连接(如TCP)的前提下来平滑网络流量.需要注意的是,linux对接收队列的控制不够好,所以我们一般只用发送队列,即“控发不控收”.它封装了其他两个主要TC 组件(类和分类器)。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。然后,内核会尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。最简单的QDisc是 PFIFO,它不对进入的数据包做任何的处理,数据包采用先入先出的

8、方式通过队列。不过,它会保存网络接口一时无法处理的数据包。队列规则包括FIFO(先进先出),RED(随机早期探测),SFQ(随机公平队列)和令牌桶(Token Bucket),类基队列(CBQ),CBQ是一种超级队列,即它能够包含其它队列(甚至其它CBQ)。2)TC中的Class类:class用来表示控制策略.很显然,很多时候,我们很可能要对不同的IP 实行不同的流量控制策略,这时候我们就得用不同的class来表示不同的控制策略了.3)TC中的Filter规则:filter用来将用户划入到具体的控制策略中(即不同的class中).比如,现在,我们想对xxa,xxb两个IP 实行不同的控制策略(

9、A,B),这时,我们可用filter将 xxa 划入到控制策略A,将xxb 划入到控制策略B,filter划分的标志位可用u32 打标功能或IPtables的 set-mark (大多使用iptables来做标记)功能来实现。目前,TC可以使用的过滤器有:fwmark分类器,u32分类器,基于路由的分类器和RSVP分类器(分别用于IPV6、IPV4)等;其中,fwmark分类器允许我们使用Linux netfilter代码选择流量,而u32 分类器允许我们选择基于ANY 头的流量.需要注意的是,filter (过滤器)是在QDisc内部,它们不能作为主体。4)TC 的应用流程数据包-iptab

10、les(在通过iptables时,iptables根据不同的ip来设置不同的 mark)-TC(class)-TC(queue)5)TC对最对高速度的控制(1 Rate ceiling速率限度参数 ceil 指定了一个类可以用的最大带宽,用来限制类可以借用多少带宽。缺省的ceil 是和速率一样(2 Burst 突发 burst 和cburst参数控制多少数据可以以硬件最大的速度不费力的发送给需要的其他类。网络硬件只能在一个时间发送一个包这仅仅取决于一个硬件的速率。链路共享软件可以利用这个能力动态产生多个连接运行在不同的速度。所以速率和ceil 不是一个即时度量只是一个在一个时间里发送包的平均值

11、。实际的情况是怎样使一个流量很小的类在某个时间类以最大的速率提供给其他类。 注: burst和 cburst 至少要和其子类的值一样大。2.3 TC流量控制在Linux操作系统中流量控制器(TC)主要是在输出端口处建立一个队列进行流量控制,控制的方式是基于路由,亦即基于目的IP地址或目的子网的网络号的流量控制。流量控制器TC,其基本的功能模块为队列、分类和过滤器。Linux内核中支持的队列有,Class Based Queue ,Token Bucket Flow (TBF,令牌桶过滤器),CSZ ,First In First Out ,Priority ,TEQL ,SFQ ,ATM ,R

12、ED。Pfifo_fast(Third Band First In First Out Queue先进先出队列),SFQ(Stochastic Fairness Queueing 随机公平队列),HTB(Hierarchy Token Bucket分层令牌桶)等。报文分组从输入网卡(入口)接收进来,经过路由的查找,以确定是发给本机的,还是需要转发的。如果是发给本机的,就直接向上递交给上层的协议,比如TCP,如果是转发的,则会从输出网卡(出口)发出。网络流量的控制通常发生在输出网卡处。虽然在路由器的入口处也可以进行流量控制,Linux也具有相关的功能,但一般说来,由于我们无法控制自己网络之外的设

13、备,入口处的流量控制相对较难。因此我们这里处理的流量控制一般指出口处的流量控制。流量控制的一个基本概念是队列(Qdisc),每个网卡都与一个队列(Qdisc)相联系,每当内核需要将报文分组从网卡发送出去,都会首先将该报文分组添加到该网卡所配置的队列中,由该队列决定报文分组的发送顺序。因此可以说,所有的流量控制都发生在队列中,详细流程图见图1。 图1报文在Linux内部流程图 有些队列的功能是非常简单的,它们对报文分组实行先来先走的策略。有些队列则功能复杂,会将不同的报文分组进行排队、分类,并根据不同的原则,以不同的顺序发送队列中的报文分组。为实现这样的功能,这些复杂的队列需要使用不同的过滤器(

14、Filter)来把报文分组分成不同的类别(Class)。这里把这些复杂的队列称为可分类(Classiful)的队列。通常,要实现功能强大的流量控制,可分类的队列是必不可少的。因此,类别(Class)和过滤器(Filter)也是流量控制的另外两个重要的基本概念。图2所示的是一个可分类队列的例 子。图2多类别队列 由图2可以看出,类别(Class)和过滤器(Filter)都是队列的内部结构,并且可分类的队列可以包含多个类别,同时,一个类别又可以进一步包含有子队列,或者子类别。所有进入该类别的报文分组可以依据不同的原则放入不同的子队列 或子类别中,以此类推。而过滤器(Filter)是队列用来对数据报

15、文进行分类的工具,它决定一个数据报文将被分配到哪个类别中。第三章. 实践应用TC命令的一般形式:tc qdisc add |change|replace|link dev DEV parent qdisk-id |root handle qdisc-id qdisc qdisc specific parametersqdisc add 添加一个派对规则dev DEV 指定和排队规则相关对应的设备。root 对于TC来说,root就是指“egress”handle 是用户指定的一个编号,其格式是 主编号:次编号。对任何排队规则句柄来说,次编号必需是0.排队规则(qdisc)句柄的一种可用简写形式是“1:”当没有指定次编号时就默认为0.使用TC给一个存在的父class添加子classtc class add dev eth0 parent 1:1 classid 1:6 htb rate 256kbit ceil 512kbitclass add :添加一个class,也可以用del删除dev eth0 :指定我们要关联新的class的设备。parent :指定我们要关联新class的父class句柄classid 1:6 :标识此class的唯一句柄(主编号:次编号)。次编号必需为非零值。htb :带分类的qdisc需要所有子cla

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 存储

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号