我正在开发一款通过局域网访问互联网的嵌入式设备。目前处于测试阶段,我想测试当与互联网连接质量较差时该设备的性能如何。
目前,该设备通过集线器连接到路由器,我使用Wireshark监视数据包。
模拟可能发生的场景下,最好的方式是什么?我可以通过电脑实现吗?我需要访问路由器吗?如果需要,是否可以在路由器界面上限制每个IP的速度?
事实上,我的一个朋友建议我购买一个usb2lan以太网卡,将PC的局域网连接与嵌入式设备桥接,然后使用QoS软件限制网络带宽。你认为这种方法可行吗?
如果您有一台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
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
tc qdisc change dev eth0 root netem loss 0.1%
qdisc change
命令之前,您需要先使用qdisc add
命令。否则,如果有人试图单独使用最后一个命令,将会出现错误。 - davidA