【问题标题】:Ethernet frames from NIC来自 NIC 的以太网帧
【发布时间】:2017-01-31 06:06:25
【问题描述】:

我正在为我最近工作的一个网络项目寻求帮助和意见建议。这要求 Linux 机器是被动网络设备。

网络数据包从一个网络接口传入并从另一个接口(net--eth0-->Linux PC--eth1-->net)传出,而不对数据进行任何修改。

将在 Linux 系统上运行的应用程序只会更改数据包的顺序。这将是一个“愚蠢的”网络仿真器应用程序。

第一个实现是使用 RAW 套接字实现的,其中每次数据包到达用户空间时都会调用 read(),而当以太网数据包应该向下发送到 NIC 时会调用 write()。

我想知道有没有比RAW socket更实用直接的方法,绕过Linux的网络栈。

【问题讨论】:

  • 你无法绕过 Linux 网络堆栈,而他们的做法可能是最简单的方法。实用是什么意思?
  • 实用的方法是实现的技术部分。套接字实现需要具有非阻塞 IO 的 tx-rx 机制,这就是我首先在 C 下使用 select() 和 pthreads 实现的方式。有更好的设计理念吗?此外,我正在寻找一种中间系统不会处理所有网络流量的方法。只有仿真应用程序应该在两个接口之间运行。
  • 您可以做的是创建一个netfilter 挂钩并让它接收您的数据包,然后立即发送它们。这样你的数据包就不必传送到用户空间,你可以在内核空间内进行处理,速度更快。
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?

标签: linux ethernet nic


【解决方案1】:

如果您想要绕过内核,Linux 中的 DPDK 和 FreeBSD 中的 NetMap 是可以做到这一点的选项。

【讨论】:

    【解决方案2】:

    这确实可以在 Linux 的 dpdk 中完成。 dpdk 树的examples 文件夹中有l3fw 和l2fwd 示例应用程序,可能对您有所启发。也可以考虑使用vpp,一个Linux Foundation托管的fd.io项目,可以使用dpdk。

    拉米·罗森

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      相关资源
      最近更新 更多