クライアント/サーバーアプリケーションを開発しています。サーバーアプリのネットワークデータには、ビデオ/オーディオなどのリアルタイムデータ、データベースデータなどのクリティカルデータ、一般的なファイル転送などのBestEffortsデータの3種類があります。
各IPパケットのQOSフィールドを設定して、上記の3つのIPパケットのどのデータタイプに属するかを示し、TCを使用してこれら3つのタイプのデータに異なる最大レートを設定する予定です。
私の知る限り、qosフィールドの設定は実行可能ですが、qos値(IPヘッダーのQOSフィールドの値)を指定することでIPパケットのレートを制限できるかどうか疑問に思います。
IPv4パケットヘッダーの8ビットのTOS
フィールドを意味していると思います。すでに読んだことがありますか LARTC HOWTO ?これはあなたが絶対に読む必要があるガイドです。簡単に言えば、あなたはする必要があります
1)トラフィックが分類され、優先順位が付けられ、整形されるQDISCs
およびCLASSes
を定義します(出力トラフィックは!!!)でのみ整形できます。一般に、送信する必要のあるパケットはすべて、ネットワークインターフェイスのQDISC
にキューイングされます。
CEIL=10
tc qdisc add dev eth0 root handle 1: htb default 15
tc class add dev eth0 parent 1: classid 1:1 htb rate ${CEIL}mbit ceil ${CEIL}mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 4mbit ceil ${CEIL}mbit prio 0
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 1mbit ceil ${CEIL}mbit prio 1
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 6mbit ceil ${CEIL}mbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 110: sfq perturb 10
tc qdisc add dev eth0 parent 1:12 handle 120: sfq perturb 10
prio
フィールドが低いクラスが最初に試行されます。したがって、クラス1:10は、たとえば次のことを必要とするパケット専用にすることができます。最小遅延。クラス1:11と1:12には、より公平な帯域幅共有を保証するためにSFQ
キューイング規律が付属しています。
2)FILTERsを定義して、パケットを右側のCLASS
にキューイングします。
tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10
tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 11 fw classid 1:11
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 12 fw classid 1:12
これは、マーク10のパケットがクラス10に送られることを示しています。
3)iptablesルールを定義して、パケットをマークして右側にキューに入れますCLASS
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x10
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x11
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x12
Iptables tos
モジュールを意図的に使用して、TOS
フィールドの特定の値を照合し、それに応じてマークを付ける方法を示します。このモジュールの詳細については、
iptables -m tos --help