模拟一个糟糕的互联网连接

我正在开发一个可以通过局域网访问互联网的embedded式设备。 我现在正处于testing阶段,我想testing设备在连接到互联网的时候是如何执行的。 目前,设备通过集线器连接到路由器,我使用该集线器通过Wireshark监视数据包。 什么是最好的方式来遏制设备的互联网速度,以模仿可能发生的情况?

我可以通过电脑吗? 我需要访问路由器吗? 如果是这样,是否有可能限制每个IP在路由器接口的速度?

实际上,有朋友build议我购买一个usb2lan以太网卡,并将PC lan连接到embedded式设备,然后使用软件QoS限制器。 你认为它会起作用吗?

你可以尝试使用“ 小提琴手 ”

你可以select模拟坏的networking(如旧的调制解调器33k或56k)

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

然后你可以用一个不好的networkingtesting你的代码,然后看看发生了什么;)

如果你有一个Mac的方便,Mac的内核设施称为dummynet内置,你通过ipfw控制。 它可以让你模拟一个缓慢的连接,以一定的概率随机丢弃数据包,等等。

Linux和其他操作系统中也有相同的function。

从dummynet主页 :

截至2010年2月,我们发布了dummynet的第三个主要版本,现在可以在所有主要平台上运行:FreeBSD,Mac OS X作为本地发行版的一部分,您可以在这里findLinux,OpenWRT和Windows版本。

它可以为你做很多事情:

将进入的TCP总stream量限制为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 

将networking10.1.2.0/24上的每个主机的传入stream量限制为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 

您可以使用(几乎)任何liveCd的Linux发行版(如ubuntu,mandriva等)在任何您想要的硬件上运行它,并使用基于内核的工具netem ,也就是使用“iproute2”软件包工具“Network Emulation”。 它可以让你控制广域网的延迟,丢包,腐败,重复和其他可能的问题。

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

  • 使用令牌桶过滤的速率控制:

     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%

这是另一个OSX解决scheme,看看networking链接调节器。

下面的报价是从以下博客撕下(以下所有功劳应该去马特Gemmell):

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

获取Xcode的硬件IO工具。 要做到这一点,进入Xcode菜单,然后select“打开开发工具”,最后“更多开发工具…”。 你会被带到苹果的开发者下载网站; 你应该下载“Xcode的硬件IO工具”。

生成的磁盘映像将包含(除其他之外)系统首选项的首选项窗格,称为“networking链接条件”。 双击前窗格文件并进行validation以允许安装。 您将在“系统偏好设置”中看到该窗格。

您可以使用“configuration文件”popup式菜单从各种不同的networking条件中进行select。

您也可以通过单击“pipe理configuration文件”从头开始或通过复制现有configuration文件来添加自己的configuration文件。

在testing应用程序时,非常方便地模拟不太理想的networking条件。 只是不要忘记关掉它!