2011-01-07 3 views
6

私は信頼できるUDPの実装について読んでいます(つまり、ACKパケットを送信し、非ACKパケットを再送しています)。私はネットarroundのを見つけるように見える二つの主なパターンの信頼できるUDPとACKメソッドの質問

  1. クライアントは、そのパケットの配列と、各受信したパケットのためのACKを送信します。サーバーは、ACKを受信しない限り、パケットが配信されないと見なします。

  2. クライアントは、欠落していると思われるパケットのシーケンスを含むACKパケットを送信します。サーバは、クライアントからシーケンスが欠落しているというACKを受信しないと、要求された(欠落した)パケットを再び再送信しない限り、パケットが配送されると見なします。

要するに、1.クライアントは受信パケットのシーケンスを送信し、2.クライアントは欠落パケットのシーケンスを送信します。

それぞれの方法の長所と短所、さらにはどちらが主流なのか疑問に思っています(私は1と仮定しますが、2は非常に巧妙な方法のように見えますが、ほとんどのパケットは到着します。

EDIT:両方の方法で 短い例:

Method 1: Server sends: 1,2,3,4,5 
Client received: 1,3,5,4 
Client sends back: ACK 1, ACK 3, ACK 5, ACK 4 
Server resends: 2.. maybe more if ACK packets were lost 


Method 2: 
Server sends 1,2,3,4,5,6,7,8 
Client receives: 1,3,2,5,7 
Client Sends :ACK (lowest continuous 3,highest received 7, seem to be missing 4,6) 
Server resends: 4,6,8 
+0

したがって、方法2では、何かが届かないことを示すクライアントのACKパケットが届かない場合はどうなりますか? – villintehaspam

+0

私が理解しているところでは、方法2では、「欠落していないパケット(ここでは最も高い受信seqは532)」というACKがあります...サーバが1パケットを送信し、ACKが受信されなかった場合はそのパケットは再送信されます。方法2のACKパケットは通常周期的に送信されます。pingと同じように動作しますね。 – Radu094

+0

次に、違いについてもう少し明確にすることができますか?したがって、メソッド1は、新しいseqに達していない場合(つまり、複数のパケットに対してackになる可能性がある場合)、パケットを明示的に確認します。 – villintehaspam

答えて

5

#2も否定ACK、NAK別名として知られており、それは輸送の楽観的な観点です。つまり、輸送手段が正しく機能しているときには、より良いスケールが得られます。

#1は、悲観的な見通しであり、輸送が頻繁に失敗すると想定しています。

TCPは、パケットを廃棄してトラフィックシェーピングを実行して公平なネットワークを作成するための輻輳制御に基本的な依存関係があるため、ACKを使用します。信頼性の高いUDPチャネルは通常、NAKを使用します。これは、信頼性の高い高速中低速ストリームを使用しているため、基本的なACK実装の典型的なロック手順に比べて待ち時間が短いという要件があります。

あなたが一歩踏み出し、信頼できるUDPチャネルの上にあるサブスクリプション管理を見てみると、ACKまたはNAKの使用には明確な勝者はありません。市場データの世界では、大容量ネットワーク上で両方のテクノロジの高速使用が実証されています。 ACKは、ネットワーク障害後に複雑な再同期を必要としないサブスクリプションでは利点がありますが、すべてのホストが再サブスクリプションを発行したときに一貫したネットワークとCPU使用率が確認されます。

関連する問題