Agregando a lo que comenta Matías y para clarificar:
- yo hablé de GBN puro, y lo que dije estaba bien, pero la letra decía explicitamente que era TCP y lo pasé por alto.
- TCP efectivamente utiliza un híbrido entre GBN y SR, lo que hace que entre otras cosas mantenga un buffer en el receptor (a diferencia de GBN en donde no es necesario).
- Dado que TCP tiene ese buffer acepta paquetes fuera de orden e intenta hacer una especie de SR confirmando (con ACK duplicado) cual fue el primer segmento en orden que no le llegó.
- Debido a lo anterior es que al llegar 3 ACK duplicados (en total 4 ACK reconociendo la misma sequencia) solo reenvía ese segmento (Fast retrasmit) porque asume que ese se perdió.
- Finalmente, al darse un timeout TCP reenvía ese segmento nuevamente pero no todos, como sería el caso en GBN puro.
Espero haber aclarado
Martín