3. 传统流量控制要素

3.1. 整形 (Shaping)

整形器延迟数据包以符合期望的速率。

整形是一种机制,通过这种机制,数据包在输出队列中传输之前被延迟,以符合期望的输出速率。这是寻求带宽控制解决方案的用户最常见的需求之一。作为流量控制解决方案的一部分,延迟数据包的行为使得每种整形机制都成为一种非工作保持机制,大致意思是:“需要工作才能延迟数据包。”

反过来看,非工作保持排队机制正在执行整形功能。工作保持排队机制(参见 PRIO)不能延迟数据包。

整形器尝试限制或定量分配流量,以满足但不超过配置的速率(通常以每秒数据包数或每秒比特/字节数衡量)。作为副作用,整形器可以平滑突发流量 [1]。带宽整形的一个优点是能够控制数据包的延迟。整形到特定速率的底层机制通常是令牌桶机制。有关令牌和桶的更多详细信息,另请参见 第 2.7 节

3.2. 调度 (Scheduling)

调度器排列和/或重新排列数据包以进行输出。

调度是一种机制,通过这种机制,数据包在特定队列的输入和输出之间被排列(或重新排列)。最常见的调度器是 FIFO(先进先出)调度器。从更宏观的角度来看,输出队列上的任何一组流量控制机制都可以被视为调度器,因为数据包是为了输出而排列的。

其他通用调度机制尝试补偿各种网络状况。公平排队算法(参见 SFQ)尝试防止任何单个客户端或流独占网络使用。轮询算法(参见 WRR)让每个流或客户端轮流出队数据包。其他复杂的调度算法尝试防止骨干网过载(参见 GRED)或改进其他调度机制(参见 ESFQ)。

3.3. 分类 (Classifying)

分类器将流量排序或分离到队列中。

分类是一种机制,通过这种机制,数据包被分离以进行不同的处理,可能是不同的输出队列。在接受、路由和传输数据包的过程中,网络设备可以以多种不同的方式对数据包进行分类。分类可以包括标记数据包,这通常发生在单个管理控制下的网络边界上,或者分类可以单独发生在每个跃点上。

Linux 模型(参见 第 4.3 节)允许数据包在流量控制结构中跨一系列分类器级联,并与策略器结合进行分类(另请参见 第 4.5 节)。

3.4. 策略 (Policing)

策略器测量和限制特定队列中的流量。

策略作为流量控制的一个要素,仅仅是一种可以限制流量的机制。策略最常用于网络边界,以确保对等方没有消耗超过其分配的带宽。策略器将接受达到一定速率的流量,然后对超过此速率的流量执行操作。一个相当严厉的解决方案是丢弃流量,尽管流量可以被重新分类而不是被丢弃。

策略器是关于流量进入队列的速率是否超过给定速率的“是/否”问题。如果数据包即将以低于给定速率进入队列,则采取一种操作(允许入队)。如果数据包即将以高于给定速率进入队列,则采取另一种操作。虽然策略器在内部使用令牌桶机制,但它不具备像整形机制那样延迟数据包的能力。

3.5. 丢弃 (Dropping)

丢弃会丢弃整个数据包、流或分类。

丢弃数据包是一种丢弃数据包的机制。

3.6. 标记 (Marking)

标记是一种改变数据包的机制。

Note这不是fwmarkiptables目标MARKipchains--mark用于修改数据包元数据,而不是数据包本身。

流量控制标记机制在数据包本身上安装 DSCP,然后由管理域内的其他路由器使用和遵守(通常用于 DiffServ)。

注释

[1]

这种平滑效果并非总是理想的,因此 HTB 参数具有 burst 和 cburst。