web-dev-qa-db-ja.com

tcを使用して特定の宛先アドレスへの帯域幅を減らす

ダイクストラコードを使用して、2つのホストH1とH2の間の最短経路を見つけようとしています。そのパス上のスイッチの1つに条件を設定します。条件は次のとおりです。パケットがH2に送信されると、パスが自動的に変更されます。

私はMininetを使用しています。スイッチに入力してH2に送信するパケットをフィルタリングすることにより、発信帯域幅を減らすためにtcを使用することを考えました。ダイクストラコードがパスを変更します。

質問したいのですが、(tc qdisc)を使用して、特定のリンクでの送信帯域幅の使用を制御できますか? tcは物理リンクまたはシミュレートされたリンクに影響しますか?

4
a66a

はい、tcはこのために設計されています。 TCは、あらゆるタイプのインターフェース(物理およびソフトウェア)で機能します。最も単純なキュースケジューラはhtb(階層トークンバケット)です。

典型的なシンプルな構成:

  • htbルートキューの規律
  • ルートクラス(100%帯域幅)
  • デフォルトのリーフクラス(80%の帯域幅保証、最大100%の帯域幅)
  • 帯域幅制限リーフクラス1(10%帯域幅保証)
  • 帯域幅制限リーフクラス2(10%の帯域幅保証、最大100%の帯域幅)
  • フロー間の制限を公平に共有するために、すべてのリーフクラスでsfqキューの規律

子クラスの要約帯域幅は、親クラスの帯域幅を超えてはなりません。そうしないと、スケジューラーは正確ではなくなります。

インターフェースの帯域幅は100Mbit/sだと思います。したがって、構成のコマンドは次のようになります。

tc qdisc add dev enp4s0f0 root handle 1: htb default 10

tc class add dev enp4s0f0 parent 1:  classid 1:1  htb rate 100Mbit ceil 100Mbit quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:10 htb rate 80Mbit  ceil 100Mbit quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:11 htb rate 10Mbit  ceil 10Mbit  quantum 15000
tc class add dev enp4s0f0 parent 1:1 classid 1:12 htb rate 10Mbit  ceil 100Mbit quantum 15000

tc qdisc add dev enp4s0f0 parent 1:10 handle 10: sfq
tc qdisc add dev enp4s0f0 parent 1:11 handle 11: sfq
tc qdisc add dev enp4s0f0 parent 1:12 handle 12: sfq

クラスの階層を構成したら、分類を構成する必要があります。さまざまな機能とさまざまなレベルのユーザーフレンドシップを備えた分類子には多くの種類があります。分類子は、設定された基準によってパケットをチェックします。パケットが一致した場合、クラスはパケットに割り当てられます。

tc filter add dev <iface> parent 1: prio 1 protocol ip 800::1 u32 match dst ip 192.168.10.2/32 classid 1:11
tc filter add dev <iface> parent 1: prio 1 protocol ip 800::2 u32 match dst ip 192.168.10.0/24 classid 1:12

この小さな例では、ホスト192.168.10.2へのパケットはクラス1:11に渡され、その結果、10Mbit/sに制限されます。 192.168.10.0/24サブネットから他のアドレスへのパケットは、クラス1:12に渡されます。他のすべてのパケットはデフォルトクラス(1:10)に渡されます。

これは、tcツールの使用のクイックスタートポイントです。

質問がある場合は質問してください。

6
Anton Danilov