2

我正在使用 libpcap 库来监控 HTTP 请求和响应。我还根据字符串搜索和一些响应将 10 个最近的 GET 请求存储在内存中。假设监视器打开并且我正在下载文件,它会影响我的下载速度,还是将数据包的副本传递给 libpcap 而不会影响流量?

以前,我使用 iptables + libnetfilter_queue 做同样的事情。我的基于 libnetfilter_queue 的模块在分析数据包时有点慢,因为对每个传出数据包都进行了许多字符串搜索和相关操作,而传入数据包很少。它受下载速度的影响,假设使用下载加速器下载文件。当模块运行时,与未运行时相比,我的下载速度较低。可能是因为所有数据包都传递给了我的 netfilter_queue 模块,然后传递给了其他用户应用程序。我会面临与 libpcap 相同的问题吗?我听说它使用了一些零拷贝机制。

4

2 回答 2

3

数据包的副本被传递到 PF_PACKET 套接字(我从“libnetfilter”推断您正在使用 Linux),因此它不会在将其作为常规网络输入处理的同一代码路径中进行处理。

较新版本的 libpcap(1.0 和更高版本)通过共享内存将这些数据包传递到用户空间,这是“零复制”机制。

但是,每个数据包仍在进行处理,因此除非您的机器有空闲的处理器内核和空闲的内存带宽(如果您的程序正在将大量数据写入文件系统,还有磁盘带宽),速度会有所下降。它不会直接增加数据包处理延迟,因为它不像基于 netfilter 的机制那样位于代码路径中,因此它可能不会对网络性能产生太大影响。

于 2012-10-04T20:11:01.340 回答
1

它将数据包的副本传递给 libpcap 而不会影响流量。

于 2012-10-04T18:11:06.200 回答