Linux 网卡限速:原理、方法与实践
在 Linux 系统中,对网卡进行限速是网络管理中常见的需求,无论是为了公平分配带宽、防止某个应用占用过多资源,还是进行网络性能测试,限速技术都发挥着重要作用,Linux 提供了多种工具和方法来实现网卡限速,从简单的命令行工具到复杂的流量控制框架,用户可以根据实际场景选择合适的方案,本文将详细介绍 Linux 网卡限速的原理、常用工具、配置步骤及注意事项。

限速的基本原理
Linux 网卡限速的核心思想是通过控制网络接口的数据包发送速率,实现带宽限制,其底层机制主要依赖 Linux 内核的 流量控制(Traffic Control, TC) 框架,TC 是 Linux 内核中用于网络流量管理的子系统,通过队列规则(qdisc)、过滤器(filter)和分类器(class)等组件,对数据包进行调度、分类和限速。
限速过程可以概括为:
- 数据包捕获:通过 TC 工具在网卡接口上绑定队列规则(如令牌桶、令牌桶过滤器等)。
- 速率控制:根据预设的带宽阈值,对数据包的发送速率进行限制,令牌桶模型通过以固定速率填充令牌,发送数据包时需消耗令牌,从而控制平均速率。
- 流量分类:通过过滤器(如 u32、fw 等)对数据包进行分类,实现对不同 IP、端口或协议的差异化限速。
常用限速工具对比
Linux 下实现网卡限速的工具多样,各有特点,适用于不同场景:
tc 命令:功能强大的流量控制工具
tc 是 Linux 内置的流量控制命令行工具,属于 TC 框架的直接接口,支持复杂的队列规则(如 HTB、HFSC、CBQ 等),可实现分层限速、带宽分配、延迟控制等功能。
- 优点:功能全面,灵活性高,适合精细化的流量管理。
- 缺点:命令参数复杂,学习成本较高。
wondershaper:简化限速脚本
wondershaper 是一个基于 tc 的 Bash 脚本,简化了限速配置过程,适合快速设置上行和下行带宽限制。
- 优点:操作简单,无需记忆复杂的
tc参数。 - 缺点:功能有限,不支持复杂的分类控制。
trickle:单进程限速工具
trickle 通过代理机制对单个进程的网络 IO 进行限速,适用于限制特定应用的带宽占用。
- 优点:针对性强,无需修改网络配置。
- 缺点:仅限单进程,且依赖代理,可能影响应用的透明性。
iptables + tc:结合实现多层限速
通过 iptables 的 limit 模块结合 tc,可实现基于 IP、端口的精细化限速,先通过 iptables 匹配特定流量,再交由 tc 进行速率控制。

使用 tc 实现网卡限速
tc 是最核心的限速工具,以下以常见的 HTB(Hierarchical Token Bucket) 队列为例,介绍限速配置步骤,HTB 支持分层带宽分配,适合多用户或多应用的场景。
安装 tc
tc 通常包含在 iproute2 工具包中,大多数 Linux 发行版默认已安装,若未安装可执行:
# Debian/Ubuntu sudo apt-get install iproute2 # CentOS/RHEL sudo yum install iproute
基本限速配置
假设要对网卡 eth0 进行限速,限制带宽为 10Mbps(上行)和 5Mbps(下行),操作步骤如下:
(1)清除现有队列规则
sudo tc qdisc del dev eth0 root
(2)添加 HTB 队列规则
# 上行限速(10Mbps) 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 10mbit # 为默认类分配带宽(10Mbps) sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10mbit ceil 10mbit
(3)下行限速(5Mbps)
# 对 eth0 的 ingress 队列进行限速(需开启内核转发) sudo tc qdisc add dev eth0 handle ffff: ingress sudo tc filter add dev eth0 parent ffff: protocol ip u32 match ip dst 0.0.0.0/0 action police rate 5mbit burst 32k drop
针对特定 IP 的限速
若要对 IP 地址 168.1.100 进行限速(例如限制上行 2Mbps),可结合 u32 过滤器实现:

# 创建类(2Mbps) sudo tc class add dev eth0 parent 1:1 classid 1:100 htb rate 2mbit ceil 2mbit # 绑定 IP 到类 sudo tc filter add dev eth0 protocol ip parent 1: u32 match ip dst 192.168.1.100 flowid 1:100
查看限速状态
sudo tc -s qdisc show dev eth0 sudo tc -s class show dev eth0
其他限速工具的使用
wondershaper 快速限速
安装 wondershaper:
sudo apt-get install wondershaper # Debian/Ubuntu
使用示例:限制 eth0 上行 10Mbps、下行 5Mbps:
sudo wondershaper eth0 10000 5000
取消限速:
sudo wondershaper clear eth0
trickle 限制单进程
安装 trickle:
sudo apt-get install trickle # Debian/Ubuntu
使用示例:限制 wget 下载速率为 1Mbps:
trickle -s -d 1024 wget http://example.com/file.iso
限速配置的注意事项
- 网卡兼容性:部分虚拟网卡或无线网卡可能对 TC 支持有限,限速效果可能不理想。
- 带宽单位:
tc中的带宽单位可以是bit(bps)、kbit、mbit等,需注意与实际带宽单位一致。 - 突发流量处理:通过
burst参数设置突发流量大小,避免因突发流量导致限速过于严格。 - 内核参数优化:在高精度限速场景下,可能需要调整内核参数(如
net.core.netdev_max_backlog)以提升性能。 - 测试与验证:限速后需通过工具(如
iperf、speedtest-cli)验证实际带宽是否符合预期。
Linux 网卡限速是网络管理的重要手段,通过 tc、wondershaper 等工具,用户可以根据需求实现从简单到复杂的限速策略。tc 功能强大但复杂,适合需要精细化控制的场景;而 wondershaper 等工具则提供了更简单的操作方式,在实际应用中,需结合网络环境、硬件性能和需求选择合适的工具,并注意配置细节,以确保限速效果稳定可靠,无论是家庭带宽管理还是企业网络优化,掌握 Linux 限速技术都能有效提升网络资源利用率。













