Linux系统中tc命令的使用详解.docx
《Linux系统中tc命令的使用详解.docx》由会员分享,可在线阅读,更多相关《Linux系统中tc命令的使用详解.docx(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux系统中tc命令的使用详解Linux系统中tc命令的使用详解Linux系统中tc是一个流量控制工具,全称叫trafficcontrol。下面由学习啦我为大家整理了linux系统中tc命令的使用详解,希望对大家有帮助!Linux系统中tc命令的使用详解名称:tc-显示/维护流量控制设置一、linuxtc命令格式tcqdiscadd|change|replace|linkdevDEVparentqdisc-id|roothandleqdisc-idqdiscqdiscspecificparameterstcclassadd|change|replacedevDEVparentqdisc-i
2、dclassidclass-idqdiscqdiscspecificparameterstcfilteradd|change|replacedevDEVparentqdisc-id|rootprotocolprotocolpriopriorityfiltertypefiltertypespecificparametersflowidflow-idtc-s|-dqdiscshowdevDEVtc-s|-dclassshowdevDEVtcfiltershowdevDEV二、linuxtc命令原理介绍Linux操作系统中的流量控制器TC(TrafficControl)用于linux内核的流量控制,
3、它利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,进而实现对流量的控制。TC模块实现流量控制功能使用的队列规定分为两类,一类是无类队列规定,另一类是分类队列规定。无类队列规定相对简单,而分类队列规定则引出了分类和过滤器等概念,使其流量控制功能加强。无类队列规定是对进入网络设备(网卡)的数据流不加区分统一对待的队列规定。使用无类队列规定构成的队列能够接受数据包以及重新编排、延迟或丢弃数据包。这类队列规定构成的队列能够对整个网络设备(网卡)的流量进行整形,但不能细分各种情况。常用的无类队列规定主要有pfifo_fast(先进现出)、TBF(令牌桶过滤器)、SFQ(随机公平队列)
4、、ID(前向随机丢包)等等。这类队列规定使用的流量整形手段主要是排序、限速和丢包。分类队列规定是对进入网络设备的数据包根据不同的需求以分类的方式区分对待的队列规定。数据包进入一个分类的队列后,它就需要被送到某一个类中,也就是讲需要对数据包做分类处理。对数据包进行分类的工具是过滤器,过滤器会返回一个决定,队列规定就根据这个决定把数据包送入相应的类进行排队。每个子类都可以再次使用它们的过滤器进行进一步的分类。直到不需要进一步分类时,数据包才进入该类包含的队列排队。除了能够包含其它队列规定之外,绝大多数分类的队列规定还能够对流量进行整形。这对于需要同时进行调度(如使用SFQ)和流量控制的场合非常有用
5、。接收包从输入接口(InputInterface)进来后,经过流量限制(IngressPolicing)丢弃不符合规定的数据包,由输入多路分配器(InputDe-Multiplexing)进行判定选择:假如接收包的目的是本主机,那么将该包送给上层处理;否则需要进行转发,将接收包交到转发块(ForwardingBlock)处理。转发块同时也接收本主机上层(TCP、UDP等)产生的包。转发块通过查看路由表,决定所处理包的下一跳。然后,对包进行排列以便将它们传送到输出接口(OutputInterface)。一般我们只能限制网卡发送的数据包,不能限制网卡接收的数据包,所以我们能够通过改变发送次序来控制
6、传输速率。Linux流量控制主要是在输出接口排列时进行处理和实现的。三、linuxtc命令使用规则3.1、流量控制方式流量控制包括下面几种方式:SHAPING(限制)当流量被限制,它的传输速率就被控制在某个值下面。限制值能够大大小于有效带宽,这样能够平滑突发数据流量,使网络更为稳定。shaping(限制)只适用于向外的流量。SCHEDULING(调度)通过调度数据包的传输,能够在带宽范围内,根据优先级分配带宽。SCHEDULING(调度)也只适于向外的流量。POLICING(策略)SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。DROPPING(丢弃)假如流
7、量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。3.2、流量控制处理对象流量的处理由三种对象控制,它们是:qdisc(排队规则)、class(类别)和filter(过滤器)。QDisc(排队规则)是queueingdiscipline的简写,它是理解流量控制(trafficcontrol)的基础。无论何时,内核假如需要通过某个网络接口发送数据包,它都需要根据为这个接口配置的qdisc(排队规则)把数据包参加队列。然后,内核会尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。最简单的QDisc是pfifo它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。
8、不过,它会保存网络接口一时无法处理的数据包。QDISC的分为CLASSLESSQDisc和CLASSFULQDISC类别如下:(1)、CLASSLESSQDisc(不可分类QDisc)1无类别QDISC包括:p|bfifo,使用最简单的qdisc,纯粹的先进先出。只要一个参数:limit,用来设置队列的长度,pfifo是以数据包的个数为单位;bfifo是以字节数为单位。pfifo_fast,在编译内核时,假如打开了高级路由器(AdvancedRouter)编译选项,pfifo_fast就是系统的标准QDISC。它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。而三个波段(ba
9、nd)的优先级也不一样,band0的优先级最高,band2的最低。假如band里面有数据包,系统就不会处理band1里面的数据包,band1和band2之间也是一样。数据包是根据服务类型(TypeofService,TOS)被分配多三个波段(band)里面的。red,red是RandomEarlyDetection(随机早期探测)的简写。假如使用这种QDISC,当带宽的占用接近于规定的带宽时,系统会随机地丢弃一些数据包。它非常合适高带宽应用。sfq,sfq是StochasticFairnessQueueing的简写。它根据会话(session-对应于每个TCP连接或者UDP流)为流量进行排序,
10、然后循环发送每个会话的数据包。tbf,tbf是TokenBucketFilter的简写,合适于把流速降低到某个值。2无类别QDisc的配置假如没有可分类QDisc,不可分类QDisc只能附属于设备的根。它们的用法如下:tcqdiscadddevDEVrootQDISCQDISC-PARAMETERS要删除一个不可分类QDisc,需要使用如下命令:tcqdiscdeldevDEVroot一个网络接口上假如没有设置QDisc,pfifo_fast就作为缺省的QDisc。(2)、CLASSFULQDISC(分类QDisc)可分类QDISC包括:CBQ,CBQ是ClassBasedQueueing(基
11、于类别排队)的缩写。它实现了一个丰富的连接分享类别构造,既有限制(shaping)带宽的能力,也具有带宽优先级管理的能力。带宽限制是通过计算连接的空闲时间完成的。空闲时间的计算标准是数据包离队事件的频率和下层连接(数据链路层)的带宽。HTB,HTB是HierarchyTokenBucket的缩写。通过在实践基础上的改良,它实现了一个丰富的连接分享类别体系。使用HTB能够很容易地保证每个类别的带宽,固然它也允许特定的类能够突破带宽上限,占用别的类的带宽。HTB能够通过TBF(TokenBucketFilter)实现带宽限制,也能够划分类别的优先级。PRIO,PRIOQDisc不能限制带宽,由于属
12、于不同类别的数据包是顺序离队的。使用PRIOQDisc能够很容易对流量进行优先级管理,只要属于高优先级类别的数据包全部发送完毕,才会发送属于低优先级类别的数据包。为了方便管理,需要使用iptables或者ipchains处理数据包的服务类型(TypeOfService,ToS)。3.3、操作原理类(Class)组成一个树,每个类都只要一个父类,而一个类能够有多个子类。某些QDisc(例如:CBQ和HTB)允许在运行时动态添加类,而其它的QDisc(例如:PRIO)不允许动态建立类。允许动态添加类的QDisc能够有零个或者多个子类,由它们为数据包排队。此外,每个类都有一个叶子QDisc,默认情况
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 系统 tc 命令 使用 详解
限制150内