2011-01-31 3 views
0

linuxでフローベースのトラフィックシェーピングを実現する方法があるのだろうかと思います。 従来のトラフィックシェーピングのアプローチは、高いスループットを必要とする特定のプロトコルまたはタイプのパケット(ssh、http、SYNまたはACKなど)のクラスを作成することに基づいているようです。トラフィックシェーピングのフローベースのトラフィック分類

ここでは、すべてのTCP接続を特定のデータレートによって特徴付けられるフローとして見たいと思います。インタラクティブなsshやIRCチャットと今私が探しているように、SCPまたはhttpファイル転送など

  • 遅い流れ(バルクデータ)
  • として

    • 速い流れがあるでしょう 着信パケットをこれらのクラスの1つに分類して分類する方法について説明します。そのため、tcベースのトラフィックシェイパーを実行できます。何かヒント?

    +0

    アウトバウンドまたはインバウンドのトラフィックを整形しますか?インバウンドの場合、なぜですか? – ezpz

    +0

    実際、これは専用のマシンで実行されるため、両方向の作成が目的です(つまり、巨大なダウンロードや巨大なアップロードはリンクをブロックしません)。 相互シェイピングは実現が難しいことを知っています。そのため、インターフェイス上で各方向を別々に形作ることは完全にうまくいくでしょう。 – rumpel

    答えて

    2

    専用のマシンについて言及してきたので、ネットワークブリッジから管理していると仮定します。そのため、システム全体でパケット全体にアクセスできます。

    リンクの飽和と言っているとき、接続の受信側のスロットルは意味がありません。パケットが表示されるまでには、すでにのリソースが消費されています。これはあなたが橋であっても当てはまります。現実的には、出力インターフェイスでインテリジェントな操作しか行うことができません。

    私は、あなたが望むものをまさに行うことができる既製品を見つけることはないと思います。実行中に派生したルールに従って、dummynetのようなものを動的に変更する必要があります。あるいは、既存のインフラストラクチャを使用してダイナミックソフトウェアルータをプログラムする必要があります。私がよく知っているのはClick modular routerですが、他にもあります。私は実際にtcipfwのようなものが高頻度で構成/再構成されることに反応するかどうかはわかりません。

    ただし、事前に対処する必要があることがあります。実装に関係なくこのタスクを困難にするようなこと。たとえば、

    1. どのようにscp bulkとsshの対話動作を区別することを計画していますか?最初の動作を監視し、それに基づいてルールを適用しますか?
    2. HTTP固有のスロットリングについて説明します。これはDPIを意味します。あなたはこのブリッジ/ルータでこれをサポートできますか?いくつのクラスのアプリケーショントラフィックをサポートしますか?
    3. どのように競合を処理する予定ですか? (あなたは '一括'フローを割り当ててそれぞれ容量の30%を得ますが、消費しようとすると、10 'バルク'フローを取得します)
    4. リンク容量をハードコードするか測定しますか?それは固定されているのか、それとも変わるのだろうか

    一般に、ネットワーキング5タプルをハッシュするだけで、「フロー」というかなりの考えを得ることができます。しかし、アプリケーションのセマンティクスを扱うことができれば、すべてのベットはオフになり、パケットの内容を掘り下げて必要なものを得る必要があります。

    もっと具体的な目的を持っていれば、これらの問題の一部を解決するかもしれません。

    +0

    +1モジュラールーターをクリック – Konerak

    +0

    お返事ありがとうございます。 – rumpel

    +0

    'INET router <-> net' 入力制限を考慮すると、TCPは適応するので、インスロットからルータまで、そしてルータのキューは存在しないので、シェーパは優先順位を付けるパケットを決定します。 (私がこのコンセプトについて間違っている場合は私を修正してください) – rumpel