简化,我有一个应用程序,其中数据旨在通过互联网在两台服务器之间流动。理想情况下,我想测试软件何时停止运行。在下限(带宽,延迟,丢包)的情况下,事情就会停止工作以测试软件的可靠性。
我认为我会做的是以下内容:
听起来这是个好主意还是有更简单/更好的方法?我在Linux上并不那么舒服,我的队友也不那么熟悉。
答案 0 :(得分:9)
WANem就是这样做的。我们已经在桌面上的虚拟机和专用的旧PC上使用它,它运行良好。它可以模拟各种破坏的连接。
答案 1 :(得分:3)
FreeBSDs ipfw具有模拟具有给定带宽,延迟或错误率的链接的规定。在上面的设置中,您可以将FreeBSD计算机用作“中间”的计算机。
如果您想减少所涉及的服务器数量,您可能还可以在同一台计算机上运行至少一个端点。
答案 2 :(得分:2)
有人实际打包了FreeBSD解决方案所遇到的设置和所需的内容,他们称之为DUMMYNET。
它模拟/强制执行队列和带宽限制,延迟,数据包丢失和多路径效应。它还实现了一个名为WF2Q +的加权公平排队变体。它可以在用户的工作站上使用,也可以在充当路由器或网桥的FreeBSD机器上使用。
它可以准确地模拟你想要的东西,它是免费的,并将启动到商品硬件上。他们甚至有一个罐头安装,它足够小,可以放在你可以通过该链接下载的软盘(!)上。
答案 3 :(得分:2)
也许现在是时候学习一下Linux了,因为只需输入一行就可以在每个输出数据包上添加50ms的延迟:
tc qdisc add dev eth0 root netem delay 50ms
有关详情,请参阅Linux Traffic Control HOWTO
答案 4 :(得分:1)
大约十年前我们有类似的要求 - 我会看到我是否能回忆起我们是如何管理它的。
如果我记得的话,我们写了一个套接字代理程序,它由UNIX盒子上的inetd控制。此套接字将接受来自客户端的连接,并打开等效会话到服务器。然后它会循环,在两个方向传递消息。
我们实现WAN特性的方式是在链路启动时在连接建立和数据传递中引入随机延迟(具有上限和下限)。
它还具有偶尔丢弃链接的功能,因为WAN链接对我们来说不如本地流量可靠。
我记得我们必须通过线程来阻止延迟影响链路上的反向流量。
答案 5 :(得分:0)
有一个非常好(和免费)的微软解决方案,我们使用它已经有一段时间了,它工作得很好,它可以非常容易地模拟每件事(丢包,低带宽,断开,延迟.... ) 这是我在Windows环境中找到的最佳解决方案
可在此处找到更多信息和下载链接:MARCO blog post
这个产品已经有了一些发展,它现在作为自动化测试的一部分被集成到visual studio中,但我发现使用独立(很难找到,所以保持本地副本)更好地工作。请记住,您需要至少两台计算机(或VM),因为您需要通过网络适配器才能使应用程序发挥其魔力。