Isso é chamado de reconhecimento seletivo e já está incluído na especificação TCP definida em RFC 2018 . Isso permitiria que o cliente reenviasse apenas os bytes 15001 a 20000 (já que eles estão em pacotes / segmentos diferentes se você os dividiu como você diz), mas o mais interessante é que ele permite até mesmo o out-of- pedir confirmações.
da RFC 2018:
When receiving an ACK containing a SACK option, the data sender SHOULD record the selective acknowledgment for future reference. The data sender is assumed to have a retransmission queue that contains the segments that have been transmitted but not yet acknowledged, in sequence-number order.
O suporte a SACK
não é não exigido pela especificação TCP. Se o cliente ou o servidor não suportasse a confirmação seletiva, de fato, todos os bytes 10000 a 20000 teriam que ser retransmitidos.
In TCP stack implementation, is it the same as in the theory?
Normalmente, o SACK
é suportado, pois os ganhos de desempenho, eficiência e latência são significativos - especialmente em uma rede como a internet.
Na verdade, no entanto, essas suposições devem ser verdadeiras mesmo se você manipular manualmente os pacotes conforme declarou. De acordo com a RFC 793 , no mínimo, toda a janela de dados terá que ser retransmitida, mas o receptor faz sabe que os dados recebidos são pelo menos válidos . Para detalhes de implementação, Seção 3.3 - Números de Sequência da RFC 793.
Para obter uma descrição geral de todo o processo, com e sem suporte de reconhecimento seletivo, consulte este artigo (que inclui alguns diagramas muito úteis).