如何使用虚拟网络(ipfw)模拟本地主机中的带宽和延迟



我在localhost:8080中使用Web服务器,我正在尝试使用dummynet(ipfw)来模拟该服务器的延迟和低带宽,但不知何故我无法让它工作。

当我使用命令时

sudo ipfw add pipe 1 all from any to any
sudo ipfw pipe 1 config bw 400Kbit/s delay 100ms

然后 ping 本地主机

ping localhost

我得到这些结果:

PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=686.512 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=848.309 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=409.890 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=410.988 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=424.014 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=411.002 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=409.175 ms
64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=417.517 ms

我的问题是:

  1. 为什么ping往返时间(~400ms)大约是我指定的延迟(100ms)的4倍

  2. 带宽限制似乎也不起作用。当我尝试从 Chrome 中的地址http://localhost:8080/Testfile下载 6Mb 测试文件时,我会立即获得该文件,而不是以我想要的速度

无法回答 #1,但对于 #2 - 您可能会有更清晰的结果来测试从网络中的另一台计算机下载。

您将为网卡安装虚拟网驱动程序。 我的理论是,如果您的浏览器正在联系本地主机,它可能会绕过该网卡(或 dummynet 注入延迟的钩子?

基本上,我无法让 dummynet 为同一服务器上的任何内容注入延迟。 例如,我有两个服务,它们可以立即相互通信。 另一台计算机上的任何其他内容都会注入延迟。

您可以尝试Fiddler - http://helephant.com/2012/07/11/simulating-network-latency-with-fiddler/- 它似乎也会在本地主机上注入延迟。

最新更新