0

我有一个由运行嵌入式 linux 的单独模块组成的设备。这些模块都是相同的硬件和软件,但根据它们在设备中的位置执行不同的任务。所有模块都通过内部网络相互通信。模块的 IP 地址是根据设备中的位置静态设置的。这是通过让模块读取返回 0-15 数字的物理设置设备来完成的。它插入模块,但物理连接到设备中的位置。一个设备可能有 6 个机架,因此这些插头中有 6 个设置为 1-6。

我希望设备确定是否有任何模块设置不正确,因为这会导致两个或多个模块具有相同的 IP 地址。这可能是由于位置加密狗设置不正确或损坏造成的。模块使用广播 UDP 消息相互通信。消息的数据成员之一是唯一的 48 位序列号,即 MAC 地址。

我最初的计划是让所有模块将来自它们自己的消息与它们的序列号进行比较,如果它们不匹配则抛出错误。问题是模块只接收来自它们自己或另一个 IP 地址的广播数据包。他们没有看到来自相同 IP 地址但来自不同模块的数据包。

当我使用 ifconfig 检查接口时,我可以看到 Rx 数据包在增加,但是当我使用 netstat -su 时,我什么也看不到。UDP Rx 数据包永远不会增加。因此,有时它们会从堆栈中删除。

有没有解决的办法?我知道我可以依靠第三个节点来告诉它正在接收来自相同 IP 地址但不同 MAC 的广播数据包,但我希望每个模块都能意识到这个问题。

4

1 回答 1

1

启动时,模块应广播一个 ARP 数据包,告知其 MAC 和 IP。这是重复 IP 地址的“正常”解决方案,您可以收听这些广播并发送一个新的,这样您的模块将检测到网络上的其他人正在使用相同的 IP。

于 2014-08-05T21:45:45.360 回答