如何使网络接口丢弃指定百分比的数据包

lit*_*ali 2 iptables testing networking

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

Dou*_*ies 6

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

$ sudo iptables -A INPUT -m statistic --mode random --probability 0.1 -j DROP
Run Code Online (Sandbox Code Playgroud)

从另一台计算机得到以下 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
Run Code Online (Sandbox Code Playgroud)

对于传出数据包也类似:

$ sudo iptables -A OUTPUT -m statistic --mode random --probability 0.1 -j DROP
Run Code Online (Sandbox Code Playgroud)

从另一台计算机得到以下 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
Run Code Online (Sandbox Code Playgroud)

结合强制丢包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
Run Code Online (Sandbox Code Playgroud)

结果是:

--- 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
Run Code Online (Sandbox Code Playgroud)

另请参阅此处