使用 tc 减少到特定目标地址的带宽

使用 tc 减少到特定目标地址的带宽

我正在尝试使用 Dijkstra 代码找到两个主机 H1 和 H2 之间的最短路径。在该路径上的其中一个交换机中设置一个条件。条件是:如果数据包发送到 H2,则自动更改路径。

我正在使用 Mininet,我想使用通过过滤进入交换机并发送到 H2 的数据包来减少出站带宽,然后 Dijkstra 代码将改变路径。

我想问一下,我可以使用(tc qdisc)控制给定链路上的出站带宽的使用?对物理链接或模拟链接有影响吗?

答案1

是的,是tc为此设计的。TC 可以在任何类型的接口(物理和软件)上工作。最简单的队列调度程序是htb(分层令牌桶)。

典型的简单配置:

  • htb 根队列规程
  • 根类(100% 带宽)
  • 默认叶类(80% 带宽保证,最高可达 100% 带宽)
  • 带宽受限叶类 1(10% 带宽保证)
  • 带宽受限叶类 2(10% 带宽保证,最高 100% 带宽)
  • 每个叶类上的 sfq 队列规则,以公平地共享流量之间的限制

子类的汇总带宽不应超过父类的带宽。否则调度程序将不准确。

猜测接口带宽为 100Mbit/s。因此,配置命令将如下所示:

tc qdisc add dev enp4s0f0 root handle 1: htb default 10

tc class add dev enp4s0f0 parent 1:  classid 1:1  htb rate 100Mbit ceil 100Mbit quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:10 htb rate 80Mbit  ceil 100Mbit quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:11 htb rate 10Mbit  ceil 10Mbit  quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:12 htb rate 10Mbit  ceil 100Mbit quantum 15000

tc qdisc add dev enp4s0f0 parent 1:10 handle 10: sfq
tc qdisc add dev enp4s0f0 parent 1:11 handle 11: sfq
tc qdisc add dev enp4s0f0 parent 1:12 handle 12: sfq

配置完类的层次结构后,应配置分类。分类器有很多种,具有各种功能和各种用户友好度。分类器根据配置的标准检查数据包。如果数据包匹配,则将类分配给该数据包。

tc filter add dev <iface> parent 1: prio 1 protocol ip 800::1 u32 match dst ip 192.168.10.2/32 classid 1:11
tc filter add dev <iface> parent 1: prio 1 protocol ip 800::2 u32 match dst ip 192.168.10.0/24 classid 1:12

在这个小例子中,发往主机的数据包192.168.10.2将被传递到 1:11 类,因此速度被限制为 10Mbit/s。发192.168.10.0/24往子网中其他地址的数据包将被传递到 1:12 类。所有其他数据包将被传递到默认类 (1:10)。

这是该工具使用的快速起点tc

如果您有任何疑问,请提出。

相关内容