如何在Linux上限制网络带宽
如果您经常在 Linux 桌面上运行多个网络应用程序,或者在家里的多台计算机之间共享带宽,您将希望更好地控制带宽使用。否则,当您使用下载器下载大文件时,您的交互式 SSH 会话可能会变得缓慢到无法使用的程度。或者,当您通过 Dropbox 同步大文件夹时,您的室友可能会抱怨她计算机上的视频流变得不稳定。
在本教程中,我将介绍两种在 Linux 上限制网络流量速率的不同方法。
对 Linux 上的特定应用程序进行速率限制
限制网络流量速率的一种方法是限制特定网络应用程序消耗的带宽。这可以通过名为 trickle
的命令行工具来实现。 trickle
命令允许您通过在运行时预加载速率受限的套接字库来调整给定程序的流量。 trickle
的一个优点是它纯粹在用户空间中运行,这意味着您不需要 root 权限来限制程序的带宽使用。为了兼容trickle
,程序必须使用不带静态链接库的socket
接口。当您想要限制没有内置带宽控制功能的程序时,trickle
会很方便。
要在 Ubuntu、Debian 及其衍生版本上安装 trickle
:
$ sudo apt-get install trickle
要在 Fedora 或 CentOS/RHEL(使用 EPEL 存储库)上安装 trickle
:
$ sudo yum install trickle
trickle
的基本用法如下。简而言之,您在尝试运行的命令前面添加了 trickle
(带有速率)。
$ trickle -d <download-rate> -u <upload-rate> <command>
这会将 <command>
的下载和上传速率限制为指定值(以 KBytes/s 为单位)。
例如,将 scp
会话的最大上传带宽设置为 100 KB/s
:
$ trickle -u 100 scp backup.tgz [email _host.com:
如果需要,您可以使用以下命令创建自定义启动器来设置 Firefox 浏览器的最大下载速度(例如 300 KB/s
)。
trickle -d 300 firefox %u
最后,trickle
可以在守护程序模式下运行,在该模式下,它可以限制通过 trickle
启动的所有正在运行的程序的聚合带宽使用情况。要将 trickle
作为守护进程启动(即 trickled
):
$ sudo trickled -d 1000
一旦 trickled
守护进程在后台运行,您就可以通过 trickle
启动其他程序。如果您使用 trickle
启动一个程序,则其最大下载速率为 1000 KB/s
。如果您使用 trickle
启动另一个程序,则每个程序的速率将限制为 500 KB/s
等。
对 Linux 上的网络接口进行速率限制
控制带宽资源的另一种方法是在每个接口的基础上强制实施带宽限制。当您与其他人共享上游互联网连接时,这非常有用。与其他任何东西一样,Linux 也有适合您的工具。名为 wondershaper
的命令行工具正是这样做的:对网络接口进行速率限制。
wondershaper
实际上是一个 shell 脚本,它使用 tc
来定义特定网络接口的流量整形和 QoS。传出流量通过放置在具有不同优先级的队列中来调整,而传入流量则通过数据包丢弃进行速率限制。
事实上,wondershaper
的既定目标不仅仅是为接口添加带宽上限。 wondershaper
尝试在批量下载或上传时保持 SSH 等交互式会话的低延迟。此外,它还确保批量上传(例如 Dropbox 同步)不会阻碍下载,反之亦然。
要在 Ubuntu、Debian 及其衍生版本上安装 wondershaper
:
$ sudo apt-get install wondershaper
要在 Fedora 或 CentOS/RHEL(带有 EPEL 存储库)上安装 wondershaper
:
$ sudo yum install wondershaper
wondershaper
的基本用法如下。
$ sudo wondershaper <interface> <download-rate> <upload-rate>
例如,将 eth0 的最大下载/上传带宽分别设置为 1000Kbit/s
和 500Kbit/s
:
$ sudo wondershaper eth0 1000 500
您可以通过运行以下命令来删除速率限制:
$ sudo wondershaper clear eth0
如果您对 wondershaper
的工作原理感兴趣,可以阅读其 shell 脚本(位于 /sbin/wondershaper
)。
结论
在本教程中,我介绍了两种不同的方法来控制 Linux 桌面上的带宽使用,基于每个应用程序或每个接口。这两种工具都非常用户友好,为您提供了一种快速、简单的方法来塑造不受限制的流量。对于那些想了解更多有关 Linux 速率控制的信息的人,请参阅 Linux 圣经。