web-dev-qa-db-ja.com

ToSフィールドを使用してTCPトラフィックに優先順位を付けることができないのはなぜですか?

IPヘッダーのToSフィールドを使用してTCPトラフィックを優先しようとしています。ToSフィールドを0x10(最小化-遅延)に設定して、iperfを介して1GBのデータを送信することでインターフェイス(イーサネット)を飽和させています。次に、別のTCPクライアントをデフォルトのToS(0)で起動します。

期待:私のTCPクライアントは、iperfがデータの送信を完了するまでデータを送信しないでください。

結果:タフなiperfがより高い優先度でパケットを送信している場合でも、クライアントからのデータが送信されます。

また、2つの別々のクライアントを作成し、iptablesを使用してそれぞれのクライアントに0x10と0x08のToSを割り当てることにより、同じシナリオを作成しようとしました。私が使用したもの:iptables -A PREROUTING -t mangle -p tcp --sport 5000 -j TOS --set-tosMinimize-Delay

私はまだ1つのクライアントを他のクライアントよりも優先することができません。

私はUbuntu(14.04)とiptablesバージョン1.4.21を使用しています

誰かが親切に私が問題を解決するのを手伝ってくれる?

ありがとうVarun

1
Varun

ToSフィールドは、パケットに優先順位を付ける方法またはルーティングする方法を示します。次に、これらのパケットで何をしたいかを説明するポリシーを指定する必要があります。 ToSフィールドはLANでのみ役立つことに注意してください。通常、ISPはToSを無視またはリセットします。

Linuxを実行しているので、tc(トラフィック制御)を確認する必要があります。 (これが 良い 開始です)

厳密なToSベースの優先順位が必要な場合は、pfifo_fastスケジューラーを設定する必要があります(おそらくデフォルトでfq_codelがあります)。

tc qdisc add dev eth0 root pfifo_fast

ただし、柔軟性を高めたい場合は、クラスフルアルゴリズムとして hfsc またはhtbを試してから、リーフクラスレスアルゴリズムとしてfq_codel/pfifo/sfqを試してみてください。 ToSをiptablesまたはtcと一致させることは引き続き可能です。

1
Sanael