Optimización del rendimiento TCP mediante TCP Nile
TCP utiliza las siguientes técnicas de optimización y estrategias (o algoritmos) de control de la congestión para evitar la congestión de la red en la transmisión de datos.
Estrategias de control de la congestión
El Protocolo de control de transmisión (TCP) se ha utilizado durante mucho tiempo para establecer y administrar conexiones a Internet, gestionar los errores de transmisión y conectar sin problemas las aplicaciones web con los dispositivos cliente. Sin embargo, el tráfico de red se ha vuelto más difícil de controlar, porque la pérdida de paquetes no depende únicamente de la congestión de la red y la congestión no provoca necesariamente la pérdida de paquetes. Por lo tanto, para medir la congestión, un algoritmo TCP debe centrarse tanto en la pérdida de paquetes como en el ancho de banda.
El algoritmo NILE
Citrix Systems ha desarrollado un nuevo algoritmo de control de congestión, NILE, un algoritmo de optimización de TCP diseñado para redes de alta velocidad como LTE, LTE advanced y 3G. Nile aborda los desafíos únicos causados por la pérdida gradual, aleatoria o congestiva, las retransmisiones de la capa de enlace y la agregación de portadores.
El algoritmo NILE:
- Basa las estimaciones de latencia de la cola en mediciones de tiempo de ida y vuelta.
- Utiliza una función de aumento de la ventana de congestión que es inversamente proporcional a la latencia de cola medida. Este método permite acercarse al punto de congestión de la red más lentamente que el método TCP estándar y reduce las pérdidas de paquetes durante la congestión.
- Puede distinguir entre pérdidas aleatorias y pérdidas basadas en la congestión en la red mediante la latencia de cola estimada.
Los proveedores de servicios de telecomunicaciones pueden utilizar el algoritmo NILE en su infraestructura TCP para:
- Optimice las redes móviles y de larga distancia: el algoritmo NILE logra un mayor rendimiento en comparación con el TCP estándar. Esta función es especialmente importante para las redes móviles y de larga distancia.
- Reduzca la latencia percibida de la aplicación y mejore la experiencia del suscriptor: el algoritmo de Nile utiliza la información de pérdida de paquetes para determinar si el tamaño de la ventana de transmisión debe aumentarse o disminuirse, y utiliza la información de retraso en las colas para determinar el tamaño del incremento o la disminución. Esta configuración dinámica del tamaño de la ventana de transmisión reduce la latencia de la aplicación en la red.
Para configurar la compatibilidad con NILE mediante la interfaz de línea de comandos
En el símbolo del sistema, escriba lo siguiente:
set ns tcpProfile <name> [-flavor NILE]
<!--NeedCopy-->
Configuración del soporte de NILE mediante la utilidad de configuración
- Vaya a Sistema > Perfiles > PerfilesTCPy haga clic enPerfiles TCP.
- En la lista desplegable TCP Flavor, selecciona NILE.
Ejemplo:
set ns tcpProfile tcpprofile1 -flavor NILE
<!--NeedCopy-->
Algoritmo de recuperación de velocidad proporcional (PRR)
Los mecanismos de recuperación rápida de TCP reducen la latencia web causada por las pérdidas de paquetes. El nuevo algoritmo de recuperación de velocidad proporcional (PRR) es un algoritmo de recuperación rápida que evalúa los datos TCP durante la recuperación de una pérdida. Se basa en la reducción a la mitad de la velocidad, utilizando la fracción apropiada para la ventana objetivo elegida por el algoritmo de control de congestión. Minimiza el ajuste de la ventana y el tamaño real de la ventana al final de la recuperación se acerca al umbral de inicio lento (ssthresh).
Apertura rápida de TCP (TFO)
TCP Fast Open (TFO) es un mecanismo TCP que permite un intercambio de datos rápido y seguro entre un cliente y un servidor durante el protocolo de enlace inicial de TCP. Esta función está disponible como una opción TCP en el perfil TCP enlazado a un servidor virtual de un dispositivo NetScaler. TFO utiliza una cookie TCP Fast Open (una cookie de seguridad) que genera el dispositivo NetScaler para validar y autenticar al cliente que inicia una conexión TFO con el servidor virtual. Al utilizar el mecanismo TFO, puede reducir la latencia de la red de una aplicación en el tiempo necesario para un viaje de ida y vuelta completo, lo que reduce significativamente el retraso que se produce en las transferencias TCP cortas.
Cómo funciona TFO
Cuando un cliente intenta establecer una conexión TFO, incluye una cookie TCP Fast Open con el segmento SYN inicial para autenticarse. Si la autenticación se realiza correctamente, el servidor virtual del dispositivo NetScaler puede incluir datos en el segmento SYN-ACK aunque no haya recibido el último segmento ACK del protocolo de enlace tripartito. Esto ahorra hasta un viaje de ida y vuelta completo en comparación con una conexión TCP normal, que requiere un protocolo de enlace de tres vías antes de poder intercambiar datos.
Un cliente y un servidor de fondo llevan a cabo los siguientes pasos para establecer una conexión TFO e intercambiar datos de forma segura durante el protocolo de enlace TCP inicial.
- Si el cliente no tiene una cookie de apertura rápida de TCP para autenticarse, envía una solicitud de cookie de apertura rápida en el paquete SYN al servidor virtual del dispositivo NetScaler.
- Si la opción TFO está habilitada en el perfil TCP vinculado al servidor virtual, el dispositivo genera una cookie (cifrando la dirección IP del cliente con una clave secreta) y responde al cliente con un SYN-ACK que incluye la cookie de apertura rápida generada en un campo de opciones de TCP.
- El cliente almacena en caché la cookie para futuras conexiones de TFO al mismo servidor virtual del dispositivo.
- Cuando el cliente intenta establecer una conexión TFO con el mismo servidor virtual, envía un SYN que incluye la cookie de apertura rápida almacenada en caché (como opción TCP) junto con los datos HTTP.
- El dispositivo NetScaler valida la cookie y, si la autenticación se realiza correctamente, el servidor acepta los datos del paquete SYN y reconoce el evento con un SYN-ACK, una cookie TFO y una respuesta HTTP.
Nota: Si se produce un error en la autenticación del cliente, el servidor elimina los datos y solo reconoce el evento con un SYN que indica que se ha agotado el tiempo de espera de la sesión.
- En el lado del servidor, si la opción TFO está habilitada en un perfil TCP enlazado a un servicio, el dispositivo NetScaler determina si la cookie de apertura rápida de TCP está presente en el servicio al que intenta conectarse.
- Si la cookie TCP Fast Open no está presente, el dispositivo envía una solicitud de cookie en el paquete SYN.
- Cuando el servidor de fondo envía la cookie, el dispositivo almacena la cookie en la memoria caché de información del servidor.
- Si el dispositivo ya tiene una cookie para el par IP de destino dado, sustituye la cookie antigua por la nueva.
- Si la cookie está disponible en la memoria caché de información del servidor cuando el servidor virtual intenta volver a conectarse al mismo servidor de fondo mediante la misma dirección SNIP, el dispositivo combina los datos del paquete SYN con la cookie y los envía al servidor de fondo.
- El servidor de fondo reconoce el evento con datos y un SYN.
Nota: Si el servidor reconoce el evento solo con un segmento SYN, el dispositivo NetScaler reenvía inmediatamente el paquete de datos tras eliminar el segmento SYN y las opciones de TCP del paquete original.
Configuración de TCP Fast Open
Para utilizar la función TCP Fast Open (TFO), active la opción TCP Fast Open en el perfil TCP correspondiente y configure el parámetro TFO Cookie Timeout en un valor que se ajuste a los requisitos de seguridad de ese perfil.
Para habilitar o inhabilitar TFO mediante la línea de comandos
En la línea de comandos, escriba uno de los siguientes comandos para habilitar o inhabilitar el TFO en un perfil nuevo o existente.
Nota: El valor predeterminado es DESHABILITADO.
add tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
set tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
unset tcpprofile <TCP Profile Name> - tcpFastOpen
<!--NeedCopy-->
Ejemplos:
agregar perfil tcpprofile1 — TcpFastOpen Establecer perfil tcpprofile1 — TcpFastOpen habilitado perfil tcpprofile1 — TcpFastOpen
Para configurar el valor de tiempo de espera de la cookie de TCP Fast Open mediante la interfaz de línea de comandos
En el símbolo del sistema, escriba:
set tcpparam –tcpfastOpenCookieTimeout <Timeout Value>
<!--NeedCopy-->
Ejemplo:
set tcpprofile –tcpfastOpenCookieTimeout 30secs
<!--NeedCopy-->
Para configurar el TCP Fast Open mediante la interfaz gráfica de usuario
- Vaya a Configuración > Sistema > Perfiles > y, a continuación, haga clic en Modificar para modificar un perfil TCP.
- En la página Configurar perfil TCP, seleccione la casilla TCP Fast Open .
- Haga clic en Aceptar y, a continuación, Hecho.
Para configurar el valor de tiempo de espera de TCP Fast Cookie mediante la interfaz gráfica de usuario
Vaya a Configuración >Sistema>Configuración** > **Cambiar los parámetros de TCP y, a continuación, a la página Configurar parámetros de TCP para establecer el valor de tiempo de espera de la cookie de apertura rápida de TCP.
TCP Hystart
Un nuevo parámetro del perfil TCP, hystart, habilita el algoritmo Hystart, que es un algoritmo de inicio lento que determina dinámicamente un punto seguro en el que terminar (ssthresh). Permite una transición a la prevención de la congestión sin grandes pérdidas de paquetes. Este nuevo parámetro está desactivado de forma predeterminada.
Si se detecta congestión, Hystart entra en una fase de prevención de la congestión. Habilitarlo le brinda un mejor rendimiento en redes de alta velocidad con una gran pérdida de paquetes. Este algoritmo ayuda a mantener un ancho de banda cercano al máximo al procesar las transacciones. Por lo tanto, puede mejorar el rendimiento.
Configuración de TCP Hystart
Para utilizar la función Hystart, active la opción Hystart cúbico en el perfil TCP correspondiente.
Para configurar Hystart mediante la interfaz de línea de comandos (CLI)
En la línea de comandos, escriba uno de los siguientes comandos para habilitar o inhabilitar Hystart en un perfil TCP nuevo o existente.
add tcpprofile <profileName> -hystart ENABLED
set tcpprofile <profileName> -hystart ENABLED
unset tcprofile <profileName> -hystart
<!--NeedCopy-->
Ejemplos:
add tcpprofile Profile1 – tcpFastOpen
Set tcpprofile Profile1 – tcpFastOpen Enabled
unset tcpprofile Profile1 – tcpFastOpen
<!--NeedCopy-->
Para configurar la compatibilidad con Hystart mediante la interfaz gráfica de usuario
- Vaya a Configuración > Sistema > Perfiles > y haga clic en Modificar para modificar un perfil TCP.
- En la página Configurar perfil TCP, active la casilla Cubic Hystart.
- Haga clic en Aceptar y, a continuación, Hecho.
Técnicas de optimización
TCP utiliza las siguientes técnicas y métodos de optimización para optimizar los controles de flujo.
Selección de perfil TCP basada en directivas
El tráfico de red actual es más diverso e intensivo en ancho de banda que nunca. Con el aumento del tráfico, el efecto que la calidad de servicio (QoS) tiene en el rendimiento de TCP es significativo. Para mejorar la QoS, ahora puede configurar directivas de AppQoE con diferentes perfiles TCP para diferentes clases de tráfico de red. La directiva AppQoE clasifica el tráfico de un servidor virtual para asociar un perfil TCP optimizado para un tipo concreto de tráfico, como 3G, 4G, LAN o WAN.
Para utilizar esta función, cree una acción de directiva para cada perfil TCP, asocie una acción con directivas AppQoE y vincule las directivas a los servidores virtuales de equilibrio de carga.
Configuración de la selección de perfiles TCP basada en directivas
La configuración de la selección de perfiles TCP basada en directivas consiste en las siguientes tareas:
- Habilitar AppQoE. Antes de configurar la función de perfil TCP, debe habilitar la función AppQoE.
- Agregar AppQoE Action. Después de habilitar la función AppQoE, configure una acción de AppQoE con un perfil TCP.
- Configuración de la selección de perfiles TCP basada en AppQoE. Para implementar la selección de perfiles TCP para diferentes clases de tráfico, debe configurar las directivas de AppQoE con las que el dispositivo NetScaler pueda distinguir las conexiones y vincular la acción de AppQoE correcta a cada directiva.
- Enlazar la directiva de AppQoE al servidor virtual. Una vez que haya configurado las directivas de AppQoE, debe vincularlas a uno o más servidores virtuales de equilibrio de carga, conmutación de contenido o redirección de caché.
Configurar mediante la interfaz de línea de comandos
Para habilitar AppQoE mediante la interfaz de línea de comandos:
En la línea de comandos, escriba los siguientes comandos para habilitar la función y comprobar que esté habilitada:
enable ns feature appqoe
show ns feature
<!--NeedCopy-->
Para vincular un perfil TCP al crear una acción de AppQoE mediante la interfaz de línea de comandos
En la línea de comandos, escriba el siguiente comando de acción de AppQoE con la opción tcpprofiletobind.
Enlazar un perfil TCP:
add appqoe action <name> [-priority <priority>] [-respondWith ( ACS | NS ) [<CustomFile>] [-altContentSvcName <string>] [-altContentPath <string>] [-maxConn <positive_integer>] [-delay <usecs>]] [-polqDepth <positive_integer>] [-priqDepth <positive_integer>] [-dosTrigExpression <expression>] [-dosAction ( SimpleResponse |HICResponse )] [-tcpprofiletobind <string>]
show appqoe action
<!--NeedCopy-->
Para configurar una directiva de AppQoE mediante la interfaz de línea de comandos
En el símbolo del sistema, escriba:
add appqoe policy <name> -rule <expression> -action <string>
<!--NeedCopy-->
Para vincular una directiva de AppQoE a servidores virtuales de equilibrio de carga, redirección de caché o conmutación de contenido mediante la interfaz de línea de comandos
En el símbolo del sistema, escriba:
bind cs vserver cs1 -policyName <appqoe_policy_name> -priority <priority>
bind lb vserver <name> - policyName <appqoe_policy_name> -priority <priority>
bind cr vserver <name> -policyName <appqoe_policy_name> -priority <priority>
<!--NeedCopy-->
Ejemplo:
add ns tcpProfile tcp1 -WS ENABLED -SACK ENABLED -WSVal 8 -nagle ENABLED -maxBurst 30 -initialCwnd 16 -oooQSize 15000 -minRTO 500 -slowStartIncr 1 -bufferSize 4194304 -flavor BIC -KA ENABLED -sendBuffsize 4194304 -rstWindowAttenuate ENABLED -spoofSynDrop ENABLED -dsack enabled -frto ENABLED -maxcwnd 4000000 -fack ENABLED -tcpmode ENDPOINT
add appqoe action appact1 -priority HIGH -tcpprofile tcp1
add appqoe policy apppol1 -rule "client.ip.src.eq(10.102.71.31)" -action appact1
bind lb vserver lb2 -policyName apppol1 -priority 1 -gotoPriorityExpression END -type REQUEST
bind cs vserver cs1 -policyName apppol1 -priority 1 -gotoPriorityExpression END -type REQUEST
<!--NeedCopy-->
Configuración de perfiles TCP basados en directivas mediante la GUI
Para habilitar AppQoE mediante la interfaz gráfica de usuario
- Ve a Sistema > Configuración.
- En el panel de detalles, haga clic en Configurar funciones avanzadas.
- En el cuadro de diálogo Configurar funciones avanzadas, active la casilla AppQoE.
- Haga clic en Aceptar.
Para configurar la directiva de AppQoE mediante la interfaz gráfica de usuario
- Vaya a App-Expert > AppQoE > Acciones.
- En el panel de detalles, realice una de las acciones siguientes:
- Para crear una acción nueva, haz clic en Agregar.
- Para modificar una acción existente, selecciónela y, a continuación, haga clic en Modificar.
-
En la pantalla Crear acción de AppQoE o Configurar acción de AppQoE, escriba o seleccione valores para los parámetros. El contenido del cuadro de diálogo corresponde a los parámetros descritos en “Parámetros para configurar la acción AppQoE” de la siguiente manera (el asterisco indica un parámetro obligatorio):
- Nombre: name
- Tipo de acción: respondWith
- Prioridad: priority
- Profundidad de cola de directivas: polqDepth
- Profundidad de cola: priqDepth
- Acción DOS: dosAction
- Haga clic en Crear.
Para vincular la directiva de AppQoE mediante la interfaz gráfica de usuario
- Vaya a Administración del tráfico > Equilibrio de carga > Servidores virtuales, seleccione un servidor y, a continuación, haga clic en Modificar.
- En la sección Directivas, haga clic en (+) para vincular una directiva de AppQoE.
- En el control deslizante Directivas, haga lo siguiente:
- Seleccione un tipo de directiva como AppQoE en la lista desplegable.
- Seleccione un tipo de tráfico de la lista desplegable.
- En la sección Vinculación de directivas, haga lo siguiente:
- Haga clic en Nuevo para crear una nueva directiva de AppQoE.
- Haga clic en Directiva existente para seleccionar una directiva de AppQoE de la lista desplegable.
- Defina la prioridad de enlace y haga clic en Enlazar a la directiva al servidor virtual.
- Haga clic en Listo.
Generación de bloques SACK
El rendimiento de TCP se ralentiza cuando se pierden varios paquetes en una ventana de datos. En tal caso, un mecanismo de reconocimiento selectivo (SACK) combinado con una directiva de retransmisión repetida selectiva supera esta limitación. Para cada paquete entrante fuera de orden, debe generar un bloque SACK.
Si el paquete desordenado cabe en el bloque de cola de reensamblaje, inserte la información del paquete en el bloque y establezca la información completa del bloque como SACK-0. Si un paquete desordenado no cabe en el bloque de reensamblaje, envíe el paquete como SACK-0 y repita los bloques de SACK anteriores. Si un paquete desordenado es un duplicado y la información del paquete se establece como SACK-0, entonces D-SACK el bloque.
Nota: Un paquete se considera D-SACK si es un paquete confirmado o un paquete desordenado que ya se ha recibido.
Incumplimiento del cliente
Un dispositivo NetScaler puede gestionar la renegación del cliente durante la recuperación basada en SACK.
Las comprobaciones de memoria para marcar el punto final en la PCB no tienen en cuenta la memoria total disponible
En un dispositivo NetScaler, si el umbral de uso de memoria se establece en el 75 por ciento en lugar de utilizar la memoria total disponible, las nuevas conexiones TCP omiten la optimización de TCP.
Retransmisiones innecesarias debido a la falta de bloques SACK
En un modo sin terminales, al enviar DUPACKS, si faltan bloques de SACK en algunos paquetes desordenados, se activan retransmisiones adicionales desde el servidor.
SNMP para el número de conexiones omitió la optimización debido a una sobrecarga
Se agregaron los siguientes identificadores de SNMP a un dispositivo NetScaler para rastrear el número de conexiones que omitieron la optimización de TCP debido a una sobrecarga.
- 1.3.6.1.4.1.5951.4.1.1.46.13 (Optimización de TCP habilitada). Para realizar un seguimiento del número total de conexiones habilitadas con la optimización de TCP.
- 1.3.6.1.4.1.5951.4.1.1.46.132 (tcpOptimizationBypassed). Para rastrear el número total de conexiones omitidas, la optimización TCP.
Búfer de recepción dinámico
Para maximizar el rendimiento TCP, un dispositivo NetScaler ahora puede ajustar dinámicamente el tamaño del búfer de recepción TCP.
En este artículo
- Estrategias de control de la congestión
- El algoritmo NILE
- Algoritmo de recuperación de velocidad proporcional (PRR)
- Apertura rápida de TCP (TFO)
- TCP Hystart
- Técnicas de optimización
- Selección de perfil TCP basada en directivas
- Generación de bloques SACK
- Incumplimiento del cliente
- Las comprobaciones de memoria para marcar el punto final en la PCB no tienen en cuenta la memoria total disponible
- Retransmisiones innecesarias debido a la falta de bloques SACK
- SNMP para el número de conexiones omitió la optimización debido a una sobrecarga