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 divise le paquet en 2 segments TCP, un avec seq de 10000 à 15000, et l'autre avec seq de 15001 à 20000. Et puis ces 2 segments TCP sont envoyés au serveur TCP. Supposons que le deuxième segment soit perdu dans le chemin. Le serveur TCP répondra un ACK avec seq_ack 15001.
Maintenant, puisque le client TCP envoie un paquet intégral avec seq 10000 à 20000, mais il obtient 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 seq 15001 à 20000, à savoir, le client transmettra de nouveaux paquets de seq 15001. Mais qu'en est-il de la pratique, dans la mise en œuvre de la pile TCP, est-ce la même que dans la théorie?
Je pense que dans le tampon d'envoi TCP, lorsqu'un segment TCP est envoyé, le segment reste là jusqu'à l'ACK. Lorsque l'ACK arrive, ces octets pour le 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 auquel correspond ack_seq. Les octets situés en dessous de ack_seq sont effacés. De cette façon, l'ensemble du segment n'a pas besoin d'être retransmis?