4

Linux ルーターで、pcap を使用して IP ヘッダーとパケットの長さを取得する C プログラムを作成しました。このようにして、統計を収集し、IP に基づいて帯域幅を測定することができます。かなりきれい。:-)

現在、トラフィックとユーザー数が増加しており、古いプログラムは苦労し始めています。つまり、ルーターは大量のパケットに対処するのに苦労しています。「プライムタイム」では、全体で 1 秒あたり 50000 パケットを超えています。

プログラム自体はかなり最適化されています。見せびらかしたくはありませんが、できる限り良いものだと信じています。IP ヘッダーとパケット長を読み取ります。次に、IP をインデックスに変換し (単純な減算のみ)、パケットの長さを配列に格納 (累積) します。ときどき (実際には SIGALRM)、配列を MySQL データベースに格納します。

私の質問は: イーサネット デバイスを利用して、ビットストリームを pcap よりも「安く」取得する方法はありますか?

もちろん、イーサネット ドライバーを変更して、単一の IP 統計収集を含めることもできますが、それは少しやり過ぎのように思えます。

基本的に、私のプログラムはビジーな eth0 の「tcpdump」であり、最終的にはルーターを強制終了します。

4

2 に答える 2

6

検討しましたPF_RINGか?それはまだ のような世界ですが、ゼロ コピーメカニズムpcapのおかげで強化されています。

ここに画像の説明を入力

ご覧のとおり、低レベルのパケットをPF_RINGバッファにコピーするカーネル モジュールと、このバッファにアクセスできるユーザーランドの部分があります。

PF_RING が必要な人

基本的に、毎秒多くのパケットを処理する必要があるすべての人。「多数」という用語は、トラフィック分析に使用するハードウェアによって異なります。1.2GHz ARM での 80k パケット/秒から、ローエンドの 2.5GHz Xeon での 14M パケット/秒以上の範囲になります。PF_RING を使用すると、パケットをより高速にキャプチャできるだけでなく、CPU サイクルを維持しながらより効率的にパケットをキャプチャすることもできます....

于 2012-04-20T12:51:52.063 に答える
0

PF_RING ZCの使用を強くお勧めします。/userland/examples_zc の下にあります。これは pf_ring の一部です。

pf_ring zc により、ライン レートで数十 Gbps のトラフィックを処理およびキャプチャできます。

于 2016-12-29T05:26:04.140 に答える