信頼できるUDPおよびACKメソッドの質問
-
30-09-2019 - |
質問
私は信頼できるUDPの実装について読んでいます(つまり、ACKパケットの送信と再び済みのないパケットを再び留保します)。
2つの主要なパターンのうち、私はネットを口頭で見つけているようです:
クライアントは、受信した各パケットのACKをそのパケットのシーケンスで送信します。サーバーは、ACKを受け取っていない限り、パケットが引き継がれていないと想定しています。
クライアントは、欠落していると思われるパケットのシーケンスでACKパケットを送信します。サーバーは、シーケンスが欠落しているとクライアントからACKを受信しない限り、パケットが配信されると仮定し、要求された(欠落)パケットを再度再送信します。
要するに、1では、クライアントは受信したパケットのシーケンスを送信します。
各方法の長所/短所は何であり、どちらがより主流であるかを疑問に思うだけです(私は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
解決
#2 ネガティブACKとしても知られています。別名Nakは、輸送の楽観的な視点です。つまり、輸送が正しく機能している場合、スケールが良くなることを意味します。
#1 悲観的な視点であり、輸送が頻繁に失敗すると仮定します。
TCPは、混雑制御に基本的な依存性があるため、パケットをドロップしてトラフィックシェーピングを実行して公正なネットワークを作成するため、ACKを使用します。信頼性の高いUDPチャネルは、通常、基本的なACK実装に典型的なロックステップで低レイテンシを必要とする信頼性の高い高速メディアまたは低レートストリームを使用しているため、NAKを使用します。
注意して、信頼できるUDPチャンネルの上にあるサブスクリプション管理を見てみると、ACKまたはNAK使用の明確な勝者はありません。市場データの世界は、高容量ネットワークで高速で両方のテクノロジーを使用していることが証明されています。サブスクリプションを備えたACKには、ネットワーク障害の後に複雑な再同期を必要としないという利点がありますが、すべてのホストが再結合を発行すると、ネットワークとCPU使用の一貫したピークが表示されます。