Si un client tcp envoie un paquet, avec un numéro de séquence de 10000 à 20000, à un serveur tcp. le tcp répondra avec un ACK avec seq_ack 20001.
si j'intercepte le paquet TCP du client, et que je divise le paquet en 2 segments tcp, l'un avec une seq de 10000 à 15000, et l'autre avec une seq de 15001 à 20000. Et ensuite ces 2 segments TCP sont envoyés au serveur TCP. Supposons que le deuxième segment soit perdu sur le chemin. Le serveur TCP répondra par un ACK avec seq_ack 15001.
Maintenant, puisque le client TCP envoie un paquet intégral avec la seq 10000 à 20000, mais qu'il reçoit un ACK avec 15001, du point de vue du client, c'est bizarre. Comment va-t-il réagir ? En théorie, le client devrait retransmettre les octets de la seq 15001 à 20000, c'est-à-dire qu'il transmettra de nouveaux paquets à partir de la seq 15001. Mais qu'en est-il de la pratique, dans la mise en œuvre de la pile TCP, est-ce la même chose qu'en théorie ?
Je pense que dans le tampon d'envoi TCP, quand un segment tcp est envoyé, le segment reste là jusqu'à l'ACK. Lorsque l'ACK arrive, les octets du segment sont effacés de la mémoire tampon. Il y a un pointeur dans le tampon d'envoi, quand un ACK arrive, le pointeur pointe vers l'emplacement où l'ack_seq correspond. Les octets qui sont en dessous de l'ack_seq sont effacés. De cette façon, le segment entier n'a pas besoin d'être retransmis ?