信頼できる UDP の実装について読んでいます (つまり、ACK パケットを送信し、非 ACK パケットを再送信します)。
私がネット上で見つけたように思われる 2 つの主なパターンのうち、
クライアントは、受信した各パケットに対して、そのパケットのシーケンスを含む ACK を送信します。サーバーは、ACK を受信しない限り、パケットが配信されていないと見なします。
クライアントは、欠落していると思われるパケットのシーケンスを含む 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