多くの場合、ネットワークアプリケーションの動作に対する遅延、損失、およびジッタの影響を調査するタスクがあります。 同様のタスクは、VoIPソリューション、ネットワークゲーム、およびストリーミングメディアコンテンツの開発または実装に関与する専門家が主に直面します。 GPRS、CDMA、衛星通信システムなどのワイヤレスデータネットワークの普及により、アプリケーションのパフォーマンスに対するデータネットワークパラメータの影響の研究が特に重要になっています。
検討中のアプリケーションに対するデータネットワークのさまざまなパラメータの影響をシミュレートできるスキームを検討してください。 シミュレーションには、すべての必要なツールが存在するGNU / Linuxオペレーティングシステムを使用すると非常に便利です。 Linuxカーネルには、WANをエミュレートする機能を提供するnetemモジュールが含まれています。 モジュールの現在のバージョンには、次の機能があります。
異なる分布関数での遅延エミュレーション
損失エミュレーション
パケット再試行エミュレーション
パケットシャッフルエミュレーション
パケット歪みエミュレーション
このモジュールは、Linux 2.6カーネル(Fedora、OpenSuse、Gentoo、Debian、Mandriva、Ubuntu)に基づく最新のディストリビューションにデフォルトで含まれており、iproute2パッケージのtcコマンドを使用して管理されます。 ディストリビューションにこのモジュールが含まれていない場合は、自分で有効にすることができます。
Networking -->
Networking Options -->
QoS and/or fair queuing -->
Network emulator
トランスポートネットワークパラメーターのアプリケーションへの影響を調べるには、図に示すスキームに従って動作する専用コンピューターを使用するのが最も簡単です。 1.専用コンピューターでは、ポートはイーサネットブリッジに接続されます。これにより、1つのインターフェイスから別のインターフェイスにパケットを透過的に転送し、スイッチとして機能できます。 このソリューションは最適です。トランスポートストリームの必須パラメーターを変更するだけでなく、トラフィックをフィルターできるようになったためです。
![](http://m0sia.ru/files/bridge.png)
ブリッジを構成するには、システムにbridge-utilsパッケージをインストールする必要があります。 提案された構成を作成するには、ブリッジを作成する必要があります。
#brctl add br0
必要なインターフェイスを追加します。
#brctl addif br0 eth0
#brctl addif br0 eth1
ネットワーク経由でコンピューターにアクセスするように、br0インターフェイスのアドレスを構成します。
#ifconfig br0 <>
その後、1つのインターフェイスに着信するイーサネットフレームは別のインターフェイスに転送されます。 転送されたパケットはnetfilterを通過するため、ネットワークレベルのiptablesおよびOSIモデルのデータリンクレイヤーのebtablesを使用して、トラフィックのフィルタリングを制御できます。
パケット遅延エミュレーション
最も簡単な例は、遅延をエミュレートするルートqdiscを追加することです。
# tc qdisc add dev eth1 root netem delay 800ms
発信トラフィックのみを制御できることを覚えておく価値があります。したがって、このスキームのこのコマンドは、サーバークライアントからの方向に向かうデータの遅延を800ミリ秒に設定します。 シナリオをより現実的にするために、標準偏差を追加できます。 将来、ルートqdiscを変更します。
# tc qdisc change dev eth0 root netem delay 800ms 100ms
これで、遅延は100ミリ秒の偏差で変化します。
netemモジュールでは、不均一な遅延分布を指定できます。 たとえば、正規分布関数を指定するには、次を実行する必要があります。
# tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal
他の配布テーブル(normal、pareto、paretonormal)は、iproute2とともに/ usr / lib / tcディレクトリーにインストールされます。 実験データに基づいて、通信チャネルの遅延を反映する独自の配布テーブルを生成することは難しくありません。
パケットフローの変更のエミュレート
ランダムパケット損失はパーセンテージで設定されます。
# tc qdisc change dev eth0 root netem loss 0.1%
これにより、1000パケットのうち1パケットが失われます。 オプションとして、パケット損失の相関を追加できます。 これにより、乱数ジェネレーターは「ランダムが少なくなります」。 これを使用して、パケットバーストをエミュレートできます。
# tc qdisc change dev eth0 root netem loss 0.5% 25%
この例では、パケットの0.5%が失われ、前のパケットが失われた場合、パケット損失の確率は4分の1増加します。
パケットの複製は、損失と同じ方法で定義されます。
# tc qdisc change dev eth0 root netem duplicate 1%
新しいカーネル(2.6.16以前)では、パケットにホワイトノイズを追加することができます。 この機能はパケット損失と同様に指定されます:
# tc qdisc change dev eth0 root netem corrupt 0.1%
遅延のあるネットワークで発生する別の状況は、以前に送信されたパケットがその後に送信されたパケットよりも後に到着する場合のパケットシャッフルです。 netemモジュールには2つのミキシングテクニックがあります。 最も単純なのはギャップ法です。 この方法では、N番目のすべてのパケットが混合されます。
# tc qdisc change dev eth0 root netem gap 5 delay 10ms
この例では、5番目のパケットごとにすぐに送信され、残りのパケットは10ミリ秒遅延します。 これにより、パケットは送信された順序とは異なる順序で到着します。 この動作は、トランスポートプロトコルの単純なデバッグに役立ちます。
次のreoderメソッドは、実際の生活により近いものです。 これを使用して、混合できるパケットの割合を指定できます。
# tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
この例では、25%のパケット(50%の相関)がすぐに送信され、残りは10ミリ秒遅延します。
3番目の可能な混合オプション。
# tc qdisc change dev eth0 root netem delay 100ms 75ms
1つのパケットが100ミリ秒の遅延を受信し、1ミリ秒後に送信される次のパケットが50ミリ秒(100ミリ秒-50ミリ秒のジッター)の遅延を受信する場合、2番目のパケットが早く送信されます。
いずれかのメソッドを実装するには、遅延を使用する必要があることに注意してください。
netemモジュールはトラフィック管理の分野であるため、TBF、CBQなどの他の分野と組み合わせて使用できます。また、分野のチェーンを構築し、それらにさまざまなフィルターを適用することもできます。
# tc qdisc add dev eth0 root handle 1: prio
# tc qdisc add dev eth0 parent 1:3 handle 30: netem \
delay 200ms 10ms distribution normal
# tc qdisc add dev eth0 parent 30:1 tbf rate 20kbit buffer 1600 limit 3000
# tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 \
match ip dst 65.172.181.4/32 flowid 1:3
この例では、優先度のルートディシプリンを作成し、3番目の優先度にnetemディシプリンを付加してから、速度シェーピングを追加します。
ご覧のとおり、Linuxツールを使用すると、ネットワークで発生する可能性のある異常をシミュレートできます。 したがって、システム管理者は、分散サービスを展開して新しいプロトコルを導入するときに必要なテストを実行できます。
使用したソースhttp://www.linux-foundation.org/en/Net:Netem
私のブログからのクロスポスト: m0sia.ru/node/67
あなたが私の間違いを指摘した場合、私は感謝します。