8. 规则、指南和方法

8.1. Linux 流量控制的通用规则

有一些通用规则可以简化对 Linux 流量控制的学习。Linux 下的流量控制结构是相同的,无论初始配置是使用 tcng 还是 tc 完成的。

8.2. 处理具有已知带宽的链路

HTB 是在具有已知带宽的链路上使用的理想 qdisc,因为最内层(根层)类可以设置为给定链路上可用的最大带宽。流可以进一步细分为子类,从而允许为特定类型的流量保证带宽,或者允许优先处理特定类型的流量。

8.3. 处理具有可变(或未知)带宽的链路

理论上,PRIO 调度器是具有可变带宽链路的理想选择,因为它是一个工作保持型 qdisc(这意味着它不提供 整形)。在具有未知或波动带宽的链路的情况下,PRIO 调度器只是优先将最高优先级频带中的任何可用数据包出队,然后才处理较低优先级的队列。

8.4. 基于流的带宽共享/拆分

在众多网络带宽竞争类型中,这是一般情况下较容易解决的竞争类型之一。通过使用 SFQ qdisc,特定队列中的流量可以分离为多个流,每个流都将在(该队列内)得到公平的服务。行为良好的应用程序(和用户)会发现,使用 SFQ 和 ESFQ 足以满足大多数共享需求。

这些公平队列算法的致命弱点是行为不端的用户或应用程序,它们同时打开许多连接(例如,eMule、eDonkey、Kazaa)。通过创建大量单独的流,应用程序可以支配公平队列算法中的槽位。换句话说,公平队列算法不知道单个应用程序正在生成大多数流,因此无法惩罚用户。需要其他方法。

8.5. 基于 IP 的带宽共享/拆分

对于许多管理员来说,这是在其用户之间分配带宽的理想方法。不幸的是,没有简单的解决方案,并且随着共享网络链路的机器数量的增加,它变得越来越复杂。

为了在N个 IP 地址之间公平地分配带宽,必须有N个类。

注释

[1]

实际上,中间排队设备 (IMQ) 模拟了一个输出设备,流量控制结构可以附加到该设备上。这种巧妙的解决方案允许网络设备以与出口流量相同的方式整形入口流量。尽管与规则明显矛盾,但 IMQ 在内核中显示为一个设备。因此,并没有违反规则,而是对该规则的一种巧妙的重新解释。