Resumen

  • Tres ACK duplicados consecutivos eran para RFC 2001 una indicación fuerte de un segmento perdido y activaban fast retransmit sin esperar al RTO.
  • Fast recovery contabilizaba salidas inferidas: cwnd pasaba a ssthresh + 3 segmentos y crecía uno por cada duplicado adicional, hasta que un ACK nuevo lo devolvía a ssthresh.
  • El patrón muestra que datos posteriores alcanzaron al TCP receptor; no identifica la causa de la pérdida ni certifica identidad, capacidad, consumo por la aplicación o entrega futura.

Antes del tercero todavía cabía otra historia

Un ACK acumulativo que repite el mismo número dice que la frontera de recepción no avanzó. Si llegó un segmento posterior fuera de orden, el receptor puede repetir el próximo número esperado. El emisor observa el hueco, pero no el trayecto que lo creó.

RFC 2001 dejó margen para uno o dos duplicados porque el reordenamiento podía producirlos antes de que el segmento atrasado llegara y generara un ACK nuevo. El tercero cambia la decisión, no la verdad física. La pérdida pasa a ser una hipótesis suficientemente fuerte para retransmitir el segmento aparente sin esperar al temporizador.

Ese umbral es el comienzo adecuado para leer los cuatro algoritmos. Slow start establece un reloj de ACK en un camino desconocido. Congestion avoidance modera el crecimiento. Fast retransmit actúa sobre el hueco. Fast recovery conserva el ritmo porque los ACK duplicados también muestran que otros segmentos siguieron atravesando la red.

La ventana del receptor no era la ventana del camino

La ventana anunciada por el receptor informa de su memoria disponible. cwnd es la restricción que el emisor se impone según la congestión percibida. RFC 2001 permite transmitir hasta el menor valor. Una autorización de búfer al otro extremo no demuestra que los enlaces y routers intermedios puedan aceptar la misma cantidad.

ssthresh separa dos modos de crecimiento. Por debajo, slow start abre cwnd con rapidez conforme llegan ACK de datos nuevos. Por encima, congestion avoidance busca un aumento lineal aproximado. Cuando vence el temporizador, hay poca evidencia de movimiento y cwnd vuelve a un segmento. El tren de duplicados conserva una prueba distinta: la frontera está inmóvil, pero hay llegadas posteriores.

La inflación reemplazaba salidas inferidas

Al recibir el tercer duplicado, el emisor guarda en ssthresh la mitad de cwnd, con un mínimo de dos segmentos. Retransmite el supuesto faltante y fija cwnd en ssthresh + 3*segsize.

Los tres segmentos añadidos no son ancho de banda recién descubierto. Representan tres paquetes posteriores que debieron salir de la red para provocar los tres ACK y que el receptor mantiene más allá del hueco. La ventana inflada mantiene la tubería sin negar la reducción a la mitad que responde a la congestión inferida.

Cada duplicado posterior añade otro segmento a cwnd. Si la nueva cuenta lo permite, sale un paquete. El algoritmo concede exactamente una oportunidad provisional por otra salida inferida. No promete que la cola esté vacía, que el siguiente paquete llegue ni que el reparto sea justo.

El ACK que avanza cancela la excepción

Cuando un ACK reconoce datos nuevos, RFC 2001 fija cwnd en ssthresh. La suma provisional desaparece. El emisor queda aproximadamente a la mitad del ritmo anterior y continúa en congestion avoidance, sin reiniciar desde una sola unidad como después de un timeout.

El texto espera que ese ACK cubra la retransmisión y los segmentos intermedios almacenados. La palabra «espera» protege el límite. Desde el emisor se ve avanzar la frontera acumulativa; no se ve qué copia abrió el hueco, dónde viajó, cómo fue tratada por la aplicación o si una confirmación posterior tendrá éxito.

La recuperación rápida contiene así un préstamo que se liquida con evidencia nueva. Si una implementación conserva la inflación después, ya no está aplicando la lógica temporal que justificó el permiso.

Del evento a una cadena auditable

Un registro útil no puede limitarse a «tres DupACK, recuperación exitosa». Debe conservar el número repetido, el borde de ventana, el contador, las secuencias pendientes, cwnd y ssthresh antes y después, el rango retransmitido, los envíos permitidos durante la inflación y el primer ACK nuevo. La prueba de aplicación debe ocupar otra línea.

RFC 793 establece que un ACK TCP no garantiza entrega al usuario: el TCP receptor asumió responsabilidad. Tampoco autentica al par. RFC 2001 incluso declara que no discute consideraciones de seguridad. Por eso una señal válida de transporte no debe ascender a prueba de identidad, autorización o transacción completada.

La ficha del RFC Editor sitúa el documento en enero de 1997 y hoy lo marca obsoleto. Sus versiones HTML y texto, junto con el historial del IETF, conservan el algoritmo. RFC 1122 explica el ACK fuera de orden; RFC 793 limita el significado de recepción. RFC 2581 sólo establece la sucesión documental.

Aquí no se describe TCP moderno ni se compara rendimiento de implementaciones. El objeto histórico es más preciso: cómo una evidencia imperfecta otorgaba y retiraba autoridad de envío.