Configuration d’optimisation TCP
Avant de configurer l’optimisation TCP, appliquez les paramètres de configuration de base suivants sur l’appliance NetScaler :
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
<!--NeedCopy-->
Remarque
Redémarrez l’appliance NetScaler si vous modifiez le paramètre système rsskeytype.
Terminaison TCP
Pour que NetScaler T1 applique l’optimisation TCP, il doit d’abord mettre fin au trafic TCP entrant. À cette fin, un vserver TCP générique doit être créé et configuré pour intercepter le trafic entrant, puis le transmettre au routeur Internet.
Environnement de routage statique ou dynamique
Pour les environnements dans lesquels un routage statique ou dynamique est en place, vserver peut s’appuyer sur les informations de la table de routage pour transférer les paquets vers un routeur Internet. La route par défaut doit pointer vers le routeur Internet et les entrées de routage des sous-réseaux clients vers le routeur sans fil doivent également ê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
<!--NeedCopy-->
Environnement VLAN-to-VLAN (PBR)
Dans certains environnements clients, le trafic des abonnés est segmenté en plusieurs flux et doit être transféré vers différents routeurs en fonction des paramètres du trafic entrant. Le routage basé sur des stratégies (PBR) peut être utilisé pour acheminer des paquets en fonction des paramètres des paquets entrants, tels que le VLAN, l’adresse MAC, l’interface, l’adresse IP source, le port source, l’adresse IP de destination et le port de destination.
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
<!--NeedCopy-->
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. Dans les versions précédentes, le fait d’avoir plusieurs entités vserver « en mode MAC » par VLAN était une solution alternative pour les environnements multi-VLAN. Chaque serveur virtuel possède un service lié représentant le routeur Internet pour le flux en question.
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
<!--NeedCopy-->
Remarque :
Le mode vserver est MAC contrairement aux exemples précédents où il s’agit du mode IP. Cela est nécessaire pour conserver les informations IP de destination lorsque des services sont liés à vserver. De plus, la configuration PBR supplémentaire doit acheminer le trafic non optimisé.
Optimisation TCP
La terminaison TCP NetScaler prête à l’emploi est configurée pour la fonctionnalité de transmission TCP. Le transfert TCP signifie essentiellement que NetScaler T1 peut intercepter de manière transparente un flux TCP client-serveur mais ne conserve pas de tampons client-serveur séparés et n’applique aucune technique d’optimisation.
Pour activer l’optimisation TCP, un profil TCP, nommé nstcpprofile, est utilisé pour spécifier les configurations TCP qui sont utilisées si aucune configuration TCP n’est fournie au niveau du service ou du serveur virtuel et 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
<!--NeedCopy-->
Remarque :
Si aucun profil n’est 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
<!--NeedCopy-->
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
<!--NeedCopy-->
Capacités d’optimisation TCP
La plupart des fonctionnalités d’optimisation TCP pertinentes d’une appliance NetScaler sont exposées via un profil TCP correspondant. Les paramètres CLI typiques à prendre en compte lors de la création d’un profil TCP sont les suivants :
- Dimensionnement des fenêtres (WS) : le dimensionnement des fenêtres TCP permet d’augmenter la taille de la fenêtre de réception TCP au-delà de 65 535 octets. Il contribue à améliorer les performances TCP en général et en particulier dans les réseaux à bande passante élevée et à long retard. Il permet de réduire la latence et d’améliorer le temps de réponse via TCP.
- Accusé de réception sélectif (SACK) : le protocole TCP SACK résout le problème de la perte de plusieurs paquets, ce qui réduit la capacité de débit globale. Grâce à un accusé de réception sélectif, le destinataire peut informer l’expéditeur de tous les segments 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.
- Facteur de mise à l’échelle de la fenêtre (WSVal) : facteur utilisé pour calculer la nouvelle taille de 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 de la mémoire tampon.
- Taille maximale de 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 à un MTU de 1500.
- MaxBurst : nombre maximum de segments TCP autorisés dans une rafale.
- Taille de la fenêtre de congestion initiale (InitialCWND) : La taille initiale de la fenêtre de congestion TCP détermine le nombre d’octets qui peuvent être en attente au début de la transaction. Cela permet à T1 d’envoyer ces nombreux octets sans se soucier de la congestion du fil.
- Taille maximale de la file d’attente de paquets OOO (oooQSize) : TCP gère la file d’attente hors ordre afin de conserver les paquets OOO dans la communication TCP. Ce paramètre a un impact sur la mémoire système si la taille de la file d’attente est longue car les paquets doivent être conservés dans la mémoire d’exécution. Cela doit donc être maintenu à un niveau optimisé en fonction du type de réseau et des caractéristiques de l’application.
- RTO minimum (minRTO) : le délai de retransmission TCP est calculé sur chaque ACK reçu en fonction de la logique d’implémentation interne. Le délai de retransmission par défaut est d’une seconde au départ et 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… se poursuit jusqu’à la dernière tentative de retransmission.
- BufferSize/SendBuffSize : il s’agit de la quantité maximale de données que le T1 peut recevoir du serveur et de la mettre en mémoire tampon en interne sans les envoyer au client. Ils doivent être définis sur une valeur supérieure (au moins le double) au produit de retard de bande passante du canal de transmission sous-jacent.
- flavor : il s’agit de l’algorithme de contrôle de congestion TCP. Les valeurs valides sont Default, BIC, CUBIC, Westwood et Nile.
- Miseen mémoire tampon dynamique : permet d’ajuster dynamiquement la mémoire tampon de réception en fonction des conditions de la mémoire et du réseau. Il remplira la mémoire tampon autant que nécessaire pour maintenir le canal de téléchargement du client plein au lieu de remplir, en lisant à l’avance depuis le serveur, une mémoire tampon de taille fixe, car cette dernière est spécifiée dans le profil TCP et généralement basée sur des critères tels que 2*BDP, pour une connexion. NetScaler T1 surveille l’état du réseau pour le client et estime la quantité de données qu’il doit lire à l’avance sur le serveur.
- Keep-Alive (KA) : envoyez des sondes TCP Keep-Alive (KA) périodiques pour vérifier si le pair est toujours actif.
- RSTWindowAtténuate : défense du protocole TCP contre les attaques par usurpation d’identité. Il répondra avec un ACK correctif lorsqu’un numéro de séquence n’est pas valide.
- RSTMaxack : active ou désactive l’acceptation d’un RST qui est hors fenêtre mais qui fait écho au numéro de séquence ACK le plus élevé.
- SpoofSyndrop : suppression des paquets SYN non valides pour se protéger contre l’usurpation d’identité.
- Notification d’encombrement explicite (ecn) : elle envoie une notification de l’état de congestion du réseau à l’expéditeur des données et prend des mesures correctives en cas de congestion ou de corruption des données.
- Restauration RTO directe : en cas de retransmissions intempestives, les configurations de contrôle de congestion sont rétablies à leur état d’origine.
- Fenêtre de congestion maximale TCP (maxcwnd) : taille de fenêtre d’encombrement maximale TCP configurable par l’utilisateur.
- Accusé de réception (FACK) : pour éviter l’encombrement du protocole TCP en mesurant explicitement le nombre total d’octets de données restant sur le réseau et en aidant l’expéditeur (T1 ou client) à contrôler la quantité de données injectées dans le réseau pendant les délais de retransmission.
- tcpmode : modes d’optimisation TCP pour un profil spécifique. Il existe deux modes d’optimisation TCP : Transparent et Endpoint.
- Point final. Dans ce mode, l’appliance gère les connexions client et serveur séparément.
- Transparent. En mode transparent, les clients doivent accéder directement aux serveurs, sans aucun serveur virtuel intermédiaire. Les adresses IP du serveur doivent être publiques car les clients doivent pouvoir y accéder.
Suppression silencieuse des connexions inactives
Dans un réseau de télécommunications, près de 50 % des connexions TCP d’une appliance NetScaler deviennent inactives et l’appliance envoie des paquets RST pour les fermer. Les paquets envoyés via des canaux radio activent ces canaux inutilement, provoquant un flot de messages qui, à leur tour, amènent l’appliance à générer un flot de messages de rejet de service. 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 activez les deux, ni une connexion à moitié fermée ni une connexion établie n’entraînent l’envoi d’un paquet RST au client lorsque la connexion expire. L’appliance interrompt simplement la connexion.
set ns tcpProfile nstcpprofile -DropHalfClosedConnOnTimeout ENABLED
set ns tcpProfile nstcpprofile -DropEstConnOnTimeout ENABLED
<!--NeedCopy-->