2011-10-19 8 views
1

同じaddrで、server、client、client2と呼ばれるC#実行可能ファイルが互いにメッセージし合っています。私は、彼らが来るポート番号でmsgsを区別しています。同じメサージュをUDPの短所に対して2回送信するのが良いでしょうか?

定期的な実行-1サーバーは クライアントの参加を開始 、実行-2 サーバは2が参加する クライアントを起動

は、葉の葉

実行-3 は、サーバーが クライアントは、ここ( クライアント2が参加する加入を開始問題が起こる)、時にはサーバーからの応答を取得し、ときにはハングアップし、サーバーからの応答が届かない場合があります。

私は、UDPClientブロッキングmsg転送ルーチンを使用しています。

現在の解決策:サーバーから2回同じメッセージを送信しています(2度目の復帰を望んでいます)。これは非常に重要なので、このメッセージを失うことはもうありません。そのような一時的なハッキングの潜在的な落とし穴は何か?

また、私のq?不完全な私はより多くの詳細を提供します。

+1

本質的に信頼性の低いプロトコルの信頼性はどれくらいですか?なぜ神が意図したようにTCPを使用しないのですか? – Gleno

答えて

3

UDP自体は信頼できません。あなたのニーズに合った信頼できるコードを書くことができますが、それはあなた次第です。信頼できるストリームが必要な場合は、TCPを使用します。

UDPパケットを2回送信すると、パケット損失の問題を軽減できますが、保証はありません。入ってくるパケットをうまく処理したら、クライアントがパケットをサーバに送り返す確認システムを実装することをお勧めします。サーバは、肯定応答を見るまで、元のパケットを繰り返し送信します。 (これにはまだいくつかの制限があります。それ以外の場合は永遠に試してみてください)

UDPが役立つ状況は、時折失われたパケットに気付かず、UDPがもたらす可能性のある遅延が必要な場合です。ビルトイン再送信はありません)。たとえば、サーバがUDP経由でゲームデータを送信するゲームの状態情報。クライアントがパケットを受信しなかった場合、次のパケットが数ミリ秒で到着すると、それに追いつきます。

4

短い答えでは、UDPはではなく、という信頼性があります。 UDPのまさにその定義は、パケットがその宛先に到達するかどうかを保証するのではなく、伝える方法がないということです。

これらのメッセージが引き続き重要な場合は、代わりにTCPを使用することをお勧めします。このようにして、伝送エラーと障害が自動的に処理され、パケットが宛先に到達することが保証されます。

あなたのハックの潜在的な崩壊については、到着するメッセージの両方のコピーのケースを処理する必要があります。また、どちらのコピーも到着しない場合を考慮する必要はありません。私にとって、ホイールを再発明しようとすると(確認メッセージを送信し、タイムアウトになったときに再試行し、重複した領収書を処理する)、この場合の努力は価値がありません。 TCPだけを使用してください。

2

信頼性がすべてを超える場合はTCPを使用します。しかし、低レイテンシとパケットベースの通信が必要な場合は、UDPを利用できますが、より良い再送信プロセスを実装できます。

は、SIP(VoIPプロトコル)の例では、一般的に次の操作を行うことが推奨されます。
  1. は500ミリ秒(T1)で発射するタイマーを設定します。
  2. リクエストを送信し、タイマーを開始します。
  3. T1が応答を得ずに期限切れになった場合、要求を再送信してT1を2倍します。
  4. 応答を得るまで、またはT1が32秒に達するまで#3を実行します。
1

UDPはネットワークスタックの下位レベルと同じくらい信頼性があります。 IPは基本的にベストエフォート型のサービスです。これは、あなたのデータが意図的に失われたり壊れたりすることはないが、保証されないことを意味します。良いニュースは、おそらく通常の状況下では、チャネルの本質的な信頼性はかなり良いので、UDPはOKであるということです。各UDPデータグラムが受信機に到達する確率pが損なわれていないとしましょう。この場合、N個のパケットのうちの少なくとも1つが受信機に損傷を与えない確率は1-(1-p)^ Nである。高いp(90%以上)の場合、これはかなり迅速に1に収束します。しかし、常にN個のパケットすべてにおいてデータが破損する可能性があります。

トランスポート層のプロトコルに信頼性保証を組み込むことができます。ある意味では、TCPはこの(およびその他の)余分な実装が既に実行されているUDPだけです。多くのCSネットワーキングコースでは、信頼できるUDPプロトコルの開発が必要です。ここでのメリットは明らかです。信頼性が高いと仮定して、統計的に信頼性が高いと考えられる特定の信頼性を得ることができます。

多くの作者が広範囲に書いたワームの缶を開けるのは、あまりにも多くの詳細を入力することです。詳細を知りたい場合は、私はいくつかの読書をお勧めします。

関連する問題