有一些通用规则可以简化对 Linux 流量控制的学习。Linux 下的流量控制结构是相同的,无论初始配置是使用 tcng 还是 tc 完成的。
任何执行整形功能的路由器都应该是链路上的瓶颈,并且应该在略低于最大可用链路带宽的情况下进行整形。这可以防止队列在其他路由器中形成,从而为整形设备提供最大的数据包延迟/延迟控制。
设备只能对其传输的流量进行整形 [1]。因为流量已经在输入接口上接收,所以无法对流量进行整形。解决此问题的传统方案是入口策略器。
每个接口都必须有一个 qdisc。当没有其他 qdisc 显式附加到接口时,将使用默认 qdisc(pfifo_fast qdisc)。
添加到没有子类的接口的 classful qdiscs 之一通常只会消耗 CPU 而没有任何好处。
任何新创建的类都包含一个 FIFO。这个 qdisc 可以显式地替换为任何其他 qdisc。如果子类附加到此类,则 FIFO qdisc 将被隐式删除。
直接附加到根qdisc 的类可以用于模拟虚拟电路。
一个 filter 可以附加到类或 classful qdiscs 之一。
HTB 是在具有已知带宽的链路上使用的理想 qdisc,因为最内层(根层)类可以设置为给定链路上可用的最大带宽。流可以进一步细分为子类,从而允许为特定类型的流量保证带宽,或者允许优先处理特定类型的流量。
理论上,PRIO 调度器是具有可变带宽链路的理想选择,因为它是一个工作保持型 qdisc(这意味着它不提供 整形)。在具有未知或波动带宽的链路的情况下,PRIO 调度器只是优先将最高优先级频带中的任何可用数据包出队,然后才处理较低优先级的队列。
[1] | 实际上,中间排队设备 (IMQ) 模拟了一个输出设备,流量控制结构可以附加到该设备上。这种巧妙的解决方案允许网络设备以与出口流量相同的方式整形入口流量。尽管与规则明显矛盾,但 IMQ 在内核中显示为一个设备。因此,并没有违反规则,而是对该规则的一种巧妙的重新解释。 |