Linux libpcap还是PF_数据包?
我知道这个问题已经讨论过很多次了:我应该使用libpcap还是PF_数据包(数据链路套接字)来捕获数据包 根据我的研究,libpcap几乎在任何地方都被建议使用于PF_包之上,这主要是因为它的可移植性 然而,对于我当前的项目(用于生产系统),可移植性根本不是一个问题,我关心的只是性能(速度、丢包率)。我的程序运行在CentOS 5.10(内核2.6.18)上 据我所知,libpcap在每个数据包上都有一个时间戳。这会导致很大的性能损失吗? 是否有其他因素使libpcap不适合高速网络 据我所知,libpcap在每个数据包上都有一个时间戳 不,libpcap从它使用的OS数据包捕获机制获取数据包的时间戳-在Linux上是 …PF_数据包套接字 Linux内核对传入的数据包进行时间戳。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不适合高速网络 据我所知,
- 常规套接字接收,您可以为其获取带有显式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。)