¿Dónde está la máquina de estado de control de congestión TCP en el código fuente del kernel de Linux?
Equidad significa que cuando se produce una congestión, cada
fuente (o diferentes conexiones TCP o datagramas UDP establecidos por la misma fuente) puede compartir los mismos recursos de red (como ancho de banda, almacenamiento en caché). etc. ) bastante. Las fuentes del mismo nivel deberían recibir la misma cantidad de recursos de red. La razón fundamental para la equidad en la producción es que la congestión conducirá inevitablemente a la pérdida de paquetes, lo que conducirá a la competencia entre los flujos de datos por recursos de red limitados. Los flujos de datos con competitividad débil sufrirán un daño mayor.
Así que sin congestión no hay cuestión de equidad.
El problema de equidad de la capa TCP se manifiesta en dos aspectos:
(1)?
Cuando se produce congestión, TCP orientado a conexión y UDP sin conexión Diferencial Las respuestas y el manejo de las indicaciones de congestión conducen a un uso injusto de los recursos de la red. Cuando se produce una congestión, TCP tiene un mecanismo de respuesta de control de la congestión
El flujo de datos entrará en la fase de evitación de la congestión de acuerdo con los pasos de control de la congestión, reduciendo así activamente la cantidad de datos enviados a la red. Pero para UDP de datagramas sin conexión, debido a que no existe un mecanismo de control de congestión de extremo a extremo, incluso si la red emite una indicación de conexión de congestión (como pérdida de paquetes, recepción repetida de ACK, etc.), UDP tampoco se comportará como TCP. Reduce la cantidad de datos enviados a la red. Como resultado, los flujos de datos TCP sujetos a control de congestión obtendrán cada vez menos recursos de red.
UDP sin control de congestión obtendrá cada vez más recursos de red, lo que resultará en una distribución injusta grave de los recursos de red de diversas fuentes. .
La distribución injusta de los recursos de la red
agravará la congestión e incluso puede conducir al colapso de la misma. Por lo tanto, cuando ocurre la congestión, cómo determinar si cada flujo de datos cumple estrictamente con el control de congestión de TCP y cómo "castigar" el comportamiento que no cumple con el protocolo de control de congestión.
Introdujo un tema candente en la investigación actual sobre control de congestión. La forma fundamental de resolver el problema de la equidad en el control de la congestión en la capa de transporte es hacer pleno uso del mecanismo de control de la congestión de extremo a extremo.
(2) Algunas conexiones TCP también tienen problemas de equidad. El problema se produce porque algunos TCP utilizan un tamaño de ventana mayor antes de la congestión, o su RTT es más pequeño, o los paquetes son más grandes que otros TCP, por lo que también ocupan más ancho de banda.
RTT es injusto
Estrategia de actualización de la ventana de congestión de AIMD
También hay algunas deficiencias. La estrategia de aumento sumativo aumenta la ventana de congestión del flujo de datos del remitente en un paquete dentro del retardo de ida y vuelta (RTT). Por lo tanto, cuando diferentes flujos de datos afectan el ancho de banda del cuello de botella de la red,
cuando las líneas compiten, la ventana de congestión de un flujo de datos TCP con un RTT más pequeño crecerá más rápido que un flujo de datos TCP con un RTT más grande, por lo que ocupa más recursos de ancho de banda de red.
Notas adicionales
La calidad de la línea entre China y Estados Unidos no es muy buena, el RTT es largo y los paquetes se pierden a menudo. El protocolo TCP descartará paquetes si tiene éxito y, si falla, descartará paquetes. TCP está diseñado para resolver el problema de la transmisión confiable en líneas no confiables, es decir, resolver el problema de la pérdida de paquetes, pero la pérdida de paquetes reduce en gran medida la velocidad de transmisión de TCP. El protocolo HTTP utiliza el protocolo TCP en la capa de transporte, por lo que la velocidad de descarga de la página web depende de la velocidad de descarga de un solo subproceso TCP (porque la página web se descarga en un solo subproceso).
La razón principal por la que la velocidad de transmisión de TCP se reduce considerablemente debido a la pérdida de paquetes es el mecanismo de retransmisión de pérdida de paquetes, y el algoritmo de control de congestión de TCP es el mecanismo de control.
Se proporcionan varios conjuntos de algoritmos de control de congestión de TCP en el kernel de Linux. Los cargados en el kernel se pueden ver a través del parámetro del kernel net.
Vegas
1994
¿Brakmo propuso un nuevo mecanismo de control de congestión TCP?
Las Vegas, la gestión de la congestión desde otra perspectiva. Como puede verse en la sección anterior, el control de la congestión de TCP se basa en la pérdida de paquetes. Una vez que se produce la pérdida de paquetes, se ajusta la ventana de congestión. Sin embargo, la pérdida de paquetes no se debe necesariamente a que la red haya entrado en congestión, sino a que el valor RTT está estrechamente relacionado con el funcionamiento de la red, ¿TCP?
Vegas utiliza cambios en los valores de RTT para determinar si la red está congestionada, ajustando así la ventana de control de congestión. Si ve un aumento en RTT, Vegas considera que la red está congestionada y comienza a reducir la ventana de congestión.
Si el RTT se vuelve más pequeño, Vegas cree que la congestión de la red se está aliviando gradualmente, por lo que vuelve a aumentar la ventana de congestión. Debido a que Vegas no juzga el ancho de banda disponible de la red por la pérdida de paquetes, sino por los cambios de RTT, puede detectar con mayor precisión el ancho de banda disponible de la red, logrando así una mejor eficiencia. Pero Vegas tiene un defecto, que se puede decir que es fatal y, en última instancia, afecta a TCP.
Vegas no es muy utilizado en Internet. El problema es que las transmisiones que usan TCP Vegas no son tan competitivas en ancho de banda como las transmisiones que no usan TCP Vegas.
Esto se debe a que mientras el enrutador almacene datos en la red, el RTT aumentará. Si el buffer no se desborda, no se producirá congestión. Sin embargo, almacenar los datos en un buffer provocará retrasos en el procesamiento y, por lo tanto, el RTT cambiará.
Grande, especialmente en redes con ancho de banda relativamente pequeño, el RTT aumentará considerablemente tan pronto como se transmitan los datos. Esto es especialmente obvio en las redes inalámbricas. En este caso, ¿TCP?
Vegas reduce su propia ventana de congestión, pero mientras no haya pérdida de paquetes, como se puede ver en lo anterior, el TCP estándar no reducirá su propia ventana, por lo que los dos son injustos, y así sucesivamente. , TCP.
Las Vegas es muy ineficiente. De hecho, si todos los TCP adoptan el modo de control de congestión Vegas, la equidad entre los flujos será mejor y la competitividad no será un problema con el algoritmo Vegas en sí.
Entorno aplicable: Es difícil de aplicar a gran escala en Internet (baja competitividad del ancho de banda).
2. Reno
Reno es el algoritmo más utilizado y maduro. Los mecanismos de inicio lento, evitación de congestión, retransmisión rápida y recuperación rápida incluidos en este algoritmo son la base de muchos algoritmos existentes. Es fácil ver en el mecanismo informático de Reynolds que para mantener el equilibrio dinámico, debe ocurrir una cierta cantidad de pérdida periódicamente, y el mecanismo AIMD: rápido, lento, lento, aumenta, especialmente en un entorno de ventana grande, una ventana causada por la pérdida de un datagrama La reducción lleva mucho tiempo para recuperarse, por lo que la utilización del ancho de banda no puede ser muy alta y, a medida que el ancho de banda del enlace de red continúa aumentando, esta desventaja se volverá cada vez más obvia. En términos de equidad, según las estadísticas, la equidad de Reno se ha afirmado bastante e idealmente puede mantener el principio de equidad dentro de una red más grande.
El algoritmo de Reno se ha vuelto común y ampliamente utilizado debido a su simplicidad, efectividad y robustez.
Pero no puede manejar eficazmente el caso de pérdida de múltiples paquetes desde la misma ventana de datos. El nuevo algoritmo de Reynolds resuelve este problema.
Protocolos basados en retroalimentación de pérdida de paquetes
En los últimos años, con la popularidad de las redes de productos de retardo de gran ancho de banda, han surgido muchas mejoras nuevas del protocolo TCP basadas en retroalimentación de pérdida de paquetes, incluido HSTCP. , STCP, BIC-TCP, CUBIC y H-TCP.
En términos generales, basado en retroalimentación de pérdida de paquetes
Este protocolo es un mecanismo de control de congestión pasivo que determina la congestión de la red en función de los eventos de pérdida de paquetes en la red. Incluso si la carga en la red es alta, siempre que no haya congestión ni pérdida de paquetes, el protocolo no se degradará activamente.
Velocidad de envío. Este protocolo puede aprovechar al máximo el ancho de banda restante de la red y mejorar el rendimiento. Sin embargo, debido a la naturaleza radical del protocolo de retroalimentación basado en la pérdida de paquetes cuando la red está cerca de la saturación, por un lado, mejora en gran medida la utilización del ancho de banda de la red, por otro lado, para el protocolo de control de congestión basado en; retroalimentación de pérdida de paquetes, mejora en gran medida la utilización del ancho de banda de la red. La utilización significa que el próximo evento de pérdida de paquetes por congestión no está lejos, por lo que estos protocolos aumentan la utilización del ancho de banda de la red e indirectamente aumentan la tasa de pérdida de paquetes de la red, lo que resulta en una mayor fluctuación de toda la red.
Naturaleza amigable
BIC-TCP,
Protocolos basados en retroalimentación de pérdida de paquetes, como HSTCP y STCP, aunque mejoran enormemente su rendimiento, también Afecta seriamente el rendimiento del flujo de Reno. Los protocolos basados en retroalimentación de pérdida de paquetes producen una compatibilidad TCP tan pobre.
La razón principal es el mecanismo activo de gestión de ventanas de congestión de estos algoritmos de protocolo. Estos protocolos suelen creer que mientras no haya pérdida de paquetes en la red, debe haber un exceso de ancho de banda, para mejorar continuamente sus velocidades de transmisión.
Desde una perspectiva macro del tiempo, su velocidad de transmisión muestra una tendencia de desarrollo cóncava. Cuanto más cerca del ancho de banda de la red, más rápido aumenta la velocidad de transmisión máxima. Esto no sólo causó mucha congestión y pérdida de paquetes, sino que también devoró maliciosamente la red.
Los recursos de ancho de banda de otros * * * flujos en la red hacen que la equidad de toda la red disminuya.
3. Protocolo de control de transmisión de alta velocidad
HSTCP (Protocolo de control de transmisión de alta velocidad) es un protocolo basado en AIMD (Crecimiento aditivo y reducción múltiple de la red de alta velocidad). El algoritmo de control de congestión puede mejorar eficazmente el rendimiento de la red de redes de alta velocidad y de largo retardo. Al modificar los parámetros de aumento y disminución del algoritmo estándar para evitar la congestión de TCP, se logra un aumento rápido y una disminución lenta de la ventana, manteniendo la ventana en un rango lo suficientemente grande como para utilizar completamente el ancho de banda y puede lograr un mejor rendimiento que TCP en alta velocidad. -redes de velocidad.
Reno tiene mayor ancho de banda, pero tiene una grave injusticia en RTT. La equidad significa que múltiples flujos que comparten el mismo cuello de botella de la red ocupan los mismos recursos de la red.
El remitente TCP ajusta dinámicamente la función incremental de la ventana de congestión HSTCP en función de la tasa de pérdida de paquetes esperada de la red.
Modo de crecimiento de ventana para evitar congestión: cwnd = cwnd+a(cwnd)/cwnd.
Modo de caída de ventana después de la pérdida de paquetes: cwnd = (1-b(cwnd))*cwnd.
Entre ellas a(cwnd) y
B(cwnd) son dos funciones. En TCP estándar, a(cwnd)=1, b(cwnd)=0.5. Para lograr la compatibilidad con TCP, en el caso de ventana baja, es decir, sin.
En el entorno de red de BDP, HSTCP utiliza los mismos A y B que TCP estándar para garantizar la amistad entre ellos. Cuando la ventana es más grande (valor crítico LowWindow=38), se utiliza la nueva A.
Y b para cumplir con los requisitos de alto rendimiento. Consulte el documento RFC3649 para obtener más detalles.
4. Famosa empresa estadounidense de software de juegos
En redes inalámbricas, después de mucha investigación, se descubrió que tcpwestwood es un algoritmo ideal. La idea principal es estimar el ancho de banda detectando continuamente la tasa de llegada de ACK en el extremo emisor. Cuando se produce la congestión, utilice la estimación del ancho de banda para ajustar la ventana de congestión y el umbral de inicio lento, y adopte aiad (aumento aditivo y).
Mecanismo adaptable de control de congestión. No solo mejora el rendimiento de las redes inalámbricas, sino que también tiene buena equidad e interoperabilidad con las redes existentes. El problema es que la congestión y la pérdida de paquetes inalámbricos no se pueden distinguir durante el proceso de transmisión, lo que genera congestión. Llamadas frecuentes al mecanismo.
5.H-TCP
H-tcp es un algoritmo excelente en redes de alto rendimiento, pero tiene problemas como rtt injusto y ancho de banda hostil.
p>
6.BIC-TCP
Desventajas de BIC-TCP: En primer lugar, tiene una fuerte preferencia en el caso de un retardo de ancho de banda corto de enlaces pequeños, el crecimiento. La función de BIC-TCP tiene una fuerte preferencia en comparación con el TCP estándar. Es equivalente a reiniciar un algoritmo de inicio lento en la fase de detección y la ventana de TCP ha crecido linealmente después de la estabilización. La etapa de control de ventana se divide en binario.
La búsqueda aumenta, la detección máxima y luego se distinguen Smax y Smin. Estos valores aumentan la dificultad de la implementación del algoritmo y también aumentan la complejidad de. el modelo de análisis de rendimiento del protocolo con RTT bajo En entornos de red y de baja velocidad, BIC puede ser demasiado "activo", por lo que la gente mejoró aún más BIC, que era el algoritmo predeterminado de Linux antes de adoptar Cube
7.
Cube de Cube simplifica el algoritmo de ajuste de ventana de BIC-TCP en el diseño.
En el ajuste de ventana de BIC-TCP, aparecerá una curva de crecimiento con baches (el bulto aquí se refiere a . Bump en el sentido matemático), función cóncava/función convexa), mientras que CUBIC usa una función cúbica (es decir, una función cúbica También hay una parte cóncava y convexa en la curva de la función cúbica, que es). muy similar a la curva BIC-TCP, por lo que reemplaza parcialmente la curva de crecimiento de BIC-TCP.
Además
Además, el punto más crítico en CUBIC es que su función de crecimiento de ventana solo depende del valor del intervalo de tiempo de dos eventos de congestión consecutivos, por lo que el crecimiento de la ventana es completamente independiente del retardo de la red RTT. Como se mencionó anteriormente, HSTCP tiene una injusticia RTT severa, mientras que la independencia RTT de CUBIC le permite a CUBIC mantener una buena equidad RTT entre las conexiones TCP que comparten enlaces de cuello de botella.
CUBIC es el protocolo de control de congestión de TCP (Protocolo de control de transmisión) y también es el algoritmo TCP predeterminado actual en Linux.
Este protocolo modifica la ventana lineal
¿Es la función de crecimiento del estándar TCP existente una función cúbica?
¿Mejorar la escalabilidad de TCP en distancias rápidas y largas?
Red. También permite una asignación más justa del ancho de banda.
Flujos con diferente RTT (tiempo de ida y vuelta) por
El crecimiento de la ventana será independiente del RTT, ¿entonces estos flujos crecen?
Su ventana de congestión es la misma velocidad. Durante el estado estacionario, ¿cúbico?
Cuando la ventana se aleja.
El punto de saturación, y sube lentamente a medida que se acerca.
Se alcanza el punto de saturación. Esta característica permite que Cube sea muy escalable cuando el ancho de banda y la latencia son una preocupación.
¿La red es grande, pero muy estable y justa?
A un flujo TCP estándar.
8.STCP
Protocolo TCP extensible.
El algoritmo STCP fue propuesto por Tom Kelly en 2003. Ajusta el tamaño de la ventana de envío modificando los parámetros de aumento y disminución de la ventana TCP para adaptarse al entorno de red de alta velocidad. Este algoritmo tiene una alta utilización y estabilidad del enlace, pero el aumento de la ventana de este mecanismo es inversamente proporcional al RTT, que existe hasta cierto punto.
RTT es injusto, ocupa demasiado ancho de banda cuando existe con flujos TCP tradicionales y su compatibilidad con TCP es deficiente.