3. 流量控制中的概念

3.1. 整形

整形就是流量控制,把数据包的发送速率控制在一个固定的水平以下。

整形会控制队列中数据包的发送速率,使其保持在一个固定的值以下。这是最常用的流量控制手段。由于整形通过延迟数据包的发送来控制数据包发送速率,故整形机制是非工作保存的。“非工作保存”可以理解为:系统必须进行一些操作来延迟数据包的发送。

反过来说,一种非工作保存的队列是可以进行流量整形的,而工作保存的队列(参考 PRIO)不能进行流量整形,因为工作保存队列无法延迟发送数据包。

流量整形能将网络流量限制在一个固定的速率下,通常以位/秒或字节/秒作为衡量单位。但这也有副作用,那就是突发的数据传输也会被限制在一个较低的速率下。 [4]. 流量整形的好处之一是可以控制数据包的延迟时间。在流量整形中,通常会使用令牌桶机制来实现整形。 查看 第 2.7 节 “令牌桶” 以了解更多有关令牌桶的信息.

3.2. 调度

一个调度器会对将要发送的数据包顺序进行排列或重排。

对队列中对数据包顺序进行排列或重排就叫做调度。最常见的调度器是FIFO(先入先出队列)。由于数据包必须按顺序出队,因此队列实际上就是一个调度器。

对于不同的网络环境,我们可以使用不同的调度器。一个公平队列算法(参考SFQ)能防止一个客户端或一个数据流占用过多的带宽。一个循环算法(参考WRR)可以让各个客户端或数据流都有平等的使用网络的机会。还有一些更复杂的算法可用于防止骨干网流量过载,或者是对一些常见算法的改进。

3.3. 分类

分类器能把不同类型的网络流量划分到不同的队列中去。

把数据包按照不同类型进行划分叫做分类。通常我们只对上行流量进行分类。在路由器接收、路由并转发一个数据包的时候,网络设备可以以几种不同的方式给数据包进行分类。其中一种方式是标记数据包。标记数据包的操作可以在一个网络中由管理员进行设置,也有可能在数据包经过每一跳时发生。

Linux允许数据包通过一系列的流量控制结构,期间允许用户使用决策器对数据包进行分类(参考第 4.3 节 “过滤器第 4.5 节 “决策器”)。

3.4. 策略

决策器能计算并限制某个特定队列的流量。

在流量控制中使用决策器来控制流量是非常简单的。决策器通常会应用于网络边界上,某个节点使用的流量不会超过分配给它的流量。当网络流量在预设值以下时,决策器什么都不会做。但当网络流量超过预设值时,决策器就开始发挥作用,它能将流量速率控制在一个固定的水平之下。最不近人情的操作是即使在数据包能够继续分类的情况下依旧直接将其丢弃

决策器只会区别对待两种情况,分别是入队数据包速率高于或低于预定速率。当入队速率低于预设值时,决策器就会允许数据包入队。当入队速率高于预设值时,决策器就执行其他操作(丢包或重新分类)。虽然决策器内部使用令牌桶来计算速率,但它并不像shaping那样会延迟数据包的发送。

3.5. 丢弃

丢弃一个数据包,一个数据流或一个分类下的数据包,都可以叫做丢弃。

丢弃一个数据包就叫做丢包。

3.6. 标记

标记是一种对数据包进行一些修改的操作。

[注意]注意
这里说的标记不是fwmarkiptables,$ipt-mark;,ipchains以及--mark都只修改数据包的元数据,而不修改数据包本身。

流量控制中的标记操作会给数据包加上一个DSCP,接下来在由一个管理员控制的一个网络下的其他路由器上将会使用这个标记。



[4] 在后面的内容中,我们会看到如何使用HTB来消除这种副作用。