web-dev-qa-db-ja.com

LinuxTCクラス/フィルターの番号付け

私は現在、ISPレベルの企業向けのトラフィックシェーピングソリューションに取り組んでおり、興味深い(哲学的な)問題に直面しました。

システムが処理する必要のあるエンドポイントの数(約2万)を見ると、より多くのユーザーのトラフィックをポリシー化/形成する必要がある場合にどうなるかについて少し心配しました。現在、ネットワーク全体にHFSCシェーピングツリー(tc-hfscを参照、よく知られているHTBとほぼ同じですが、よりクールなもの)を使用しているため、より多くのClassIDを使用する必要があります(明らかに、通信網)。私が見つけた問題は、TC ClassIDが制限されていることでした。16ビットの数値であるため、このソリューションによって最大64kのユーザーが形成される可能性があります。

同様に、TCフィルターを効率的に管理したい場合(たとえば、「すべてフラッシュする手法」を使用しない場合)、個々のフィルターエントリを削除または変更できる必要があります。 (私はLARTC [1]のハッシュテーブルに似たものを使用しています)。繰り返しますが、これで機能していると思われる唯一の方法は、個々の優先順位を使用してすべてのフィルターに番号を付けることです(tc filter add dev ... prio 1)。この目的に使用できるパラメーターは他にありません。残念ながら、prioも16ビットのみです。

私の質問は次のとおりです。「tcclass」コマンドの32ビットclsidや「tcfilter」の32ビット優先度(またはその他の変更ハンドル)など、使用可能な「識別子スペース」を拡大するための適切な方法はありますか?コマンド?

どうもありがとう、

-mk

(ところで、これが「64kユーザーで十分なはず」のシナリオにならないことを願っています...)

12
exa

アップストリームクラスとダウンストリームクラスを備えた64kユーザーと、それぞれのフィルターを同じインターフェイスに配置するべきではないと思います。使用しているインターフェースごとにハンドラーを繰り返すことができるため、インターフェースを追加します。これを行うには、信じられないほどの作業/サーバー/ NICが必要になります。サーバーがクラッシュすると、64k人のユーザーがオフラインになります(その量のトラフィックで簡単にクラッシュします)。ネットワークカードを通過する各パケットは、フィルターによってチェックおよび分類され、キューに入れられるクラスに送信されることを忘れないでください。これは、64k人の顧客がいるISPゲートウェイのNIC)にとっては大変な作業です。主に、現在のすべてのビデオストリーム(適切にキューに入れるのは難しい)です。

2
Pabluez

1台のマシンですべてのトラフィックを処理する代わりに、トラフィック処理を2台のマシンに分割できます(3台目のマシンを使用)。トラフィックは、送信元IPアドレスに基づいて簡単にルーティングできます。したがって、IP範囲を均等に分割できれば、最適には1万人のユーザーがいることになります。

もちろん、必要に応じて3台以上のマシンを使用できます。これは、Linuxカーネルにパッチを適用して他のハックを行うよりも優れていると思います。つまり、トラフィックシェーピングは複数のマシンに分散されます。中央ノードは、トラフィックを適切な処理ノードに転送するだけです。

0
Khaled