TC流量控制
- 格式:docx
- 大小:22.64 KB
- 文档页数:10
linux tc原理Linux tc原理Linux tc(Traffic Control)是Linux内核中的一种网络流量控制机制,用于管理和控制网络流量的传输速率、延迟、丢包等参数。
它可以在网络接口上实现带宽控制、流量限制和优先级管理等功能,为网络应用提供更好的服务质量。
Linux tc的原理是通过在数据包经过网络协议栈之前或之后,对数据包进行处理和调度,从而实现流量控制和管理。
它主要通过三个关键组件来实现:队列、过滤器和调度器。
队列是tc中的基本单位,用于存储和管理待传输的数据包。
在网络接口上,可以设置多个队列,每个队列可以配置不同的参数,如优先级、带宽等。
数据包进入队列后,根据配置的规则进行处理和调度。
过滤器用于根据规则匹配数据包,并对其进行过滤和分类。
过滤器可以根据数据包的源IP地址、目标IP地址、协议类型等条件来进行匹配,从而实现对不同流量的分流和控制。
调度器根据队列中数据包的特性和配置的策略,决定数据包的发送顺序和调度方式。
调度器可以根据带宽、延迟、丢包率等参数,采用不同的算法和策略来调度数据包,以满足不同应用的需求。
通过配置队列、过滤器和调度器,可以实现各种网络流量控制和管理策略。
例如,可以设置带宽限制,限制某个应用程序的网络传输速率,防止其占用过多带宽;还可以设置优先级管理,确保重要的数据包优先传输,提高网络服务质量。
除了基本的流量控制和管理功能,Linux tc还提供了一些高级功能,如拥塞控制、流量整形和流量分析等。
拥塞控制用于监测网络拥塞状态,并采取相应措施来避免拥塞的发生;流量整形可以对网络流量进行平滑处理,避免突发流量对网络性能的影响;流量分析可以对网络流量进行统计和分析,以便更好地了解网络状况和进行故障排除。
总结起来,Linux tc是一种强大而灵活的网络流量控制机制,通过队列、过滤器和调度器的协作,可以实现对网络流量的精细控制和管理。
它为网络应用提供了可靠的服务质量保障,使网络传输更加高效和可靠。
TC方案是什么意思引言TC(Traffic Control)指的是流量控制,是一种管理网络流量的技术方案。
在计算机网络中,流量控制是一项重要的任务,用于确保网络资源的合理分配和优化网络性能。
TC方案可以根据不同的需求对流量进行分类、调度和限制,从而实现网络服务质量的管理和优化。
本文将介绍TC方案的基本概念、工作原理以及在实际应用中的意义和使用场景。
TC方案的基本概念流量控制流量控制是指通过对网络流量进行控制,使其不超过网络设备或链路的处理能力。
通过流量控制,可以避免网络拥塞、提高网络的带宽利用率,确保重要的流量得到优先处理,从而提高网络的性能和用户体验。
调度算法调度算法是TC方案中的核心技术之一,用于决定不同流量的优先级和处理策略。
常用的调度算法包括先进先出(FIFO)、最短剩余时间优先(SJF)、最短作业优先(SJS)等。
通过合理选择和配置调度算法,可以实现对不同类型流量的灵活调度和优化。
限制速率限制速率是指通过设置速率上限,限制特定流量的发送速度。
通过限制速率,可以避免某些流量占用过多的带宽资源,确保其他流量能够得到合理的网络资源分配。
限制速率是TC方案中常用的一种流量控制手段。
TC方案的工作原理TC方案主要通过使用Linux内核的Traffic Control (tc)模块来实现。
tc模块是Linux内核自带的一个流量控制工具,提供了一系列的命令和选项,用于配置网络流量的分类、调度和限制。
TC方案的工作原理可以简单描述如下:1.分类流量:根据定义的规则和条件,对网络流量进行分类。
可以根据IP地址、端口号、服务类型等进行分类。
2.调度流量:使用合适的调度算法,对不同类别的流量进行优先级调度,决定其处理顺序和策略。
3.限制速率:根据需要,对特定类别的流量设置速率上限,限制其发送速度。
可以根据需求进行灵活配置。
TC方案的意义和使用场景改善网络性能通过合理使用TC方案,可以改善网络的性能和稳定性。
1 TC原理介绍Input Interface: IIOI: Output InterfaceLinux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制。
Linux流量控制的基本原理如下图所示。
从Input Interface 收到包后,经过流量限制(Ingress Policing)丢弃不符合规定的数据包,由Input De-Multiplexing 进行判断选择:如果包的目的地址是本主机,那么将该包送给上层处理;否则需要进行转发,将包交到Forwarding Block 处理。
Forwarding Block 也接收本主机上层(TCP、UDP 等)产生的包。
它通过查看路由表,决定所处理包的下一跳。
然后,对包进行排列并交给Output Interface。
一般我们只能限制网卡发送的数据包,不能限制网卡接收的数据包,所以我们可以通过改变发送次序来控制传输速率。
Linux流量控制主要是在输出接口排列时进行处理和实现的。
2 TC规则2.1 流量控制方式流量控制包括以下几种方式:2.1.1SHAPING(限制)当流量被限制,它的传输速率就被控制在某个值以下。
限制值可以大大小于有效带宽,这样可以平滑突发数据流量,使网络更为稳定。
shaping(限制)只适用于向外的流量。
2.1.2SCHEDULING(调度)通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。
SCHEDULING(调度)也只适于向外的流量。
2.1.3POLICING(策略)SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。
2.1.4DROPPING(丢弃)如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。
2.2 流量控制处理对象流量的处理由三种对象控制,它们是:qdisc(排队规则)、class(类别)和filter(过滤器)。
TC 使用手册一、原理介绍1、概况在正常的网络包发送过程中,网卡总是对所有数据包一视同仁顺序的发送与接收。
为了对不同的数据包的传输进行一些控制,在linux网络子系统中,网络层和MAC层之间可以有一个队列,能够对数据包进行重新编排、延迟或丢弃。
这就是流量控制(traffic control)。
图(1-1)如图(1-1)所示,每个物理网卡都一对入口队列(Ingress)和出口队列(Egress)。
网卡与上层的数据交互需要经过这两个队列。
队列可以按照数据的来源、服务类型等等规划数据传输的优先级和速率。
2、作用1)服务质量控制(QOS)。
网络资源总是有限的,只要存在抢夺网络资源的情况,就会出现服务质量的要求。
服务质量是相对网络业务而言的,在保证某类业务的服务质量的同时,可能就是在损害其它业务的服务质量。
流量控制(TC)可以按照包中的qos标记或者自定义的规则,对不同种类的包提供不同质量的服务,控制数据发送的优先级。
例如对ssh的数据最高优先级的发送,而对于大量的下载数据低优先级发送。
2)网速限制,带宽分配。
可以限制总的带宽大小,给不同的服务分配带宽或按用户分配带宽等等。
如果要分配带宽,首先得预测整个带宽的速率。
3、注意事项1)流量控制必须处于整个链路最慢的环节才能取得效果。
例如在路由器上做流量控制,路由器的wan和lan的网卡都为100Mbit,而上级的出口ADSL线路才1Mbit的速率,这种情况下就不能以100Mbit来分配带宽和qos,而是得限制为1Mbit的速率,才能取得流量控制的作用。
2)正确的tc配置能够高效的利用带宽,但是错误的配置也可能会导致更加拥塞。
二、队列1、队列简介队列就是包的一个缓冲池,能够规划包的优先级、限制发包速率、阻塞时丢弃包等等。
内核定义了队列的一套操作接口。
现在有很多种队列可以使用,不同的队列底层实现不同,作用也是不相同的。
队列分为无类的队列和分类的队列。
无类的队列:无法再细分成子类,所以对带宽资源的限制也无法再细分。
TC解决方案标题:TC解决方案引言概述:TC(Traffic Control)解决方案是一种用于管理网络流量和优化网络性能的技术方案。
在当今互联网高速发展的时代,网络流量管理变得尤为重要,TC解决方案能够帮助网络管理员更有效地管理网络流量,提高网络性能。
一、流量控制1.1 实时监控网络流量:TC解决方案可以实时监控网络流量,帮助管理员了解网络的实时负载情况,及时调整网络配置。
1.2 限制带宽使用:通过设置带宽限制,可以避免某些应用程序或用户占用过多带宽,影响其他用户的网络体验。
1.3 防止网络拥塞:TC解决方案可以根据网络流量情况进行智能调度,避免网络拥塞的发生,保障网络稳定运行。
二、流量分类2.1 根据应用程序进行流量分类:TC解决方案可以根据应用程序类型对网络流量进行分类,优先保障重要应用程序的流量传输。
2.2 区分不同用户的流量:通过识别不同用户的流量,可以为不同用户分配不同的带宽资源,提高网络的公平性和效率。
2.3 根据服务类型进行流量分类:将不同服务类型的流量进行分类管理,确保关键服务的流量传输优先级。
三、流量优化3.1 压缩数据包:通过压缩数据包的方式,可以减少网络传输的数据量,提高网络传输效率。
3.2 缓存常用数据:将常用的数据缓存到本地,可以减少网络传输的次数,提高数据传输速度。
3.3 优化网络路由:通过优化网络路由,可以缩短数据传输的路径,减少网络延迟,提高网络性能。
四、安全防护4.1 防火墙功能:TC解决方案可以提供防火墙功能,对网络流量进行过滤和检测,保护网络安全。
4.2 攻击防范:通过识别网络中的恶意流量,可以及时防范网络攻击,保护网络安全。
4.3 数据加密:对网络传输的数据进行加密处理,防止数据泄露和窃取,保障数据安全。
五、性能监控5.1 实时性能监控:TC解决方案可以实时监控网络性能指标,帮助管理员及时发现网络问题并进行调整。
5.2 数据报告生成:生成网络性能报告,分析网络流量情况和性能表现,为网络优化提供数据支持。
tc处理的过程以TC处理的过程为标题,写一篇文章:标题:如何进行TC处理概述:TC(Traffic Control)是一种用于网络流量控制和管理的工具,它可以帮助我们实现带宽限制、流量调度和延迟模拟等功能。
本文将介绍如何使用TC进行流量控制的具体步骤和注意事项。
一、安装TC工具我们需要在目标设备上安装TC工具。
TC是Linux内核的一部分,所以在大多数Linux发行版上都已经预装了TC。
如果您的系统没有预装TC,则可以通过包管理器进行安装。
例如,在Debian/Ubuntu系统上,可以使用以下命令进行安装:sudo apt-get install iproute2二、配置网络接口在进行TC处理之前,我们需要先配置网络接口。
您可以使用ifconfig或ip命令查看当前系统上的网络接口。
选择要进行流量控制的网络接口,并确保其状态为UP。
例如,如果要对eth0接口进行流量控制,可以使用以下命令将其设置为UP状态:sudo ifconfig eth0 up三、创建TC策略接下来,我们需要创建TC策略。
TC的配置是通过使用类别(class)、过滤器(filter)和队列(queue)来实现的。
我们可以使用tc命令来创建和管理这些策略。
1. 创建类别:我们需要创建一个类别来定义流量控制规则。
例如,我们可以使用以下命令创建一个名为"myclass"的类别:sudo tc qdisc add dev eth0 root handle 1: htb default 102. 添加过滤器:然后,我们需要添加过滤器来匹配特定的流量。
过滤器可以基于IP 地址、端口号、协议等进行匹配。
例如,我们可以使用以下命令添加一个过滤器:sudo tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 192.168.0.2 flowid 1:103. 配置队列:我们需要配置队列来定义流量的处理方式。
tc命令与iptables规则tc命令与iptables规则是两个非常重要的Linux命令工具,它们在网络管理和安全方面起到了关键作用。
本文将一步一步回答关于这两个主题的问题,从基础知识到实际应用进行详细介绍。
一、什么是tc命令?tc命令是Linux中的一个网络管理工具,全称为Traffic Control,用于控制和配置网络流量。
通过tc命令,可以实现带宽控制、流量整形和优先级设置等功能,从而确保网络资源的有效分配和优化。
1. tc命令的基本语法tc命令的基本语法如下:tc [options] action command [command-options]其中,options是一些可选的参数,action是指定具体的操作(如add、change、del等),command表示要执行的具体操作(如qdisc、class、filter等),command-options是操作相关的选项参数。
2. tc命令中的关键概念在使用tc命令时,有几个关键概念需要了解:- qdisc(Queueing Discipline):队列调度器,用于控制数据包的排队和调度。
常用的qdisc包括pfifo、sfq、htb等。
- class(分类):用于对数据包进行分类和分组。
每个分类可以应用不同的qdisc和过滤规则。
- filter(过滤器):用于根据特定的条件过滤数据包。
可以根据源IP、目标IP、协议、端口等进行过滤。
二、什么是iptables规则?iptables规则是Linux中的一个防火墙工具,用于配置和管理网络包过滤。
通过iptables规则,可以实现网络流量的过滤、转发和NAT等功能,从而保护网络资源的安全。
1. iptables规则的基本语法iptables规则的基本语法如下:iptables -t table_name command [command-options] [match] [target]其中,table_name表示所使用的表,常用的表包括filter、nat、mangle 等;command表示具体要执行的操作,常用的操作包括-A、-D、-I等;command-options是一些选项参数;match是匹配条件,用于指定要匹配的字段和条件;target是要执行的动作,比如ACCEPT、DROP、REJECT 等。
tc qdisc 原理TC(Traffic Control)是Linux系统中的一个网络流量控制工具,通过对网络流量进行管理和调度,可以实现对网络带宽的合理分配和流量控制。
而Qdisc(Queueing Discipline)是TC中的一种队列规则,用于管理和调度网络数据包的排队和发送。
本文将围绕着TC Qdisc的原理展开,介绍其作用、分类、工作原理以及常见的应用场景。
一、TC Qdisc的作用在计算机网络中,当多个主机同时进行数据传输时,往往会出现网络拥塞的情况,导致网络性能下降、延迟增加等问题。
TC Qdisc的作用就是通过对网络数据包进行管理和调度,实现对网络带宽的合理分配和流量控制,从而提高网络的性能和稳定性。
二、TC Qdisc的分类TC Qdisc根据其实现的功能和特点可以分为多种类型,常见的有以下几种:1. pfifo(Priority First In, First Out):按照数据包的到达顺序进行排队和发送,没有对数据包进行任何处理。
适用于对延迟要求较低的应用场景。
2. bfifo(Byte First In, First Out):按照数据包的大小进行排队和发送,较大的数据包会优先发送。
适用于对带宽要求较高的应用场景。
3. sfq(Stochastic Fairness Queueing):采用随机算法对数据包进行排队和发送,实现公平的带宽分配。
适用于对带宽公平分配要求较高的应用场景。
4. tbf(Token Bucket Filter):通过令牌桶算法对数据包进行排队和发送,实现对网络流量的限制和控制。
适用于对网络流量进行严格控制的应用场景。
三、TC Qdisc的工作原理TC Qdisc的工作原理主要包括以下几个步骤:1. 分类(Classification):根据规则将网络数据包进行分类,可以根据源IP地址、目标IP地址、端口号等进行分类。
2. 排队(Queueing):将分类后的数据包按照一定的规则放入相应的队列中,等待发送。
Linux tc流量控制相关笔记一、概念1.qdisc,队列规定(规则)。
管理设备的队列进出队列的算法。
2.class,分类。
存放队列元素,也是根据过滤条件进行分类后存放结果的位置。
创建class时,该class会有一个默认的qdisc子结点,类型为pfifo_fast。
如果该class下再另创建一个qdisc,则原来默认的pfifo_fast qdisc会自动被删除。
如果再将另创建的qdisc删除,则class下会自动恢复默认的qdisc。
3.filter,过滤器。
分类的实施者,决定由哪个class处理数据包。
4.每一个qdisc或class都有一个唯一的标识:handle(句柄)。
格式是:“主号:次号”。
句柄具有接口本地性,不同的网络接口下的qdisc或class可以有相同的句柄。
对于qdisc可省略次号,例如:“1:”等价于“1:0”,次号固定是0。
class不能省略次号。
class的主号码必须和父类的主号码一致。
5.任何class出队列都不会比父类快、不会比parent允许的时间更早。
父类相当于子类的限制条件。
6.class的rate指保证得到的带宽,是一个平均值。
所有子类的rate总和应不大于父类的rate值。
7.删除qdisc后,该qdisc下配置的所有的qdisc、class、filter会全部被删除。
在reboot设备后,所有的配置也会自动被清除。
二、流量控制的步骤1.针对物理设备(例如:eth1)绑定一个qdisc。
2.在qdisc上建立class。
3.为class建立相应的filter,将数据包映射到相应的class进行处理。
配置完成后,可使用tc qdisc/class/filter show dev DEVNAME 命令查看配置的结果。
要测量实际的流量,可通过传输或下载文件进行查看。
linux下可测量流量速率的工具有ifstat,iftop,nethogs,sysstat,iptraf等。
linux中tc的用法一、简介tc(TrafficControl)是Linux中用于网络流量控制的工具,它可以对网络接口、流量门限、路由、QoS等参数进行配置和管理。
通过使用tc,可以实现对网络流量的灵活控制,提高网络性能和可靠性。
二、基本用法1.查看可用命令:在Linux中,可以使用以下命令查看可用的tc 命令:```shelltcqdiscshow```该命令将显示系统中可用的队列管理规则(QoS)。
2.设置流量门限:可以使用以下命令设置网络接口的流量门限:```shelltcqdiscadd<interface>rootnetemdelay<time>```其中,<interface>是要设置流量的网络接口,<time>是延迟时间(以秒为单位)。
该命令将为指定的网络接口添加一个netem队列管理规则,实现流量延迟的控制。
3.查看流量统计:可以使用以下命令查看网络接口的流量统计信息:```shelltcstatistics<interface>```该命令将显示指定网络接口的流量统计数据,包括输入、输出、错误等。
4.禁用流量控制:可以使用以下命令禁用网络接口的流量控制:```shelltcqdiscdel<interface>root```该命令将删除指定网络接口的rootqueue管理规则,取消流量控制。
三、高级用法1.使用class和filter:tc提供了class和filter机制,可以实现对网络流量的分类和过滤。
通过为每个class或filter分配不同的流量门限和QoS参数,可以实现更加精细的流量控制。
2.使用权重和偏移:可以使用权重和偏移来为不同的class或filter分配不同的带宽。
通过调整权重和偏移值,可以实现更加灵活的流量分配策略。
3.使用iptables结合tc:可以将iptables规则与tc命令结合使用,实现更加复杂的网络流量控制。
TC流量控制 (2011-11-19 14:06)标签: 流量tc控制分类:tcTC(流量控制)高手入摘要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 DEV tc filter show dev DEV简介Tc用于Linux内核的流量控制。
流量控制包括以下几种方式:SHAPING(限制)当流量被限制,它的传输速率就被控制在某个值以下。
限制值可以大大小于有效带宽,这样可以平滑突发数据流量,使网络更为稳定。
shaping(限制)只适用于向外的流量。
SCHEDULING(调度)通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。
SCHEDULING(调度)也只适于向外的流量。
POLICING(策略)SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。
DROPPING(丢弃)如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。
流量的处理由三种对象控制,它们是:qdisc(排队规则)、class(类别)和filter(过滤器)。
QDISC(排队规则)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)里面的。
redred是Random Early Detection(随机早期探测)的简写。
如果使用这种QDISC,当带宽的占用接近于规定的带宽时,系统会随机地丢弃一些数据包。
它非常适合高带宽应用。
sfqsfq是Stochastic Fairness Queueing的简写。
它按照会话(session--对应于每个TCP连接或者UDP流)为流量进行排序,然后循环发送每个会话的数据包。
tbftbf是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包括:CBQCBQ是Class Based Queueing(基于类别排队)的缩写。
它实现了一个丰富的连接共享类别结构,既有限制(shaping)带宽的能力,也具有带宽优先级管理的能力。
带宽限制是通过计算连接的空闲时间完成的。
空闲时间的计算标准是数据包离队事件的频率和下层连接(数据链路层)的带宽。
HTBHTB是Hierarchy Token Bucket的缩写。
通过在实践基础上的改进,它实现了一个丰富的连接共享类别体系。
使用HTB可以很容易地保证每个类别的带宽,虽然它也允许特定的类可以突破带宽上限,占用别的类的带宽。
HTB可以通过TBF(Token Bucket Filter)实现带宽限制,也能够划分类别的优先级。
PRIOPRIO QDisc不能限制带宽,因为属于不同类别的数据包是顺序离队的。
使用PRIO QDisc可以很容易对流量进行优先级管理,只有属于高优先级类别的数据包全部发送完毕,才会发送属于低优先级类别的数据包。
为了方便管理,需要使用 iptables或者ipchains处理数据包的服务类型(Type Of Service,ToS)。
操作原理类(Class)组成一个树,每个类都只有一个父类,而一个类可以有多个子类。
某些QDisc(例如:CBQ和HTB)允许在运行时动态添加类,而其它的QDisc(例如:PRIO)不允许动态建立类。
允许动态添加类的QDisc可以有零个或者多个子类,由它们为数据包排队。
此外,每个类都有一个叶子QDisc,默认情况下,这个叶子QDisc使用pfifo 的方式排队,我们也可以使用其它类型的QDisc代替这个默认的QDisc。
而且,这个叶子叶子QDisc有可以分类,不过每个子类只能有一个叶子QDisc。
当一个数据包进入一个分类QDisc,它会被归入某个子类。
我们可以使用以下三种方式为数据包归类,不过不是所有的QDisc都能够使用这三种方式。
tc过滤器(tc filter)如果过滤器附属于一个类,相关的指令就会对它们进行查询。
过滤器能够匹配数据包头所有的域,也可以匹配由ipchains或者iptables做的标记。
服务类型(Type of Service)某些QDisc有基于服务类型(Type of Service,ToS)的内置的规则为数据包分类。
skb->priority用户空间的应用程序可以使用SO_PRIORITY选项在skb->priority域设置一个类的ID。
树的每个节点都可以有自己的过滤器,但是高层的过滤器也可以直接用于其子类。
如果数据包没有被成功归类,就会被排到这个类的叶子QDisc的队中。
相关细节在各个QDisc的手册页中。
命名规则所有的QDisc、类和过滤器都有ID。
ID可以手工设置,也可以有内核自动分配。
ID由一个主序列号和一个从序列号组成,两个数字用一个冒号分开。
QDISC一个QDisc会被分配一个主序列号,叫做句柄(handle),然后把从序列号作为类的命名空间。
句柄采用象10:一样的表达方式。
习惯上,需要为有子类的QDisc显式地分配一个句柄。
类(CLASS)在同一个QDisc里面的类分享这个QDisc的主序列号,但是每个类都有自己的从序列号,叫做类识别符(classid)。
类识别符只与父QDisc有关,和父类无关。
类的命名习惯和QDisc的相同。
过滤器(FILTER)过滤器的ID有三部分,只有在对过滤器进行散列组织才会用到。
详情请参考tc-filters手册页。
单位tc命令的所有参数都可以使用浮点数,可能会涉及到以下计数单位。
带宽或者流速单位:kbps千字节/秒mbps兆字节/秒kbitKBits/秒mbitMBits/秒bps或者一个无单位数字字节数/秒数据的数量单位:kb或者k千字节mb或者m兆字节mbit兆bitkbit千bitb或者一个无单位数字字节数时间的计量单位:s、sec或者secs秒ms、msec或者msecs分钟us、usec、usecs或者一个无单位数字微秒TC命令tc可以使用以下命令对QDisc、类和过滤器进行操作:add在一个节点里加入一个QDisc、类或者过滤器。
添加时,需要传递一个祖先作为参数,传递参数时既可以使用ID也可以直接传递设备的根。
如果要建立一个 QDisc或者过滤器,可以使用句柄(handle)来命名;如果要建立一个类,可以使用类识别符(classid)来命名。
remove删除有某个句柄(handle)指定的QDisc,根QDisc(root)也可以删除。
被删除QDisc上的所有子类以及附属于各个类的过滤器都会被自动删除。
change以替代的方式修改某些条目。
除了句柄(handle)和祖先不能修改以外,change命令的语法和add命令相同。
换句话说,change命令不能一我配置了一些控制,但是发现没有起作用,不知何解。
望高手帮忙!!我的配置如下:(注:我用了Iptables的NAT ,不知有无关系)[root@it rinehart]# tc -s qdisc ls dev eth0qdisc cbq 1: rate 100Mbit (bounded,isolated) prio no-transmitSent 7961222715 bytes 10105696 pkts (dropped 0, overlimits 0)borrowed 0 overactions 0 avgidle 62 undertime 0[root@it rinehart]# tc -s class ls dev eth0class cbq 1: root rate 100Mbit (bounded,isolated) prio no-transmit Sent 7963827499 bytes 10109465 pkts (dropped 0, overlimits 0)borrowed 0 overactions 0 avgidle 62 undertime 0class cbq 1:1 parent 1: rate 32Kbit prio no-transmitSent 0 bytes 0 pkts (dropped 0, overlimits 0)borrowed 0 overactions 0 avgidle 4.23502e+06 undertime 0class cbq 1:2 parent 1:1 rate 10Kbit (bounded) prio no-transmitSent 0 bytes 0 pkts (dropped 0, overlimits 0)borrowed 0 overactions 0 avgidle 1.81634e+07 undertime 0[root@it rinehart]# ip route0.0.0.0 via 172.16.42.99 dev eth0 realm 2172.16.22.227 via 172.16.42.99 dev eth0 realm 2172.16.22.225 via 172.16.42.99 dev eth0 realm 2192.168.1.0/24 via 172.16.254.254 dev eth0192.168.32.0/24 via 192.168.0.200 dev eth1172.16.0.0/16 dev eth0 scope link169.254.0.0/16 dev eth1 scope link192.168.0.0/16 dev eth1 scope link127.0.0.0/8 dev lo scope linkdefault via 192.168.0.200 dev eth1[root@it rinehart]# tc -s filter ls dev eth0filter parent 1: protocol ip pref 100 routefilter parent 1: protocol ip pref 100 route fh 0xffff0001 flowid 1:1 to 1filter parent 1: protocol ip pref 100 route fh 0xffff0002 flowid 1:4 to 2[root@it rinehart]# iptables -t nat -L -nChain PREROUTING (policy ACCEPT)target prot opt source destinationChain POSTROUTING (policy ACCEPT)target prot opt source destinationMASQUERADE all -- 172.16.22.226 0.0.0.0/0MASQUERADE all -- 172.16.22.225 0.0.0.0/0MASQUERADE all -- 172.16.22.227 0.0.0.0/0MASQUERADE all -- 172.16.22.223 0.0.0.0/0MASQUERADE all -- 172.16.22.221 0.0.0.0/0MASQUERADE all -- 172.16.6.80 0.0.0.0/0TC(流量控制)高手入我配置TC的参考文献如下:Linux从kernel 2.1.105开始支持QOS,不过,需要重新编译内核。