Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux libpcap还是PF_数据包?_Linux_Linux Kernel_Network Programming_Libpcap - Fatal编程技术网

Linux libpcap还是PF_数据包?

Linux libpcap还是PF_数据包?,linux,linux-kernel,network-programming,libpcap,Linux,Linux Kernel,Network Programming,Libpcap,我知道这个问题已经讨论过很多次了:我应该使用libpcap还是PF_数据包(数据链路套接字)来捕获数据包 根据我的研究,libpcap几乎在任何地方都被建议使用于PF_包之上,这主要是因为它的可移植性 然而,对于我当前的项目(用于生产系统),可移植性根本不是一个问题,我关心的只是性能(速度、丢包率)。我的程序运行在CentOS 5.10(内核2.6.18)上 据我所知,libpcap在每个数据包上都有一个时间戳。这会导致很大的性能损失吗? 是否有其他因素使libpcap不适合高速网络 据我所知,

我知道这个问题已经讨论过很多次了:我应该使用libpcap还是PF_数据包(数据链路套接字)来捕获数据包

根据我的研究,libpcap几乎在任何地方都被建议使用于PF_包之上,这主要是因为它的可移植性

然而,对于我当前的项目(用于生产系统),可移植性根本不是一个问题,我关心的只是性能(速度、丢包率)。我的程序运行在CentOS 5.10(内核2.6.18)上 据我所知,libpcap在每个数据包上都有一个时间戳。这会导致很大的性能损失吗? 是否有其他因素使libpcap不适合高速网络

据我所知,libpcap在每个数据包上都有一个时间戳

不,libpcap从它使用的OS数据包捕获机制获取数据包的时间戳-在Linux上是

…PF_数据包套接字

Linux内核对传入的数据包进行时间戳。PF_数据包套接字有多种读取方式:

  • 常规套接字接收,您可以为其获取带有显式ioctl的时间戳(因此您可以避免将其获取到userland,但首先无法避免为数据包添加内核时间戳;libpcap在使用常规套接字接收时,始终要求提供时间戳)
  • 内存映射访问,始终提供时间戳

Libpcap在可用时使用内存映射访问;如果您关心捕获性能,您可能也想这样做。但是,它不容易使用。

谢谢您的解释。关于“Libpcap在可用时使用内存映射访问”:这是lipcap v1.0之后的特性吗?那么1.0以前的版本呢?是的,libpcap1.0(大约6年前)中添加了这种支持;旧版本的libpcap没有它。(请注意,以Debian libpcap包和Debian衍生产品包(如Ubuntu)的名称命名的版本号与libpcap版本无关,Debian中的“libpcap-0.8”可能包含libpcap 1.x。)