7

信頼できる UDP の実装について読んでいます (つまり、ACK パケットを送信し、非 ACK パケットを再送信します)。

私がネット上で見つけたように思われる 2 つの主なパターンのうち、

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

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

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

それぞれの方法の長所と短所は何か、そしてどちらがより主流なのか疑問に思っています (私は 1 を想定していますが、ほとんどのパケットが到着し、通常失われるのはごくわずかであるため、2 は非常に賢い方法のようです)。

編集:両方の方法の短い例:

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
4

1 に答える 1

8

#2はNegative ACK、別名NAKとも呼ばれ、トランスポートの楽観的な見方です。つまり、トランスポートが正しく機能している場合、スケーリングが向上します。

#1は悲観的な見方であり、トランスポートが頻繁に失敗することを前提としています。

TCP は ACK を使用します。これは、パケットをドロップしてトラフィック シェーピングを実行し、公正なネットワークを作成する輻輳制御に基本的に依存しているためです。信頼性の高い UDP チャネルでは通常、NAK が使用されます。これは、基本的な ACK 実装に典型的なロック ステップでの低遅延が要求される、信頼性の高い高速中速または低レート ストリームを使用しているためです。

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

于 2011-05-15T16:39:40.560 に答える