我正在考虑使用PF_RING
在我的应用程序中发送和接收。
如果我打算使用PF_RING
来维护TCP连接,看起来我需要自己手动“伪造”IP和TCP消息,因为pfring_send
发送原始数据包。这是否意味着我必须在PF_RING
之上手动重新实现TCP?
我了解使用PF_RING
接收有明显优势,是否有人尝试使用PF_RING
发送数据?与普通的发送呼叫相比,有明显的优势吗?
注意:我没有使用DNA(直接NIC访问),我只是使用具有NIC感知驱动程序的内核部分旁路。
答案 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()
,在大多数情况下,您可以实现的性能绰绰有余。
您有什么具体用例?