模拟较差的互联网连接

41
我正在开发一款通过局域网访问互联网的嵌入式设备。目前处于测试阶段,我想测试当与互联网连接质量较差时该设备的性能如何。 目前,该设备通过集线器连接到路由器,我使用Wireshark监视数据包。 模拟可能发生的场景下,最好的方式是什么?我可以通过电脑实现吗?我需要访问路由器吗?如果需要,是否可以在路由器界面上限制每个IP的速度? 事实上,我的一个朋友建议我购买一个usb2lan以太网卡,将PC的局域网连接与嵌入式设备桥接,然后使用QoS软件限制网络带宽。你认为这种方法可行吗?

2
@ScottChamberlain 这不是一个编程问题。至少它不必是。任何能够配置防火墙的人都可以模拟一个糟糕的网络连接(如果你有支持它的防火墙软件,比如ipfw + dummynet)。 - Spiff
其实,我的一个朋友建议我购买一个usb2lan以太网卡,并将PC的局域网连接桥接到嵌入式设备上,然后使用软件QoS限制器。你认为这样行得通吗? - stdcall
1
也可以看看这个旧的SO帖子,可能会有所帮助... https://dev59.com/FGw05IYBdhLWcg3wyk3n - Rod Burns
1
请参考游戏开发中的重复问题以获取更多答案:http://gamedev.stackexchange.com/questions/61483/how-to-simulate-a-bad-internet-connection - House
可能是模拟缓慢网络连接的网络工具的重复问题。 - om-nom-nom
显示剩余2条评论
4个回答

24

如果您有一台Mac电脑,Mac内置了一个名为dummynet的内核功能,您可以通过ipfw进行控制。它允许您模拟缓慢的连接、随机丢弃某些概率的数据包等。

同样的功能也存在于Linux和其他操作系统中。

dummynet主页上了解到:

截至2010年2月,我们已经发布了dummynet的第三个主要版本,现在它可以运行在所有主要平台上:FreeBSD、Mac OS X作为本机分发的一部分,而您可以在此找到Linux、OpenWRT和Windows版本。

它能够为您做很多事情:

将总入站TCP流量限制为2Mbit/s,UDP限制为300Kbit/s

ipfw add pipe 2 in proto tcp
ipfw add pipe 3 in proto udp
ipfw pipe 2 config bw 2Mbit/s
ipfw pipe 3 config bw 300Kbit/s

限制10.1.2.0/24网络中每个主机的传入流量为300Kbit/s。

ipfw add pipe 4 src-ip 10.1.2.0/24 in
ipfw pipe 4 config bw 300Kbit/s queue 20 mask dst-ip 0x000000ff

模拟一条连接到月球的ADSL链路:

ipfw add pipe 3 out
ipfw add pipe 4 in
ipfw pipe 3 config bw 128Kbit/s queue 10 delay 1000ms
ipfw pipe 4 config bw 640Kbit/s queue 30 delay 1000ms

还有一个网络链接调节控制面板,它为其添加了一个简单的用户界面,可在Xcode 4.x中使用。 - Mike C.
ipfw在Yosemite上不再起作用了,有没有办法在新的OSX上模拟慢速连接?谢谢。 - Igal
@Igal请查看其他提到网络链接调节器的答案/评论。 - Spiff
1
@Spiff,问题是我需要从自动化测试中使用该命令,而NLC没有外部API... - Igal
我该如何获取抖动和跟踪路由? - Mehul Tank

18
你可以尝试使用"Fiddler"。
你可以选择模拟不良网路(如旧调制解调器33k或56k)。
你需要将你的设备连接到计算机并打开代理(每个请求都将通过Fiddler传输)。
然后,您可以使用不良网络测试您的代码,然后查看发生了什么。;)

16
您可以使用(几乎)任何Linux发行版的LiveCD(例如Ubuntu、Mandriva和其他发行版),在任何硬件上运行它,并使用基于内核的工具netem,即“网络仿真”,以及“iproute2”软件包工具。它允许您控制广域网可能出现的延迟、数据包丢失、损坏、重复等各种问题。
以下是最常用的模拟列表:
  • Rate control using Token Bucket Filter:

    tc qdisc add dev eth0 root handle 1:0 netem delay 100ms
    tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000
    
  • Delay all packets by fixed time: tc qdisc add dev eth0 root netem delay 100ms

  • Package loss: tc qdisc change dev eth0 root netem loss 0.1%

1
请注意,在使用qdisc change命令之前,您需要先使用qdisc add命令。否则,如果有人试图单独使用最后一个命令,将会出现错误。 - davidA

5
这是另一个OSX解决方案,看看“网络链接调节器”。以下引用摘自以下博客(所有内容的功劳应归于Matt Gemmell): http://mattgemmell.com/2011/07/25/network-link-conditioner-in-lion/ 获取“Xcode的硬件IO工具”,请进入Xcode菜单,然后选择“打开开发者工具”,最后选择“更多开发者工具...”,您将被带到Apple的开发者下载网站;您应该下载“Xcode的硬件IO工具”。
生成的磁盘映像将包含(除其他外)系统首选项的偏好设置面板,称为“网络链接调节器”。双击prefpane文件并进行身份验证以允许其安装。然后你会在系统首选项中看到这个面板。
您可以使用配置文件弹出菜单从各种不同类型的网络条件中选择。
您还可以通过单击“管理配置文件”从头开始或通过复制现有配置文件来添加自己的配置文件。
在测试应用程序时模拟不太理想的网络条件非常方便。只是不要忘记在此之后关闭它!

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