我想在Linux上模拟UDP和TCP的数据包延迟和丢失,以衡量应用程序的性能。有什么简单的方法吗?


当前回答

Iptables(8)有一个统计匹配模块,可以用来匹配每n个数据包。要删除这个包,只需添加-j drop。

其他回答

对于丢弃的包,我将简单地使用iptables和统计模块。

iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP

以上将以1%的概率丢弃一个传入数据包。小心,任何超过0.14的东西,你们中的大多数tcp连接很可能会完全失速。

使用-D撤消:

iptables -D INPUT -m statistic --mode random --probability 0.01 -j DROP 

看看man iptables,搜索“statistic”来获取更多信息。

我自己还没有尝试过,但是这个页面有一个在Linux内置iptables IP过滤系统中运行的插件模块列表。其中一个模块称为“nth”,它允许您设置一个规则,该规则将丢弃可配置的数据包速率。至少这是个不错的开始。

Iptables(8)有一个统计匹配模块,可以用来匹配每n个数据包。要删除这个包,只需添加-j drop。

破坏者是一种易于使用的网络故障注入工具。它可以模拟:

网络总分区 远程服务关闭(没有监听预期的端口) 延迟 包丢失 -TCP连接超时(当两个系统被有状态防火墙隔开时经常发生)

科学界最常用的工具之一就是DummyNet。一旦你安装了ipfw内核模块,为了在两台机器之间引入50ms的传播延迟,只需运行这些命令:

./ipfw pipe 1 config delay 50ms
./ipfw add 1000 pipe 1 ip from $IP_MACHINE_1 to $IP_MACHINE_2

为了引入50%的丢包,你必须运行:

./ipfw pipe 1 config plr 0.5

这里有更多细节。