我正在研究一个as close to real-time
我在linux中尽可能地使用系统,并且需要在收到特定数据包后立即发送大约600-800字节的TCP数据包。
为了获得最佳的延迟,我希望这个数据包直接从内核发送,而不是将接收到的数据包一直发送到用户空间和应用程序,然后返回。
如果我在 Windows 上,我会编写一个 NDIS 过滤器,我将缓存要发送的数据包和匹配的参数,以便它检查接收到的数据包,并在匹配时将预缓存的数据包触发到网络上而不通过将接收到的数据包传送至更高层。
所以我的问题是 Linux 上最接近的 NDIS 过滤器类似物是什么?
我读过有关 netfilter 的内容,也许这就是我会使用的,但我不知道这是否是最好的方法。
我还能做些什么来实现尽可能最低的延迟?
我当前的纯用户空间代码在运行 Ubuntu 10.04、2.6.3x 内核的 Intel Xeon 3.7 GHz 处理器上大约需要 80-100 微秒。
您可以使用iptables
target NFLOG
将数据包复制到用户空间或NFQUEUE
允许用户空间破坏它们。这次互动发生在netlink http://www.skyfree.org/linux/kernel_network/netlink.html,但您可以使用诸如libnetfilter_log http://netfilter.org/projects/libnetfilter_log/ and libnetfilter_queue http://netfilter.org/projects/libnetfilter_queue/环绕它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)