
Opus コーデックとそれを使用する VoIP スタックをテストしています。ループバック インターフェイス上の 2 つのポート間で Opus RTP トラフィックを内部的に送信し、結果のオーディオをファイルに書き込んでさらに分析できるようにする合成テスト ユーティリティがあります。
Linux の「tc」ユーティリティを使用すると、さまざまなネットワーク障害をシミュレートできます。
しかし、私は「突然のネットワーク遅延」のようなものをシミュレートすることにこだわりました。私の英語が下手で申し訳ありません。
これは、ネットワークが 1 秒間停止し、その後、遅延されたすべてのパケットができるだけ早くターゲットに送信されるように見えます。
「tc」ユーティリティで実装することは可能ですか?
合成テスト プロセス中に 1000 ミリ秒の遅延を作成するために 'tc' コマンドを実行しようとしましたが、期待した効果は得られませんでした。
誰かアドバイスをくれませんか?
ありがとう :)
答え1
これは、ネットワークが 1 秒間停止し、その後、遅延されたすべてのパケットができるだけ早くターゲットに送信されるように見えます。
それは実際に可能です...man tc
:
ネットム
ネットワーク エミュレーターは、選択したネットワーク インターフェイスから送信されるパケットに遅延、パケット損失、重複、およびその他の特性を追加できる Linux トラフィック制御機能の拡張機能です。
...そしてman tc-netem
:
スロット
蓄積されたパケットの配信をスロット内に延期します。使用可能な各スロットは、取得するための最小遅延とオプションの最大遅延で設定できます。
...つまり、次のようなことができます:
sudo tc qdisc add dev interface root netem slot 1000ms 1000ms
...interface
は、たとえば の出力に示されているように、目的のネットワーク インターフェイス名ですip a
。
指定されたインターフェース上のすべての送信パケットを一定時間保持し1000ms
、その後一度に解放します(一気に)。
知らせ一方、指定されたインターフェース上の送信されるすべてのパケットにdelay
遅延が追加されます。1000ms