我们如何在Linux内核中发送/接收第2层(使用MAC地址)中的帧

时间:2017-09-28 08:10:33

标签: linux sockets network-programming kernel

我正在我的主人那里研究并行计算方面。我们正在创建一个真正的TriBA网络基于三重架构(用于多核处理器网络)。为此,我正在研究网络部分。所以我必须在第2层级别的网络中实现路由。我已经使用TCP \ IP协议在第3层(网络层)上进行了路由。但是我们必须在第2层发送/接收帧(而不是数据包)。

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

连接到该拓扑中

1 个答案:

答案 0 :(得分:0)

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

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

另一个建议是使用某种类似data plane kit(请查找该页面上的链接),其中可能有一组专门为内核旁路网络设计的库(类似于PACKET_MMAP,但更好的是)以及某些任务,如 L2转发

总而言之,您可能有足够的工具来完成您所需要的工作,但是,更详细的描述会更好地理解。