TCはIPヘッダーのQoSフィールドによって帯域幅を制限できますか?

TCはIPヘッダーのQoSフィールドによって帯域幅を制限できますか?

私たちはクライアント/サーバー アプリケーションを開発しています。サーバー アプリケーションには、ビデオ/オーディオなどのリアルタイム データ、データベース データなどの重要なデータ、一般的なファイル転送などの BestEfforts データの 3 種類のネットワーク データがあります。

各 IP パケットの QOS フィールドを設定して、IP パケットが上記の 3 つのデータ タイプのうちのどのタイプに属するかを示し、TC を使用してこれら 3 つのタイプのデータに異なる最大レートを設定する予定です。

私の知る限り、qos フィールドを設定することは可能ですが、qos 値 (IP ヘッダーの QOS フィールドの値) を指定して IP パケットのレートを制限できるかどうか疑問に思っています。

答え1

IPv4パケットヘッダーの8ビットフィールドのことだと思いますTOS。すでに読んだことがありますか?LARTC ハウツーこれは絶対に読むべきガイドです。簡単に言うと、

1) 定義しQDISCsCLASSesトラフィックが分類され、優先順位が付けられ、整形される(出力トラフィックのみシェーピングできます!!!)。一般に、送信する必要のあるパケットはすべて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) フィルターを定義するパケットを右側にエンキューします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

iptablestosモジュールは、フィールドの特定の値を一致させてマークする方法を示すために意図的に使用していますTOS。このモジュールの詳細については、次を実行してください。

iptables -m tos --help

関連情報