Algoritmos específicos para una retransmisión rápida y una recuperación rápida
(1) Cuando el remitente recibe tres ACK duplicados consecutivos, se restablecerá el umbral de inicio lento ssthresh.
(2) A diferencia del inicio lento, la ventana de congestión cwnd no está configurada en 1, sino en ssthresh + 3 MSS.
(3) Si se reciben n ACK duplicados (n > 3), configure cwnd en ssthresh + n´
(4) Si el valor de la ventana de envío aún permite el envío de segmentos de información, continúe enviando segmentos de información de acuerdo con el algoritmo para evitar la congestión.
(5) Si se recibe un ACK que confirma el nuevo segmento de información, reduzca cwnd a ssthresh. Donde: ventana de congestión cwnd
Si se reciben 3 ACK idénticos, tcp enviará un ACK inmediatamente después de recibir paquetes entrantes incoherentes. La operación de retransmisión rápida es la siguiente:
1. Establezca ssthresh en la mitad de cwnd
2 Establezca cwnd nuevamente en el valor de ssthresh (algunas implementaciones específicas son ssthresh+3).
3. Vuelva a entrar en la fase de evitación de congestión.
El algoritmo posterior de "Recuperación rápida" se agregó después del algoritmo de "Retransmisión rápida" mencionado anteriormente. Cuando se reciben tres ACK duplicados, TCP eventualmente ingresará a la fase de recuperación rápida en lugar de a la fase de evitación de congestión. Los algoritmos de retransmisión rápida y recuperación rápida se utilizan a menudo juntos. La idea de una recuperación rápida es el principio de "conservación de paquetes", es decir, el número de paquetes de datos en la red al mismo tiempo es constante. Sólo cuando el paquete de datos "antiguo" sale de la red, se convierte en un "nuevo". El paquete de datos se puede enviar a la red. Si el paquete "antiguo" abandona la red. Si el remitente recibe un ACK duplicado, el mecanismo TCP ACK indica que un paquete ha abandonado la red y cwnd se incrementará en 1. Si este principio Si se sigue estrictamente, rara vez se producirá congestión en la red. De hecho, el propósito del control de la congestión es corregir el comportamiento que viola este principio.
Específicamente, los pasos principales para una recuperación rápida son:
1. Cuando se reciben tres repeticiones Al recibir un ACK, establezca ssthresh en la mitad del valor de cwnd, establezca cwnd en el valor de ssthresh más 3 y luego retransmita el segmento perdido. Se reciben ACK duplicados que indican que hay tres paquetes "antiguos" que salieron de la red.
2. Cuando se reciba nuevamente un ACK duplicado, la ventana de congestión aumentará en 1.
3. Cuando se reciba el ACK del nuevo paquete, establezca cwnd en el valor ssthresh en el primer paso. La razón de esto es que este ACK reconoce los nuevos datos, lo que indica que se han recibido todos los datos en el momento del ACK duplicado y que el proceso de recuperación está completo y puede volver al estado previo a la recuperación, es decir, ingresar nuevamente el estado de evitación de congestión.
El algoritmo de retransmisión rápida apareció por primera vez en la versión Tahoe de 4.3BSD, y la recuperación rápida apareció por primera vez en la versión Reno de 4.3BSD, también conocida como la versión Reno del algoritmo de control de congestión TCP.
Se puede ver que el algoritmo de retransmisión rápida de Reno está diseñado para retransmitir un solo paquete de datos, pero en aplicaciones reales, el tiempo de espera de retransmisión provocará la retransmisión de muchos paquetes de datos, por lo que cuando hay una ventana de datos Surgen problemas cuando se envían varios paquetes. se pierden y se activan algoritmos de retransmisión rápida y recuperación rápida. Así surgió NewReno, una ligera modificación de Reno Fast Recovery que puede recuperar múltiples pérdidas de paquetes dentro de una ventana. Específicamente, Reno saldrá del estado de recuperación rápida después de recibir un ACK para un nuevo paquete, mientras que NewReno solo saldrá del estado de recuperación rápida después de recibir un ACK para todos los paquetes en la ventana, lo que mejora aún más el rendimiento.