如何使网络接口丢弃一定比例的数据包

如何使网络接口丢弃一定比例的数据包

我想针对网络中断或网络缺陷测试应用程序。是否有任何工具可以使接口容易出现缺陷,或者以其他方式模拟质量较差的连接?例如,强制接口丢弃 10% 的数据包。

答案1

iptables 中的模块random可用于创建数据包丢失。
对于 10% 的传入数据包丢失:

$ sudo iptables -A INPUT -m statistic --mode random --probability 0.1 -j DROP

从另一台计算机得到的 ping 结果如下:

--- rpi01-wifi.smythies.com ping statistics ---
247 packets transmitted, 217 received, 12% packet loss, time 246752ms
rtt min/avg/max/mdev = 0.958/4.933/169.588/17.884 ms

对于传出的数据包也类似:

$ sudo iptables -A OUTPUT -m statistic --mode random --probability 0.1 -j DROP

从另一台计算机得到的 ping 结果如下:

--- rpi01-wifi.smythies.com ping statistics ---
1006 packets transmitted, 871 received, 13% packet loss, time 305146ms
rtt min/avg/max/mdev = 0.892/7.363/476.902/35.397 ms, pipe 2

结合两者INPUTOUTPUT强制数据包丢失,但每个概率为 0.5%:

$ sudo iptables -A INPUT -m statistic --mode random --probability 0.005 -j DROP
$ sudo iptables -A OUTPUT -m statistic --mode random --probability 0.005 -j DROP

结果是:

--- rpi01-wifi.smythies.com ping statistics ---
1000 packets transmitted, 967 received, 3% packet loss, time 253840ms
rtt min/avg/max/mdev = 0.876/7.583/536.867/36.065 ms, pipe 3

也可以看看这里

答案2

网状结构利用 Linux 和用户空间实用程序中已内置的功能来模拟网络,并可以准确地完成您的要求。

从他们的主页

数据包丢失

'tc' 命令中以百分比指定随机数据包丢失。最小可能的非零值为:

232 = 0.0000000232%

# tc qdisc 更改 dev eth0 root netem 丢失 0.1%

这会导致百分之十分之一(即1000个中的1个)的数据包被随机丢弃。

还可以添加可选相关性。这会使随机数生成器的随机性降低,并可用于模拟数据包突发丢失。

# tc qdisc 更改 dev eth0 root netem 丢失 0.3% 25%

这将导致 0.3% 的数据包丢失,并且每个连续的概率都取决于上一个概率的四分之一。

概率 = .25 * 概率-1 + .75 * 随机

相关内容