我正在寻找 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)
host1
类(HTB,类 ID 1:11,父级 1:3,速率 20Kbit)host2
类(HTB,类 ID 1:12,父级 1:3,速率 20Kbit)hostN
类(HTB,类 ID 1:13,父级 1:3,速率 20Kbit)
- 根类(HTB,类 ID 1:1 父级 1:0,速率 100Mbit)
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% 平均分配给用户,以确保最低保证,我该怎么做呢?”