将数据从以太网传输到串行端口并返回以太网无法到达目的地

将数据从以太网传输到串行端口并返回以太网无法到达目的地

概念可视化

我正在尝试建立一个双向通信,其中以太网 UDP 数据包从 eth0 接口进入 Linux 系统(假设是 Raspberry pi)并通过管道传输到系统的 UART 硬件,然后由第二个 Linux 系统读取,通过管道传输到 eth0 接口并再次作为 UDP 数据包传输到传感器,反之亦然。

换句话说,我正在尝试将 UDP 数据包无缝转换为串行,然后再转换为 UDP。

我已经设法使来自 PC 的 UDP 数据包到达第二个 Linux 系统,但它们却无法到达最终目的地传感器。

配置:PC与第一个linux系统刚好在同一个子网内,并且在广播地址,端口33000中不断发送数据包。

在第一个 Linux 系统中,我使用 netcat 将数据从 eth0 传输到 UART,使用以下命令:stty -F /dev/ttyS0设置 uart 的波特率,然后nc -ul 172.31.255.255 33000 >/dev/ttyS0 </dev/ttyS0将数据从 eth0 传输到 ttyS0 (uart)。数据成功传输到第二个 Linux 系统,我可以在那里打印有效负载。但从那时起,问题就出现了。

在第二个 Linux 系统中我使用了与第一个相同的命令:stty -F /dev/ttyS0nc -ul 172.31.255.255 33000 >/dev/ttyS0 </dev/ttyS0。问题是数据包没有到达最终目的地,也就是传感器。我用 wireshark 监控第二个 linux 系统的 eth0 接口中的流量,没有传输任何 UDP 数据包。

奇怪的是,在这种配置下,来自 PC(端口 33000)的数据包无法到达传感器,但是,如果我将监听端口更改为 10021(在两个 Linux 系统中),那么来自传感器的数据包就可以畅通无阻,并且它们可以成功到达 PC(软件)。

我认为这可能与服务器/客户端角色有关。PC(通过传感器的特殊软件)通过在 33000 中发送 SYN 数据包来启动与传感器的通信并等待回复。这些数据包没有到达传感器,但传感器在端口 10021 中发送遥测数据,并且这些数据包成功到达软件(PC)。

欢迎任何见解。

相关内容