Imagínate que por cada mensaje recibido por el general A, mandase una contestación al general B diciendo que el mensaje ha sido recibido, e incluyendo un contador en el que se van sumando las letras de todos los mensajes anteriores recibidos más las letras del nuevo mensaje recibido. A su vez el general B, mandaría su mensaje con un contador en el que suma las letras que ha mandado al general A, más las letras que contiene el nuevo mensaje.
Si el general A ya ha recibido mensajes con 100 letras, y recibe del general B el mensaje x1 que contiene 20 letras, el general A mandará al general B una contestación c1 reflejando que tiene 120 letras. Por la causa que sea c1 se pierde, y lo que hace el general B es mandar otro mensaje x2 con 30 letras, y esperar 2 días para volver a mandar el mensaje x1. Cuando el general A recibe el mensaje x2 manda la contestación c2 comunicando que tiene 150 letras. General B recibe c2 y cómo ya tiene constancia de que el mensaje x1 ha sido recibido, no lo vuelve a reenviar.
Bueno, a grandes rasgos y si no me he liado mucho con los generales esto es lo que hace TCP/IP. La clave está en que el emisor no espera una contestación para seguir mandando paquetes, sino que los continua mandando y vuelve a reenviar los paquetes de los cuales no ha recibido contestación en un cierto intervalo. Cuando el emisor tiene constancia de que ha mandado todo manda un paquete de fin de transmisión.
Saludos,
Javi.