如何从具有相同IP地址的节点接收广播?

时间:2014-08-05 21:27:54

标签: c linux broadcasting

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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