libpcap:接收帧和调用回调函数之间的延迟

libpcap: Delay between receiving frames and call of callback-function

我遇到了以下情况: 我用 pcap_open_live() 我的网络接口之一打开。然后我正在为 pcap 编译一个过滤器,只捕获指定的以太网类型(ether proto 0x1234)。现在我开始 pcap_loop()。回调函数执行的唯一一件事是通过 pcap_inject() 发送一个帧。 (框架被硬编码为全局字符数组)。

当我现在比较接收帧和发送帧的时间戳时(例如,在第三台非相关计算机上的 wireshark 上),延迟大约为 3 毫秒(最小 1 毫秒,但也最多 10 毫秒)。所以 pcap 平均需要大约 3 毫秒来处理接收到的帧并调用回调函数来发送新帧。 我 want/have 减少延迟。

以下我已经尝试过的事情:

但我从来没有将延迟降低到平均 3 毫秒以下。

对于我计划的应用程序,有必要在 100 微秒 内对传入的数据包做出反应。 对于 libpcap,这甚至通常可行吗?!或者对于实现这样的应用程序还有其他建议吗?

感谢您的所有回复, 我希望有人能帮助我!

注意事项:我在C/C++中的Linux/Ubuntu下部署。

For my planned application it is necessary to react to incoming packets in a time under 100 microseconds.

然后是 libpcap 运行的许多捕获机制的缓冲(BPF 除了在 AIX 上,TPACKET_V3 在 Linux 上使用较新的 libpcap 和内核,DLPI 在 Solaris 10 和更早版本上,等等。 ) 提供以减少每个数据包的开销会妨碍您。

如果您系统上的 libpcap 具有 pcap_set_immediate_mode() 函数,则:

  • 使用pcap_create()pcap_activate(),而不是pcap_open_live()来打开捕获设备;
  • pcap_create()pcap_activate() 调用之间调用 pcap_set_immediate_mode()

在 "immediate mode" 中,捕获机制应在捕获机制接收到数据包后立即将其传递给应用程序。