TCP和PF_RING

时间:2012-10-24 22:53:51

标签: c++ c linux-kernel pf-ring

我正在考虑使用PF_RING在我的应用程序中发送和接收。

如果我打算使用PF_RING来维护TCP连接,看起来我需要自己手动“伪造”IP和TCP消息,因为pfring_send发送原始数据包。这是否意味着我必须在PF_RING之上手动重新实现TCP?

我了解使用PF_RING接收有明显优势,是否有人尝试使用PF_RING发送数据?与普通的发送呼叫相比,有明显的优势吗?

注意:我没有使用DNA(直接NIC访问),我只是使用具有NIC感知驱动程序的内核部分旁路。

1 个答案:

答案 0 :(得分:12)

要回答您的第一个问题,是的,您必须从头开始,MAC地址和所有人手动构建TCP / IP消息。有关示例,请查看pfsend.c中的ntop.org

ntop.org也提供了一个包含解释的PF_RING user guide

至于使用PF_RING发送数据,绝对可能,我们的想法是绕过网络上实际数据的所有概念并尽可能快地发送,请参阅wire speed traffic generation ntop.org。它使用内核进行TCP / IP的正常发送调用的唯一优势是,您可以更快地发送数据1.并且完全未格式化到线路上。例如,当您想要将先前捕获的数据包/多个数据包回放到网络上时,2可以很方便。


除非您有一个特定的用例,要求您在没有内核干预的情况下访问原始基础数据,否则完全没有理由以任何方式使用PF_RING。您最好的选择是使用可用的标准socket(),在大多数情况下,您可以实现的性能绰绰有余。

您有什么具体用例?