2011-02-01 9 views
6

私は通常、カスタムコマンド/応答/ステータスプロトコルのために組み込み機器間の有線シリアルポート接続を使用します。 私はマイクロチップのTCP/IPスタックとWi-FiモジュールとOSなしでを使用してショート(< = 100バイト)のコマンドと応答を交換する予定です。 スタックはマイクロチップのイーサネット開発キットで稼働しており、私は自分のデスクトップから(まだWi-Fiモジュールを使用していない)pingすることができます。 私はping(マイクロチップはスタックのcソースを提供する)をハックし、私が必要とするメッセージを追加することができますが、正しい/最も単純な/最良の方法を探しています。TCP/IPを使って短いメッセージを送信する最も簡単な方法

+0

あなたが好奇心で使っているハードウェア/キットはどれですか?私も同様のことに興味を持っています。 –

答えて

6

正解/単純/最高は必ずしも同じものではありません。しかし、私の場合は、TCPの代わりにUDPを使うことを検討します。

UDPはデータグラムプロトコルです。 TCPはストリーム指向であり、さらにオーバーヘッド(およびオーバーヘッドに伴う利点)があります。しかしUDPは、あなたが現在持っている現在のシリアルポートバイト指向(パケット指向)アプローチに、より密接にマッチします。

あなたはUARTから受け取ったデータストリームを/ buffers/checksums/delimits/parsesで受信するいくつかの上位プロトコルを持っている可能性があります。 UDPを使用している場合は、軽量で軽量なUDP実装でうまく模倣できます。 UDPを使用すると、あなたはちょうど彼らが(シリアルのような多くの)他の端に得たあなたの指を横切るバイト(パケット)&を撃つ。

TCPは、組み込みの再送、肯定応答、順送り、タイマー、バックオフアルゴリズムなどを備えた、より重い接続ベースのプロトコルです。私はTCPを使って作業しました(いくつかの異なるスタック)、UDPは軽量である&は、コードサイズ&のスループットに関してTCPを上回ります。

また、TCPがインターネットのバックボーンとして使用されていることも忘れないでください。いくつかのパケットは、最終的な宛先への途中で十数個以上のホップ(ルータ/ゲートウェイ)を通過します。パケットがドロップされる場所がたくさんあるため、TCPは大雑把な詳細を透過的に処理します。あなたのシステム/状況では、私たちはLAN(全員が同じワイヤー上にいる)について話しており、伝送はかなり信頼できるものです...したがって、TCPオーバヘッドは本当に必要ではありません。

TCPのメリットがオーバーヘッドを正当化する場合がありますが、あなたが書いたことから、基本的なUDPデータグラムの設定を検討するべきだと思います。ちょうどGoogleの "単純なudpの例"とあなたは基本的な構造を見るでしょう。たとえば、わずか43行(サーバー)と30行(クライアント)を使用するhere is a simple UDP client/server exampleです。

+0

多少間違った答えです。 TCPのパケット廃棄やアウトオブオーダー配信のUDPの危険性は、TCPがはるかに厳密にエミュレートするシリアル回線上の通常の状態とは大きく異なります。 TCPの主な問題は、ステートフルな接続(再接続が正しく実装されていること)と、クエリ/応答通信で200msの遅延を挿入できるクライアントPC側の難しいnagle ack遅延です。あなたがそれを許容することができない場合は、UDPの上に独自の信頼性レイヤーを実装することは問題の価値があります。可能であれば、TCPはシリアルのより直接的な置き換えになります。 –

+0

@Chrisを適切な負荷のスイッチドネットワークで使用するとUDPが正常に動作します。単純なACKパケットは、Jackが必要とするケースの99%をカバーします。世界中に広範に設置された製品ベース。また、より良い無線リンクを許容します。 –

+0

基本プロトコルが明示的に保証していないという前提のもとで設計するのは間違いであってはなりません。 UDPを使用する場合は、テストネットワーク上に見えない可能性があるにもかかわらず、欠落したパケットや誤ったパケットから回復する必要があります。 –

2

TCP/IPスタックを使用する場合は、いくつかのデータメッセージを送信するsend()関数を提供する必要があります。

小型デバイスの中には、UDP/IPの実装が単純なものがあります。シーケンス制御とTCPの信頼性が必要ない場合は、UDPを使用して短いメッセージを送信することを検討できます。これは、ICMPメッセージをハックする方がはるかに優れています。

しかし、TCPストリームプロトコルの快適性と信頼性が必要な場合は、IUDPベースでこれを再作成しないでください。通常、それをより良く、より効率的に、より少ない労力で行うことはできません。

関連する問題