如何模拟低带宽、高延迟环境?

222

为了模拟远程站点上VPN的情况,我需要模拟一个低带宽、高延迟的连接到服务器。希望能够调整带宽和延迟,以便找到最佳组合来运行我们的软件包。


7
好问题!我很想听一些与 ASP.NET 网页开发相关的答案。 - Carl
5
相关/重复问题:模拟缓慢的网络连接的网络工具在Linux上模拟延迟和丢包的方法。请问需要翻译哪个问题的内容? - blahdiblah
20个回答

80

对于 macOS ,有一个名为 Network Link Conditioner 的工具,可以模拟可配置的带宽、延迟和数据包丢失。它包含在Additional Tools for Xcode软件包中。 截图


13
“Network Link Conditioner” 首选项面板是 XCode 硬件 IO 工具的一部分,您可以从 https://developer.apple.com/downloads/ 下载该工具。 - avernet
似乎无法与Genymotion一起使用。(黑屏) - B B
1
新版XCode的下载链接:https://developer.apple.com/download/more/?q=Additional%20Tools - jstorm31
@jstorm31 谢谢。我已经更新了答案,包括当前的包名称和链接。 - Jon Colverson

37

有一个很好的指南介绍如何设置FreeBSD机器来完成这个任务 - 拿起你标准的旧桌面电脑,加上一张额外的网卡,然后进行构建。

该指南可以在http://www.freebsd.org/doc/en/articles/filtering-bridges/article.html找到。

在以上指南的第5步中,您正在启用防火墙。为了模拟不同的IP连接,您可以(例如)执行以下操作:

创建一个包含以下内容的文件/etc/rc.firewall.56k

ipfw add pipe 1 ip from any to any out
ipfw add pipe 2 ip from any to any in    
ipfw pipe 1 config bw 56Kbit/s   
ipfw pipe 2 config bw 56Kbit/s

更改/etc/rc.conf文件...将该行替换为

firewall_type="open"
firewall_type="/etc/rc.firewall.56k"

重新启动,然后你就有了一个56K的桥接设备!

如果你使用的是Macintosh电脑,那么该操作系统默认已经安装了ipfw。我曾经通过将网络流量路由到Airport和以太网之间并进行设置,使得任何从Airport过来的东西都具有我试图模拟的相同特征。你可以直接从终端调用ipfw命令,达到相同的效果。


32
过去,我曾使用Linux的Netem(网络仿真)功能来建立桥接。它高度可配置--允许引入延迟(第一个示例是用于广域网),数据包丢失,损坏等。
我注意到Netem非常适合我的应用程序,但我也多次使用了WANem。提供的引导ISO(以及虚拟设备映像)使其非常方便。

非常适合我的需求,并且可以在我的Ubuntu 14.04服务器上直接使用! - RobM
1
注意:MasterShaper现在指向一些无关的落地页面。 - Jean Spector

26

我发现了一个名为clumsy的Windows小程序,它处于alpha状态,但对我来说似乎工作得很好,并且它是开源的。

编辑:其他人已经注意到你无法使用clumsy限制带宽,这是真的。您只能添加延迟和几个其他与网络相关的错误。这将使此答案无效,但由于在我想模拟糟糕的网络时我有很好的用处,因此只要它具有> 0票或类似票数,我就会将其保留在此处。


你如何使用clumsy控制带宽? - user3731622
3
优秀的程序,正是我所需要的。我推荐它。它运作得十分顺畅且超级易用。 - Jh62
1
当大多数人说“限制带宽”时,他们可能会非常满意地添加大量的延迟和数据包丢失,因为这些实际上可以限制带宽。此外,这个程序非常简单易用,在Windows上比我尝试过的其他所有程序都要好。 - rollsch
Clumsy 0.3支持显式带宽限制。 - undefined

22

Charles

我发现了一款名为Charles的网络调试代理应用程序,使用它可以成功模拟网络延迟。它适用于Windows、Mac和Linux。

Mac上的Charles

带宽限制/带宽模拟器

Charles可用于调整互联网连接的带宽和延迟,从而使您能够利用高速连接来模拟调制解调器条件。

带宽可以被限制到任意字节每秒。这使得任何连接速度都可以被模拟。

延迟也可以设置为任意毫秒数。延迟模拟较慢的连接所经历的延迟,即在发出请求和接收到请求之间的延迟。

DummyNet

您还可以使用vmware运行BSD或Linux,并尝试此文章(DummyNet)这篇文章。


5
Charles是一种HTTP代理工具,因此只适用于测试HTTP应用程序。每个人有自己的喜好,但我认为它可能是我使用过的最糟糕的软件之一。在我的Mac上工作时,我只用了很短的时间。对于Windows用户,如果需要HTTP调试代理,我建议使用Fiddler。不幸的是,在OSX上除了Charles我没有找到其他的替代品。 - Brad
6
嗨 Brad。你能说一下你遇到了什么样的问题吗? - Ante

13

试试WANem

WANem是一个广域网仿真器,旨在为在局域网环境中进行应用程序开发/测试时提供广域网/互联网的真实体验。


1
我尝试过这个,但好像无法让它正常工作。它无法从我们的网络中获取IP地址,而其他计算机都没有问题。 - Michael Beck

12

7
我建议您在Linux上使用netem。它可以模拟额外的延迟、损坏、丢包和重复。甚至可以在回环设备上工作。

嘿,你有没有在Windows上找到与netem相当的命令? - Shashi Ranjan

6

2
Netlimiter很好,但我认为它只能控制低带宽 - 它不能改变延迟? - Nathan
v3的beta计划中列出了延迟模拟作为一个计划中的功能。最近已经发布,我还没有使用它来查看该功能是否已经实现。 - kaliatech
那个功能没有被包含在beta版本9中。唉。 - cacba
5
即使现在的测试版(NetLimiter 4)也无法更改延迟。 - influent

5
我在Windows机上使用NetBalancer。

http://seriousbit.com/netbalancer/

2017年10月7日更新: NetBalancer的最新免费版本为9.2.7。该程序有一个硬编码的到期日期。在启动NetBalancer服务之前,您需要将系统时钟调回至2016年10月18日之前。有关详细信息,请参见this article

谢谢!NetBalancer是此页面上唯一我能够使用并且可以控制延迟的工具。 - influent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接