背景:
我正在考虑处理数据包的最佳方式,从nic到应用程序。
我有4个进程运行和接收数据包从以太网网卡。
它们运行pf_packet套接字,以便接收第二层数据包。
问题是,他们都必须过滤他们看到的数据包。
没有竞争条件,因为过滤是通过端口完成的。一个应用程序对一个独特的端口感兴趣。
问题是:
有没有办法避免每个应用程序过滤所有的数据包?有一个核心的过滤器和通信包到正确的应用程序需要上下文切换成本。
nic是否可以将与自定义端口相对应的数据包放入定义的rx队列中?那样的话,我的应用程序就会确定那些包是专门为它准备的。
最好的方法是什么?
发布于 2015-01-23 10:07:04
如果您不想使用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或google/duckduckgo。
但是我也建议,如果您的应用程序是性能关键的,那么在放弃任何一个替代品(比如libpcap)之前,您可以对不同的替代方案进行原型和度量。
https://stackoverflow.com/questions/28090768
复制相似问题