Minha pergunta é por que um fluxo TCP faz uma retransmissão quando uma rede tem largura de banda de link suficiente. Para encontrar uma causa, usei um wireshark. Eu tenho o abaixo capturado no lado do host (10.0.0.1)
25434 50.968633785 10.0.0.1 10.0.0.2 TCP 33370 42848 → 50004 [ACK]
Seq=14063654 Ack=1 Win=29696 Len=33304 TSval=290016 TSecr=290011
25435 50.968637512 10.0.0.1 10.0.0.2 TCP 31274 42848 → 50004 [PSH, ACK]
Seq=14096958 Ack=1 Win=29696 Len=31208 TSval=290016 TSecr=290011
25492 50.977183364 10.0.0.1 10.0.0.2 TCP 866 [TCP Retransmission] 42848 →
50004 [PSH, ACK] Seq=14127366 Ack=1 Win=29696 Len=800 TSval=290019 TSecr=290011
25513 50.979382486 10.0.0.2 10.0.0.1 TCP 66 50004 → 42848 [ACK] Seq=1
Ack=14096958 Win=16776192 Len=0 TSval=290018 TSecr=290016
25514 50.979383087 10.0.0.2 10.0.0.1 TCP 66 50004 → 42848 [ACK] Seq=1
Ack=14128166 Win=16776192 Len=0 TSval=290018 TSecr=290016
25543 50.981453868 10.0.0.2 10.0.0.1 TCP 78 [TCP Dup ACK 25514#1] 50004 →
42848 [ACK] Seq=1 Ack=14128166 Win=16776192 Len=0 TSval=290019 TSecr=290019
SLE=14127366 SRE=14128166
Resumindo,
(1) [.1 -> .2] SEQ = 14063654, ACK = 1, LEN = 33304
(2) [.1 -> .2] SEQ = 14096958, ACK = 1, LEN = 31208
(3) [.1 -> .2 ][Retr] SEQ = 14127366, ACK = 1, LEN = 800
(4) [.2 -> .1] SEQ = 1, ACK = 14096958, LEN = 0
(5) [.2 -> .1] SEQ = 1, ACK = 14128166, LEN = 0
(6) [.2 -> .1] SEQ = 1, ACK = 14128166, LEN = 0, SLE =14127366, SRE=14128166
Eu totalmente não sei porque a retransmissão ocorre em (3)
Eu acho que o SACK (6) ocorre devido a (3).
Como você pode ver, (4), (5) é a confirmação devido a (1), (2) respectivamente.
Acho que a retransmissão (3) não é necessária.
Você poderia me dar uma pequena dica sobre o motivo da retransmissão?
Muito obrigado pela leitura.
Esses segmentos TCP ~32KiB sugerem que você pode estar usando TSO/LRO ou descarregamentos de hardware semelhantes no host no qual você capturou o rastreamento de pacote, portanto, o rastreamento de pacote pode não ser verdadeiramente representativo do que ocorreu "na rede".
Tente desabilitar todos os downloads de hardware e fazer seu rastreamento novamente, ou faça um rastreamento de um espelho de porta em um switch para obter uma visão independente do que aconteceu no fio.