libpcap还是PF_PACKET?

时间:2014-10-14 15:45:16

标签: linux network-programming libpcap

我理解这个问题已被多次讨论过:我应该使用libpcap还是PF_PACKET(数据链接套接字)来捕获数据包?

根据我的研究,libpcap在几乎所有地方都建议使用PF_PACKET,主要是因为它的可移植性。

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

1 个答案:

答案 0 :(得分:2)

  

据我所知,libpcap为每个数据包设置了一个时间戳。

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

...... PF_PACKET套接字。

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

  • 常规套接字接收,您可以为其获取带有显式ioctl的时间戳(因此您可以避免将其提取到userland ,但是您无法避免内核时间标记数据包第一个地方; libpcap,当使用常规套接字时,总是要求时间戳);
  • 内存映射访问,始终提供时间戳。

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