如何在Linux网络接口上限制带宽?


Answers:


32

netem内核模块,通过iproute控制。

您需要使用内核编译Netem:

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

一旦装载了netem模块,iproute的tc就可以让您执行以下操作:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(50%的数据包丢失,额外的延迟为50毫秒)


是的,实际上,这是一个非常好的模块。我不敢相信直到现在为止还没有人回答……

我将其用于本地(本地主机)上的服务器测试,因为多年来所有发行版均已将其作为标准配置。要添加20ms延迟“ tc qdisc添加dev lo根句柄1:0 netem延迟20msec”,并将其删除“ tc qdisc del dev lo根”
pixelbeat

1
快速说明:内核模块为sch_netem。通常,无需手动加载,它将根据需要自动加载。
sleske 2010年


我netem的版本(Ubuntu的13.10)也有限制使用的带宽选项rate选项:tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000。请注意,对于某些设备(例如lo(用于访问localhost)),您还需要设置队列长度:ifconfig lo txqueuelen 1000。请参阅serverfault.com/a/394949/76090
z0r

27

客户端,对不对?

细流应该做你想要的。如果您正在运行Ubuntu(我认为是Debian),则可以使用进行安装sudo apt-get install trickle,然后运行。trickle -s -d 10 -u 10 firefox(或者,我已经有一段时间没有使用它了)将运行firefox,将其下载和上传速度限制为每秒10 KB。


感谢您的提示。出于某种原因,细流对于firefox不适用于我,但与google-chrome一起使用效果很好。(Ubuntu 9.10 64bit)
汤姆(Tom

6
细流通过拦截对TCP传输的标准库函数中的链接的调用而起作用-如果应用程序在编译时静态链接了这些函数,则该函数将无法正常工作。
David Spillett

16

我找到了一种方法,可以使用ubuntu中的“ wondershaper”工具来避免盒子占用网络上所有可用带宽。我希望它也存在于其他Linux发行版中。我可以使用以下命令来限制我的Linux家庭PC可以消耗的带宽。

sudo wondershaper eth0 1000 200

这将下载限制限制为1000 kb,将下载限制限制为200 kb。有关更多信息/选项,请参见wondershaper的手册页。


1
这并不是OP所要寻找的(它是关于节省带宽,而不是有意降低连接的程度),但是仍然很了解。
sleske 2010年

1
顺便说一句:这是wondershaperDebian中的软件包。
sleske 2010年

这个摇摇欲坠的账单,我们在办公室遇到带宽饱和的问题,有一个我无法中断的支持,而且我能够用两行简单的方法解决这个问题:#apt-get install wondershaper then#wondershaper eth0 9999999 500再次感谢!
orange80 2011年

4
wondershaper似乎有一些数学问题。为了获得1Mb / s的上/下路径,我们最终使用了28096而不是1024。
boatcoder

要重设,请使用:sudo wondershaper clear eth0
林宝伦(LéoLam)2015年

8

NIST制作了一个称为NistNet的网络模拟器。

http://snad.ncsl.nist.gov/nistnet/(链接似乎已消失)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

NistNet使您可以制作模仿您选择的通讯链接的路由器。

对于最简单的操作,您可以将其放在两个网络之间的带有两个NIC的盒子中。

例如,我有一个必须在卫星链路上工作的应用程序。

数据可能会以2 Mbps的链接经过BIG延迟。控制必须经过128kbps的链路,并且具有相同的延迟。

NistNet帮助使它们全部以128kbps的速度工作。

使用NistNet,我不仅可以模拟带宽,还可以模拟延迟,它还可以为您丢弃数据包,模拟繁忙或不可靠的链接。

如果要模拟任意连接,则不仅要限制带宽,还要增加延迟。

也不要忘记对数据包进行分段。您可以在phony链接上设置漂亮的小型MTU。

IIRC添加数据包抖动将使您了解是否可以处理乱序数据包。


NistNet很长时间没有更新,是吗?IMO,到目前为止最好的方法是netem模块,该模块已经存在于所有最新的内核中。

您可能可以使用VM模拟具有2个NIC的计算机。
斯科特,

链接无效
Hasen

链接对我有用。
2012年


3

您可以使用本地安装的鱿鱼代理来限制带宽,例如在慢速链接上测试网页:

  1. 从您的发行版安装squid代理 -在我的Fedora上就像一样容易yum install squid

  2. 将以下内容添加到/etc/squid/squid.conf

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    这会将带宽限制为大约128 kbps(16000 Bps)。

  3. 开始鱿鱼/etc/init.d/squid start

  4. 配置浏览器以使用代理服务器localhost端口3128



3

在Debian存储库中,还没有人提到ip_relay,名称为“ iprelay”。它可以用作TCP代理,而不是像滴流那样拦截调用,它可以与可以使用代理(例如网络浏览器)或接受用户定义的目标端口(telnet,ssh,ftp,curl,)。

设置起来有点困难,但通常可以在不滴流的情况下使用。


1
这正是我想要的!非常感谢。我很高兴我向下滚动并继续阅读。
杰伊·雷恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.