使用tc命令可实现Linux网络带宽限制。首先确认安装iproute2包,利用tc qdisc添加HTB调度器限制出方向带宽,如限制eth0为1Mbps;通过ingress qdisc和police动作控制入方向流量;使用netem模拟延迟与丢包;最后用tc qdisc del或flush清除规则。掌握qdisc、class、filter关系,适用于测试与资源隔离场景。

在Linux中限制网络带宽,可以使用
tc(Traffic Control)命令,它是Linux内核中流量控制的核心工具,配合
netem、
htb等调度器,可实现精确的带宽限制、延迟、丢包等网络行为控制。下面通过几个实用的
tc限速配置实例,帮助你快速掌握如何在Linux中进行带宽限制。
1. 安装和确认tc工具
大多数Linux发行版默认已安装
tc,它属于
iproute2包。可通过以下命令确认:
tc -version
如果没有安装,在Debian/Ubuntu系统上执行:
sudo apt install iproute2
在CentOS/RHEL上执行:
sudo yum install iproute
2. 限制指定网卡的出方向带宽(egress)
使用HTB(Hierarchical Token Bucket)调度器限制
eth0网卡的出方向带宽为1Mbps:
sudo tc qdisc add dev eth0 root handle 1: htb default 10 sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
说明:
qdisc add
添加一个队列规则dev eth0
指定作用网卡root
表示这是根队列handle 1:
是该队列的标识htb
使用分层令牌桶算法classid 1:1
创建一个类,限制速率为1mbit
验证配置:
tc -s qdisc ls dev eth0
3. 限制入方向带宽(ingress)
入方向限速需要先添加一个
ingressqdisc,再通过
filter将流量重定向到
htb:
# 添加ingress队列 sudo tc qdisc add dev eth0 handle ffff: ingress限速为512kbit
sudo tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 \ action police rate 512kbit burst 10k drop flowid :1
注意: ingress限速本质是“流量监管”(policing),不是排队,因此使用
police动作。
4. 清除限速配置
要恢复原始网络状态,需删除已配置的队列规则:
# 删除出方向规则 sudo tc qdisc del dev eth0 root删除入方向规则
sudo tc qdisc del dev eth0 ingress
或者更彻底地清除所有规则:
sudo tc qdisc flush dev eth0
5. 添加延迟和丢包模拟(高级用法)
结合
netem可模拟复杂网络环境。例如,给
eth0增加100ms延迟和5%丢包率:
sudo tc qdisc add dev eth0 root netem delay 100ms loss 5%
查看效果:
tc -s qdisc ls dev eth0
此功能常用于测试应用在弱网环境下的表现。
基本上就这些。通过
tc命令,你可以灵活控制Linux系统的网络带宽、延迟、丢包等参数,适用于测试、调试或资源隔离场景。关键是理解
qdisc、
class、
filter之间的关系,并根据实际需求选择合适的调度器和参数。不复杂但容易忽略细节,建议在测试环境先行验证。










