在系统网络接口层面限速是最底层、最可靠的方式,linux用tc命令配合ifb实现双向限速,windows通过qos策略和powershell设出站限速,路由器端口限速则最省心。

直接在系统网络接口层面做出入站流量限额,是最接近底层、效果最确定的方式。它不依赖应用层软件或中间设备,能避免被绕过,适合对稳定性、可控性要求高的场景,比如服务器托管、关键业务终端或带宽敏感的办公环境。
Linux 系统:用 tc 命令精细控制接口级流量
Linux 内置的 tc(Traffic Control) 是最常用也最可靠的方案,支持入站和出站独立限速,且可配合分类器实现更复杂策略。
- 出站限速(例如限制 eth0 下载上限为 5Mbps):
tc qdisc add dev eth0 root tbf rate 5mbit burst 32kbit latency 400ms - 入站限速需借助 ifb(Intermediate Functional Block)虚拟设备,先启用 ifb 模块:
modprobe ifb<br>ip link add ifb0 type ifb<br>ip link set dev ifb0 up
再将入向流量重定向到 ifb0,并在其上设限:tc qdisc add dev eth0 ingress<br>tc filter add dev eth0 parent ffff: protocol ip u32 match ip dst 0.0.0.0/0 action mirred egress redirect dev ifb0<br>tc qdisc add dev ifb0 root tbf rate 2mbit burst 16kbit latency 400ms
- 清除已有规则用:
tc qdisc del dev eth0 root或tc qdisc flush dev eth0
Windows 系统:QoS 策略 + 接口级限速组合
Windows 本身不提供直接对接口限速的图形界面,但可通过组策略和 PowerShell 实现稳定、持久的出入站约束。
- 启用 QoS 数据包计划程序并清空保留带宽(释放全部物理带宽供调度):
组策略路径:计算机配置 → 管理模板 → 网络 → QoS 数据包计划程序 → 限制可保留带宽,设为“已启用”并输入 0 - 使用 PowerShell 对特定网络适配器设置出站速率上限(需管理员权限):
Set-NetQosPolicy -Name "Limit-Outbound" -NetworkProfile All -IPProtocol Both -ThrottleRateActionBitsPerSecond 5MB - 入站限速 Windows 原生不支持,但可配合 Windows 防火墙规则 + 出站优先级压制间接缓解——例如对高流量目标 IP 设置低优先级连接,或用 Netsh 配置接口级带宽阈值(仅部分网卡驱动支持)
跨平台补充:路由器端口级硬限速(非系统侧,但最省心)
如果目标机器固定接在某个路由器 LAN 口,且该路由器支持端口限速(常见于企业级或中高端家用型号),这是最省力、最不易被绕过的方案。
- 登录路由器后台 → 进入“交换机设置”或“端口管理” → 找到对应物理端口(如 LAN1)
- 分别设置“入口限速”(即该端口设备的上传上限)、“出口限速”(即下载上限),单位通常为 Mbps
- 注意:此方式按物理端口生效,若该端口下接了交换机或多个设备,则所有设备共享该带宽
验证与持续监控建议
限速生效后,不能只看配置是否成功,还要确认实际效果是否符合预期。
- Linux 下用
tc -s qdisc show dev eth0查看当前队列统计;搭配iftop -P或iptraf-ng实时观察各连接速率 - Windows 下可用资源监视器 → “网络”选项卡,或 PowerShell 命令
Get-NetAdapterStatistics查看接口收发字节数变化率 - 建议搭配简单脚本定时记录带宽使用峰值(如每5分钟抓一次
cat /sys/class/net/eth0/statistics/rx_bytes),便于回溯是否被突破









