
私は、イーサネット UDP パケットが eth0 インターフェイスから Linux システム (Raspberry pi と仮定) に入り、システムの UART ハードウェアにパイプされ、次に 2 番目の Linux システムによって読み取られ、eth0 インターフェイスにパイプされ、UDP パケットとして再びセンサーに送信され、その逆も行われるという双方向通信を確立しようとしています。
言い換えれば、UDP パケットをシリアルに変換し、さらにシームレスに UDP に変換しようとしています。
PC からの UDP パケットを 2 番目の Linux システムに到達させることはできましたが、最終目的地であるセンサーには到達しません。
構成: PC は最初の Linux システムと同じサブネットにあり、ブロードキャスト アドレス、ポート 33000 でパケットを継続的に送信します。
最初の Linux システムでは、次のコマンドを使用して netcat を使用して eth0 から UART にデータをパイプしました。stty -F /dev/ttyS0UARTのボーレートを設定し、nc -ul 172.31.255.255 33000 >/dev/ttyS0 </dev/ttyS0eth0 から ttyS0 (uart) にデータをパイプします。データは 2 番目の Linux システムに正常に送信され、ペイロードを印刷できます。しかし、そこから問題が発生します。
2 番目の Linux システムでは、最初のシステムと同じコマンドを使用しました。stty -F /dev/ttyS0そしてnc -ul 172.31.255.255 33000 >/dev/ttyS0 </dev/ttyS0問題は、パケットが最終目的地であるセンサーに到達しないことです。2 番目の Linux システムの eth0 インターフェイスのトラフィックを Wireshark で監視しましたが、UDP パケットは送信されません。
奇妙なことに、この構成では、PC (ポート 33000) からのパケットはセンサーに到達しませんが、リスニング ポートを 10021 (両方の Linux システム) に変更すると、センサーからのパケットの経路が開かれ、パケットは PC (ソフトウェア) に正常に到達します。
これはサーバー/クライアントの役割に関係しているのではないかと考えています。PC は (センサーの特別なソフトウェアを介して) 33000 で SYN パケットを送信してセンサーとの通信を開始し、応答を待ちます。これらのパケットはセンサーに到達しませんが、センサーはポート 10021 でテレメトリのデータを送信し、これらのパケットはソフトウェア (PC) に正常に到達します。
どのようなご意見でも歓迎します。