web-dev-qa-db-ja.com

ネットワークインターフェイスで定義された割合のパケットをドロップする方法

ネットワークの停止または欠陥のあるネットワークに対してアプリケーションをテストしたい。インターフェイスに欠陥を起こしやすい、またはそうでなければ低品質の接続をシミュレートするツールはありますか?たとえば、インターフェイスがパケットの10%をドロップするように強制します。

1
little ali

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

here もご覧ください。

2
Doug Smythies

netem Linuxおよびユーザー空間ユーティリティに既に組み込まれている機能を活用して、ネットワークをシミュレートし、まさにあなたが求めていることを行うことができます。

homepage から。

パケット損失

ランダムパケット損失は、「tc」コマンドでパーセントで指定されます。ゼロ以外の最小値は次のとおりです。

232 = 0.0000000232%

#tc qdisc change dev eth0 root netem loss 0.1%

これにより、1/10の割合(1000のうち1)のパケットがランダムにドロップされます。

オプションの相関関係も追加できます。これにより、乱数ジェネレーターのランダム性が低くなり、パケットバースト損失をエミュレートするために使用できます。

#tc qdisc change dev eth0 root netem loss 0.3%25%

これにより、パケットの0.3%が失われ、連続する確率はそれぞれ最後のパケットの1/4に依存します。

Probn = .25 * Probn-1 + .75 *ランダム

1
Tom