tclinux下流量控制工具详细说明及应用实例.pdf
一、TC的安装
TC是linux自带的模块,一般情况下不需要另行安装,可以用mantc查看tc相关命令细节,tc要求内核2.4.18以
上。
注意,64位机器上,先执行下面命令:
ln-s/usr/lib64/tc//usr/lib/tc
二、TC原理介绍
Linux操作系统中的流量控制器TC(TrafficControl)用于Linux内核的流量控制,它利用队列规定建立处理
数据包的队列,并定义队列中的数据包被发送的方式,从而实现对流量的控制。TC模块实现流量控制功能使用的队列
规定分为两类,一类是无类队列规定,另一类是分类队列规定。无类队列规定相对简单,而分类队列规定则引出了分
类和过滤器等概念,使其流量控制功能增强。
无类队列规定是对进入网络设备(网卡)的数据流不加区分统一对待的队列规定。使用无类队列规定形成的队列能
够接受数据包以及重新编排、延迟或丢弃数据包。这类队列规定形成的队列可以对整个网络设备(网卡)的流量进行
整形,但不能细分各种情况…。常用的无类队列规定主要有pfifo_fast(先进现出)、TBF(令牌桶过滤器)、
SFQ(随机公平队列)、ID(前向随机丢包)等等。这类队列规定使用的流量整形主要是排序、限速和丢包。
分类队列规定是对进入网络设备的数据包根据不同的需求以分类的方式区分对待的队列规定。数据包进入一个分
类的队列后,它就需要被送到某一个类中,也就是说需要对数据包做分类处理。对数据包进行分类的工具是过滤器,
过滤器会返回一个决定,队列规定就根据这个决定把数据包送入相应的类进行排队。每个子类都可以再次使用它们的
过滤器进行进一步的分类。直到不需要进一步分类时,数据包才进入该类包含的队列排队。除了能够包含其它队列规
定之外,绝大多数分类的队列规定还能够对流量进行整形。这对于需要同时进行调度(如使用SFQ)和流量控制
的场合非常有用。
Linux流量控制的基本原理如下图所示。
接收包从输入接口(InputInterface)进来后,经过流量限制(IngressPolicing)丢弃不符合规定的数据包,
由输入多路分配器(InputDe-Multiplexing)进行判断选择:如果接收包的目的是本主机,那么将该包送给上层处
理;否则需要进行转发,将接收包交到转发块(ForwardingBlock)处理。转发块同时也接收本主机上层(TCP、
UDP等)产生的包。转发块通过查看路由表,决定所处理包的下一跳。然后,对包进行排列以便将它们传送到输出接口
(OutputInterface)。一般我们只能限制网卡发送的数据包,不能限制网卡接收的数据包,所以我们可以通过改变发
送次序来控制传输速率。Linux流量控制主要是在输出接口排列时进行处理的。
三、TC规则
3.1、流量控制方式
流量控制包括以下几种方式:
SHAPING(限制)
当流量被限制,它的传输速率就被控制在某个值以下。限制值可以大大小于有效带宽,这样可以平滑突发数
据流量,使网络更为稳定。shaping(限制)只适用于向外的流量。
SCHEDULING(调度)
通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。SCHEDULING(调度)也只适于向外的流
量。
POLICING(策略)
SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。