私はのためのパケット遅延や損失をシミュレートしたいUDP
とTCP
アプリケーションのパフォーマンスを測定するLinux上を。これを行う簡単な方法はありますか?
私はのためのパケット遅延や損失をシミュレートしたいUDP
とTCP
アプリケーションのパフォーマンスを測定するLinux上を。これを行う簡単な方法はありますか?
回答:
netemは、すでにLinuxに組み込まれている機能とユーザースペースユーティリティを利用してネットワークをシミュレートします。これは実際にはマークの答えが別の名前で参照しているものです。
彼らのホームページの例は、あなたがあなたが求めたものをどのようにして達成できるかをすでに示しています:
例
広域ネットワーク遅延のエミュレート
これは最も単純な例で、ローカルイーサネットから送信されるすべてのパケットに一定量の遅延を追加するだけです。
# tc qdisc add dev eth0 root netem delay 100ms
これで、ローカルネットワークでホストする単純なpingテストでは、100ミリ秒の増加が示されます。遅延は、カーネルのクロック分解能(Hz)によって制限されます。ほとんどの2.4システムでは、システムクロックは100 Hzで動作するため、10 ms単位で遅延させることができます。2.6では、値は1000〜100 Hzの構成パラメーターです。
後の例では、qdiscをリロードせずにパラメーターを変更するだけです
実際の広域ネットワークは変動性を示すため、ランダムな変動を追加することが可能です。
# tc qdisc change dev eth0 root netem delay 100ms 10ms
これにより、追加される遅延は100±10 msになります。ネットワーク遅延の変動は純粋にランダムではないため、相関値があることもエミュレートします。
# tc qdisc change dev eth0 root netem delay 100ms 10ms 25%
これにより、追加された遅延は100±10 msになり、次のランダム要素は最後のものに25%依存します。これは真の統計的相関ではなく、概算です。
配信遅延
通常、ネットワークの遅延は均一ではありません。正規分布のようなものを使用して遅延の変動を説明するのがより一般的です。netemの分野では、テーブルを使用して不均一な分布を指定できます。
# tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal
実際のテーブル(通常、パレート、パレートノーマル)は、iproute2コンパイルの一部として生成され、/ usr / lib / tcに配置されます。そのため、実験データに基づいて独自のディストリビューションを作成することも可能です。
パケットロス
ランダムパケット損失は、「tc」コマンドでパーセントで指定されます。最小の非ゼロ値は次のとおりです。
2 −32 = 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%のパケットが失われ、連続する確率はそれぞれ、最後の確率に4分の1ずつ依存します。
確率n = 0.25 ×確率n-1 + 0.75×ランダム
tc qdisc add
そのインターフェースのルールがないtc qdisc change
場合、またはそのインターフェースのルールがすでにある場合に使用する必要があることに注意してください。tc qdisc change
ルールのないインターフェイスで使用しようとすると、エラーが発生しますRTNETLINK answers: No such file or directory
。
tc -p qdisc ls dev eth0
現在定義されているルールを一覧表示し、tc qdisc del dev eth0 root
それらを削除することに注意してください
ドロップされたパケットについては、単純にiptablesと統計モジュールを使用します。
iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP
上記は、1%の確率で着信パケットをドロップします。注意してください。約0.14を超えると、ほとんどのTCP接続が完全に停止します。
詳細については、man iptablesを調べ、「統計」を検索してください。
DROP
に注意してください(本来のように)。send()
EPERM
iptables -D INPUT -m statistic --mode random --probability 0.01 -j DROP
ネットワーク物理シミュレーションに関するこのチュートリアルには、UDP接続でのレイテンシとパケット損失をシミュレートするためのサンプルコードに C ++クラスが含まれており、参考になる場合があります。ダウンロード可能なソースコードのConnection.hファイルにあるConnectionクラスのパブリックレイテンシとpacketLoss変数を参照してください。
http://snad.ncsl.nist.gov/nistnet/を試すことができます。 これは非常に古いNISTプロジェクト(最終リリース2005)ですが、私には問題ありません。