si un cliente tcp envía un paquete, con número de secuencia de 10000 a 20000, a un servidor tcp. El TCP responderá con un ACK con seq_ack 20001.
si intercepto el paquete TCP del cliente y lo divido en 2 segmentos tcp, uno con seq de 10000 a 15000 y el otro con seq de 15001 a 20000. Y luego estos 2 segmentos TCP se envían al servidor TCP. Suponga que el segundo segmento se pierde en el camino. El servidor TCP responderá un ACK con seq_ack 15001.
Ahora, dado que el cliente TCP envía un paquete integral con seq 10000 a 20000, pero obtiene un ACK con 15001, desde el punto de vista del cliente, esto es extraño. ¿Cómo va a reaccionar? En teoría, el cliente debe retransmitir los bytes de la secuencia 15001 a 20000, es decir, el cliente transmitirá nuevos paquetes de la secuencia 15001. Pero, ¿qué tal la práctica, en la implementación de la pila TCP, es la misma que en la teoría?
Creo que en el búfer de envío TCP, cuando se envía un segmento tcp, el segmento aún permanece allí hasta el ACK. Cuando llega el ACK, estos bytes para el segmento se borran del búfer. Hay un puntero en el búfer de envío, cuando llega un ACK, el puntero apunta a la ubicación a la que corresponde el ack_seq. Los bytes que están debajo de ack_seq se borran. De esta manera, ¿no es necesario retransmitir todo el segmento?