第 33 章 Linux 流量控制
Linux 提供管理和操作数据包传输的工具。Linux 流量控制(TC)子系统帮助进行策略、分类、控制以及调度网络流量。TC 还可以通过使用过滤器和动作在分类过程中利用数据包内容分栏。TC 子系统通过使用排队规则(qdisc
)这个 TC 架构的基本元素来达到此目的。
调度机制在进入或退出不同的队列前确定或者重新安排数据包。最常见的调度程序是先入先出(FIFO)调度程序。您可以使用 tc
工具临时执行 qdiscs
操作,也可以使用 NetworkManager 永久执行操作。
在 Red Hat Enterprise Linux 中,您可以使用各种方法配置默认的排队规则来管理网络接口上的流量。
33.1. 排队规则概述
排队规则(qdiscs
)帮助排队,之后通过网络接口调度流量传输。qdisc
有两个操作:
- 排队请求,以便在以后传输时对数据包进行排队
- 出队请求,以便可以选择其中一个排队的数据包进行即时传输。
每个 qdisc
都有一个 16 位十六进制标识数字,称为 句柄
,带有一个附加的冒号,如 1:
或 abcd:
这个数字被称为 qdisc
主号码。如果 qdisc
有类,则标识符是由两个数字组成的对,主号码在次要号码之前,即 <major>:<minor>
,例如 abcd:1
。次要号码的编号方案取决于 qdisc
类型。有时,编号是系统化的,其中第一类的 ID 为 < <major>:1
,第二类的 ID 为 <major>:2
,等等。一些 qdiscs
允许用户在创建类时随机设置类的次要号码。
- 类
qdiscs
存在不同类型的
qdiscs
,帮助向和从网络接口传输数据包。您可以使用根、父或子类配置qdiscs
。子对象可以被附加的位置称为类。qdisc
中的类是灵活的,始终包含多个子类或一个子类qdisc
。不禁止包含类qdisc
本身的类,这有助于实现复杂的流量控制场景。类
qdiscs
本身不存储任何数据包。相反,它们根据特定于qdisc
的标准,将排队和出队请求传到它们其中的一个子类。最后,这个递归数据包传递最终结束保存数据包的位置(在出现排队时从中提取)。- 无类别
qdiscs
-
有些
qdiscs
不包含子类,它们称为无类别qdiscs
。与类qdiscs
相比,无类别qdiscs
需要较少的自定义。通常情况下,将它们附加到接口就足够了。
其他资源
-
您系统上的
tc (8)
和tc-actions (8)
手册页