Linux下一代流量控制-tcng
2024-11-07 14:18:49 阿炯
iproute2是一个Linux中的原生命令行工具套件,可以用于管理一台机器上与IP网络配置有关的内核结构。如果要查看这些工具技术文档,可以参阅iproute2文档,如果要了解更具探讨性的内容,请参阅linux-ip.net上的文档。在iproute2工具包中,二进制的tc是唯一用于流量控制的工具。
由于tc需要与内核交互来创建,删除和修改流量控制结构,因此在编译tc时需要支持所有期望的qdisc。实际上,在iproute2上游包中还不支持HTB qdisc。
tc工具会执行支持流量控制所需要的所有内核结构配置。由于它的用法多种多样,其命令语法也是晦涩难懂的。该工具将三个Linux流量控制组件(qdisc、class或filter)中的一个作为其第一个必选参数。其命令的用法如下:
Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }
where OBJECT := { qdisc | class | filter }
OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] }
每个对象都可以接收其他不同的选项,更多用法可以参见 LARTC HOWTO。如果要更好地了解tc,可以参阅内核和iproute2源码。
tcng:下一代流量控制
参见 Traffic Control using tcng and HTB HOWTO 以及 tcng 文档。
下一代流量控制(tcng)为Linux提供了所有流量控制的能力。它另一个重要目标是从实际实现中充分抽象配置过程,以便不同类型的实现可以使用相同的系统进行配置。例如,tcng可以在Linux内核中配置“旧的”基于软件的流量控制,也可以在Bivio Networks平台上配置QoS,后者广泛地基于硬件加速。其特点如下:
1.创建更加用户友好的配置语言
2.提供与网络管理直接交互的接口
3.允许硬件加速器的无缝集成
该代码由两个主要部分组成,交通控制编译器tcng和流量控制模拟器tcsim。下面将对两者进行更详细的描述。由于tcng和tcsim共享许多支持文件(例如整个回归测试系统),它们都包含在一个名为tcng的包中。
tcng
tcng将配置脚本转换成多种用于配置流量控制子系统的输出格式。主要目标是:
1.创建一种简洁的配置语言;
2.允许添加更适合程序使用的输入语言,例如XML;
3.不仅使用现有的内核代码实现流量控制,还可能使用定制的模块,甚至硬件加速器。
tcng从脚本或程序中获取输入,调用适当的输入解析器将配置数据转换为公共的内部数据结构,然后调用一个或多个输出生成器向相应的输出处理器发出命令。
输出处理器将来自tcng的输出转换为底层组件可以理解的动作,例如,tc通过netlink接口发送配置消息,而gcc构建一个定制的可加载内核模块,一个tc模块,加上激活内核模块所需的tc命令。
tcsim
tcsim用于在非常高的细节级别上模拟Linux流量控制的行为。这主要用于以下目的:
1.验证由tng生成的配置
2.配置的开发
3.流量控制部件的测试
tcsim直接支持使用旧的配置语言进行配置,它通过自动调用tcng并集成其输出来支持新语言。
它将来自Linux内核的原始流量控制代码与配置实用程序tc的用户空间代码结合起来,并添加了用于两者之间通信的框架,以及一个事件驱动的仿真引擎。
生成的程序完全在用户空间中运行,但执行的代码与“真正的”系统几乎完全相同(它甚至模仿可加载的内核模块),给出的结果比更通用的模拟器(例如ns-2)要准确得多。
最新版本:10b
v10b于2004年10月发布。
项目主页:https://tcng.sourceforge.net/
由于tc需要与内核交互来创建,删除和修改流量控制结构,因此在编译tc时需要支持所有期望的qdisc。实际上,在iproute2上游包中还不支持HTB qdisc。
tc工具会执行支持流量控制所需要的所有内核结构配置。由于它的用法多种多样,其命令语法也是晦涩难懂的。该工具将三个Linux流量控制组件(qdisc、class或filter)中的一个作为其第一个必选参数。其命令的用法如下:
Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }
where OBJECT := { qdisc | class | filter }
OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] }
每个对象都可以接收其他不同的选项,更多用法可以参见 LARTC HOWTO。如果要更好地了解tc,可以参阅内核和iproute2源码。
tcng:下一代流量控制
参见 Traffic Control using tcng and HTB HOWTO 以及 tcng 文档。
下一代流量控制(tcng)为Linux提供了所有流量控制的能力。它另一个重要目标是从实际实现中充分抽象配置过程,以便不同类型的实现可以使用相同的系统进行配置。例如,tcng可以在Linux内核中配置“旧的”基于软件的流量控制,也可以在Bivio Networks平台上配置QoS,后者广泛地基于硬件加速。其特点如下:
1.创建更加用户友好的配置语言
2.提供与网络管理直接交互的接口
3.允许硬件加速器的无缝集成
该代码由两个主要部分组成,交通控制编译器tcng和流量控制模拟器tcsim。下面将对两者进行更详细的描述。由于tcng和tcsim共享许多支持文件(例如整个回归测试系统),它们都包含在一个名为tcng的包中。
tcng
tcng将配置脚本转换成多种用于配置流量控制子系统的输出格式。主要目标是:
1.创建一种简洁的配置语言;
2.允许添加更适合程序使用的输入语言,例如XML;
3.不仅使用现有的内核代码实现流量控制,还可能使用定制的模块,甚至硬件加速器。
tcng从脚本或程序中获取输入,调用适当的输入解析器将配置数据转换为公共的内部数据结构,然后调用一个或多个输出生成器向相应的输出处理器发出命令。
输出处理器将来自tcng的输出转换为底层组件可以理解的动作,例如,tc通过netlink接口发送配置消息,而gcc构建一个定制的可加载内核模块,一个tc模块,加上激活内核模块所需的tc命令。
tcsim
tcsim用于在非常高的细节级别上模拟Linux流量控制的行为。这主要用于以下目的:
1.验证由tng生成的配置
2.配置的开发
3.流量控制部件的测试
tcsim直接支持使用旧的配置语言进行配置,它通过自动调用tcng并集成其输出来支持新语言。
它将来自Linux内核的原始流量控制代码与配置实用程序tc的用户空间代码结合起来,并添加了用于两者之间通信的框架,以及一个事件驱动的仿真引擎。
生成的程序完全在用户空间中运行,但执行的代码与“真正的”系统几乎完全相同(它甚至模仿可加载的内核模块),给出的结果比更通用的模拟器(例如ns-2)要准确得多。
最新版本:10b
v10b于2004年10月发布。
项目主页:https://tcng.sourceforge.net/