同时实现HTB、NetEM、TBF流量控制

同时实现HTB、NetEM、TBF流量控制

我正在开发一个 bash 实用程序,它将使用 tc Linux 命令行实用程序的多个方面来模拟各种网络条件。我已经成功构建了几个 qdisc 层次结构,分别用于 HTB 带宽控制、NetEM 延迟和数据包操作以及 TBF 速率控制,以及用于 HTB-NetEM 和 TBF-NetEM 的组合处理程序。我遇到的困难是将这三个层次组合成一个结构,用于我需要在单个连接上控制所有这些因素的情况。这是我目前所拥有的:

  sudo tc qdisc add dev $interface root handle 1:0 htb

  sudo tc class add dev $interface parent 1:0 classid 1:1 htb  #htb args

  sudo tc qdisc add dev $interface parent 1:1 handle 10:0 tbf  #tbf args

  sudo tc qdisc add dev $interface parent 10:1 handle 101:0 netem  #netem args

由于我的案例范围较小,我知道问题不在于我的输入的语法,而可能在于我的 tc qdiscs 和类的结构。当我尝试在以下示例中运行这些命令以及速率和带宽整形参数(分别为 10 和 15 Mbit/s)时两个都我的网桥的以太网端口,iperf 测试的带宽没有变化,无论是 TCP 还是 UDP。任何建议都将不胜感激。

以下是我的其他在职的复合结构,希望它们能有所帮助:

HTB和NetEM:

  sudo tc qdisc add dev $interface root handle 1: htb

  sudo tc class add dev $interface parent 1:0 classid 1:1 htb  #htb args

  sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem  #netem args

TBF 和 NetEM:

  sudo tc qdisc add dev $interface root handle 1:0 tbf  #tbf args

  sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem  #netem args

答案1

你想要的不是HTB/TBF而是HFSC。

http://man7.org/linux/man-pages/man7/tc-hfsc.7.html

您可以将 netem 附加到叶类。

这是一个帮助您入门的示例脚本。

#!/bin/bash
tc qdisc add dev veth1 parent root handle 1: hfsc default 11
tc class add dev veth1 parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
tc class add dev veth1 parent 1:1 classid 1:11 hfsc sc rate 50mbit
tc class add dev veth1 parent 1:1 classid 1:12 hfsc sc umax 1500 dmax 50ms rate 10mbit ul rate 10mbit
tc qdisc add dev veth1 parent 1:12 handle 12 netem delay 150ms
tc filter add dev veth1 parent 1: protocol ip u32 match ip sport 22 0xffff flowid 1:12

这将创建一个 100mbit 类,其中 50mbit 属于默认类(但可以突发到 100mbit),而另一个类允许实时要求,以便 1500 字节的数据包必须在 50ms 内离开队列,此类的最大速率始终为 10mbit。

最后,我们在该类上添加了一个叶 qdisc,它实际上将离开队列的数据包延迟了 150 毫秒。

进入实时类的流量是根据其具有源端口 22 属性(因此是所有 ssh 流量)来选择的。

相关内容