web-dev-qa-db-ja.com

TC(トラフィックシェーピング)を使用して着信ネットワークトラフィックを減速および共有する方法

特定のプログラムの着信パケットを遅くしようとしていますが、2番目のパケットは未使用の帯域幅に完全にアクセスできます。つまり、あるアプリを別のアプリよりも優先するために、ネットワーク帯域幅の共有を制御したいと思います。

これが私の現在の構成です https://github.com/rfrail3/misc/blob/master/tc/traffic-control.sh

# Set up a virtual interface
modprobe ifb
ip link set dev ifb0 up

# Set up eth0 in order to redirect incoming packets
tc qdisc add dev eth0 handle ffff: ingress
# Filter to make the packet going on ifb0
tc filter add dev eth0 protocol ip parent ffff: u32 match u32 0 0 action mirred egress redirect dev ifb0

# ifb0 configuration
tc qdisc add dev ifb0 root handle 2: htb

tc class add dev ifb0 parent 2: classid 2:1 htb rate 1000mbit

tc class add dev ifb0 parent 2:1 classid 2:10 htb rate 999mbit ceil 1000mbit
tc class add dev ifb0 parent 2:1 classid 2:11 htb rate 1mbit ceil 1000mbit

次に、ifb0にフィルターを適用して、2:10(高優先度クラス)または2:11(低優先度クラス)にパケットをリダイレクトします。

パケットは期待どおりにクラスに割り当てられますが、ネットワークは両方のアプリケーション間で公平に共有されます(HTB構成から期待される1/99ではなく、50/50)。

実際、なぜ私のネットワークが公平に共有され、私の料金/上限が尊重されないのかわかりません。私はここで何が間違っているのですか?

1
LittleWhite

デフォルトのトラフィックをハンドル20に設定していますが、これは存在しないため、どのレート/上限とも一致しません。

tc qdisc add dev ifb0 root handle 2: htb default 20

_________________________________________^^^^^^^^^^

1つのルールを追加してみてくださいclassid 2:20

詳細については、このページをすばやく読むことをお勧めします: http://lartc.org/lartc.html#AEN1071

1
fgbreel