Configuration de l’optimisation TCP

Avant de configurer l’optimisation TCP, appliquez les paramètres de configuration de base suivants sur l’appliance Citrix ADC :

Configuration initiale :

enable ns feature LB IPv6PT
enable ns mode FR L3 USIP MBF Edge USNIP PMTUD
disable ns feature SP
disable ns mode TCPB
set lb parameter -preferDirectRoute NO
set lb parameter -vServerSpecificMac ENABLED
set l4param -l2ConnMethod Vlan
set rsskeytype -rsstype SYMMETRIC
set ns param -useproxyport DISABLED

Remarque

Redémarrez l’appliance Citrix ADC si vous modifiez le paramètrersskeytype système.

Terminaison TCP

Pour que Citrix ADC T1 applique l’optimisation TCP, il doit d’abord mettre fin au trafic TCP entrant. À cette fin, un serveur TCP générique doit être créé et configuré pour intercepter le trafic entrant, puis le transférer au routeur Internet.

Environnement de routage statique/dynamique

Pour les environnements avec routage statique ou dynamique en place, vserver peut compter sur les informations de la table de routage pour transférer les paquets vers le routeur Internet. Route par défaut doit pointer vers le routeur Internet et aussi les entrées de routage pour les sous-réseaux clients vers le routeur sans fil doivent être en place :

Exemple :

add lb vserver vsrv-wireless TCP * * -persistenceType NONE -Listenpolicy "CLIENT.VLAN.ID.EQ(100) && SYS.VSERVER("vsrv-wireless").STATE.EQ(UP)" -m IP -cltTimeout 9000
add route 0.0.0.0 0.0.0.0 192.168.2.1
add route 10.0.0.0 255.0.0.0 192.168.1.1

Environnement VLAN-VLAN (PBR)

Il existe des environnements clients où le trafic d’abonnés est segmenté en plusieurs flux et doit être transféré à différents routeurs en fonction des paramètres de trafic entrant. Le routage basé sur la stratégie (PBR) peut être utilisé pour router des paquets en fonction des paramètres de paquets entrants, tels que VLAN, adresse MAC, interface, adresse IP source, port source, adresse IP de destination et port de destination.

image localisée

Exemple :

add lb vserver vsrv-wireless TCP * * -m IP -l2Conn ON -listenpolicy "CLIENT.VLAN.ID.EQ(100) || CLIENT.VLAN.ID.EQ(101) || CLIENT.VLAN.ID.EQ(102)"

add ns pbr pbr-vlan100-to-vlan200 ALLOW -vlan 100 -nexthop 172.16.200.1

add ns pbr pbr-vlan101-to-vlan201 ALLOW -vlan 101 -nexthop 172.16.201.1

add ns pbr pbr-vlan102-to-vlan202 ALLOW -vlan 102 -nexthop 172.16.202.1

L’utilisation du routage basé sur des stratégies pour acheminer le trafic optimisé TCP est une nouvelle fonctionnalité ajoutée dans la version 11.1 50.10. Pour les versions précédentes, avoir plusieurs entités vserver « mode MAC » par VLAN est une solution alternative pour les environnements multi-VLAN. Chaque serveur vserver a un service lié représentant le routeur Internet pour le flux particulier.

Exemple :

add server internet_router_1 172.16.200.1

add server internet_router_2 172.16.201.1

add server internet_router_3 172.16.202.1

add service svc-internet-1 internet_router_1 TCP * -usip YES -useproxyport NO

add service svc-internet-2 internet_router_2 TCP * -usip YES -useproxyport NO

add service svc-internet-3 internet_router_3 TCP * -usip YES -useproxyport NO

bind service svc-internet-1 -monitorName arp

bind service svc-internet-2 -monitorName arp

bind service svc-internet-3 -monitorName arp

add lb vserver vsrv-wireless-1 TCP * * -Listenpolicy "CLIENT.VLAN.ID.EQ(100) && SYS.VSERVER("vsrv-wireless-1").STATE.EQ(UP)" -m MAC -l2Conn ON

add lb vserver vsrv-wireless-2 TCP * * -Listenpolicy "CLIENT.VLAN.ID.EQ(101) && SYS.VSERVER("vsrv-wireless-2").STATE.EQ(UP)" -m MAC -l2Conn ON

add lb vserver vsrv-wireless-3 TCP * * -Listenpolicy "CLIENT.VLAN.ID.EQ(102) && SYS.VSERVER("vsrv-wireless-3").STATE.EQ(UP)" -m MAC -l2Conn ON

bind lb vserver vsrv-wireless-1 svc-internet-1

bind lb vserver vsrv-wireless-2 svc-internet-2

bind lb vserver vsrv-wireless-3 svc-internet-3

Remarque

Le mode vserver est MAC contrairement aux exemples précédents où il s’agit d’un mode IP. Ceci est nécessaire pour conserver les informations IP de destination lorsque nous avons des services liés à vserver. En outre, la configuration PBR supplémentaire doit acheminer le trafic non optimisé.

Optimisation TCP

La terminaison TCP Citrix ADC prête à l’emploi est configurée pour la fonctionnalité de transmission TCP. La transmission TCP signifie essentiellement que Citrix ADC T1 peut intercepter de manière transparente un flux TCP client-serveur mais ne conserve pas de tampons client-serveur distincts ou n’applique aucune technique d’optimisation.

Pour activer l’optimisation TCP, un profil TCP, nommé nstcpprofile, est utilisé pour spécifier les configurations TCP utilisées si aucune configuration TCP n’est fournie au niveau du service ou du serveur virtuel et qu’il doit être modifié comme suit :

Commande :

add ns tcpProfile nstcpprofile -WS ENABLED -SACK ENABLED -WSVal 8 -mss 1460 -maxBurst 30 -initialCwnd 16 -oooQSize 15000 -minRTO 800 -bufferSize 4000000 -flavor BIC -dynamicReceiveBuffering ENABLED -KA ENABLED -sendBuffsize 4000000 -rstWindowAttenuate ENABLED -spoofSynDrop ENABLED -ecn ENABLED -frto ENABLED -maxcwnd 1000000 -fack ENABLED -rstMaxAck enABLED -tcpmode ENDPOINT

Remarque

S’il n’y a pas de profil explicitement créé et lié à vserver et service, le profil nstcp_default_profile est lié par défaut.

En cas de besoin de plusieurs profils TCP, des profils TCP supplémentaires peuvent être créés et associés au serveur virtuel approprié

Commande :

add ns tcpProfile custom_profile -WS ENABLED -SACK ENABLED -WSVal 8 -mss 1460 -maxBurst 30 -initialCwnd 16 -oooQSize 15000 -minRTO 800 -bufferSize 4000000 -flavor BIC -dynamicReceiveBuffering ENABLED -KA ENABLED -sendBuffsize 4000000 -rstWindowAttenuate ENABLED -spoofSynDrop ENABLED -ecn ENABLED -frto ENABLED -maxcwnd 1000000 -fack ENABLED -rstMaxAck enABLED -tcpmode ENDPOINT

set lb vserver vsrv-wireless -tcpProfileName custom_profile

Remarque

Pour les déploiements avec vserver -m MAC et service, le même profil doit être associé au service.

set service svc-internet -tcpProfileName custom_profile

Fonctionnalités d’optimisation TCP

La plupart des fonctionnalités d’optimisation TCP pertinentes d’une appliance Citrix ADC sont exposées via un profil TCP correspondant. Les paramètres CLI typiques qui doivent être pris en compte lors de la création d’un profil TCP sont les suivants :

  1. Fenêtre Scaling (WS) : La mise à l’échelle de fenêtre TCP permet d’augmenter la taille de fenêtre de réception TCP au-delà de 65535 octets. Il aide à améliorer les performances TCP en général et en particulier dans les réseaux à large bande passante et à long retard. Il aide à réduire la latence et à améliorer le temps de réponse sur TCP.
  2. Accusé de réception sélectif (SACK) : TCP SACK résout le problème de la perte de plusieurs paquets qui réduit la capacité globale de débit. Avec un accusé de réception sélectif, le destinataire peut informer l’expéditeur de tous les segments qui sont reçus avec succès, ce qui permet à l’expéditeur de ne retransmettre que les segments perdus. Cette technique permet à T1 d’améliorer le débit global et de réduire la latence de connexion.
  3. Facteur de mise à l’échelle de la fenêtre (WSVal) : Facteur utilisé pour calculer la nouvelle taille de la fenêtre. Il doit être configuré avec une valeur élevée afin de permettre à la fenêtre annoncée par NS d’être au moins égale à la taille du tampon.
  4. Taille maximale du segment (MSS) : MSS d’un seul segment TCP. Cette valeur dépend du paramètre MTU sur les routeurs intermédiaires et les clients finaux. Une valeur de 1460 correspond à une MTU de 1500.
  5. MaxBurst : nombre maximal de segments TCP autorisés dans une rafale.
  6. Taille de la fenêtre de congestion initiale (InitialCwnd) : La taille de la fenêtre de congestion initiale TCP détermine le nombre d’octets qui peuvent être en attente au début de la transaction. Il permet à T1 d’envoyer ces nombreux octets sans se soucier de la congestion sur le fil.
  7. Taille maximale de la file d’attente de paquets OOO (oooQSize) : TCP maintient la file d’attente hors ordre pour conserver les paquets OOO dans la communication TCP. Ce paramètre affecte la mémoire système si la taille de la file d’attente est longue que les paquets doivent être conservés dans la mémoire d’exécution. Cela doit donc être maintenu à un niveau optimisé basé sur le type de caractéristiques de réseau et d’application.
  8. RTO minimum (MinRTO) : Le délai d’expiration de retransmission TCP est calculé sur chaque ACK reçu en fonction de la logique d’implémentation interne. Le délai d’expiration de retransmission par défaut se produit à 1 seconde pour commencer et cela peut être modifié avec ce paramètre. Pour la seconde retransmission de ces paquets RTO sera calculé par N*2, puis N*4… N*8… continue jusqu’à la dernière tentative de retransmission.
  9. BufferSize/sendBuffSize : ils font référence à la quantité maximale de données que le T1 peut recevoir du serveur et de la mémoire tampon en interne sans envoyer au client. Ils doivent être définis sur une valeur supérieure (au moins double) au produit de retard de bande passante du canal de transmission sous-jacent.
  10. saveur : cela fait référence à l’algorithme de contrôle de la congestion TCP. Les valeurs valides sont Default, BIC, CUBIC, Westwood et Nile.
  11. Mémoiretampon de réception dynamique : permet d’ajuster dynamiquement le tampon de réception en fonction des conditions de mémoire et de réseau. Il remplira le tampon autant qu’il est nécessaire pour garder le canal de téléchargement du client plein au lieu de remplir, en lisant à l’avance à partir du serveur, un tampon de taille fixe, tel que celui-ci est spécifié dans le profil TCP et généralement basé sur des critères tels que 2*BDP, pour une connexion. Citrix ADC T1 surveille les conditions réseau au client et estime combien il doit lire à l’avance à partir du serveur.
  12. Keep-Alive (KA) : Envoyez périodiquement des sondes TCP keep-alive (KA) pour vérifier si l’homologue est toujours actif.
  13. rstWindowAttenuate : Défense de TCP contre les attaques d’usurpation d’identité. Il répondra avec ACK correctif lorsqu’un numéro de séquence n’est pas valide.
  14. rstMaxAck : Activer ou désactiver l’acceptation de RST qui est hors de la fenêtre tout en faisant écho au numéro de séquence ACK le plus élevé.
  15. spoofSynDrop : suppression de paquets SYN non valides pour se protéger contre l’usurpation.
  16. Explicit Congestion Notification(ecn) : Il envoie une notification de l’état de congestion réseau à l’expéditeur des données et prend des mesures correctives pour la congestion des données ou la corruption des données.
  17. Forward RTO-Recovery : En cas de retransmissions fausses, les configurations de contrôle de congestion sont rétablies à leur état d’origine.
  18. TCP maximum congestion window (maxcwnd) : taille de fenêtre de congestion maximale TCP configurable par l’utilisateur.
  19. Forward acknowledgment (FACK) : Pour éviter la congestion TCP en mesurant explicitement le nombre total d’octets de données en attente dans le réseau et en aidant l’expéditeur (T1 ou un client) à contrôler la quantité de données injectées dans le réseau pendant les délais de retransmission.
  20. tcpmode : modes d’optimisation TCP pour un profil spécifique.

Pour les paramètres ci-dessus s’il vous plaît consulter \1] pour obtenir des conseils sur la sélection des valeurs appropriées. Pour les autres, les valeurs décrites dans [Optimisation TCP devrait s’appliquer à la plupart des cas.

Dépannage silencieux des connexions inactives

Dans un réseau de télécommunications, près de 50% des connexions TCP d’une appliance Citrix ADC deviennent inactives et l’appliance envoie des paquets RST pour les fermer. Les paquets envoyés sur des canaux radio activent ces canaux inutilement, provoquant un flot de messages qui, à leur tour, provoquent un flot de messages de rejet de service à l’appliance. Le profil TCP par défaut inclut désormais les paramètres DropHALFClosedConnonTimeout et DropestConnonTimeout, qui sont désactivés par défaut. Si vous les activez tous les deux, ni une connexion semi-fermée ni une connexion établie ne provoque l’envoi d’un paquet RST au client lorsque la connexion expire. L’appliance abandonne simplement la connexion.

set ns tcpProfile nstcpprofile  -DropHalfClosedConnOnTimeout ENABLED

set ns tcpProfile nstcpprofile  -DropEstConnOnTimeout ENABLED