资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
Linux系统中tc命令的使用详解Linux系统中tc是一个流量控制工具,全称叫traffic control。下 面由店铺为大家整理了 linux 系统中 tc 命令的使用详解,希望对大家 有帮助!Li nux系统中tc命令的使用详解名称:tc -显示/维护流量控制设置、linux tc命令格式tc qdisc add | change | replace | link dev DEV parent qdisc- id | root handle qdisc-id qdisc qdisc specific parameters tc class add | change | replace dev DEV parent qdisc-id classid class-id qdisc qdisc specific parameters tc filter add | change | replace dev DEV parent qdisc-id | root protocol protocol prio priority filtertype filtertype specific parameters flowid flow-idtc -s | -d qdisc show dev DEV tc -s | -d class show dev DEVtc filter show dev DEV二、linux tc命令原理介绍Linux操作系统中的流量控制器TC(Traffic Control)用于linux内 核的流量控制,它利用队列规定建立处理数据包的队列,并定义队列 中的数据包被发送的方式,从而实现对流量的控制。TC模块实现流量 控制功能使用的队列规定分为两类,一类是无类队列规定,另一类是 分类队列规定。 无类队列规定相对简单,而分类队列规定则引出了分 类和过滤器等概念,使其流量控制功能增强。无类队列规定是对进入网络设备(网卡) 的数据流不加区分统一对 待的队列规定。使用无类队列规定形成的队列能够 接受数据包以及重 新编排、延迟或丢弃数据包。这类队列规 定形成的队列可以对整个网 络设备(网卡)的流量进行整形,但不能细分各种情况。常用的无类 队列规定主要有 pfifo _fast (先进现出) 、TBF ( 令牌桶过滤器) 、SFQ(随机公平队列)、ID (前向随机丢包)等等。这类队列规定使用的 流量整形手段主要是排序、限速和丢包。分类队列规定是对进入网络设备的数据包根据不同的需求以分类 的方式区分对待的队列规定。 数据包进入一个分类的队列后, 它就需 要被送到某一个类中, 也就是说需要对数据包做分类处理。对数据包 进行分类的工具是过滤器,过滤器会返回一个决定,队列规定就根据 这个决定把数据包送入相应的类进行排队。每个子类都可 以再次使用 它们的过滤器进行进一步的分类。直到不需要进一步分类时, 数据包 才进入该类包含的队列排队。 除了能够包含其它队列规定之外, 绝大 多数分类的队列规定还能够对流量进行整形。 这对于需要同时进行调 度( 如使用 S F Q )和流量控制的场合非常有用。接收包从输入接口 (I nput In terface)进来后,经过流量限制 (Ingress Policing)丢弃不符合规定的数据包,由输入多路分配器 (Input De-Multiplexing)进行判断选择:如果接收包的目的是本主机, 那么将该包送给上层处理 ;否则需要进行转发,将接收包交到转发块 (Forwarding Block)处理。转发块同时也接收本主机上层(TCP、UDP 等)产生的包。转发块通过查看路由表,决定所处理包的下一跳。然后, 对包进行排列以便将它们传送到输出接口(Output In terface)。一般我 们只能限制网卡发送的数据包,不能限制网卡接收的数据包,所以我 们可以通过改变发送次序来控制传输速率。Linux流量控制主要是在输 出接口排列时进行处理和实现的。三、linux tc命令使用规则3.1、流量控制方式 流量控制包括以下几种方式:SHAPING(限制)当流量被限制,它的传输速率就被控制在某个值以下。限制值可 以大大小于有效带宽,这样可以平滑突发数据流量,使网络更为稳定。 shapi ng(限制)只适用于向外的流量。SCHEDULING(调度) 通过调度数据包的传输,可以在带宽范围内,按照优先级分配带 宽。SCHEDULING(调度)也只适于向外的流量。POLICING(策略)SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接 收到的数据。DROPPING(丢弃)如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是 向外。3.2、流量控制处理对象流量的处理由三种对象控制,它们是:qdisc(排队规则)、class(类 别)和filter(过滤器)。QDisc(排队规则)是queueing discipline的简写,它是理解流量 控制(traffic control)的基础。无论何时,内核如果需要通过某个网络 接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把 数据包加入队列。然后,内核会尽可能多地从qdisc里面取出数据包, 把它们交给网络适配器驱动模块。最简单的QDisc是pfifo它不对进入 的数据包做任何的处理,数据包采用先入先出的方式通过队列。不过, 它会保存网络接口一时无法处理的数据包。QDISC 的分为 CLASSLESS QDisc 和 CLASSFUL QDISC 类别如 下:、CLASSLESS QDisc(不可分类 QDisc)1无类别QDISC包括:p|bfifo,使用最简单的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 ofService,TOS)被分配多三个波段(ba nd)里面的。red,red是Random Early Detection随机早期探测)的简写。如 果使用这种QDISC,当带宽的占用接近于规定的带宽时,系统会随机 地丢弃一些数据包。它非常适合高带宽应用。sfq,sfq 是 Stochastic Fairness Queueing 的简写。它按照会话 (sessio n-对应于每个TCP连接或者UDP流)为流量进行排序,然后循 环发送每个会话的数据包。tbf,tbf是Token Bucket Filter的简写,适合于把流速降低至U某 个值。2无类别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基于类别排队)的缩写。它 实现了一个丰富的连接共享类别结构,既有限制(shapi ng)带宽的能力, 也具有带宽优先级管理的能力。带宽限制是通过计算连接的空闲时间 完成的。空闲时间的计算标准是数据包离队事件的频率和下层连接(数 据链路层)的带宽。HTB , HTB是Hierarchy Token Bucket的缩写。通过在实践基础 上的改进,它实现了一个丰富的连接共享类别体系。使用 HTB 可以很 容易地保证每个类别的带宽,虽然它也允许特定的类可以突破带宽上 限,占用别的类的带宽。HTB可以通过TBF(Token Bucket Filter实现 带宽限制,也能够划分类别的优先级。PRIO,PRIO QDisc 不能限制带宽,因为属于不同类别的数据包 是顺序离队的。使用PRIO QDisc可以很容易对流量进行优先级管理, 只有属于高优先级类别的数据包全部发送完毕,才会发送属于低优先 级类别的数据包。为了方便管理,需要使用iptables或者ipchains处 理数据包的服务类型(Type Of Service,ToS)。3.3、操作原理类(Class)组成一个树,每个类都只有一个父类,而一个类可以有 多个子类。某些QDisc(例如:CBQ和HTB)允许在运行时动态添加类, 而其它的QDisc(例如:PRIO)不允许动态建立类。允许动态添加类的 QDisc 可以有零个或者多个子类,由它们为数据包排队。此外,每个 类都有一个叶子QDisc,默认情况下,这个叶子QDisc使用pfifo的 方式排队,我们也可以使用其它类型的 QDisc 代替这个默认的 QDisc。 而且,这个叶子叶子 QDisc 有可以分类,不过每个子类只能有一个叶 子QDisc。当一个数据包进入一个分类QDisc,它会被归入某个子类。 我们可以使用以下三种方式为数据包归类,不过不是所有的 QDisc 都 能够使用这三种方式。如果过滤器附属于一个类,相关的指令就会对它们进行查询。过 滤器能够匹配数据包头所有的域,也可以匹配由 ipchains 或者 iptables做的标记。树的每个节点都可以有自己的过滤器,但是高层的过滤器也可以 直接用于其子类。如果数据包没有被成功归类,就会被排到这个类的 叶子QDisc的队中。相关细节在各个QDisc的手册页中。3.4、命名规则所有的QDisc、类和过滤器都有IDO ID可以手工设置,也可以有 内核自动分配。 ID 由一个主序列号和一个从序列号组成,两个数字用 个冒号分开。QDISC,-个 QDisc会被分配一个主序列号,叫做句柄(handle), 然后把从序列号作为类的命名空间。句柄采用象10样的表达方式。 习惯上,需要为有子类的QDisc显式地分配一个句柄。类(CLASS),在同一个QDisc里面的类分享这个QDisc的主序列 号,但是每个类都有自己的从序列号,叫做类识别符(classid)。类识 别符只与父QDisc有关,和父类无关。类的命名习惯和QDisc的相同。 过滤器(FILTER),过滤器的ID有三部分,只有在对过滤器进行散 列组织才会用到。详情请参考tc-filters手册页。3.5、单位tc 命令的所有参数都可以使用浮点数,可能会涉及到以下计数单 位。1) 、带宽或者流速单位:2) 、数据的数量单位:3) 、时间的计量单位:四、linux tc常用命令参数tc可以使用以下命令对QDisc、类和过滤器进行操作:add,在一个节点里加入一个QDisc、类或者过滤器。添加时, 需要传递一个祖先作为参数,传递参数时既可以使用ID也可以直接传 递设备的根。如果要建立一个 QDisc 或者过滤器,可以使用句柄 (handle)来命名;如果要建立一个类,可以使用类识别符(classid)来命 名。remove,删除有某个句柄(handl
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号