我正在研究在我的应用程序中使用PF_RING进行发送和接收。
如果我计划使用PF_RING来维护TCP连接,那么在pfring_send发送原始数据包时,我看起来需要自己手动“伪造”IP和TCP消息。这是否意味着我必须在PF_RING之上手动重新实现TCP?
我知道使用PF_RING接收数据有一个明显的优势,有人尝试过用PF_RING发送数据吗?与普通的发送调用相比,是否有明显的优势?
注:我没有使用DNA (直接NIC访问),我只是使用NIC感知驱动程序的内核部分旁路。
发布于 2012-10-31 14:11:31
要回答您的第一个问题,是的,您必须从头开始手动构建TCP/IP消息、MAC地址和所有消息。举个例子,看看来自ntop.org的pfsend.c。
ntop.org还提供了一个包含解释的PF_RING user guide。
至于使用PF_RING发送数据,这是绝对可能的,其想法是绕过任何和所有的概念,实际是什么数据在线路上,并尽可能快地发送,参见来自ntop.org的wire speed traffic generation。与使用TCP/IP内核的普通发送调用相比,它唯一的优势是您可以1.更快地将数据发送到线路上,2.完全不格式化。2可能很方便,例如,当您想要在网络上回放之前捕获的数据包/多个数据包时。
除非您有一个特定的用例,需要您在没有内核干预的情况下访问原始底层数据,否则绝对没有理由以任何方式使用PF_RING。你最好的选择是使用可用的标准socket(),在大多数情况下,你能达到的性能已经足够了。
你脑海中有什么具体的用例?
https://stackoverflow.com/questions/13059070
复制相似问题