我正在使用libpcap库来监控HTTP请求和响应。我还基于字符串搜索和一些响应将10个最新的GET请求存储在内存中。假设显示器已打开并且我正在下载文件,它是否会影响我的下载速度,或者它是否会将数据包副本传递给libpcap而不会影响流量?
以前,我使用iptables + libnetfilter_queue做同样的事情。我的基于libnetfilter_queue的模块在分析数据包时有点慢,因为每个传出数据包都进行了很多字符串搜索和相关操作,并且传入的数据包很少。它受下载速度的影响,假设使用下载加速器下载文件。当模块运行时,我的下载速度与未运行时相比较少。可能是因为所有数据包都传递给我的netfilter_queue模块,然后传递给其他用户应用程序。 我是否会面临与libpcap相同的问题。我听说它使用了一些零拷贝机制。
答案 0 :(得分:2)
数据包的副本被传递到PF_PACKET套接字(我从“libnetfilter”推断你正在使用Linux),因此它不会在处理它作为常规网络输入的相同代码路径中处理。
较新版本的libpcap(1.0及更高版本)通过共享内存将这些数据包传递给userland,这是“零拷贝”机制。
但是,每个数据包都有仍在进行处理,因此除非您的计算机具有空闲的处理器内核和备用内存带宽(如果您的程序写入大量的数据到文件系统)。它不会直接增加数据包处理延迟,因为它不像基于netfilter的机制那样在代码路径中,因此它可能不会对网络性能产生太大影响。
答案 1 :(得分:0)
将数据包的副本传递给libpcap而不影响流量。