使用tc命令可实现linux网络限速,通过qdisc、class和Filter三大组件控制出站流量,如用HTB或TBF限制上传速度,结合filter限速特定IP,借助IFB模块限制下载速度。
在Linux中设置网络限速,可以使用 tc(Traffic Control)命令,它是Linux内核中强大的流量控制工具,属于iproute2套件的一部分。通过tc,你可以对网络接口的上传或下载速度进行限制,常用于模拟低带宽环境、控制服务带宽占用或优化QoS。
1. 安装和确认tc工具
大多数Linux发行版默认已安装tc。如果没有,可通过以下方式安装:
- ubuntu/debian: sudo apt install iproute2
- centos/RHEL: sudo yum install iproute 或 sudo dnf install iproute
检查是否可用:
tc -version
2. 基本概念:tc的三大组件
tc通过以下三个核心机制实现流量控制:
- qdisc(排队规则):决定数据包如何排队和发送,如pfifo_fast(默认)、htb、tbf
- class:用于分类流量,配合qdisc实现分级带宽管理
- filter:用于匹配流量(如IP、端口),将其导向特定class
3. 使用HTB限速上传(出站流量)
限制从本机发出的流量(上传),需对出站接口(如eth0)设置qdisc。以下示例将eth0的上传速度限制为1Mbps:
sudo tc qdisc add dev eth0 root handle 1: htb default 30
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit
说明:
- root qdisc使用htb,handle 1: 为标识符
- class 1:1 设置总带宽为1mbit
- ceil表示最大可突发带宽
4. 使用TBF限速(简单场景)
TBF(Token Bucket Filter)适合简单限速。限制上传为512kbit:
sudo tc qdisc add dev eth0 root tbf rate 512kbit burst 10kb latency 70ms
参数说明:
- rate:平均速率
- burst:突发数据大小
- latency:延迟上限
5. 限制特定IP或端口
结合filter,可对特定流量限速。例如:限制目标IP为192.168.1.100的流量为512kbit:
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.100 flowid 1:10
前提:已配置HTB class 1:10。
6. 查看和删除限速规则
查看当前规则:
tc qdisc show dev eth0
tc class show dev eth0
tc filter show dev eth0
删除所有规则:
sudo tc qdisc del dev eth0 root
或重新添加前先清空:
sudo tc qdisc replace dev eth0 root …
7. 限制下载速度(入站流量)
tc只能直接控制出站流量。要限速下载(入站),需借助中间设备或使用IFB(Intermediate Functional Block)模块:
加载ifb模块:
sudo modprobe ifb
sudo ip link set dev ifb0 up
sudo tc qdisc add dev ifb0 root htb
sudo tc filter add dev eth0 parent ffff: protocol ip u32 match ip dst 192.168.1.100 flowid 1:10 action mirred egress redirect dev ifb0
这样可对进入eth0的流量进行镜像处理并限速。
基本上就这些。tc功能强大但配置复杂,建议在测试环境先尝试。对于简单需求,可考虑使用wondershaper等封装工具。关键是理解qdisc、class和filter的协作方式。