gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:51 26 4
gpt4 key购买 nike

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

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

以下是我已经尝试过的:

  • pcap_open_live() 中尝试了所有不同的read-timout (in ms) 变体:甚至是 -1 的 read-timout,据我所知这应该是轮询,产生大约 3 毫秒的延迟
  • 不设置过滤器
  • 设置更高的处理优先级
  • 设置 InterrupThrottleRate=0e1000/e1000e 内核模块的其他参数以强制硬件为每一帧发送一个中断

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

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

谢谢大家的回复我希望有人能帮助我!

注意:我在 Linux/Ubuntu 下用 C/C++ 部署。

最佳答案

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

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

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

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

在“立即模式”下,捕获机制应在捕获机制接收到数据包后立即将其传递给应用程序。

关于c++ - libpcap:接收帧和调用回调函数之间的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36597189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com