2

私の質問は次のとおりです。

Linux ベースのデバイスとの損失の多いシリアル リンクを介してデータを交換するために使用できる、PC オペレーティング システム上の単純なユーザー モード TCP スタックはありますか?

より多くのコンテキストは次のとおりです。

シリアル リンクを介して PC に接続された Linux ベースのデバイスがあります。シリアル リンクは損失が多いため、2 つのデバイス間で送信されるデータを再送信する必要がある場合があります。現在、システムはフレーミング、アドレス指定 (Linux デバイス内のさまざまなプロセスへのルーティング用)、およびそれほど堅牢ではない再送信アルゴリズムを含むカスタム プロトコルを使用しています。

Linux デバイス側では、カスタム プロトコルを置き換え、シリアル リンクを介して SLIP を実装し、すべての通信に TCP を使用すると便利です。問題は、PC 側では、必要のない一般的な IP ルーティングを取得せずにホストの TCP スタックを使用する方法がわからないことです。ユーザーモードの TCP スタックが利用可能であれば、それを PC アプリに統合できそうです。これまでに見つけた唯一の TCP スタックは、マイクロコントローラー用です。移植することもできますが、もっとすぐに使えるものがあればいいのにと思います。または、管理者特権を必要とせず、実際のイーサネット インターフェイスとの IP アドレスの競合を危険にさらすことなく、OS の組み込み TCP スタックを使用する特別な方法があります。

最後に、解決策を TCP に集中させるために、HDLC の使用やカスタム プロトコルの修正など、この問題に対する他の解決策があります。ただし、オプションである場合に備えて、TCP ルートをさらに調査したいと考えていました。

4

1 に答える 1

2

コメントはすでにあなたの質問に答えているようですが、おそらく明確にするためです。いいえ、IP を使用せずに TCP を使用することはできません。TCP は IP の上に構築されており、他の方法では機能しません。

PPP は、シリアル リンクを介して IP 接続を確立するための優れた方法ですが、コンピュータの両側に管理者アクセス権がない場合、これは困難な場合があります。172.16.x、10.x、および 192.168.x は、ローカル ネットワークに対してオープンであると定義されているため、ローカル コンピューターのネットワーク操作に干渉しない一連の IP アドレスを見つけることができるはずです。

構成や依存関係がないという観点からは、独自のフレーミング/再送信プロトコルとの互換性はそれほど難しくなく、相互運用性が必要ない場合はおそらく最良の選択です。そうは言っても、カーミット、{z,y,z}モデムは、パフォーマンスとコードに対する標準の両方を提供します。

最後に、socat のようなものを使用してプロトコル変換を行うことができる場合があります。つまり、シリアル ストリームを TCP ポートに接続します。それはデータの信頼性/再送信には対応しませんが、プログラムしようとしているインターフェイスである可能性があります。

于 2013-01-23T00:08:58.370 に答える