本文目录导读:

解决方案
根据您的操作系统和具体应用环境,有几种主流方法可以实现上传限速:
Linux 环境(使用 tc 命令)
这是最灵活、最强大的方法,适用于控制整个网络接口或特定应用程序的流量。
#!/bin/bash # 文件名: limit_upload.sh # 用途:限制指定网络接口的上传速度为 1Mbps # 网络接口名称,请根据实际情况修改(使用 `ip a` 命令查看) INTERFACE="eth0" # 限制上传速度为 1Mbit/s UPLOAD_LIMIT="1mbit" # 清除该接口上的现有规则 tc qdisc del dev $INTERFACE root 2>/dev/null # 添加根队列规则,使用令牌桶过滤器(tbf) tc qdisc add dev $INTERFACE root handle 1: tbf rate $UPLOAD_LIMIT burst 32kbit latency 400ms echo "已限制 $INTERFACE 的上传速度为 $UPLOAD_LIMIT" # 如需取消限制,运行:tc qdisc del dev $INTERFACE root
使用场景:服务器或开发机,需要限制特定网卡的上传流量。
Linux 环境(使用 wondershaper 工具)
如果您希望更简便地控制,可以使用现成的工具。
# 安装工具(Debian/Ubuntu) sudo apt update && sudo apt install wondershaper # 限制 eth0 接口:下载 10Mbps,上传 5Mbps sudo wondershaper eth0 10240 5120 # 清除限制 sudo wondershaper clear eth0
使用场景:快速临时限制,或不想手动编写复杂 tc 规则时。
应用程序级限速(以 Python rclone 为例)
如果只是限制特定上传任务(如备份、同步),使用应用本身的限速参数更精准。
#!/usr/bin/env python3
# 文件名: backup_with_limit.py
# 用途:使用 rclone 限制上传速度
import subprocess
# 上传命令, --bwlimit 20M 表示限制上传/下载为 20MB/s
cmd = [
"rclone", "copy",
"/path/to/local/dir",
"remote:backup-dir",
"--bwlimit", "20M",
"--progress"
]
subprocess.run(cmd, check=True)
print("备份完成,上传速度已限制为 20MB/s")
使用场景:只控制某个应用(如备份脚本)的网络占用,不影响系统其他部分。
Windows 环境(使用 PowerShell + Set-NetTCSetting)
Windows 10/11 和 Windows Server 内置了网络节流功能。
# 文件名: limit_upload.ps1 # 用途:限制 Windows 系统上传速度 # 启用网络 QoS 策略 $rule = New-NetQosPolicy -Name "UploadLimit" -DSCPAction 46 -AppPathNameMatchCondition "*" # 创建带宽限制规则(需要 Windows 专业版或企业版) Set-NetTCSetting -NetworkThrottlingIndex 10 -BandwidthLimit 50 Write-Host "已设置网络节流,最大上传带宽为 50%" # 删除规则(如需取消) # Remove-NetQosPolicy -Name "UploadLimit"
使用场景:Windows 系统全局限速,或在域环境中通过组策略部署。
使用 trickle 命令(Linux 轻量级方案)
适合非 root 用户或限制单个程序的网络带宽。
# 安装 sudo apt install trickle # 限制 scp 命令的上传速度为 500KB/s trickle -u 500 scp largefile.zip user@remote:/destination/ # 也可以设置下载限制 -d 参数
使用场景:临时限制某个命令或程序,特别是没有 root 权限时。
如何选择
| 场景 | 推荐方案 |
|---|---|
| 服务器/系统级,影响所有流量 | tc 命令 (方案1) |
| 快速调整,不想深究网络原理 | wondershaper (方案2) |
| 应用级,只限制特定程序 | 应用内置参数或 trickle (方案3/5) |
| Windows 系统 | PowerShell 方案 (方案4) |
关键提示
- 权限问题:方案1、2需要
root权限,方案5的trickle在某些配置下也可能需要。 - 接口名称:在 Linux 上,请先用
ip addr命令确认您的网络接口名称(如eth0、ens33、wlan0)。 - 带宽单位:注意各工具的单位区别(
kbitvsKB/svsMbit),避免误设,1 Mbit/s ≈ 125 KB/s。 - 持久化:
tc规则在系统重启后会失效,若需要持久化,请将脚本添加到开机启动项(如 systemd 服务或/etc/rc.local)。 - 测试效果:修改后,建议使用
iperf3 -c <服务器> -R(反向测试)验证上传限速是否生效。
希望这份指南能帮助您成功实现上传限速,如果您的环境或需求比较特殊(例如在 macOS 上,或限制的是 VPN 流量),请告诉我,我会为您提供更具体的指导。