12

我正在研究PF_RING在我的应用程序中使用用于发送和接收。

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

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

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

4

1 回答 1

12

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

ntop.org 还提供了包含说明的PF_RING用户指南。

至于使用 发送数据PF_RING,这是绝对可能的,其想法是绕过任何和所有关于网络上实际数据的概念并尽可能快地发送,请参阅来自 ntop.org 的线速流量生成。与使用 TCP/IP 内核的正常发送调用相比,它的唯一优势是您可以发送数据 1. 更快, 2. 完全未格式化到网络上。例如,当您想在网络上播放以前捕获的数据包/多个数据包时,2 可能会很方便。


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

您想到了什么具体的用例?

于 2012-10-31T06:11:31.133 回答