se um cliente tcp enviar um pacote, com número de sequência de 10000 a 20000, para um servidor tcp. o tcp responderá com um ACK com seq_ack 20001.
se eu interceptar o pacote TCP do cliente e dividir o pacote em 2 segmentos tcp, um com seq de 10000 a 15000 e outro com seq de 15001 a 20000. E esses dois segmentos TCP serão enviados ao servidor TCP. Suponha que o segundo segmento esteja perdido no caminho. O servidor TCP responderá um ACK com seq_ack 15001.
Agora, como o cliente TCP envia um pacote integral com seq 10000 a 20000, mas recebe um ACK com 15001, do ponto de vista do cliente, isso é estranho. Como isso vai reagir? Em teoria, o cliente deve retransmitir os bytes da seq 15001 a 20000, ou seja, o cliente transmitirá novos pacotes da seq 15001. Mas e quanto à prática, na implementação da pilha TCP, é a mesma da teoria?
Eu acho que no buffer de envio TCP, quando um segmento TCP é enviado, o segmento ainda permanece lá até o ACK. Quando o ACK chega, esses bytes para o segmento são limpos do buffer. Há um ponteiro no buffer de envio. Quando um ACK chega, o ponteiro aponta para o local em que o ack_seq corresponde. Os bytes que estão abaixo do ack_seq são limpos. Dessa forma, o segmento inteiro não precisa ser retransmitido?