web-dev-qa-db-ja.com

HTB、NetEM、およびTBFトラフィック制御を同時に実装する

私は、tcLinuxコマンドラインユーティリティのいくつかの側面を使用してさまざまなネットワーク条件をエミュレートするbashユーティリティに取り組んでいます。私はいくつかのqdisc階層を正常に構築しました。それぞれがHTB帯域幅制御、NetEM遅延とパケット操作、TBFレート制御用であり、HTB-NetEMとTBF-NetEM用のハンドラーを組み合わせたものです。単一の接続でこれらすべての要素を制御する必要がある場合のための単一の構造。これは私がこれまでに持っているものです:

  Sudo tc qdisc add dev $interface root handle 1:0 htb

  Sudo tc class add dev $interface parent 1:0 classid 1:1 htb  #htb args

  Sudo tc qdisc add dev $interface parent 1:1 handle 10:0 tbf  #tbf args

  Sudo tc qdisc add dev $interface parent 10:1 handle 101:0 netem  #netem args

スコープのケースが小さいため、問題は入力の構文にあるのではなく、tcqdiscsとクラスの構造にある可能性が高いことを知っています。ブリッジの両方イーサネットポートでレートおよび帯域幅シェーピング引数(それぞれ10および15 Mbit/s)と一緒にこれらのコマンドを実行しようとすると、iperfテストの帯域幅に変更は表示されません。 in TCPまたはUDP。アドバイスをいただければ幸いです。

これが私の他のworking複合構造です。

HTBとNetEM:

  Sudo tc qdisc add dev $interface root handle 1: htb

  Sudo tc class add dev $interface parent 1:0 classid 1:1 htb  #htb args

  Sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem  #netem args

TBFとNetEM:

  Sudo tc qdisc add dev $interface root handle 1:0 tbf  #tbf args

  Sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem  #netem args
2
Ian

必要なのはHTB/TBFではなく、HFSCです。

http://man7.org/linux/man-pages/man7/tc-hfsc.7.html

Netemをリーフクラスにアタッチできます。

これがあなたが始めるためのサンプルスクリプトです。

#!/bin/bash
tc qdisc add dev veth1 parent root handle 1: hfsc default 11
tc class add dev veth1 parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
tc class add dev veth1 parent 1:1 classid 1:11 hfsc sc rate 50mbit
tc class add dev veth1 parent 1:1 classid 1:12 hfsc sc umax 1500 dmax 50ms rate 10mbit ul rate 10mbit
tc qdisc add dev veth1 parent 1:12 handle 12 netem delay 150ms
tc filter add dev veth1 parent 1: protocol ip u32 match ip sport 22 0xffff flowid 1:12

これにより、100mbitクラスが作成され、そのうち50mbitはデフォルトクラスにあります(ただし、最大100mbitまでバーストできます)が、他のクラスではリアルタイム要件が許可されているため、1500バイトのパケットは50ms以内にキューを離れる必要があります。このクラスの最大レートは10mbitです。常に。

最後に、そのクラスにリーフqdiscを追加しました。これは、キューを出るパケットを実際に150ミリ秒遅らせます。

リアルタイムクラスへのトラフィックは、送信元ポート22属性を持つことに基づいて選択されます(したがって、すべてのsshトラフィック)。

2
Matthew Ife