从自己的IP接收多播

时间:2014-02-24 21:35:03

标签: go udp ip multicast ethercat

我正在编写一个写成Go的Ethercat主程序。底层库位于http://github.com/distributed/ecat,包含一个链路级驱动程序,使用UDP和多播。我无法让这个链接级驱动程序在多个平台(OS X,Windows,Linux)和不同的网络配置中保持一致。

对于那些不熟悉Ethercat的人来说,这是它的工作原理。 Ethercat是一种基于以太网的工业总线系统。有一个总线主控器和可能很多的从器件,它们连接成一个逻辑环。主设备可以从现成的硬件构建,即使用普通的以太网接口卡。主设备在其以太网接口上发送数据包,从设备在运行中修改数据包,在通过所有从设备后,主设备在发送它的同一网络接口上接收数据包。根据从站的数量,网络接口可能会在仍在传输完全相同的数据包时开始接收数据包。 Ethercat帧有两种可能的格式。第一种是具有特殊ethertype的以太网数据包。第二个是发往端口0x88a4的UDP数据包。

根据以太网数据包中包含的命令,从设备可能会也可能不会修改数据包的Ethercat数据。除了更改Ethercat数据之外,唯一要更改的数据包是以太网目标地址的第1位设置为1.以太网从服务器不会触及数据包的IP头。

我的代码如下工作。我加入了一个组播组,在接口239.255.65.10上说xyz,我在那里连接了我的Ethercat从站。为了与总线交换数据,我发送一个数据包,让我们在此接口上将其称为pA 239.255.65.10。操作系统填写源地址,例如接口192.168.5.2的IP地址xyz。数据包通过总线后可能已更改,现在是数据包pB。 IP标头的来源仍为192.168.5.2,目的地为239.255.65.10。根据主机的网络设置,此数据包可能会或可能不会到达我的应用程序。在没有到达我的应用程序的情况下,例如设置rp_filter时,在Linux上,数据包pB被拒绝,因为它看起来像是来自我的机器,但是我们不应该接收我们的通过网络拥有数据包

我可以采取哪些步骤来可靠地接收已处理的数据包pB?请注意我不是在谈论环回 - 环回是关于接收数据包pA,我的问题是关于接收pB

0 个答案:

没有答案