许多发行版提供的内核都以模块化或单内核方式支持流量控制(服务质量)。自定义内核可能尚未提供对所需功能的支持(模块化与否)。如果没有,这是一个非常简短的所需内核选项列表。
建议几乎或没有内核编译经验的用户参考 Kernel HOWTO。经验丰富的内核编译人员在阅读更多关于流量控制和规划的内容后,应该能够确定以下哪些选项适用于所需的配置。
示例 1. 内核编译选项 [1]
# # QoS and/or fair queueing # CONFIG_NET_SCHED=y CONFIG_NET_SCH_CBQ=m CONFIG_NET_SCH_HTB=m CONFIG_NET_SCH_CSZ=m CONFIG_NET_SCH_PRIO=m CONFIG_NET_SCH_RED=m CONFIG_NET_SCH_SFQ=m CONFIG_NET_SCH_TEQL=m CONFIG_NET_SCH_TBF=m CONFIG_NET_SCH_GRED=m CONFIG_NET_SCH_DSMARK=m CONFIG_NET_SCH_INGRESS=m CONFIG_NET_QOS=y CONFIG_NET_ESTIMATOR=y CONFIG_NET_CLS=y CONFIG_NET_CLS_TCINDEX=m CONFIG_NET_CLS_ROUTE4=m CONFIG_NET_CLS_ROUTE=y CONFIG_NET_CLS_FW=m CONFIG_NET_CLS_U32=m CONFIG_NET_CLS_RSVP=m CONFIG_NET_CLS_RSVP6=m CONFIG_NET_CLS_POLICE=y |
使用上述选项集编译的内核将为本文档中讨论的几乎所有内容提供模块化支持。用户可能需要在使用给定功能之前执行 modprobe module。再次强调,对于感到困惑的用户,建议参考 Kernel HOWTO,因为本文档无法充分解答有关 Linux 内核使用的问题。
iproute2 是一套命令行实用程序,用于操作机器上 IP 网络配置的内核结构。有关这些工具的技术文档,请参阅 iproute2 documentation,更详细的讨论请参阅 linux-ip.net 上的文档。iproute2 包中的工具中,二进制文件 tc 是唯一用于流量控制的工具。本 HOWTO 将忽略该套件中的其他工具。
由于它与内核交互以指导流量控制结构的创建、删除和修改,因此 tc 二进制文件需要编译时支持您希望使用的所有 qdisc。特别地,上游 iproute2 包尚不支持 HTB qdisc。有关更多信息,请参阅 第 7.1 节。
tc 工具执行支持流量控制所需的内核结构的所有配置。由于其用途广泛,因此命令语法(充其量)可以被描述为神秘难懂。该实用程序将其第一个非选项参数作为三个 Linux 流量控制组件之一:qdisc、class 或 filter。
示例 2. tc 命令用法
[root@leander]# tc Usage: tc [ OPTIONS ] OBJECT { COMMAND | help } where OBJECT := { qdisc | class | filter } OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] } |
每个对象都接受更多和不同的选项,并且将在下面进行不完整的描述和记录。以下示例中的提示旨在介绍 tc 命令行语法的复杂性。有关更多示例,请参阅 LARTC HOWTO。为了更好地理解,请查阅内核和 iproute2 代码。
以上是将队列规则添加到设备的最简单 tc 实用程序用法。这是一个使用 tc 将类添加到现有父类的示例。
示例 4. tc class
[root@leander]# tc class add \ |
示例 5. tc filter
[root@leander]# tc filter add \ |
如上所示,即使对于这些示例所示的简单操作,tc 命令行实用程序也具有神秘而复杂的语法。读者应该不会感到惊讶,因为存在一种更简单的方式来配置 Linux 流量控制。请参阅下一节,第 5.3 节。
FIXME;赞扬 tcng。另请参阅 Traffic Control using tcng and HTB HOWTO 和 tcng documentation。
下一代流量控制(以下简称 tcng)提供了 Linux 下流量控制的所有功能,但只有百分之二十的麻烦。
[1] | 此示例中列出的选项取自 2.4.20 内核源代码树。确切的选项可能因内核版本而略有不同,具体取决于补丁和新的调度程序和分类器。 |