2

libpcapライブラリを使用してHTTPリクエストとレスポンスを監視しています。また、文字列検索といくつかの応答に基づいて、最新の10個のGETリクエストをメモリに保存しています。モニターがオンになっていてファイルをダウンロードしているとすると、ダウンロード速度に影響しますか、それともトラフィックに影響を与えることなくパケットのコピーがlibpcapに渡されますか?

以前は、iptables+libnetfilter_queueを使用して同じことをしていました。私のlibnetfilter_queueベースのモジュールは、すべての発信パケットと少数の着信パケットで多くの文字列検索と関連操作が実行されたため、パケットの分析に少し時間がかかりました。ダウンロード速度の影響を受けます。ダウンロードアクセラレータを使用してファイルをダウンロードするとします。モジュールが実行されているときは、実行されていないときと比較してダウンロード速度が遅くなりました。すべてのパケットが私のnetfilter_queueモジュールに渡され、次に他のユーザーアプリケーションに渡されたために可能です。libpcapでも同じ問題に直面しますか?ゼロコピーメカニズムを使用していると聞きました。

4

2 に答える 2

3

パケットのコピーが PF_PACKET ソケットに渡されるため (Linux を使用していると "libnetfilter" から推測しています)、通常のネットワーク入力として処理するのと同じコード パスでは処理されません。

libpcap の新しいバージョン (1.0 以降) は、「ゼロコピー」メカニズムである共有メモリを介してこれらのパケットをユーザーランドに渡します。

ただし、まだ各パケットの処理が行われているため、マシンにアイドル状態のプロセッサ コアと予備のメモリ帯域幅 (およびプログラムが大量のデータをファイル システムに書き込んでいる場合はディスク帯域幅) がない限り、速度が低下します。ネットフィルターベースのメカニズムのようにコードパスにないため、パケット処理のレイテンシーが直接増加することはないため、おそらくネットワークパフォーマンスにそれほど影響を与えません.

于 2012-10-04T20:11:01.340 に答える
1

トラフィックに影響を与えることなく、パケットのコピーが libpcap に渡されます。

于 2012-10-04T18:11:06.200 に答える