Transporte de confiabilidad TCP
Todos estamos familiarizados con el protocolo TCP como un protocolo de transporte confiable, pero ¿cómo garantiza la confiabilidad del transporte?
Para lograr una transmisión confiable, se deben considerar muchos factores, como la corrupción de datos, la pérdida, la duplicación y los fragmentos fuera de servicio. Si estos problemas no se pueden resolver, la transmisión confiable no se puede lograr.
Por lo tanto, TCP emplea mecanismos como el número de secuencia, la respuesta de reconocimiento, el control de reenvío, la gestión de la conexión y el control de la ventana para lograr una transmisión confiable.
En este documento, nos centraremos en la ventana deslizante, el control de flujo y el control de congestión de TCP. El mecanismo de retransmisión se cubre por separado en la siguiente sección.
Control de flujo de red
El control del flujo de red o el conocimiento del tráfico de red es en realidad una manifestación de la relación sutil entre productores y consumidores. Probablemente haya encontrado este escenario mucho en el trabajo o en entrevistas. Si la capacidad del productor para producir en gran medida la capacidad del consumidor para consumir, hará que la cola crezca indefinidamente. En un caso más grave, es posible que sepa que cuando los mensajes de RabbitMQ se acumulan demasiado, puede causar la degradación del rendimiento de todo el servidor MQ. Lo mismo es cierto para TCP; Si no se controla, se pondrán demasiados mensajes en la red, y los consumidores habrán excedido su capacidad, mientras que los productores continuarán enviando mensajes duplicados, lo que afectará en gran medida el rendimiento de la red.
Para abordar este fenómeno, TCP proporciona un mecanismo para que el remitente controle la cantidad de datos enviados en función de la capacidad de recepción real del receptor, que se conoce como control de flujo. El receptor mantiene una ventana de recepción, mientras que el remitente mantiene una ventana de envío. Cabe señalar que estas ventanas son solo para una sola conexión TCP y no todas las conexiones comparten una ventana.
TCP proporciona control de flujo mediante el uso de una variable para una ventana de recepción. La ventana de recepción le da al remitente una indicación de cuánto espacio de caché todavía está disponible. El remitente controla la cantidad de datos enviados de acuerdo con la capacidad de aceptación real del receptor.
El host del receptor notifica al remitente del tamaño de los datos que puede recibir, y el remitente envía a este límite. Este límite es el tamaño de la ventana, ¿recuerdas el encabezado TCP? Hay un campo de recepción de la ventana, que se utiliza para indicar el número de bytes que el receptor puede o está dispuesto a recibir.
El host del remitente enviará periódicamente un paquete de sonda de ventana, que se utiliza para detectar si el host del receptor aún puede aceptar datos. Cuando el búfer del receptor está en peligro de desbordarse, el tamaño de la ventana se establece en un valor más pequeño para instruir al remitente que controle la cantidad de datos enviados.
Aquí hay un diagrama de control de flujo de red:
Control de congestión de la red
Antes de introducir el control de congestión, debemos comprender que, además de la ventana de recepción y la ventana de envío, también hay una ventana de congestión, que se usa principalmente para resolver el problema de a qué velocidad el remitente comienza a enviar datos a la ventana de recepción. Por lo tanto, el remitente TCP también mantiene la ventana de congestión. Necesitamos un algoritmo para decidir cuántos datos son apropiados para enviar, ya que enviar muy poco o demasiados datos no es ideal, de ahí el concepto de una ventana de congestión.
En el control de flujo de red anterior, lo que evitamos fue que el remitente llenara el caché del receptor con datos, pero no sabíamos qué estaba sucediendo en la red. Por lo general, las redes informáticas se encuentran en un entorno compartido. Como resultado, puede haber congestión de la red debido a la comunicación entre otros hosts.
Cuando la red está congestionada, si se continúa enviando una gran cantidad de paquetes, puede causar problemas como el retraso y la pérdida de paquetes. En este punto, TCP retransmitirá los datos, pero la retransmisión aumentará la carga de la red, lo que resultará en retrasos más grandes y más pérdidas de paquetes. Esto puede entrar en un círculo vicioso y seguir siendo más grande.
Por lo tanto, TCP no puede ignorar lo que está sucediendo en la red. Cuando la red está congestionada, TCP se sacrifica al reducir la cantidad de datos que envía.
Por lo tanto, se propone control de congestión, cuyo objetivo es evitar llenar toda la red con datos del remitente. Para regular la cantidad de datos que debe enviar el remitente, TCP define un concepto llamado ventana de congestión. El algoritmo de control de congestión ajustará el tamaño de la ventana de congestión de acuerdo con el grado de congestión de la red, a fin de controlar la cantidad de datos enviados por el remitente.
¿Qué es una ventana de congestión? ¿Qué tiene esto que ver con la ventana Enviar?
La ventana de congestión es una variable de estado mantenida por el remitente que determina la cantidad de datos que el remitente puede enviar. La ventana de congestión cambia dinámicamente de acuerdo con el nivel de congestión de la red.
La ventana de envío es un tamaño de ventana acordado entre el remitente y el receptor que indica la cantidad de datos que el receptor puede recibir. La ventana de congestión y la ventana de envío están relacionadas; La ventana de envío generalmente es igual al mínimo de la congestión y las ventanas receptores, es decir, SWND = min (CWND, RWND).
La ventana de congestión CWND cambia de la siguiente manera:
Si no hay congestión en la red, es decir, no se produce un tiempo de espera de retransmisión, aumenta la ventana de congestión.
Si hay congestión en la red, la ventana de congestión disminuye.
El remitente determina si la red está congestionada al observar si el paquete de reconocimiento de ACK se recibe dentro del tiempo especificado. Si el remitente no recibe el paquete de reconocimiento ACK dentro del tiempo especificado, se considera que la red está congestionada.
Además de la ventana de congestión, es hora de discutir el algoritmo de control de congestión TCP. El algoritmo de control de congestión TCP consta de tres partes principales:
Comienzo lento:Inicialmente, la ventana de congestión CWND es relativamente pequeña, y el remitente aumenta la ventana de congestión exponencialmente para adaptarse rápidamente a la capacidad de la red.
Evitación de congestión:Después de que la ventana de congestión excede un cierto umbral, el remitente aumenta la ventana de congestión de manera lineal para ralentizar la tasa de crecimiento de la ventana de congestión y evitar sobrecargar la red.
Recuperación rápida:Si ocurre la congestión, el remitente mitiga la ventana de congestión y ingresa al estado de recuperación rápida para determinar la ubicación de la recuperación de la red a través de los ACK duplicados recibidos, y luego continúa aumentando la ventana de congestión.
Comienzo lento
Cuando se establece una conexión TCP, la ventana de congestión CWND se establece inicialmente en un valor mínimo de MSS (tamaño máximo de segmento). De esta manera, la tasa de envío inicial es sobre bytes MSS/RTT/segundo. El ancho de banda disponible real suele ser mucho más grande que MSS/RTT, por lo que TCP quiere encontrar la tasa de envío óptima, que se puede lograr mediante el inicio lento.
En el proceso de inicio lento, el valor de la ventana de congestión CWND se inicializará a 1 mss, y cada vez que se reconoce el segmento de paquetes transmitidos, el valor de CWND aumentará en un MSS, es decir, el valor de CWND se convertirá en 2 mss. Después de eso, el valor de CWND se duplica para cada transmisión exitosa de un segmento de paquetes, y así sucesivamente. El proceso de crecimiento específico se muestra en la siguiente figura.
Sin embargo, la tasa de envío no siempre puede crecer; El crecimiento tiene que terminar en algún momento. Entonces, ¿cuándo finaliza la tasa de envío? El comienzo lento generalmente termina el aumento de la tasa de envío de una de varias maneras:
La primera forma es el caso de la pérdida de paquetes durante el proceso de envío de inicio lento. Cuando se produce una pérdida de paquete, TCP establece la ventana de congestión del remitente en a 1 y reinicia el proceso de inicio lento. En este punto, se introduce un concepto de umbral de inicio lento SSTHRESH, cuyo valor inicial es la mitad del valor de CWND que genera pérdida de paquetes. Es decir, cuando se detecta la congestión, el valor de SSThresh es la mitad del valor de la ventana.
La segunda forma es correlacionarse directamente con el valor del umbral de arranque lento. Dado que el valor de SSThresh es la mitad del valor de la ventana cuando se detecta la congestión, puede ocurrir la pérdida de paquetes con cada duplicación cuando CWND es más grande que SSThresh. Por lo tanto, es mejor establecer CWND en SSTHRESH, lo que hará que TCP cambie al modo de control de congestión y termine el comienzo lento.
La última forma en que el inicio lento puede terminar es si se detectan tres ACK redundantes, TCP realiza una retransmisión rápida y ingresa al estado de recuperación. (Si no está claro por qué hay tres paquetes ACK, se explicará por separado en el mecanismo de retransmisión).
Evitación de congestión
Cuando TCP ingresa al estado de control de congestión, CWND se establece en la mitad del umbral de congestión SSTHRESH. Esto significa que el valor de CWND no se puede duplicar cada vez que se recibe un segmento de paquetes. En cambio, se adopta un enfoque relativamente conservador en el que el valor de CWND aumenta solo un MSS (longitud máxima del segmento de paquetes) después de que se complete cada transmisión. Por ejemplo, incluso si se reconocen 10 segmentos de paquetes, el valor de CWND solo aumentará en un MSS. Este es un modelo de crecimiento lineal y también tiene un límite superior en el crecimiento. Cuando se produce la pérdida de paquetes, el valor de CWND se cambia a un MSS, y el valor de SSTHRESH se establece en la mitad de CWND. O también detendrá el crecimiento de MSS cuando se reciban 3 respuestas ACK redundantes. Si todavía se reciben tres ACK redundantes después de reducir a la mitad el valor de CWND, el valor de SSTHRESH se registra como la mitad del valor de CWND y se ingresa el estado de recuperación rápida.
Recuperación rápida
En el estado de recuperación rápida, el valor de la ventana de congestión CWND aumenta en un MSS por cada ACK redundante recibido, es decir, ACK que no llega en secuencia. Esto es para utilizar los segmentos de paquetes que se han transmitido con éxito en la red para mejorar la eficiencia de la transmisión tanto como sea posible.
Cuando llega un ACK del segmento de paquetes perdido, TCP disminuye el valor de CWND y luego ingresa al estado de evitación de congestión. Esto es para controlar el tamaño de la ventana de congestión y evitar aumentar aún más la congestión de la red.
Si se produce un tiempo de espera después del estado de control de congestión, la condición de la red se vuelve más grave y TCP migra desde el estado de evitación de congestión hasta el estado de inicio lento. En este caso, el valor de la ventana de congestión CWND se establece en 1 mss, la longitud máxima del segmento de paquetes y el valor del umbral de inicio lento se establece en la mitad de CWND. El propósito de esto es aumentar degradación de forma regradante del tamaño de la ventana de congestión después de que la red se recupera para equilibrar la velocidad de transmisión y el grado de congestión de la red.
Resumen
Como un protocolo de transporte confiable, TCP implementa un transporte confiable por número de secuencia, reconocimiento, control de retransmisión, gestión de la conexión y control de ventanas. Entre ellos, el mecanismo de control de flujo controla la cantidad de datos enviados por el remitente de acuerdo con la capacidad de recepción real del receptor, lo que evita los problemas de congestión de la red y degradación del rendimiento. El mecanismo de control de congestión evita la aparición de congestión de la red ajustando la cantidad de datos enviados por el remitente. Los conceptos de ventana de congestión y ventana de envío están relacionados entre sí, y la cantidad de datos en el remitente se controla ajustando dinámicamente el tamaño de la ventana de congestión. El inicio lento, la evitación de congestión y la recuperación rápida son las tres partes principales del algoritmo de control de congestión TCP, que ajustan el tamaño de la ventana de congestión a través de diferentes estrategias para adaptarse a la capacidad y el grado de congestión de la red.
En la siguiente sección, examinaremos el mecanismo de retransmisión de TCP en detalle. El mecanismo de retransmisión es una parte importante de TCP para lograr una transmisión confiable. Asegura la transmisión confiable de datos mediante la retransmitir datos perdidos, corrompidos o retrasados. El principio de implementación y la estrategia del mecanismo de retransmisión se introducirán y analizarán en detalle en la siguiente sección. ¡Manténganse al tanto!
Tiempo de publicación: 24-24-2025 de febrero