gpt4 book ai didi

Linux 原始套接字 (layer2) - 最佳策略

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:30 25 4
gpt4 key购买 nike

上下文:

我正在考虑处理从网卡到应用程序的数据包的最佳方式。

我有 4 个进程在运行并从以太网网卡接收数据包。

它们运行 pf_packet 套接字以便接收第 2 层数据包。

问题是他们都必须过滤他们看到的数据包。

没有竞争条件,因为过滤是按端口完成的。一个应用程序对一个唯一端口感兴趣。

问题:

有没有办法避免每个应用程序过滤所有数据包?拥有一个过滤器核心并将数据包传送到正确的应用程序会产生上下文切换成本。

nic是否可以将自定义端口对应的数据包放入定义的rx队列中?这样我的应用程序将确保这些数据包专供它使用。

什么是最好的方法?

最佳答案

如果您不想使用 BPF 和 libpcap,也许您可​​以使用 Linux 套接字过滤器 https://www.kernel.org/doc/Documentation/networking/filter.txt这将过滤内核空间中的数据包,然后再将它们传递给您的数据包套接字。

有关一些语法示例,请使用 BSD BPF 手册页 https://www.freebsd.org/cgi/man.cgi?query=bpf&sektion=4或谷歌/duckduckgo

但我还建议,如果您的应用程序对性能至关重要,那么在丢弃任何一个特别的替代方案(如 libpcap)之前,您可以对不同的替代方案进行原型(prototype)设计和测量。

关于Linux 原始套接字 (layer2) - 最佳策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28090768/

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