![§ 8.5 基于 IP 的共享/分割带宽](https://linux22.com/image/791927/%C2%A7%208.5%20%E5%9F%BA%E4%BA%8E%20IP%20%E7%9A%84%E5%85%B1%E4%BA%AB%2F%E5%88%86%E5%89%B2%E5%B8%A6%E5%AE%BD.png)
我有一台带宽为 100 Mbps 的服务器。
具有动态 IP 的客户端可以连接到 Web 服务器并下载大文件
最多有10 个客户端可以同时下载
我保证为每个客户提供 10 Mbps 的带宽
我需要使用tc
允许他们在单独下载时使用所有带宽,或者在下载客户端 > 1 时平等共享带宽
从未与tc
我想到了:
tc qdisc del root dev ens3 default 10
tc qdisc add dev ens3 root handle 1: htb rate 100mbps
tc class add dev ens3 parent 1: classid 1:1 htb rate 10mbps ceil 90mbps
tc class add dev ens3 parent 1:1 classid 1:10 htb rate 10mbps ceil 90mbps
但当两个客户端开始下载时,它们共享 10mbps 带宽
我需要什么时候
1 client - max 100 Mbps
2 clients - max 50 Mbps each
3 clients - max 33 Mbps each
4 clients - max 25 Mbps each
...
如何让它工作?
答案1
据我所知,没有简单的解决方案。
作为(旧的但据我所知仍然有用的)手册状态:
§ 8.5 基于 IP 的共享/分割带宽
对于许多管理员来说,这是在用户之间分配带宽的理想方法。不幸的是,没有简单的解决方案,而且随着共享网络链接的机器数量增加,它变得越来越复杂。
为了在 N 个 IP 地址之间平等划分带宽,必须有 N 个类。
答案2
# Remove existing qdisc
tc qdisc del root dev ens3
# Set up new qdisc with HTB
tc qdisc add dev ens3 root handle 1: htb default 10
# Define root class
tc class add dev ens3 parent 1: classid 1:1 htb rate 100mbps
# Define class for single client
tc class add dev ens3 parent 1:1 classid 1:10 htb rate 10mbps ceil 100mbps
# Define class for two clients
tc class add dev ens3 parent 1:1 classid 1:20 htb rate 50mbps ceil 100mbps
# Define class for three clients
tc class add dev ens3 parent 1:1 classid 1:30 htb rate 33mbps ceil 100mbps
# Define class for four clients
tc class add dev ens3 parent 1:1 classid 1:40 htb rate 25mbps ceil 100mbps
# Add SFQ qdisc for each class
tc qdisc add dev ens3 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev ens3 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev ens3 parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev ens3 parent 1:40 handle 40: sfq perturb 10
此脚本设置了一个层次结构,其中每个类对应不同数量的客户端,并且它们的带宽受到相应的限制。sfq qdisc 用于在每个类内提供公平排队。
10 也是如此
# ... (previous configuration)
# Define class for five clients
tc class add dev ens3 parent 1:1 classid 1:50 htb rate 20mbps ceil 100mbps
# Define class for six clients
tc class add dev ens3 parent 1:1 classid 1:60 htb rate 16.67mbps ceil 100mbps
# Define class for seven clients
tc class add dev ens3 parent 1:1 classid 1:70 htb rate 14.29mbps ceil 100mbps
# Define class for eight clients
tc class add dev ens3 parent 1:1 classid 1:80 htb rate 12.5mbps ceil 100mbps
# Define class for nine clients
tc class add dev ens3 parent 1:1 classid 1:90 htb rate 11.11mbps ceil 100mbps
# Define class for ten clients
tc class add dev ens3 parent 1:1 classid 1:100 htb rate 10mbps ceil 100mbps
# ... (add SFQ qdisc for each new class)