Articulo de referencia

Control de congestión TCP

El Protocolo de Control de Transmisión (TCP) utiliza uno de varios algoritmos de control de congestión que incluyen diversos aspectos de un esquema de aumento aditivo/disminució...

El Protocolo de Control de Transmisión (TCP) utiliza uno de varios algoritmos de control de congestión que incluyen diversos aspectos de un esquema de aumento aditivo/disminución multiplicativa (AIMD), junto con otros esquemas que incluyen el inicio lento [ 1 ] y una ventana de congestión (CWND), para lograr la evitación de la congestión.

El algoritmo de prevención de congestión TCP es la base principal del control de congestión en Internet. [ 2 ] [ 3 ] [ 4 ] Según el principio de extremo a extremo , el control de congestión depende en gran medida de los hosts de Internet , no de la red en sí. Existen varias variaciones y versiones del algoritmo implementadas en las pilas de protocolos de los sistemas operativos de las computadoras que se conectan a Internet .

Para evitar el colapso por congestión , TCP utiliza una estrategia de control de congestión multifacética. Para cada conexión, TCP mantiene un CWND, que limita el número total de paquetes no confirmados que pueden estar en tránsito de extremo a extremo. Esto es similar a la ventana deslizante que TCP utiliza para el control de flujo .

Aumento aditivo/disminución multiplicativa

El algoritmo de incremento aditivo/disminución multiplicativa (AIMD) es un algoritmo de control de bucle cerrado . AIMD combina el crecimiento lineal de la ventana de congestión con una reducción exponencial cuando se produce congestión. Múltiples flujos que utilizan el control de congestión AIMD convergerán finalmente para utilizar cantidades iguales de un enlace contenido. [ 5 ]

Este es el algoritmo que se describe en RFC 5681 para el estado de evitación de congestión . [ 6 ] 

Ventana de congestión

En TCP, la ventana de congestión (CWND) es uno de los factores que determina la cantidad de bytes que se pueden enviar en un momento dado. El emisor mantiene la ventana de congestión para evitar que el enlace entre el emisor y el receptor se sobrecargue con demasiado tráfico. No debe confundirse con la ventana deslizante, también mantenida por el emisor, que evita la sobrecarga del receptor . La ventana de congestión se calcula estimando el nivel de congestión en el enlace.

Cuando se establece una conexión, la ventana de congestión, un valor que se mantiene de forma independiente en cada host, se configura como un múltiplo pequeño del tamaño máximo de segmento ( MSS ) permitido en esa conexión. La variación adicional en la ventana de congestión viene determinada por un enfoque de incremento aditivo/disminución multiplicativa (AIMD). Esto significa que si se reciben todos los segmentos y las confirmaciones llegan al remitente a tiempo, se añade una constante al tamaño de la ventana. Esto seguirá diferentes algoritmos.

Un administrador del sistema puede ajustar el límite del tamaño máximo de la ventana o ajustar la constante agregada durante el incremento aditivo, como parte de la optimización de TCP .

El flujo de datos a través de una conexión TCP también se controla mediante el uso de la ventana de recepción anunciada por el receptor. Un remitente puede enviar datos menores que su propia ventana de congestión y la ventana de recepción .

Comienzo lento

El inicio lento, definido por RFC 5681 , [ 7 ] es parte de la estrategia de control de congestión utilizada por TCP junto con otros algoritmos para evitar enviar más datos de los que la red es capaz de reenviar, es decir, para evitar causar congestión en la red. 

El inicio lento comienza inicialmente con un tamaño de ventana de congestión (CWND) de 1, 2, 4 o 10 MSS. [ 8 ] [ 3 ] : 1 El valor del tamaño de la ventana de congestión puede aumentarse en 1 MSS con cada acuse de recibo (ACK) recibido, duplicando efectivamente el tamaño de la ventana en cada RTT . [ a ]

La tasa de transmisión aumentará mediante el algoritmo de inicio lento hasta que se detecte una pérdida de paquetes , la ventana anunciada del receptor (rwnd) se convierta en el factor limitante, o se alcance el umbral de inicio lento (ssthresh) , que se utiliza para determinar si se utiliza el algoritmo de inicio lento o el de prevención de congestión, un valor establecido para limitar el inicio lento.

Si el CWND alcanza el umbral ssthresh , TCP activa el algoritmo de prevención de congestión. Este debe incrementarse hasta en 1 MSS por cada RTT. Una fórmula común establece que cada nuevo ACK incrementa el CWND en MSS * MSS / CWND. Este incremento es casi lineal y proporciona una aproximación aceptable.

Si se produce una pérdida de paquetes, TCP asume que se debe a la congestión de la red y toma medidas para reducir la carga ofrecida en la misma. Estas medidas dependen del algoritmo específico de prevención de congestión de TCP que se utilice.

Cuando un remitente TCP detecta la pérdida de un segmento mediante el temporizador de retransmisión y el segmento en cuestión aún no se ha reenviado, el valor de ssthresh debe establecerse en no más de la mitad de la cantidad de datos que se han enviado pero que aún no se han confirmado acumulativamente o 2 * MSS , el que sea mayor.

TCP Tahoe
Cuando se produce una pérdida, se envía una retransmisión, la mitad del CWND actual se guarda como ssthresh y el inicio lento comienza de nuevo desde su CWND inicial.
TCP Reno
Se envía una retransmisión rápida , la mitad del CWND actual se guarda como ssthresh y como el nuevo valor para CWND, omitiendo así el inicio lento y pasando directamente al algoritmo de prevención de congestión. El algoritmo general aquí se llamarecuperación rápida .

El inicio lento parte de la premisa de que los segmentos no confirmados se deben a la congestión de la red. Si bien esta premisa es aceptable para muchas redes, los segmentos pueden perderse por otros motivos, como una mala calidad de transmisión en la capa de enlace de datos . Por lo tanto, el inicio lento puede tener un rendimiento deficiente en situaciones con mala recepción, como en las redes inalámbricas .

El protocolo de inicio lento también funciona mal para conexiones de corta duración. Los navegadores web antiguos creaban muchas conexiones consecutivas de corta duración al servidor web, y abrían y cerraban la conexión para cada archivo solicitado. Esto mantenía la mayoría de las conexiones en el modo de inicio lento, lo que resultaba en un tiempo de respuesta deficiente. Para evitar este problema, los navegadores modernos abren varias conexiones simultáneamente o reutilizan una conexión para todos los archivos solicitados a un servidor web en particular. Sin embargo, las conexiones no se pueden reutilizar para los múltiples servidores de terceros que utilizan los sitios web para implementar publicidad web , funciones para compartir en servicios de redes sociales [ 9 ] y scripts de contador de análisis web .

retransmisión rápida

La retransmisión rápida es una mejora de TCP que reduce el tiempo de espera del emisor antes de retransmitir un segmento perdido. Normalmente, un emisor TCP utiliza un temporizador sencillo para detectar la pérdida de segmentos. Si no se recibe una confirmación para un segmento determinado dentro de un tiempo específico (que depende del tiempo estimado de retardo de ida y vuelta ), el emisor asumirá que el segmento se perdió en la red y lo retransmitirá.

El acuse de recibo duplicado es la base del mecanismo de retransmisión rápida. Tras recibir un paquete, se envía un acuse de recibo para el último byte de datos recibido en orden. Para un paquete en orden, esto equivale al número de secuencia del último paquete más la longitud de la carga útil del paquete actual. Si se pierde el siguiente paquete de la secuencia, pero se recibe un tercer paquete, el receptor solo puede acusar recibo del último byte de datos en orden, que es el mismo valor que se acusó para el primer paquete. Si se pierde el segundo paquete y el tercero no está en orden, el último byte de datos en orden permanece igual. Por lo tanto, se produce un acuse de recibo duplicado . El emisor continúa enviando paquetes, y el receptor recibe un cuarto y un quinto paquete. De nuevo, falta el segundo paquete en la secuencia, por lo que el último byte en orden no ha cambiado. Se envían acuses de recibo duplicados para ambos paquetes.

Cuando un remitente recibe tres acuses de recibo duplicados, puede tener la certeza de que el segmento que contenía los datos posteriores al último byte en orden especificado en el acuse de recibo se perdió. Un remitente con retransmisión rápida retransmitirá este paquete inmediatamente sin esperar a que expire el tiempo de espera. Al recibir el segmento retransmitido, el receptor puede confirmar el último byte en orden de los datos recibidos. En el ejemplo anterior, esto confirmaría el final de la carga útil del quinto paquete. No es necesario confirmar los paquetes intermedios, ya que TCP utiliza acuses de recibo acumulativos por defecto.

Algoritmos

Los nombres Reno y Tahoe son nombres de versiones del sistema operativo BSD UNIX , y se usaban para referirse a los algoritmos de control de congestión (CCA) al menos desde un artículo de 1996 de Kevin Fall y Sally Floyd. [ 10 ]

La siguiente es una posible clasificación según las siguientes propiedades:

  1. el tipo y la cantidad de retroalimentación recibida de la red
  2. Despliegue incremental en la Internet actual
  3. Aspectos del rendimiento que pretende mejorar: redes con alto producto ancho de banda-retardo (B); enlaces con pérdidas (L); equidad (F); ventaja para flujos cortos (S); enlaces de velocidad variable (V); velocidad de convergencia (C)
  4. el criterio de equidad que utiliza

Algunos mecanismos conocidos para evitar la congestión se clasifican según este esquema de la siguiente manera:

TCP Tahoe y Reno

Los algoritmos TCP Tahoe y Reno recibieron su nombre retrospectivamente de las versiones o variantes del sistema operativo 4.3BSD en las que aparecieron por primera vez (las cuales, a su vez, recibieron su nombre del lago Tahoe y de la cercana ciudad de Reno, Nevada ). El algoritmo Tahoe apareció por primera vez en 4.3BSD-Tahoe (creado para dar soporte al miniordenador CCI Power 6/32 "Tahoe" ) y posteriormente se puso a disposición de usuarios que no eran licenciatarios de AT&T como parte de 4.3BSD Networking Release 1; esto garantizó su amplia distribución e implementación. Se realizaron mejoras en 4.3BSD-Reno y posteriormente se lanzó al público como Networking Release 2 y, más tarde, como 4.4BSD-Lite.

Si bien ambos consideran el tiempo de espera de retransmisión (RTO) y los ACK duplicados como eventos de pérdida de paquetes, el comportamiento de Tahoe y Reno difiere principalmente en cómo reaccionan a los ACK duplicados:

  • Tahoe: si se reciben tres ACK duplicados (es decir, cuatro ACK que confirman el mismo paquete, que no se adjuntan a los datos y no cambian la ventana anunciada del receptor), Tahoe realiza una retransmisión rápida, establece el umbral de inicio lento a la mitad de la ventana de congestión actual, reduce la ventana de congestión a 1 MSS y vuelve al estado de inicio lento. [ 17 ]
  • Reno: si se reciben tres ACK duplicados, Reno realizará una retransmisión rápida y omitirá la fase de inicio lento reduciendo a la mitad la ventana de congestión (en lugar de establecerla en 1 MSS como Tahoe), estableciendo el ssthresh igual a la nueva ventana de congestión y entrando en una fase llamada recuperación rápida . [ 18 ]

Tanto en Tahoe como en Reno, si se agota el tiempo de espera de un ACK (tiempo de espera de RTO), se utiliza un inicio lento y ambos algoritmos reducen la ventana de congestión a 1 MSS.

TCP New Reno

TCP New Reno, definido por el RFC 6582 (que deja obsoletas las definiciones anteriores en los RFC 3782 y RFC 2582 ), mejora la retransmisión durante la fase de recuperación rápida de TCP Reno.   

Durante la recuperación rápida, para mantener llena la ventana de transmisión, por cada ACK duplicado que se recibe, se envía un nuevo paquete no enviado del final de la ventana de congestión.

La diferencia con Reno radica en que New Reno no reduce a la mitad el umbral ssthresh inmediatamente, lo que podría disminuir demasiado la ventana si se producen múltiples pérdidas de paquetes. No finaliza la recuperación rápida ni restablece el umbral ssthresh hasta que reconoce todos los datos.

Tras la retransmisión, los datos recién confirmados presentan dos casos:

  • Acuses de recibo completos: El ACK confirma todos los segmentos intermedios enviados; el ssthresh no se puede cambiar y el cwnd se puede establecer en ssthresh.
  • Acuses de recibo parciales: El ACK no confirma la recepción de todos los datos. Esto significa que puede producirse otra pérdida; si está permitido, se retransmitirá el primer segmento no confirmado.

Utiliza una variable llamada `recover` para registrar la cantidad de datos que deben recuperarse. Tras un tiempo de espera de retransmisión, registra el número de secuencia más alto transmitido en la variable `recover` y finaliza el procedimiento de recuperación rápida. Si se confirma este número de secuencia, TCP vuelve al estado de prevención de congestión.

Se produce un problema con New Reno cuando no hay pérdida de paquetes, sino que estos se reordenan en más de tres posiciones. En este caso, New Reno entra erróneamente en modo de recuperación rápida. Al recibirse el paquete reordenado, se envían inmediatamente retransmisiones duplicadas e innecesarias.

El nuevo Reno funciona tan bien como SACK con bajas tasas de error de paquetes y supera sustancialmente a Reno con altas tasas de error. [ 19 ]

TCP Vegas

Hasta mediados de la década de 1990, todos los tiempos de espera y las demoras de ida y vuelta de TCP se basaban únicamente en el último paquete transmitido en el búfer de transmisión. Los investigadores de la Universidad de Arizona, Larry Peterson y Lawrence Brakmo, introdujeron TCP Vegas, en el que los tiempos de espera se configuraban y las demoras de ida y vuelta se medían para cada paquete en el búfer de transmisión. Además, TCP Vegas utiliza incrementos aditivos en la ventana de congestión. En un estudio comparativo de 2012 de varios TCP CCA , TCP Vegas resultó ser el más fluido, seguido de TCP CUBIC. [ 20 ]

TCP Vegas no se implementó ampliamente fuera del laboratorio de Peterson, pero fue seleccionado como el método de control de congestión predeterminado para el firmware DD-WRT v24 SP2. [ 21 ]

TCP Hybla

TCP Hybla [ 22 ] [ 23 ] tiene como objetivo eliminar las penalizaciones a las conexiones TCP que utilizan enlaces de radio terrestres o satelitales de alta latencia. Las mejoras de Hybla se basan en la evaluación analítica de la dinámica de la ventana de congestión. [ 24 ]

BIC TCP

El control de congestión de incremento binario (BIC) es una implementación de TCP con un CCA optimizado para redes de alta velocidad con alta latencia, conocidas como redes largas y gordas (LFN). [ 25 ] BIC se utiliza por defecto en los núcleos de Linux de la versión 2.6.8 a la 2.6.18.

TCP CUBIC

CUBIC es una variante menos agresiva y más sistemática de BIC, en la que la ventana es una función cúbica del tiempo transcurrido desde el último evento de congestión, con el punto de inflexión establecido en la ventana anterior al evento. CUBIC se utiliza por defecto en los núcleos de Linux desde la versión 2.6.19.

TCP Agile-SD

Agile-SD es un CCA basado en Linux diseñado para el kernel de Linux real. Es un algoritmo del lado del receptor que emplea un enfoque basado en pérdidas mediante un mecanismo novedoso, llamado factor de agilidad (AF), para aumentar la utilización del ancho de banda en redes de alta velocidad y corta distancia (redes con bajo producto ancho de banda-retardo), como redes de área local o redes de fibra óptica, especialmente cuando el tamaño del búfer aplicado es pequeño. [ 26 ] Se ha evaluado comparando su rendimiento con Compound TCP (el CCA predeterminado en MS Windows) y CUBIC (el predeterminado de Linux) utilizando el simulador NS-2. Mejora el rendimiento total hasta en un 55 % en términos de rendimiento promedio.

TCP Westwood+

Westwood+ es una modificación de TCP Reno que solo afecta al remitente y que optimiza el rendimiento del control de congestión TCP tanto en redes cableadas como inalámbricas . TCP Westwood+ se basa en la estimación del ancho de banda de extremo a extremo para establecer la ventana de congestión y el umbral de inicio lento tras un episodio de congestión, es decir, tras tres acuses de recibo duplicados o un tiempo de espera agotado. El ancho de banda se estima promediando la tasa de paquetes de acuse de recibo devueltos. A diferencia de TCP Reno, que reduce a la mitad la ventana de congestión automáticamente tras tres ACK duplicados, TCP Westwood+ establece de forma adaptativa un umbral de inicio lento y una ventana de congestión que tiene en cuenta una estimación del ancho de banda disponible en el momento en que se produce la congestión. En comparación con Reno y New Reno, Westwood+ aumenta significativamente el rendimiento en enlaces inalámbricos y mejora la equidad en redes cableadas.

TCP compuesto

El TCP compuesto es una implementación de Microsoft del TCP que mantiene dos ventanas de congestión diferentes simultáneamente, con el objetivo de lograr un buen rendimiento en LFN sin comprometer la equidad . Se ha implementado ampliamente en versiones de Windows desde Microsoft Windows Vista y Windows Server 2008 , y también se ha adaptado a versiones anteriores de Microsoft Windows y Linux .

Reducción de la tasa proporcional del TCP

La reducción proporcional de la tasa TCP (PRR) [ 27 ] es un algoritmo diseñado para mejorar la precisión de los datos enviados durante la recuperación. El algoritmo garantiza que el tamaño de la ventana después de la recuperación sea lo más cercano posible al umbral de inicio lento. En pruebas realizadas por Google , PRR resultó en una reducción del 3 al 10 % en la latencia promedio y los tiempos de espera de recuperación se redujeron en un 5 %. [ 28 ] PRR está disponible en los núcleos de Linux desde la versión 3.2. [ 29 ]

TCP BBR

El algoritmo de detección de cuello de botella de ancho de banda y tiempo de propagación de ida y vuelta (BBR) es un CCA desarrollado en Google en 2016. [ 30 ] Si bien la mayoría de los CCA se basan en la pérdida, ya que dependen de la pérdida de paquetes para detectar la congestión y las tasas de transmisión más bajas, BBR, al igual que TCP Vegas , se basa en un modelo. El algoritmo utiliza el ancho de banda máximo y el tiempo de ida y vuelta en el que la red entregó el último vuelo de paquetes de datos salientes para construir un modelo de la red. Cada acuse de recibo acumulativo o selectivo de la entrega de paquetes produce una muestra de tasa que registra la cantidad de datos entregados durante el intervalo de tiempo entre la transmisión de un paquete de datos y el acuse de recibo de ese paquete. [ 31 ]

Cuando se implementó en YouTube , BBRv1 produjo un rendimiento de red promedio un 4 % mayor y hasta un 14 % en algunos países. [ 32 ] BBR ha estado disponible para Linux TCP desde Linux 4.9. [ 33 ] También está disponible para QUIC . [ 34 ]

La equidad de BBR versión 1 (BBRv1) para flujos que no son BBR es cuestionada. Si bien la presentación de Google muestra que BBRv1 coexiste bien con CUBIC, [ 30 ] investigadores como Geoff Huston y Hock, Bless y Zitterbart encontraron que era injusto para otros flujos y no escalable. [ 35 ] Hock et al. también encontraron "algunos problemas inherentes graves, como mayores retrasos en la cola, inequidad y pérdida masiva de paquetes" en la implementación de BBR de Linux 4.9. [ 36 ] Soheil Abbasloo et al. (autores de C2TCP) muestran que BBRv1 no funciona bien en entornos dinámicos como las redes celulares. [ 11 ] [ 12 ] También han demostrado que BBR tiene un problema de inequidad. Por ejemplo, cuando un flujo CUBIC (que es la implementación TCP predeterminada en Linux, Android y MacOS) coexiste con un flujo BBR en la red, el flujo BBR puede dominar al flujo CUBIC y obtener todo el ancho de banda del enlace (ver figura 18 en [ 11 ] ).

La versión 2 intenta abordar el problema de la injusticia cuando opera junto con la administración de congestión basada en pérdidas como CUBIC. [ 37 ] En BBRv2, el modelo utilizado por BBRv1 se amplía para incluir información sobre la pérdida de paquetes e información de la Notificación Explícita de Congestión (ECN). [ 38 ] Si bien BBRv2 puede tener a veces un rendimiento menor que BBRv1, generalmente se considera que tiene un mejor rendimiento efectivo . Windows 11, versión 24H2 y Windows Server 2025 tenían soporte para BBRv2, pero es posible que no lo habiliten de forma predeterminada.

La versión 3 (BBRv3) corrige dos errores de BBRv2 (fin prematuro del sondeo de ancho de banda, convergencia de ancho de banda) y realiza algunos ajustes de rendimiento. También existe una variante, denominada BBR.Swift, optimizada para enlaces internos de centros de datos: utiliza network_RTT (excluyendo el retardo del receptor) como señal principal de control de congestión. [ 38 ]

C2TCP

El protocolo TCP de retardo controlado celular (C2TCP) [ 11 ] [ 12 ] surgió debido a la falta de un enfoque TCP flexible de extremo a extremo que pudiera satisfacer diversos requisitos de QoS para diferentes aplicaciones sin requerir cambios en los dispositivos de red. C2TCP busca satisfacer los requisitos de latencia ultrabaja y ancho de banda alto de aplicaciones como realidad virtual , videoconferencia , juegos en línea , sistemas de comunicación vehicular , etc., en un entorno altamente dinámico como las redes celulares LTE actuales y las futuras redes celulares 5G . C2TCP funciona como un complemento sobre TCP basado en pérdidas (por ejemplo, Reno, NewReno, CUBIC , BIC , ...), solo se requiere instalarlo en el lado del servidor y hace que el retardo promedio de los paquetes se ajuste a los retardos deseados establecidos por las aplicaciones.

Investigadores de la NYU [ 39 ] demostraron que C2TCP supera el rendimiento en cuanto a retardo y variación de retardo de varios esquemas TCP de última generación. Por ejemplo, demostraron que, en comparación con BBR, CUBIC y Westwood, C2TCP reduce el retardo promedio de los paquetes en aproximadamente un 250 %, un 900 % y un 700 %, respectivamente, en diversos entornos de redes celulares. [ 11 ]

TCP elástico

Elastic-TCP se propuso en febrero de 2019 para aumentar la utilización del ancho de banda en redes de alto BDP en apoyo de la computación en la nube . Es un CCA basado en Linux diseñado para el kernel de Linux. Es un algoritmo del lado del receptor que emplea un enfoque basado en pérdida-retardo mediante un mecanismo novedoso llamado función de ponderación correlacionada con ventana (WWF). Posee un alto nivel de elasticidad para gestionar diferentes características de red sin necesidad de ajuste manual. Se ha evaluado comparando su rendimiento con Compound TCP (el CCA predeterminado en MS Windows), CUBIC (el predeterminado para Linux) y TCP-BBR (el predeterminado de Linux 4.9 utilizado por Google) mediante el simulador y banco de pruebas NS-2. Elastic-TCP mejora significativamente el rendimiento total en términos de rendimiento promedio, relación de pérdida y retardo. [ 40 ]

NATCP

Soheil Abbasloo et al. propusieron NATCP (Network-Assisted TCP), [ 13 ] un diseño de TCP controvertido dirigido a la computación de borde de acceso múltiple (MEC). La idea clave de NATCP es que si se conocieran de antemano las características de la red, TCP se habría diseñado de manera diferente. Por lo tanto, NATCP emplea las características y propiedades disponibles en las arquitecturas celulares actuales basadas en MEC para llevar el rendimiento de TCP cerca del rendimiento óptimo. NATCP utiliza retroalimentación fuera de banda de la red a los servidores ubicados cerca. La retroalimentación de la red, que incluye la capacidad del enlace de acceso celular y el RTT mínimo de la red, guía a los servidores para ajustar sus tasas de envío. Como muestran los resultados preliminares, NATCP supera a los esquemas TCP de última generación. [ 13 ] [ 41 ]

Otros algoritmos para evitar la congestión TCP

TCP New Reno fue el algoritmo más comúnmente implementado, el soporte para SACK es muy común y es una extensión de Reno/New Reno. La mayoría de los demás son propuestas competidoras que aún necesitan evaluación. A partir de la versión 2.6.8, el kernel de Linux cambió la implementación predeterminada de New Reno a BIC . La implementación predeterminada se cambió nuevamente a CUBIC en la versión 2.6.19. FreeBSD, a partir de la versión 14.X, también utiliza CUBIC como algoritmo predeterminado. [ 53 ] Las versiones anteriores utilizaban New Reno. Sin embargo, FreeBSD admite varias otras opciones. [ 54 ]

Cuando el producto del ancho de banda y la latencia por flujo aumenta, independientemente del esquema de colas, TCP se vuelve ineficiente y propenso a la inestabilidad. Esto cobra cada vez más importancia a medida que Internet evoluciona para incorporar enlaces ópticos de muy alto ancho de banda.

TCP Interactive (iTCP) [ 55 ] permite que las aplicaciones se suscriban a eventos TCP y respondan en consecuencia, lo que posibilita diversas extensiones funcionales de TCP desde fuera de la capa TCP. La mayoría de los esquemas de congestión de TCP funcionan internamente. iTCP también permite que las aplicaciones avanzadas participen directamente en el control de la congestión, por ejemplo, para controlar la tasa de generación de fuentes.

Zeta-TCP detecta la congestión a partir de medidas de latencia y tasa de pérdida. Para maximizar el rendimiento útil , Zeta-TCP aplica diferentes estrategias de retroceso de ventana de congestión según la probabilidad de congestión. También cuenta con otras mejoras para detectar con precisión las pérdidas de paquetes, evitar el tiempo de espera de retransmisión y acelerar y controlar el tráfico entrante (de descarga). [ 56 ]

Clasificación por conocimiento de la red

Los CCA se pueden clasificar en función de su conocimiento de la red, es decir, el grado en que estos algoritmos conocen el estado de la red. Esto se compone de tres categorías principales: caja negra, caja gris y caja verde. [ 57 ]

Los algoritmos de caja negra ofrecen métodos ciegos de control de congestión. Operan únicamente con la información binaria recibida sobre la congestión y no presuponen ningún conocimiento sobre el estado de las redes que gestionan.

Los algoritmos de caja gris utilizan mediciones basadas en el tiempo, como la variación del RTT y la tasa de llegada de paquetes, para obtener mediciones y estimaciones del ancho de banda, la contención de flujo y otros conocimientos sobre las condiciones de la red.

Los algoritmos de caja verde ofrecen métodos bimodales de control de congestión que miden la proporción justa del ancho de banda total que debe asignarse a cada flujo, en cualquier momento, durante la ejecución del sistema.

Caja negra

  • TCP de alta velocidad [ 58 ]
  • El protocolo BIC TCP (Binary Increase Congestion Control Protocol) utiliza un incremento cóncavo de la tasa de la fuente después de cada evento de congestión hasta que la ventana sea igual a la anterior al evento, con el fin de maximizar el tiempo de uso completo de la red. Posteriormente, realiza sondeos de forma agresiva.
  • TCP CUBIC : una variante menos agresiva y más sistemática de BIC, en la que la ventana es una función cúbica del tiempo transcurrido desde el último evento de congestión, con el punto de inflexión establecido en la ventana anterior al evento.
  • AIMD-FC (aumento aditivo, disminución multiplicativa con convergencia rápida), una mejora de AIMD. [ 59 ]
  • Mecanismos binomiales
  • Protocolo SIMD
  • GAIMD

Caja gris

  • TCP Vegas estima el retardo de cola y aumenta o disminuye linealmente la ventana para que se ponga en cola un número constante de paquetes por flujo en la red. Vegas implementa la equidad proporcional.
  • FAST TCP logra el mismo equilibrio que Vegas, pero utiliza un control proporcional en lugar de un aumento lineal, y reduce intencionadamente la ganancia a medida que aumenta el ancho de banda con el objetivo de garantizar la estabilidad.
  • TCP BBR: estima el retardo de la cola, pero utiliza un incremento exponencial. Ralentiza intencionadamente de forma periódica para garantizar la equidad y reducir el retardo.
  • TCP-Westwood (TCPW): una pérdida provoca que la ventana se restablezca a la estimación del remitente del producto ancho de banda-retardo (el RTT medido más pequeño multiplicado por la tasa observada de recepción de ACKs). [ 60 ]
  • C2TCP [ 12 ] [ 11 ]
  • TFRC [ 61 ]
  • TCP-Real
  • TCP-Jersey

Caja verde

Los siguientes algoritmos requieren que se agreguen campos personalizados a la estructura del paquete TCP:

  • Protocolo de Control Explícito (XCP): los paquetes XCP llevan una cabecera de congestión con un campo de retroalimentación que indica el aumento o la disminución de la ventana de congestión del remitente. Los enrutadores XCP establecen el valor de retroalimentación explícitamente para mayor eficiencia y equidad. [ 62 ]
  • MaxNet : utiliza un único campo de encabezado que contiene el nivel máximo de congestión de cualquier enrutador en la ruta del flujo. La tasa se establece en función de esta congestión máxima, lo que resulta en una equidad máxima-mínima . [ 63 ]
  • JetMax , al igual que MaxNet, responde únicamente a la señal de congestión máxima, pero también transporta otros campos de sobrecarga.

Uso de Linux

  • BIC se utiliza por defecto en los núcleos de Linux 2.6.8 a 2.6.18. (agosto de 2004 – septiembre de 2006) [ 64 ]
  • CUBIC se utiliza por defecto en los núcleos de Linux desde la versión 2.6.19. (noviembre de 2006) [ 64 ]
  • PRR se incorpora en los núcleos de Linux para mejorar la recuperación de pérdidas desde la versión 3.2. (enero de 2012) [ 64 ]
  • BBRv1 se incorpora en los núcleos de Linux para habilitar el control de congestión basado en modelos desde la versión 4.9. (diciembre de 2016) [ 64 ]

Véase también

Notas

  1. Incluso si, de hecho, el receptor puede retrasar sus ACK, enviando normalmente un ACK por cada dos segmentos que recibe [ 2 ]

Referencias

  1. Jacobson y Karels 1988 .
  2. 1 2 W. Stevens (enero de 1997). TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms . IETF . doi : 10.17487/RFC2001 . RFC 2001 .
  3. 1 2 M. Allman; S. Floyd; C. Partridge (octubre de 2002). Increasing TCP's Initial Window . IETF . doi : 10.17487/RFC3390 . RFC 3390 .
  4. "Evitación de la congestión TCP explicada mediante un diagrama de secuencia" (PDF) . eventhelix.com . Archivado del original (PDF) el 22 de noviembre de 2010. Consultado el 26 de noviembre de 2010 .
  5. Chiu, Dah-Ming; Raj Jain (1989). "Análisis de algoritmos de aumento y disminución para evitar la congestión en redes informáticas". Redes informáticas y sistemas ISDN . 17 : 1–14 . CiteSeerX 10.1.1.136.8108 . doi : 10.1016/0169-7552(89)90019-6 . 
  6. Allman, M.; Paxson, V. (septiembre de 2009). Control de congestión TCP . Grupo de trabajo de ingeniería de Internet . sec. 3.1. doi : 10.17487/RFC5681 . RFC 5681. Recuperado el 4 de marzo de 2021 . 
  7. Blanton, Ethan; Paxson, Vern; Allman, Mark (septiembre de 2009). "Control de congestión TCP" . Grupo de trabajo de ingeniería de Internet.{{cite journal}}: Para citar una revista se requiere |journal=( ayuda )
  8. Corbet, Jonathan (9 de febrero de 2011). "Aumento de la ventana de congestión inicial de TCP" . LWN . Consultado el 10 de octubre de 2012 .
  9. Nick O'Neill. " ¿Qué está ralentizando tu sitio web? Podría ser el botón 'Me gusta '". AllFacebook , 10 de noviembre de 2010. Consultado el 12 de septiembre de 2012.
  10. Fall, Kevin; Sally Floyd (julio de 1996). "Comparaciones basadas en simulación de Tahoe, Reno y SACK TCP" (PDF) . ACM SIGCOMM Computer Communication Review . 26 (3): 5–21 . CiteSeerX 10.1.1.586.2403 . doi : 10.1145/235160.235162 . S2CID 7459148 .  
  11. 1 2 3 4 5 6 Abbasloo, S.; Xu, Y.; Chao, HJ (2019). "C2TCP: Un TCP celular flexible para cumplir con estrictos requisitos de retardo". IEEE Journal on Selected Areas in Communications . 37 (4): 918– 932. arXiv : 1810.13241 . Bibcode : 2019IJSAC..37..918A . doi : 10.1109/JSAC.2019.2898758 . ISSN 0733-8716 . S2CID 53107038 .  
  12. 1 2 3 4 Abbasloo, S.; Li, T.; Xu, Y.; Chao, HJ (mayo de 2018). "TCP con retardo controlado celular (C2TCP)". Conferencia y talleres de redes IFIP 2018 (IFIP Networking) . págs. 118–126 . arXiv : 1807.02689 . Bibcode : 2018arXiv180702689A . doi : 10.23919/IFIPNetworking.2018.8696844 . ISBN  978-3-903176-08-9. S2CID 49650788 . 
  13. ^ Abbasloo y cols . 2019 .
  14. Cardwell, Neal; Cheng, Yuchung; Gunn, C. Stephen; Yeganeh, Soheil Hassas; Jacobson, Van (2016). "BBR: Control de congestión basado en la congestión" . ACM Queue . 14 (5): 20– 53. doi : 10.1145/3012426.3022184 .
  15. ^ Schepper, Koen De; Tilmans, Olivier; Briscoe, Bob; Goel, Vidhi (24 de julio de 2024). "Control de la congestión de Praga" . datatracker.ietf.org .
  16. " L4S: baja latencia, baja pérdida y rendimiento escalable" . www.nokia.com
  17. ^ Kurose y Ross 2008 , pág. 284.
  18. ^ Kurose y Ross 2012 , pág. 277.
  19. Vasanthi N., V.; Singh M., Ajith; Kumar, Romen; Hemalatha, M. (2011). "Evaluación de protocolos y algoritmos para mejorar el rendimiento de TCP en redes inalámbricas/cableadas". En Das, Vinu V; Thankachan, Nessy (eds.). Inteligencia computacional y tecnología de la información . Comunicaciones en informática y ciencias de la información. Vol. 250. Springer. pp. 693–697 . doi : 10.1007/978-3-642-25734-6_120 . ISBN   978-3-642-25733-9.
  20. "Análisis de rendimiento de los algoritmos de control de congestión TCP" (PDF) . Consultado el 26 de marzo de 2012 .
  21. "Registro de cambios de DD-WRT" . Consultado el 2 de enero de 2012 .
  22. "Página principal de Hybla" . Archivado del original el 11 de octubre de 2007. Consultado el 4 de marzo de 2007 .
  23. Caini, Carlo; Firrincieli, Rosario (2004). "TCP Hybla: una mejora de TCP para redes heterogéneas" . International Journal of Satellite Communications and Networking . 22 (5): 547– 566. doi : 10.1002/sat.799 . ISSN 1542-0973 . S2CID 2360535 .  
  24. Caini, C.; Firrincieli, R.; Lacamera, D. (2009). "Evaluación comparativa del rendimiento de variantes TCP en entornos satelitales". 2009 IEEE International Conference on Communications . pp. 1– 5. doi : 10.1109/ICC.2009.5198834 . S2CID 8352762 .  
  25. V., Jacobson; RT, Braden. Extensiones TCP para rutas de retardo largo . IETF . doi : 10.17487/RFC1072 . RFC 1072 .
  26. Alrshah, MA; Othman, M.; Ali, B.; Hanapi, ZM (septiembre de 2015). "Agile-SD: un algoritmo de control de congestión TCP basado en Linux para soportar redes de alta velocidad y corta distancia". Journal of Network and Computer Applications . 55 : 181–190 . arXiv : 1601.05908 . doi : 10.1016/j.jnca.2015.05.011 . S2CID 2645016 . 
  27. Mathis, M.; Dukkipati, N. ; Cheng, Y. (2013). Reducción de tasa proporcional para TCP . IETF . doi : 10.17487/RFC6937 . RFC 6937 .
  28. Corbet, Jonathan (13 de septiembre de 2011). "LPC: Haciendo que la red vaya más rápido" . Recuperado el 6 de junio de 2014 .
  29. "Linux 3.2 – Linux Kernel Newbies" . Consultado el 6 de junio de 2014 .
  30. 1 2 "BBR: Control de congestión basado en la congestión" . Consultado el 25 de agosto de 2017 .
  31. Cheng, Yuchung; Cardwell, Neal; Yeganeh, Soheil Hassas; Jacobson, Van (3 de julio de 2017). "Estimación de la tasa de entrega" . Grupo de trabajo de ingeniería de Internet . Recuperado el 25 de agosto de 2017 .{{cite journal}}: Para citar una revista se requiere |journal=( ayuda )
  32. "El control de congestión TCP BBR llega a GCP: tu Internet ahora es más rápido" . Consultado el 25 de agosto de 2017 .
  33. Corbet, Jonathan (21 de septiembre de 2016). "Control de congestión BBR [ LWN.net ] " . lwn.net .
  34. "Actualización de BBR" . Grupo de Trabajo de Ingeniería de Internet.
  35. "TCP y BBR" (PDF) . Consultado el 27 de mayo de 2018 .
  36. "Evaluación experimental del control de congestión BBR" (PDF) . Archivado del original (PDF) el 27 de mayo de 2018. Consultado el 27 de mayo de 2018 .
  37. "Una evaluación del rendimiento de TCP BBRv2" . Consultado el 12 de enero de 2021 .
  38. ^ Equipo TCP BBR de Google ; Equipo de Google QUIC BBR (26 de julio de 2023). BBRv3: corrección de errores de algoritmos e implementación pública de Internet . IETF 117: San Francisco.
  39. "TCP de retardo controlado celular (C2TCP)" . wp.nyu.edu . Consultado el 27 de abril de 2019 .
  40. Alrshah, MA; Al-Maqri, MA; Othman, M. (junio de 2019). "Elastic-TCP: Algoritmo de control de congestión flexible para adaptarse a redes de alto BDP" . IEEE Systems Journal . 13 (2): 1336–1346 . arXiv : 1904.13105 . Bibcode : 2019ISysJ..13.1336A . doi : 10.1109/JSYST.2019.2896195 .
  41. ^ Abbasloo, Soheil (3 de junio de 2019), GitHub – Soheil-ab/natcp , consultado el 5 de agosto de 2019
  42. Yuan, Cao; Tan, Liansheng; Andrew, Lachlan LH; Zhang, Wei; Zukerman, Moshe (6 de junio de 2008). "Un esquema generalizado de FAST TCP" . Computer Communications . 31 (14): 3242–3249 . doi : 10.1016/j.comcom.2008.05.028 . hdl : 1959.3/44051 . S2CID 17988768 . 
  43. 1 2 "Grupo Redes de Arroz" .
  44. "TCP Veno: Mejora de TCP para la transmisión en redes de acceso inalámbricas" (PDF) . Revista IEEE sobre áreas seleccionadas de comunicación.
  45. "XCP @ ISI" .
  46. "TPC de alta velocidad" (PDF) . csc.lsu.edu .
  47. "TCP-Fit" . Archivado del original el 3 de abril de 2011. Consultado el 5 de marzo de 2011 .
  48. Benaboud, H.; Berqia, A.; Mikou, N. (2002). "Un estudio analítico del algoritmo CANIT en el protocolo TCP". ACM SIGMETRICS Performance Evaluation Review . 30 (3): 20. doi : 10.1145/605521.605530 . S2CID 6637174 . 
  49. Rouhani, Modjtaba (2010). "Control de congestión de redes neuronales no lineales basado en algoritmos genéticos para redes TCP/IP". 2.ª Conferencia Internacional de Inteligencia Computacional, Sistemas de Comunicación y Redes de 2010. pp. 1–6 . doi : 10.1109/CICSyN.2010.21 . ISBN  978-1-4244-7837-8. S2CID 15126416 . 
  50. Kanagarathinam, Madhan Raj; Singh, Sukhdeep; Sandeep, Irlanki; Roy, Abhishek; Saxena, Navrati (enero de 2018). "D-TCP: Algoritmo de control de congestión TCP dinámico para redes móviles de próxima generación". 15.ª Conferencia Anual de Comunicaciones y Redes para el Consumidor (CCNC) de la IEEE (2018 ) . págs. 1-6 . doi : 10.1109/CCNC.2018.8319185 . ISBN  978-1-5386-4790-5. S2CID 3991163 . 
  51. Kanagarathinam, Madhan Raj; Singh, Sukhdeep; Sandeep, Irlanki; Kim, Hanseok; Maheshwari, Mukesh Kumar; Hwang, Jaehyun; Roy, Abhishek; Saxena, Navrati (2020). " NexGen D-TCP: Next Generation Dynamic TCP Congestion Control Algorithm" . IEEE Access . 8 : 164482–164496 . Bibcode : 2020IEEEA...8p4482K . doi : 10.1109/ACCESS.2020.3022284 . ISSN 2169-3536 . S2CID 221846931 .  
  52. Arun, Venkat; Balakrishnan, Hari (2018). "Copa: Control de congestión práctico basado en retardo para Internet" . XV Simposio USENIX sobre diseño e implementación de sistemas en red (NSDI 18) : 329–342 . ISBN 978-1-939133-01-4.
  53. "tcp: convertir a CUBIC en el mecanismo de control de congestión predeterminado" . 13 de septiembre de 2022.
  54. "Resumen del proyecto de cinco nuevos algoritmos de control de congestión TCP" . 8 de marzo de 2011.
  55. "iTCP – Protocolo de transporte interactivo – Laboratorio Medianet, Universidad Estatal de Kent" .
  56. "Libro blanco: Zeta-TCP – Aceleración TCP inteligente, adaptativa y asimétrica" ​​(PDF) . Consultado el 6 de diciembre de 2019 .
  57. Lefteris Mamatas; Tobias Harks; Vassilis Tsaoussidis (enero de 2007). "Enfoques para el control de la congestión en redes de paquetes" (PDF) . Journal of Internet Engineering . 1 (1). Archivado del original (PDF) el 21 de febrero de 2014.
  58. "TCP de alta velocidad" . icir.org .
  59. "Página principal de AIMD-FC" . neu.edu . Archivado del original el 13 de enero de 2009. Consultado el 13 de marzo de 2016 .
  60. "Bienvenido al Laboratorio de Investigación de Redes" . cs.ucla.edu .
  61. "Control de congestión basado en ecuaciones para aplicaciones unicast" . icir.org .
  62. Katabi, Dina; Handley, Mark; Rohrs, Charlie (2002). «Control de congestión para redes con alto producto ancho de banda-retardo». Actas de la conferencia de 2002 sobre aplicaciones, tecnologías, arquitecturas y protocolos para comunicaciones informáticas . Nueva York, Nueva York, EE. UU.: ACM Press. pág. 89. doi : 10.1145/633025.633035 . ISBN  1-58113-570-X.
  63. "MaxNet -- Control de congestión de señalización explícita, estable y justo de máximo-mínimo" . netlab.caltech.edu .
  64. 1 2 3 4 Bunny.net Academy. (s.f.). ¿Qué son los controles de congestión y cómo funcionan en Linux TCP? . Recuperado el 2 de mayo de 2025, de( https://bunny.net/academy/network/what-are-congestion-controls-and-how-do-they-work-in-linux-tcp/

Fuentes

  • Kurose, James ; Ross, Keith (2008). Redes informáticas: Un enfoque descendente (4.ª  ed.). Addison Wesley. ISBN 978-0-13-607967-5.
  • Kurose, James ; Ross, Keith (2012). Redes informáticas: Un enfoque descendente (6.ª  ed.). Pearson. ISBN 978-0-13-285620-1.
  • Abbasloo, Soheil; Xu, Yang; Chao, H. Jonathon; Shi, Hang; Kozat, Ulas C.; Ye, Yinghua (2019). "Hacia un rendimiento óptimo con TCP asistido por red en el borde móvil" . 2.º Taller USENIX sobre temas candentes en computación de borde (HotEdge 19) . Renton, WA: Asociación USENIX.
  • Afanasyev, A.; N. Tilley; P. Reiher; L. Kleinrock (2010). "Control de congestión de host a host para TCP" (PDF) . IEEE Communications Surveys and Tutorials . 12 (3): 304– 342. CiteSeerX 10.1.1.228.3080 . doi : 10.1109/SURV.2010.042710.00114 . S2CID 8638824 .  
  • Jacobson, Van ; Karels, Michael J. (noviembre de 1988). "Evitación y control de la congestión" (PDF) . ACM SIGCOMM Computer Communication Review . 18 (4): 314–329 . doi : 10.1145/52325.52356 .
  • Enfoques para el control de la congestión en redes de paquetes
  • Artículos sobre control de la congestión
  • Allman, Mark; Paxson, Vern; Stevens, W. Richard (abril de 1999). "Retransmisión rápida/Recuperación rápida" . Control de congestión TCP . Grupo de trabajo de ingeniería de Internet . sec.  3.2. doi : 10.17487/RFC2581 . RFC 2581. Recuperado el 1 de mayo de 2010 .
  • Algoritmos para el manejo y la prevención de la congestión en TCP : la guía de TCP/IP.