限制所有连接/用户的固定速率的网络带宽

限制所有连接/用户的固定速率的网络带宽

我正在寻找 Linux 中的命令来将所有用户的上传/下载速率限制为固定速率。

我有三个 Linux 命令可以限制操作系统上的网络速率。

tc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000kbps ceil 1500kbps 
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10kbps ceil 20kbps

当我尝试使用一个客户端从该服务器下载时,下载速率为 20Kbps,但当尝试使用两个客户端下载时,每个客户端的速率降低到 9-10Kbps。

有没有办法将速率保持在 20Kbps 或多个连接/用户的固定值?

答案1

当您使用 HTB qdisc 时,您应该为每个想要限制带宽的用户/连接创建一个单独的类。

班级树的典型配置:

  • 根 qdisc(HTB,句柄 1:0,默认类 1:2)
    • 根类(HTB,类 ID 1:1 父级 1:0,速率 100Mbit)
      • 默认类(HTB,类 ID 1:2,父级 1:1,速率 50Mbit,上限 100Mbit)
      • 共享类(HTB,类 ID 1:3,父级 1:1,速率 50Mbit,上限 100Mbit)
        1. host1类(HTB,类 ID 1:11,父级 1:3,速率 20Kbit)
        2. host2类(HTB,类 ID 1:12,父级 1:3,速率 20Kbit)
        3. hostN类(HTB,类 ID 1:13,父级 1:3,速率 20Kbit)

tc 命令看起来应类似于:

# remove current configuration if exists
tc q del dev <iface> root || true
tc q del dev <iface> ingress || true

# create the root queue discipline
tc q add dev <iface> root handle 1:0 htb default 3

# attach the root class to the root qdisc
tc c add dev <iface> parent 1:0 classid 1:1 htb rate 100Mbit

# default class
tc c add dev <iface> parent 1:1 classid 1:2 htb rate 50Mbit ceil 100Mbit

# class to limit the hosts
tc c add dev <iface> parent 1:1 classid 1:3 htb rate 50Mbit ceil 100Mbit

# attach classes to limit every host (one class = one host)
tc c add dev <iface> parent 1:3 classid 1:11 htb rate 20Kbit
tc c add dev <iface> parent 1:3 classid 1:12 htb rate 20Kbit
tc c add dev <iface> parent 1:3 classid 1:13 htb rate 20Kbit

# classification of the downstream traffic to hosts
tc f add dev <iface> parent 1:0 protocol ip prio 10 handle 800::1 u32 match ip dst 192.0.2.2 flowid 1:11
tc f add dev <iface> parent 1:0 protocol ip prio 10 handle 800::2 u32 match ip dst 192.0.2.3 flowid 1:12
tc f add dev <iface> parent 1:0 protocol ip prio 10 handle 800::3 u32 match ip dst 192.0.2.4 flowid 1:13

答案2

我还不能向 Anton Danilov 提出评论,“如果我想分配 50% 的带宽用于争用,但我想将剩下的 50% 平均分配给用户,以确保最低保证,我该怎么做呢?”

相关内容