Optimización del rendimiento TCP mediante TCP Nile

TCP utiliza las siguientes técnicas de optimización y estrategias de control de congestión (o algoritmos) para evitar la congestión de red en la transmisión de datos.

Estrategias de control de congestión

El Protocolo de control de transmisión (TCP) se ha utilizado durante mucho tiempo para establecer y administrar conexiones a Internet, manejar errores de transmisión y conectar aplicaciones web sin problemas con dispositivos cliente. Pero el tráfico de red se ha vuelto más difícil de controlar, porque la pérdida de paquetes no depende solo de la congestión en la red, y la congestión no necesariamente causa 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.

Algoritmo NILE

Citrix Systems ha desarrollado un nuevo algoritmo de control de congestión, NILE, un algoritmo de optimización TCP diseñado para redes de alta velocidad como LTE, LTE avanzado y 3G. Nile aborda desafíos únicos causados por la decoloración, pérdidas aleatorias o congestivas, retransmisiones de capa de enlace y agregación de portadoras.

El algoritmo NILE:

  • Basa las estimaciones de latencia de 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 la cola medida. Este método resulta en acercarse al punto de congestión de 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érdida aleatoria y pérdida basada en congestión en la red mediante el uso de 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 rendimiento superior en comparación con TCP estándar. Esta función es especialmente importante para redes móviles y de larga distancia.
  • Disminuir la latencia percibida por las aplicaciones y mejorar la experiencia del suscriptor: El algoritmo de Nile utiliza información de pérdida de paquetes para determinar si el tamaño de la ventana de transmisión debe aumentarse o reducirse, y utiliza información de demora en la cola para determinar el tamaño del incremento o disminución. Esta configuración dinámica del tamaño de la ventana de transmisión disminuye 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]

Configuración de la compatibilidad con NILE mediante la utilidad de configuración

  1. Vaya a Sistema > Perfiles > PerfilesTCP y haga clic en Perfiles TCP.
  2. En la lista desplegable TCP Flavor, seleccione NILE.

Ejemplo:

set ns tcpProfile tcpprofile1 -flavor NILE

Algoritmo de Recuperación de Tasa Proporcional (PRR)

Los mecanismos de recuperación rápida TCP reducen la latencia web causada por pérdidas de paquetes. El nuevo algoritmo de recuperación proporcional de velocidad (PRR) es un algoritmo de recuperación rápida que evalúa los datos TCP durante una recuperación de pérdidas. Se modela después de Rate-Halving, mediante el uso de la fracción que es apropiada para la ventana de destino 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 está cerca del umbral de inicio lento (ssthresh).

Apertura rápida TCP (TFO)

TCP Fast Open (TFO) es un mecanismo TCP que permite el 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 opción TCP en el perfil TCP enlazado a un servidor virtual de un dispositivo Citrix ADC. TFO utiliza una cookie TCP Fast Open (una cookie de seguridad) que genera el dispositivo Citrix ADC para validar y autenticar al cliente que inicia una conexión TFO al servidor virtual. Mediante el mecanismo TFO, puede reducir la latencia de red de una aplicación en el tiempo necesario para un viaje completo de ida y vuelta, lo que reduce significativamente el retraso experimentado en las transferencias TCP cortas.

Cómo funciona el 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 Citrix ADC puede incluir datos en el segmento SYN-ACK aunque no haya recibido el segmento ACK final del protocolo de enlace de tres vías. Esto ahorra hasta un viaje completo de ida y vuelta en comparación con una conexión TCP normal, que requiere un protocolo de enlace de tres vías antes de que se puedan intercambiar datos.

Un cliente y un servidor back-end realizan los siguientes pasos para establecer una conexión TFO e intercambiar datos de forma segura durante el protocolo de enlace TCP inicial.

  1. Si el cliente no tiene una cookie TCP Fast Open para autenticarse, envía una solicitud Fast Open Cookie en el paquete SYN al servidor virtual del dispositivo Citrix ADC.
  2. Si la opción TFO está habilitada en el perfil TCP enlazado al servidor virtual, el dispositivo genera una cookie (cifrando la dirección IP del cliente bajo una clave secreta) y responde al cliente con un SYN-ACK que incluye la cookie de apertura rápida generada en un campo de opción TCP.
  3. El cliente almacena en caché la cookie para futuras conexiones TFO al mismo servidor virtual del dispositivo.
  4. Cuando el cliente intenta establecer una conexión TFO al mismo servidor virtual, envía SYN que incluye la cookie de apertura rápida en caché (como opción TCP) junto con los datos HTTP.
  5. El dispositivo Citrix ADC valida la cookie y, si la autenticación se realiza correctamente, el servidor acepta los datos del paquete SYN y reconoce el evento con SYN-ACK, cookie TFO y respuesta HTTP.

Nota: Si la autenticación del cliente falla, el servidor elimina los datos y reconoce el evento solo con un SYN que indica un tiempo de espera de la sesión.

  1. En el lado del servidor, si la opción TFO está habilitada en un perfil TCP enlazado a un servicio, el dispositivo Citrix ADC determina si la cookie de apertura rápida TCP está presente en el servicio al que está intentando conectarse.
  2. Si la cookie TCP Fast Open no está presente, el dispositivo envía una solicitud de cookie en el paquete SYN.
  3. Cuando el servidor back-end envía la cookie, el dispositivo almacena la cookie en la caché de información del servidor.
  4. Si el dispositivo ya tiene una cookie para el par IP de destino dado, reemplaza la cookie antigua por la nueva.
  5. Si la cookie está disponible en la caché de información del servidor cuando el servidor virtual intenta volver a conectarse al mismo servidor back-end mediante la misma dirección SNIP, el dispositivo combina los datos del paquete SYN con la cookie y los envía al servidor back-end.
  6. El servidor back-end reconoce el evento con datos y un SYN.

Nota: Si el servidor reconoce el evento con solo un segmento SYN, el dispositivo Citrix ADC reenvía inmediatamente el paquete de datos después de quitar el segmento SYN y las opciones TCP del paquete original.

Configuración de TCP Fast Open

Para utilizar la función TCP Fast Open (TFO), habilite la opción TCP Fast Open en el perfil TCP pertinente y establezca el parámetro TFO Cookie Timeout en un valor que se ajuste al requisito de seguridad para ese perfil.

Para habilitar o inhabilitar TFO mediante la línea de comandos

En el símbolo del sistema, escriba uno de los siguientes comandos para habilitar o inhabilitar TFO en un perfil nuevo o existente.

Nota: El valor predeterminado es DISABLED.

add tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
set tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
unset tcpprofile <TCP Profile Name> - tcpFastOpen

Ejemplos:

add tcpprofile Profile1: TcpFastOpen Set tcpprofile Profile1: TcpFastOpen Enabled unset tcpprofile Profile1: TcpFastOpen

En el símbolo del sistema, escriba:

set tcpparam –tcpfastOpenCookieTimeout <Timeout Value>

Ejemplo:

set tcpprofile –tcpfastOpenCookieTimeout 30secs

Para configurar el TCP Fast Open mediante la interfaz gráfica de usuario

  1. Vaya a Configuración > Sistema > Perfiles > y, a continuación, haga clic en Modificar para modificar un perfil TCP.
  2. En la página Configurar perfil TCP, marque la casilla TCP Fast Open.
  3. Haga clic en Aceptar y, a continuación, en Listo.

Vaya a Configuración > Sistema > Configuración > Cambiar parámetros TCP y, a continuación, Configurar parámetros TCP para establecer el valor de tiempo de espera TCP Fast Open Cookie.

TCP Hystart

Un nuevo parámetro de 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 evitar la congestión sin grandes pérdidas de paquetes. Este nuevo parámetro está inhabilitado de forma predeterminada.

Si se detecta congestión, Hystart entra en una fase de prevención de congestión. Si lo habilita, obtendrá un mejor rendimiento en redes de alta velocidad con una alta pérdida de paquetes. Este algoritmo ayuda a mantener el ancho de banda cercano al máximo durante el procesamiento de transacciones. Por lo tanto, puede mejorar el rendimiento.

Configuración de TCP Hystart

Para utilizar la función Hystart, habilite la opción Cubic Hystart en el perfil TCP correspondiente.

Para configurar Hystart mediante la interfaz de línea de comandos (CLI)

En el símbolo del sistema, 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

Ejemplos:

add tcpprofile Profile1 – tcpFastOpen
Set tcpprofile Profile1 – tcpFastOpen Enabled
unset tcpprofile Profile1 – tcpFastOpen

Para configurar la compatibilidad con Hystart mediante la interfaz gráfica de usuario

  1. Vaya a Configuración > Sistema > Perfiles > y haga clic en Modificar para modificar un perfil TCP.
  2. En la página Configurar perfil TCP, active la casilla de verificación Hystart cúbico.
  3. Haga clic en Aceptar y, a continuación, en Listo.

Técnicas de optimización

TCP utiliza las siguientes técnicas y métodos de optimización para controles de flujo optimizados.

Selección de perfil TCP basada en directivas

Hoy en día, el tráfico de red es más diverso y requiere mucho ancho de banda que nunca. Con el aumento del tráfico, el efecto que la calidad de servicio (QoS) tiene en el rendimiento TCP es significativo. Para mejorar la calidad de servicio, 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 consta de las siguientes tareas:

  • Activando AppQoe. Antes de configurar la función de perfil TCP, debe habilitar la función AppQoe.
  • Agregar acción AppQoe. Después de habilitar la función AppQoe, configure una acción 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 directivas AppQoe con las que su dispositivo Citrix ADC pueda distinguir las conexiones y enlazar la acción AppQoe correcta a cada directiva.
  • Vinculación de la directiva AppQoe con el 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 el símbolo del sistema, escriba los siguientes comandos para habilitar la función y compruebe que está habilitada:

enable ns feature appqoe

show ns feature

Para enlazar un perfil TCP al crear una acción AppQoE mediante la interfaz de línea de comandos

En el símbolo del sistema, escriba el siguiente comando de acción 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

Para configurar una directiva AppQoE mediante la interfaz de línea de comandos

En el símbolo del sistema, escriba:

add appqoe policy <name> -rule <expression> -action <string>

Para vincular una directiva de AppQoE al equilibrio de carga, la redirección de caché o la conmutación de contenido de servidores virtuales 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>

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

Configuración de perfiles TCP basados en directivas mediante la GUI

Para habilitar AppQoe mediante la interfaz gráfica de usuario

  1. Vaya a Sistema > Configuración.
  2. En el panel de detalles, haga clic en Configurar funciones avanzadas.
  3. En el cuadro de diálogo Configurar funciones avanzadas, active la casilla de verificación AppQoe.
  4. Haga clic en Aceptar.

Para configurar la directiva AppQoE mediante la interfaz gráfica de usuario

  1. Vaya a App-Expert > AppQoE > Acciones.
  2. En el panel de detalles, realice una de las acciones siguientes:
  3. Para crear una nueva acción, haga clic en Agregar.
  4. Para modificar una acción existente, selecciónela y, a continuación, haga clic en Modificar.
  5. En la pantalla Crear acción AppQoe o Configurar acción 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 (asterisco indica un parámetro obligatorio):

    1. Nombre: Name
    2. Tipo de acción: RespondWith
    3. Prioridad: Priority
    4. Profundidad de cola de directivas: PolqDepth
    5. Profundidad de la cola: PriqDepth
    6. Acción de DOS: DosAction
  6. Haga clic en Crear.

Para enlazar la directiva de AppQoe mediante la interfaz gráfica de usuario

  1. Vaya a Administración del tráfico > Equilibrio de carga > Servidores virtuales, seleccione un servidor y, a continuación, haga clic en Modificar.
  2. En la sección Directivas y haga clic en (+) para enlazar una directiva de AppQoE.
  3. En el control deslizante Directivas, haga lo siguiente:
    1. Seleccione un tipo de directiva como AppQoe en la lista desplegable.
    2. Seleccione un tipo de tráfico en la lista desplegable.
  4. En la sección Enlace de directivas, haga lo siguiente:
    1. Haga clic en Nuevo para crear una nueva directiva de AppQoE.
    2. Haga clic en Directiva existente para seleccionar una directiva de AppQoe en la lista desplegable.
  5. Establezca la prioridad de enlace y haga clic en Vincular a la directiva al servidor virtual.
  6. Haga clic en Done.

Generación de bloques SACK

El rendimiento TCP se ralentiza cuando se pierden varios paquetes en una ventana de datos. En este escenario, un mecanismo de reconocimiento selectivo (SACK) combinado con una directiva de retransmisión selectiva de repetición supera esta limitación. Para cada paquete entrante fuera de pedido, debe generar un bloque SACK.

Si el paquete fuera de pedido encaja en el bloque de cola de reensamblaje, inserte la información del paquete en el bloque y establezca la información del bloque completa como SACK-0. Si un paquete fuera de pedido no encaja en el bloque de reensamblaje, envíe el paquete como SACK-0 y repita los bloques SACK anteriores. Si un paquete fuera de orden es un duplicado y la información del paquete se establece como SACK-0, entonces D-SACK el bloque.

Nota: Un paquete se considera como D-SACK si es un paquete reconocido, o un paquete fuera de servicio que ya se ha recibido.

Renegamiento del cliente

Un dispositivo Citrix ADC puede manejar el renegamiento del cliente durante la recuperación basada en SACK.

Las comprobaciones de memoria para marcar end_point en PCB no consideran la memoria total disponible

En un dispositivo Citrix ADC, si el umbral de uso de memoria se establece en el 75% en lugar de utilizar la memoria total disponible, las nuevas conexiones TCP evitan la optimización TCP.

Retransmisiones innecesarias debido a la falta de bloques SACK

En un modo no endpoint, cuando envía DUPACKS, si faltan bloques SACK para pocos paquetes fuera de servicio, desencadena retransmisiones adicionales desde el servidor.

SNMP para la optimización del número de conexiones omitirse debido a la sobrecarga

Los siguientes identificadores SNMP se han agregado a un dispositivo Citrix ADC para realizar un seguimiento del número de conexiones que se han omitido la optimización TCP debido a la sobrecarga.

  1. 1.3.6.1.4.1.5951.4.1.1.46.13 (tcpOptimizationEnabled). Para realizar un seguimiento del número total de conexiones habilitadas con la optimización TCP.
  2. 1.3.6.1.4.1.5951.4.1.1.46.132 (tcpOptimizationBypassed). Para realizar un seguimiento del número total de conexiones que se omite TCP Optimization.

Buffer de recepción dinámica

Para maximizar el rendimiento TCP, un dispositivo Citrix ADC ahora puede ajustar dinámicamente el tamaño del búfer de recepción TCP.