如何实现以太网调制解调器

时间:2015-05-29 20:02:19

标签: c network-programming ethernet raw-ethernet

好的,作为一项训练练习,我想做的是实现类似的东西

客户 --ethernet - > 调制解调器1 - GPIO - > Modem2 --ethernet - > 我的家庭路由器

客户端使用以太网电缆连接到Modem1 Modem1是一个Raberry PI,转换信号并通过GPIO转发它 Modem2是Raberry PI,从GPIO接收数据,并通过以太网电缆发送到我的家用路由器

我想实现调制解调器,但不知道从哪里开始。

我已经阅读了一些关于以太网编程的内容,但仍然找不到像“简单的东西”那样的答案。

  1. 如何实现Modem1,以便当客户端连接到客户端时,客户端会将其发现为互联网连接。

  2. 在Modem2端,如何让“我的家庭路由器”将用于“客户端”的数据包发送到Modem2,以便Modem2可以转发它们。

  3. 可能我没有的东西......

    那么,具体来说,我可以如何实现这一点?最好是在c。

1 个答案:

答案 0 :(得分:0)

我冒昧地说你可以编写某种自定义GPIO中间层。

读取以太网 - >封装 - >写入GPIO-> | - >读取GPIO->解封装 - >写入以太网

(反之亦然)

然后问题变成:两个调制解调器如何充当"以太网代理"?

Modem1充当路由器的代理。 Modem2充当客户端的代理。如果您的Raspberry Pi可以欺骗MAC地址,您可能会欺骗以太网对等方与您的调制解调器通信'以太网端口。您需要欺骗MAC地址的原因是在TCP / IP网络中,有ARP表,它将远程IP地址映射到可以将IP数据包路由到/来自它们的MAC地址。这是允许您的客户端通过TCP / IP与路由器通信的原因。

另一个潜在的缺陷是调制解调器通信引入了延迟,干扰了以太网层对协议的处理。例如,以太网协议可能具有实时约束,如果引入延迟,可能会破坏......

但是,让我们假设在一个完美的世界中任何事都有可能......

您需要编写用于读取/写入以太网消息的代码(我已经看过用于在Linux上通过原始套接字读取/写入以太网数据包的开源代码)

您需要为GPIO通信编写自定义驱动程序。 这意味着实施一个经过深思熟虑的协议来管理引脚状态,消息开始,消息结束,数据有效负载,校验和,等等......

最后,您需要编写一个实现以下目标的顶级通信层:

以太网到GPIO流程

a)从以太网端口读取,将以太网数据包封装成自定义消息(或消息片段)

b)使用自定义GPIO协议驱动程序将此自定义消息传递给外部GPIO对等方

GPIO到以太网流程

a)使用自定义驱动程序代码从GPIO读取 b)解封装以太网数据包 c)将以太网数据包写入以太网端口。

这两个过程永远运行......

同样,所有这些都取决于您的调制解调器是否可以在不干扰以太网协议自然流动的情况下插入点对点连接......

至于' C'部分...

如果您使用开源库(或代码片段)通过原始套接字读取/写入原始以太网,那很可能是用C语言编写的。

您的GPIO代码将通过两种方式从GPIO引脚读取写入:从存储器映射的H / W地址,或在该H / W地址上使用ioport调用。

Receive raw Ethernet frames in Linux

Send a raw Ethernet frame in Linux

祝你好运

相关问题