【问题标题】:Simulating a bad internet connection模拟糟糕的互联网连接
【发布时间】:2012-08-03 16:09:43
【问题描述】:

我正在开发一个可以通过 LAN 访问互联网的嵌入式设备。 我现在处于测试阶段,我想测试设备在互联网连接不佳时的性能。 目前,该设备通过集线器连接到路由器,我使用集线器通过 Wireshark 监控数据包。 降低设备的互联网速度以模拟可能发生的场景的最佳方法是什么?

我可以通过 PC 完成吗?我需要访问路由器吗?如果是这样,是否可以限制路由器接口中每个IP的速度?

其实有朋友建议我买个usb2lan网卡,把PC局域网连接到嵌入式设备,然后用软件QoS限制器。你认为它会起作用吗?

【问题讨论】:

  • 这可能更适合 Stack Overflow,您可以标记自己的问题并移动它。
  • @ScottChamberlain 这不是编程问题。至少不必如此。任何可以配置防火墙的人都可以模拟一个坏的网络连接(如果你有支持它的防火墙软件,比如 ipfw + dummynet)。
  • 我不了解 LAN,但如果您在无线网络上需要它,只需将您的手机在路由器和接收器之间移动……这种干扰非常类似于严重的数据包丢失和抖动。跨度>
  • 查看这个旧的 SO 线程。可以帮助...stackoverflow.com/questions/7026251/…
  • 在游戏开发中查看此副本以获取更多答案:gamedev.stackexchange.com/questions/61483/…

标签: router lan internet-connection testing


【解决方案1】:

如果您手边有一台 Mac,Mac 会内置名为 dummynet 的内核工具,您可以通过 ipfw 控制它。它允许您模拟慢速连接、以特定概率随机丢弃数据包等等。

Linux 和其他操作系统中存在相同的工具。

来自dummynet homepage

截至 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

【讨论】:

  • 还有一个网络链接调节器控制面板,它添加了一个简单的 UI,可用于 Xcode 4.x。
  • ipfw 在 Yosemite 上不再工作了,有什么方法可以模拟新 OSX 上的慢速连接?谢谢
  • @Igal 查看其他提到网络链接调节器的答案/cmets。
  • @Spiff ,问题是我需要使用自动化测试中的命令,而 NLC 没有外部 API ...
  • 如何获得抖动和跟踪路由?
【解决方案2】:

您可以尝试使用“Fiddler

您可以选择模拟不良网络(如旧调制解调器 33k 或 56k)

您需要将设备插入 PC 并打开代理(每个请求都将通过 Fiddler 传输)

然后你可以用坏的网络测试你的代码然后看看发生了什么;)

【讨论】:

    【解决方案3】:

    您可以使用(几乎)来自 liveCd 的任何 linux 发行版(如 ubuntu、mandriva 等)在您想要的任何硬件上运行它,并使用基于内核的工具 netem,也就是“网络仿真”和“ iproute2" 打包工具。它可以让您控制广域网的延迟、包丢失、损坏、重复和其他可能的问题。

    有最常用的模拟列表,例如:

    • 使用令牌桶过滤器进行速率控制:

      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
      
    • 将所有数据包延迟固定时间:tc qdisc add dev eth0 root netem delay 100ms

    • 包丢失:tc qdisc change dev eth0 root netem loss 0.1%

    【讨论】:

    • 请注意,您需要先使用qdisc add,然后才能使用qdisc change,以防有人试图单独使用最后一个命令。
    【解决方案4】:

    这是另一个 OSX 解决方案,看看 Network Link Conditioner。

    以下引述摘自以下博客(以下所有功劳均应归功于 Matt Gemmell):

    http://mattgemmell.com/2011/07/25/network-link-conditioner-in-lion/

    获取 Xcode 的硬件 IO 工具。为此,请进入 Xcode 菜单,然后选择“Open Developer Tool”,最后选择“More Developer 工具…”。您将被带到 Apple 的开发者下载网站;你 应该下载“Hardware IO Tools for Xcode”。

    生成的磁盘映像将包含(除其他外)一个 系统偏好设置的偏好设置面板,称为“网络链接 护发素”。双击 prefpane 文件并进行身份验证以允许 它被安装。然后,您将在“系统偏好设置”中看到该窗格。

    您可以从各种不同类型的网络条件中进行选择 使用配置文件弹出菜单。

    您还可以通过单击管理配置文件添加自己的配置文件, 从头开始或通过复制现有配置文件。

    非常方便模拟非最佳网络条件 在测试应用程序时。之后别忘了关掉它!

    【讨论】:

      猜你喜欢
      • 2017-03-20
      • 2016-01-09
      • 2011-04-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2011-11-07
      相关资源
      最近更新 更多