私は信頼できるUDPの実装について読んでいます(つまり、ACKパケットを送信し、非ACKパケットを再送しています)。私はネットarroundのを見つけるように見える二つの主なパターンの信頼できるUDPとACKメソッドの質問
:
クライアントは、そのパケットの配列と、各受信したパケットのためのACKを送信します。サーバーは、ACKを受信しない限り、パケットが配信されないと見なします。
クライアントは、欠落していると思われるパケットのシーケンスを含む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
したがって、方法2では、何かが届かないことを示すクライアントのACKパケットが届かない場合はどうなりますか? – villintehaspam
私が理解しているところでは、方法2では、「欠落していないパケット(ここでは最も高い受信seqは532)」というACKがあります...サーバが1パケットを送信し、ACKが受信されなかった場合はそのパケットは再送信されます。方法2のACKパケットは通常周期的に送信されます。pingと同じように動作しますね。 – Radu094
次に、違いについてもう少し明確にすることができますか?したがって、メソッド1は、新しいseqに達していない場合(つまり、複数のパケットに対してackになる可能性がある場合)、パケットを明示的に確認します。 – villintehaspam