【问题标题】:how can we send/received frames in layer 2 (Using MAC address ) in Linux kernel我们如何在 Linux 内核的第 2 层(使用 MAC 地址)发送/接收帧
【发布时间】:2018-03-09 21:35:23
【问题描述】:

我正在硕士研究并行计算方面。我们正在创建一个真正的 TriBA-Network 一个基于 Triple 的架构(用于多核处理器网络)。为此,我正在研究网络部分。所以我必须在这个网络的第 2 层实现路由。我已经使用 TCP\IP 协议在第 3 层(网络层)上完成了路由。但是我们必须在第 2 层发送/接收帧(不是数据包)。

也许我可以使用 RAW 套接字通过网络编程来发送帧。但是我们如何在远程 PC 中接收这些帧并转发。 如果有人知道我可以用于此任务的较低级别的通信,请在此处分享。 提前谢谢。
计算机通过局域网在该拓扑中本地连接TriBA Topology Network

【问题讨论】:

  • 拓扑上的这些节点——它们之间是否存在中间网络设备(交换机和路由器)?节点之间有这样的设备吗?
  • 我认为问题“如何使用原始套接字?”有点宽泛。
  • @ZabojCampula 我只是在这里提到了 RAW 套接字,因为我必须像不同的 RAW 套接字那样工作。 RAW 套接字使用 MAC 地址而不是 IP 在第 2 层进行通信。所以我在第 2 层进行研究以在这个 TriBA 拓扑中实现我们的 TriBA 算法linklink
  • @Vovanrock2002 不,这些是通过 LAN 连接的计算机,每个都包含四端口服务器以太网适配器 link,而不是路由器和交换机。正如我上面所描述的,我通过将 Linux 机器作为路由器在第 3 层进行路由。但现在我必须在第 2 层工作以制作自己的路由协议。这就是为什么我想知道我们如何在内核级别通过 MAC 地址进行通信。感谢您的评论

标签: linux sockets network-programming kernel


【解决方案1】:

从问题中不清楚为什么要在内核中完成。 但是,我从问题中了解到 some 需要较低层的方法。如果有一些明确的延迟或吞吐量要求,则需要在问题中说明。

因此,如果我们推迟假设的内核方法,实际上,您可以使用PF_PACKET 套接字来发送它们。同样,使用PF_PACKET 套接字,您可以在远程端接收它们。但是,通常,这仍然涉及一定的开销,因为内核在其自己的缓冲区和用户在用户空间中访问的套接字缓冲区之间复制数据。 从这个角度来看,您可以考虑使用PACKET_MMAP 技术来设置直接内存映射以从内核端缓冲区访问数据。就吞吐量而言,这可能是一个非常好的改进,但是这是否适合您的转发需求是相当有争议的。

另一个建议是使用类似data plane kit(请在该页面上找到链接),它可能有一组专门为内核绕过网络设计的库(类似于PACKET_MMAP,但更好)对于某些任务,例如 L2 转发

总而言之,你可能有足够的工具来做你需要的事情,但是,更详细的描述会更好地理解。

【讨论】:

  • 感谢 Bronislav Elizavetin 的建议。我会按照你在这里的建议工作。
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 2023-03-22
  • 2018-04-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
相关资源
最近更新 更多