整形器延迟数据包以符合期望的速率。
整形是一种机制,通过这种机制,数据包在输出队列中传输之前被延迟,以符合期望的输出速率。这是寻求带宽控制解决方案的用户最常见的需求之一。作为流量控制解决方案的一部分,延迟数据包的行为使得每种整形机制都成为一种非工作保持机制,大致意思是:“需要工作才能延迟数据包。”
反过来看,非工作保持排队机制正在执行整形功能。工作保持排队机制(参见 PRIO)不能延迟数据包。
整形器尝试限制或定量分配流量,以满足但不超过配置的速率(通常以每秒数据包数或每秒比特/字节数衡量)。作为副作用,整形器可以平滑突发流量 [1]。带宽整形的一个优点是能够控制数据包的延迟。整形到特定速率的底层机制通常是令牌桶机制。有关令牌和桶的更多详细信息,另请参见 第 2.7 节。
调度器排列和/或重新排列数据包以进行输出。
调度是一种机制,通过这种机制,数据包在特定队列的输入和输出之间被排列(或重新排列)。最常见的调度器是 FIFO(先进先出)调度器。从更宏观的角度来看,输出队列上的任何一组流量控制机制都可以被视为调度器,因为数据包是为了输出而排列的。
其他通用调度机制尝试补偿各种网络状况。公平排队算法(参见 SFQ)尝试防止任何单个客户端或流独占网络使用。轮询算法(参见 WRR)让每个流或客户端轮流出队数据包。其他复杂的调度算法尝试防止骨干网过载(参见 GRED)或改进其他调度机制(参见 ESFQ)。
分类器将流量排序或分离到队列中。
分类是一种机制,通过这种机制,数据包被分离以进行不同的处理,可能是不同的输出队列。在接受、路由和传输数据包的过程中,网络设备可以以多种不同的方式对数据包进行分类。分类可以包括标记数据包,这通常发生在单个管理控制下的网络边界上,或者分类可以单独发生在每个跃点上。
Linux 模型(参见 第 4.3 节)允许数据包在流量控制结构中跨一系列分类器级联,并与策略器结合进行分类(另请参见 第 4.5 节)。
[1] | 这种平滑效果并非总是理想的,因此 HTB 参数具有 burst 和 cburst。 |