從乙太網路到串列再到乙太網路的管道資料未到達目的地

從乙太網路到串列再到乙太網路的管道資料未到達目的地

概念視覺化

我正在嘗試建立雙向通信,其中以太網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設定串口的波特率,然後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)。

歡迎任何見解。

相關內容