Ale*_*lex 12 c c++ linux-kernel pf-ring
我正在看看PF_RING在我的应用程序中使用发送和接收.
如果我计划PF_RING用于维护TCP连接,看起来我需要自己手动"伪造"IP和TCP消息,因为pfring_send发送原始数据包.这是否意味着我必须手动重新实现TCP PF_RING?
我明白接收使用有明显的优势PF_RING,有没有人试过发送数据PF_RING?与普通的发送呼叫相比,有明显的优势吗?
注意:我没有使用DNA(直接NIC访问),我只是使用具有NIC感知驱动程序的内核部分旁路.
X-I*_*nce 12
要回答您的第一个问题,是的,您必须从头开始,MAC地址和所有人手动构建TCP/IP消息.有关示例,请查看ntop.org中的pfsend.c.
ntop.org还提供了一个包含解释的PF_RING用户指南.
至于使用发送数据PF_RING,绝对可能的想法是绕过网络上实际数据的所有概念并尽可能快地发送,参见ntop.org的线速流量生成.它使用内核进行TCP/IP的正常发送调用的唯一优势是,您可以更快地发送数据1.并且完全未格式化到线路上.例如,当您想要将先前捕获的数据包/多个数据包回放到网络上时,2可以很方便.
除非您有一个特定的用例,要求您在没有内核干预的情况下访问原始底层数据,否则完全没有理由以PF_RING任何方式使用.您最好的选择是使用socket()可用的标准,在大多数情况下,您可以实现的性能绰绰有余.
您有什么具体用例?