2012-10-04 74 views
1

我正在使用libpcap庫來監視HTTP請求和響應。我也基於字符串搜索和一些響應將最近的10個GET請求存儲在內存中。假設顯示器已打開,並且正在下載文件,是否會影響我的下載速度,或者是否將數據包的副本傳遞到libpcap而不影響流量?網絡速度/性能是否受基於libpcap的應用程序的影響?

以前,我使用iptables + libnetfilter_queue做同樣的事情。我的基於libnetfilter_queue的模塊在分析數據包方面有點慢,因爲很多字符串搜索和相關操作都是在每個傳出數據包上完成的,而且很少有傳入數據包。它受下載速度影響,假設使用下載加速器下載文件。當模塊運行時,與沒有運行時相比,我的下載速度更慢。可能是因爲所有的數據包都被傳遞給我的netfilter_queue模塊,然後傳遞給其他用戶應用程序。 我會面臨與libpcap相同的問題。我聽說它使用了一些零拷貝機制。

+0

根據定義需要額外的CPU週期和內存帶寬它會產生影響,問題應該是效果的量化。 –

回答

2

將數據包的副本傳遞給PF_PACKET套接字(我從「libnetfilter」中推斷出您使用的是Linux),因此它不會像處理常規網絡輸入那樣在相同的代碼路徑中進行處理。

較新版本的libpcap(1.0和更高版本)將這些數據包通過共享內存傳遞給userland,這是「零複製」機制。

然而,有還在每個數據包進行處理,所以會有一定的放緩,除非你的機器有閒置的處理器內核和備用內存帶寬(和磁盤帶寬如果你的程序寫顯著的數據到文件系統)。它不會直接增加數據包處理延遲,因爲它不像基於netfilter的機制那樣處於代碼路徑中,所以它可能不會影響網絡性能。

0

它將一個包的副本傳遞給libpcap而不會影響流量。

+0

我發現這個:「libpcap不能用於實時監控,因爲它對網絡性能有很大的影響,我認爲它可以在最大有效帶寬的25%下運行,你可以觀察到使用wireshark(基於libpcap )」。在其中的一篇文章 –

+1

Pcap確實可以影響性能,這取決於它的使用方式。如果您直接使用PCap做一些事情,那麼顯然任何內存問題都會影響應用程序的性能。在這種情況下,PCap不會影響整體帶寬,而對於非CPU,非內存不足的情況應該具有最小的影響,但這當然是可能的。雖然你說,它不會影響流量本身是真實的,但性能可能會受到影響,並且PCap會爲網絡堆棧增加(限制)開銷。 – hsanders

相關問題