gpt4 book ai didi

c++ - TCP 和 PF_RING

转载 作者:IT老高 更新时间:2023-10-28 23:18:04 28 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

ntop.org 也做了一个 PF_RING user guide可用,包含解释。

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


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

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

关于c++ - TCP 和 PF_RING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13059070/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com