Optimierung der TCP-Leistung mit TCP Nil
TCP verwendet die folgenden Optimierungstechniken und Engpasskontrollstrategien (oder Algorithmen), um Netzwerküberlastung bei der Datenübertragung zu vermeiden.
Engpasskontrollstrategien
Das Transmission Control Protocol (TCP) wird seit langem verwendet, um Internetverbindungen herzustellen und zu verwalten, Übertragungsfehler zu behandeln und Webanwendungen problemlos mit Client-Geräten zu verbinden. Der Netzwerkverkehr ist jedoch schwieriger zu kontrollieren, da der Paketverlust nicht nur von der Staus im Netzwerk abhängt und Staus nicht notwendigerweise zu Paketverlust führt. Daher sollte sich ein TCP-Algorithmus auf Paketverlust und Bandbreite konzentrieren, um Engpässe zu messen.
NILE-Algorithmus
Citrix Systems hat einen neuen Engpass-Congestion-Control-Algorithmus entwickelt, NILE, einen TCP-Optimierungsalgorithmus für Hochgeschwindigkeitsnetze wie LTE, LTE advanced und 3G. Nil befasst sich mit einzigartigen Herausforderungen, die durch Fading, zufällige oder überlastete Verluste, Link-Layer-Neuübertragungen und Trägeraggregation verursacht werden.
Der NILE-Algorithmus:
- Basiert Schätzungen der Warteschlangenlatenz auf Round-Trip-Zeitmessungen.
- Verwendet eine Funktion zum Erhöhen von Staufenstern, die umgekehrt proportional zur gemessenen Warteschlangenlatenz ist. Diese Methode führt dazu, dass sich der Netzwerküberlastungspunkt langsamer nähert als die Standard-TCP-Methode, und reduziert die Paketverluste während der Staus.
- Kann zwischen zufälligen Verlusten und überlastungsbasierten Verlust im Netzwerk unterscheiden, indem die geschätzte Warteschlangenlatenz verwendet wird.
Die Telekommunikationsdienstanbieter können den NILE-Algorithmus in ihrer TCP-Infrastruktur verwenden, um:
- Optimieren Sie mobile und Fernnetze — Der NILE-Algorithmus erzielt einen höheren Durchsatz im Vergleich zu Standard-TCP. Diese Funktion ist besonders wichtig für mobile und Fernnetze.
- Verringern Sie die empfangene Latenz der Anwendung und verbessern Sie die Nutzererfahrung— Der Nil-Algorithmus verwendet Paketverlust-Informationen, um festzustellen, ob die Größe des Übertragungsfensters erhöht oder verringert werden soll, und verwendet Informationen zur Warteschlangenverzögerung, um die Größe des Inkrements oder Dekrements zu bestimmen. Diese dynamische Einstellung der Übertragungsfenstergröße verringert die Anwendungslatenz im Netzwerk.
So konfigurieren Sie die NILE-Unterstützung über die Befehlszeilenschnittstelle
Geben Sie an der Eingabeaufforderung Folgendes ein:
set ns tcpProfile <name> [-flavor NILE]
<!--NeedCopy-->
Konfigurieren der NILE-Unterstützung mit dem Konfigurationsdienstprogramm
- Navigieren Sie zu System > Profile > TCP-Profile, und klicken Sie auf TCP-Profile .
- Wählen Sie in der Dropdownliste TCP-Flavor die Option NILE aus.
Beispiel:
set ns tcpProfile tcpprofile1 -flavor NILE
<!--NeedCopy-->
PRR-Algorithmus (Proportional Rate Recovery)
TCP Fast Recovery-Mechanismen reduzieren die Weblatenz, die durch Paketverluste verursacht wird. Der neue PRR-Algorithmus (Proportional Rate Recovery) ist ein schneller Recovery-Algorithmus, der TCP-Daten während einer Verlustwiederherstellung auswertet. Es wird nach der Rate-Halving gemustert, indem der Bruch verwendet wird, der für das Zielfenster geeignet ist, das vom Algorithmus zur Staus gewählt wird. Es minimiert die Fensteranpassung, und die tatsächliche Fenstergröße am Ende der Wiederherstellung liegt nahe am Slow-Start-Schwellenwert (ssthresh).
TCP Fast Open (TFO)
TCP Fast Open (TFO) ist ein TCP-Mechanismus, der einen schnellen und sicheren Datenaustausch zwischen einem Client und einem Server während des ersten Handshakes von TCP ermöglicht. Diese Funktion ist als TCP-Option im TCP-Profil verfügbar, das an einen virtuellen Server einer Citrix ADC Appliance gebunden ist. TFO verwendet ein TCP Fast Open Cookie (ein Sicherheits-Cookie), das die Citrix ADC Appliance generiert, um den Client zu validieren und zu authentifizieren, der eine TFO Verbindung zum virtuellen Server initiiert. Durch die Verwendung des TFO Mechanismus können Sie die Netzwerklatenz einer Anwendung um die Zeit reduzieren, die für eine vollständige Hin- und Rückfahrt erforderlich ist, was die Verzögerung bei kurzen TCP-Übertragungen erheblich reduziert.
Funktionsweise von TFO
Wenn ein Client versucht, eine TFO Verbindung herzustellen, enthält er ein TCP Fast Open Cookie mit dem anfänglichen SYN-Segment, um sich selbst zu authentifizieren. Wenn die Authentifizierung erfolgreich ist, kann der virtuelle Server auf der Citrix ADC Appliance Daten in das SYN-ACK-Segment aufnehmen, obwohl er nicht das endgültige ACK-Segment des Dreiwege-Handshakes erhalten hat. Dies spart bis zu einer vollständigen Hin- und Rückfahrt im Vergleich zu einer normalen TCP-Verbindung, die einen Dreiwege-Handshake erfordert, bevor Daten ausgetauscht werden können.
Ein Client und ein Backend-Server führen die folgenden Schritte aus, um eine TFO-Verbindung herzustellen und Daten während des ersten TCP-Handshake sicher auszutauschen.
- Wenn der Client über kein TCP Fast Open Cookie verfügt, um sich selbst zu authentifizieren, sendet er eine Fast Open Cookie-Anforderung im SYN-Paket an den virtuellen Server auf der Citrix ADC Appliance.
- Wenn die TFO Option im TCP-Profil aktiviert ist, das an den virtuellen Server gebunden ist, generiert die Appliance ein Cookie (indem sie die IP-Adresse des Clients unter einem geheimen Schlüssel verschlüsselt) und antwortet mit einem SYN-ACK auf den Client, das das generierte Fast Open Cookie in einem TCP-Optionsfeld enthält.
- Der Client speichert das Cookie für zukünftige TFO-Verbindungen mit demselben virtuellen Server auf der Appliance.
- Wenn der Client versucht, eine TFO Verbindung mit demselben virtuellen Server herzustellen, sendet er SYN, die das zwischengespeicherte Fast Open Cookie (als TCP-Option) zusammen mit HTTP-Daten enthält.
- Die Citrix ADC Appliance validiert das Cookie, und wenn die Authentifizierung erfolgreich ist, akzeptiert der Server die Daten im SYN-Paket und bestätigt das Ereignis mit einem SYN-ACK, TFO Cookie und HTTP Response.
Hinweis: Wenn die Clientauthentifizierung fehlschlägt, löscht der Server die Daten und bestätigt das Ereignis nur mit einem SYN, der ein Sitzungszeitlimit angibt.
- Wenn auf Serverseite die TFO Option in einem an einen Dienst gebundenen TCP-Profil aktiviert ist, bestimmt die Citrix ADC Appliance, ob das TCP Fast Open Cookie in dem Dienst vorhanden ist, zu dem es versucht, eine Verbindung herzustellen.
- Wenn das TCP Fast Open Cookie nicht vorhanden ist, sendet die Appliance eine Cookie-Anfrage im SYN-Paket.
- Wenn der Backend-Server das Cookie sendet, speichert die Appliance das Cookie im Serverinformations-Cache.
- Wenn die Appliance bereits ein Cookie für das angegebene Ziel-IP-Paar hat, wird das alte Cookie durch das neue ersetzt.
- Wenn das Cookie im Serverinformations-Cache verfügbar ist, wenn der virtuelle Server versucht, mithilfe derselben SNIP-Adresse eine erneute Verbindung mit demselben Backend-Server herzustellen, kombiniert die Appliance die Daten im SYN-Paket mit dem Cookie und sendet es an den Backend-Server.
- Der Backend-Server bestätigt das Ereignis sowohl mit Daten als auch mit einem SYN.
Hinweis: Wenn der Server das Ereignis nur mit einem SYN-Segment bestätigt, sendet die Citrix ADC Appliance das Datenpaket sofort erneut, nachdem das SYN-Segment und die TCP-Optionen aus dem ursprünglichen Paket entfernt wurden.
Konfigurieren von TCP Fast Open
Um die TCP-Funktion Fast Open (TFO) zu verwenden, aktivieren Sie die Option TCP Fast Open im entsprechenden TCP-Profil und setzen Sie den Parameter TFO Cookie Timeout auf einen Wert, der der Sicherheitsanforderung für dieses Profil entspricht.
So aktivieren oder deaktivieren Sie TFO mit der Befehlszeile
Geben Sie an der Eingabeaufforderung einen der folgenden Befehle ein, um TFO in einem neuen oder vorhandenen Profil zu aktivieren oder zu deaktivieren.
Hinweis: Der Standardwert ist DEAKTIVIERT.
add tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
set tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
unset tcpprofile <TCP Profile Name> - tcpFastOpen
<!--NeedCopy-->
Beispiele:
add tcpprofile Profile1 – tcpFastOpen Set tcpprofile Profile1 – tcpFastOpen Enabled unset tcpprofile Profile1 – tcpFastOpen
So legen Sie den Timeout-Wert für TCP Fast Open Cookie mit der Befehlszeilenschnittstelle fest
Geben Sie an der Eingabeaufforderung Folgendes ein:
set tcpparam –tcpfastOpenCookieTimeout <Timeout Value>
<!--NeedCopy-->
Beispiel:
set tcpprofile –tcpfastOpenCookieTimeout 30secs
<!--NeedCopy-->
So konfigurieren Sie TCP Fast Open mit der GUI
- Navigieren Sie zu Konfiguration > System > Profile >, und klicken Sie dann auf Bearbeiten, um ein TCP-Profil zu ändern.
- Aktivieren Sie auf der Seite TCP-Profil konfigurieren das Kontrollkästchen TCP Fast Open.
- Klicken Sie auf OK und dann auf Fertig.
So konfigurieren Sie den TCP Fast Cookie Timeout-Wert mit der GUI
Navigieren Sie zu Konfiguration > System > Einstellungen > TCP-Parameter ändern und dann Seite TCP-Parameter konfigurieren, um den TCP-Zeitüberschreitungswert für TCP Fast Open Cookie festzulegen.
TCP Hystart
Ein neuer TCP-Profilparameter, hystart, ermöglicht den Hystart-Algorithmus, bei dem es sich um einen Slow-Start-Algorithmus handelt, der dynamisch einen sicheren Punkt bestimmt, an dem beendet werden soll (ssthresh). Es ermöglicht einen Übergang zur Stauvermeidung ohne hohe Paketverluste. Dieser neue Parameter ist standardmäßig deaktiviert.
Wenn Staus festgestellt wird, tritt Hystart in eine Staus Vermeidungsphase ein. Durch die Aktivierung erhalten Sie einen besseren Durchsatz in Hochgeschwindigkeitsnetzen mit hohem Paketverlust. Dieser Algorithmus hilft, bei der Verarbeitung von Transaktionen nahezu die maximale Bandbreite beizubehalten. Dadurch kann der Durchsatz verbessert werden.
TCP-Hystart konfigurieren
Um die Hystart-Funktion zu verwenden, aktivieren Sie die Option Cubic Hystart im entsprechenden TCP-Profil.
So konfigurieren Sie Hystart mit der Befehlszeilenschnittstelle (CLI)
Geben Sie an der Eingabeaufforderung einen der folgenden Befehle ein, um Hystart in einem neuen oder vorhandenen TCP-Profil zu aktivieren oder zu deaktivieren.
add tcpprofile <profileName> -hystart ENABLED
set tcpprofile <profileName> -hystart ENABLED
unset tcprofile <profileName> -hystart
<!--NeedCopy-->
Beispiele:
add tcpprofile Profile1 – tcpFastOpen
Set tcpprofile Profile1 – tcpFastOpen Enabled
unset tcpprofile Profile1 – tcpFastOpen
<!--NeedCopy-->
So konfigurieren Sie die Hystart-Unterstützung mit der GUI
- Navigieren Sie zu Konfiguration > System > Profile > und klicken Sie auf Bearbeiten, um ein TCP-Profil zu ändern.
- Aktivieren Sie auf der Seite TCP-Profil konfigurieren das Kontrollkästchen Cubic Hystart.
- Klicken Sie auf OK und dann auf Fertig.
Optimierungstechniken
TCP verwendet die folgenden Optimierungstechniken und -methoden für optimierte Flusssteuerungen.
Richtlinienbasierte TCP-Profilauswahl
Der Netzwerkverkehr ist heute vielfältiger und bandbreitenintensiver als je zuvor. Mit dem erhöhten Datenverkehr ist die Wirkung, die Quality of Service (QoS) auf die TCP-Leistung hat, signifikant. Um QoS zu verbessern, können Sie jetzt AppQoE-Richtlinien mit unterschiedlichen TCP-Profilen für verschiedene Klassen von Netzwerkverkehr konfigurieren. Die AppQoE-Richtlinie klassifiziert den Datenverkehr eines virtuellen Servers, um ein TCP-Profil zu verknüpfen, das für einen bestimmten Typ von Datenverkehr optimiert ist, z. B. 3G, 4G, LAN oder WAN.
Um dieses Feature zu verwenden, erstellen Sie für jedes TCP-Profil eine Richtlinienaktion, ordnen Sie eine Aktion AppQoE-Richtlinien zu und binden Sie die Richtlinien an die virtuellen Server mit Lastenausgleich.
Konfigurieren der Richtlinienbasierten TCP-Profilauswahl
Die Konfiguration der richtlinienbasierten TCP-Profilauswahl umfasst die folgenden Aufgaben:
- AppQoE wird aktiviert. Bevor Sie das TCP-Profilfeature konfigurieren, müssen Sie die AppQoE -Funktion aktivieren.
- AppQoE-Aktion hinzufügen. Nachdem Sie die AppQoE-Funktion aktiviert haben, konfigurieren Sie eine AppQoE-Aktion mit einem TCP-Profil.
- Konfigurieren der AppQoE-basierten TCP-Profilauswahl. Um die TCP-Profilauswahl für verschiedene Datenverkehrsklassen zu implementieren, müssen Sie AppQoE-Richtlinien konfigurieren, mit denen Ihre Citrix ADC Appliance die Verbindungen unterscheiden und die richtige AppQoE-Aktion an jede Richtlinie binden kann.
- Binden der AppQoE -Richtlinie an den virtuellen Server. Nachdem Sie die AppQoE-Richtlinien konfiguriert haben, müssen Sie sie an einen oder mehrere virtuelle Load Balancing-, Content Switching- oder Cache-Umleitungsserver binden.
Konfiguration über die Befehlszeilenschnittstelle
So aktivieren Sie AppQoE mit der Befehlszeilenschnittstelle:
Geben Sie an der Eingabeaufforderung die folgenden Befehle ein, um das Feature zu aktivieren, und überprüfen Sie, ob es aktiviert ist:
enable ns feature appqoe
show ns feature
<!--NeedCopy-->
So binden Sie ein TCP-Profil beim Erstellen einer AppQoE-Aktion mit der Befehlszeilenschnittstelle
Geben Sie an der Eingabeaufforderung den folgenden AppQoE-Aktionsbefehl mit der Option tcpprofiletobind ein.
Binden eines TCP-Profils:
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-->
So konfigurieren Sie eine AppQoE-Richtlinie mit der Befehlszeilenschnittstelle
Geben Sie an der Eingabeaufforderung Folgendes ein:
add appqoe policy <name> -rule <expression> -action <string>
<!--NeedCopy-->
So binden Sie eine AppQoE-Richtlinie an virtuelle Lastausgleichs-, Cache-Umleitungs- oder Content Switching-Server mit der Befehlszeilenschnittstelle
Geben Sie an der Eingabeaufforderung Folgendes ein:
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-->
Beispiel:
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-->
Konfigurieren der richtlinienbasierten TCP-Profilerstellung mit der GUI
So aktivieren Sie AppQoE mit der GUI
- Navigieren Sie zu System > Einstellungen.
- Klicken Sie im Detailbereich auf Erweiterte Funktionen konfigurieren.
- Aktivieren Sie im Dialogfeld Erweiterte Funktionen konfigurieren das Kontrollkästchen AppQoE.
- Klicken Sie auf OK.
So konfigurieren Sie die AppQoE -Richtlinie mit der GUI
- Navigieren Sie zu App-Expert > AppQoe > Aktionen .
- Führen Sie im Detailbereich eine der folgenden Aktionen aus:
- Um eine neue Aktion zu erstellen, klicken Sie auf Hinzufügen.
- Um eine vorhandene Aktion zu ändern, wählen Sie die Aktion aus, und klicken Sie dann auf Bearbeiten.
-
Geben Sie im Bildschirm AppQoE-Aktion erstellen oder im Fenster AppQoE-Aktion konfigurieren Werte für die Parameter ein oder wählen Sie sie aus. Der Inhalt des Dialogfensters entspricht den unter Parameter für die Konfiguration der AppQoE-Aktion beschriebenen Parametern wie folgt (Sternchen gibt einen erforderlichen Parameter an):
- Name — Name
- Aktionstyp: RespondWith
- Priorität — Priorität
- Richtlinienwarteschlangentiefe — polqDepth
- Warteschlangentiefe — priqDepth
- DOS-Aktion — dosAction
- Klicken Sie auf Erstellen.
So binden Sie AppQoE-Richtlinie mit der GUI
- Navigieren Sie zu Traffic Management > Load Balancing > Virtuelle Server, wählen Sie einen Server aus, und klicken Sie dann auf Bearbeiten .
- Klicken Sie im Abschnitt Richtlinien auf (+), um eine AppQoE-Richtlinie zu binden.
- Führen Sie im Schieberegler Richtlinien die folgenden Schritte aus:
- Wählen Sie einen Richtlinientyp als AppQoe aus der Dropdownliste aus.
- Wählen Sie einen Datenverkehrstyp aus der Dropdownliste aus.
- Gehen Sie im Abschnitt Richtlinienbindung folgendermaßen vor:
- Klicken Sie auf Neu, um eine neue AppQoE-Richtlinie zu erstellen.
- Klicken Sie auf Vorhandene Richtlinie, um eine AppQoE-Richtlinie aus der Dropdownliste auszuwählen.
- Legen Sie die Bindungspriorität fest, und klicken Sie auf An die Richtlinie an den virtuellen Server binden .
- Klicken Sie auf Fertig.
SACK-Blockgenerierung
Die TCP-Leistung verlangsamt sich, wenn mehrere Pakete in einem Datenfenster verloren gehen. In einem solchen Szenario überwindet ein selektives Acknowledgement (SACK) -Mechanismus in Kombination mit einer selektiven Wiederholungsrichtlinie diese Einschränkung. Für jedes eingehende Out-of-Order-Paket müssen Sie einen SACK-Block generieren.
Wenn das Paket nicht in den Warteschlangenblock passt, fügen Sie Paketinformationen in den Block ein, und legen Sie die vollständigen Blockinformationen als SACK-0 fest. Wenn ein nicht bestelltes Paket nicht in den Wiederzusammenbaublock passt, senden Sie das Paket als SACK-0 und wiederholen Sie die früheren SACK-Blocks. Wenn ein nicht bestelltes Paket ein Duplikat ist und Paketinfo als SACK-0 gesetzt ist, dann ist D-SACK der Block.
Hinweis: Ein Paket gilt als D-SACK, wenn es sich um ein quittiertes Paket handelt, oder um ein veraltetes Paket, das bereits empfangen wurde.
Client-Abtrennung
Eine Citrix ADC Appliance kann das Reneging von Clients während der SACK-basierten Wiederherstellung verarbeiten.
Speicherüberprüfungen zur Markierung von end_point auf PCB berücksichtigen nicht den gesamten verfügbaren Speicher
Wenn in einer Citrix ADC Appliance der Schwellenwert für die Speichernutzung auf 75 Prozent festgelegt ist, anstatt den gesamten verfügbaren Speicher zu verwenden, bewirkt dies, dass neue TCP-Verbindungen TCP-Optimierung umgehen.
Unnötige Weiterübertragungen durch fehlende SACK-Blocks
Wenn Sie in einem Nicht-Endpunkt-Modus DUPACKS senden, werden beim Senden von SACK-Blocks für wenige Pakete außerhalb der Ordnung fehlen, zusätzliche Neuübertragungen vom Server ausgelöst.
SNMP für die Anzahl der Verbindungen wurde durch Überlastung optimiert
Die folgenden SNMP-IDs wurden zu einer Citrix ADC Appliance hinzugefügt, um die Anzahl der Verbindungen nachzuverfolgen, die TCP-Optimierung aufgrund von Überlastung umgangen wurden.
- 1.3.6.1.4.1.5951.4.1.1.46.13 (tcpOptimizationEnabled). Um die Gesamtzahl der Verbindungen zu verfolgen, die mit TCP-Optimierung aktiviert sind.
- 1.3.6.1.4.1.5951.4.1.1.46.132 (tcpOptimizationBypassed). Um die Gesamtzahl der Verbindungen zu verfolgen, wurde TCP-Optimierung umgangen.
Dynamischer Empfangspuffer
Um die TCP-Leistung zu maximieren, kann eine Citrix ADC Appliance nun die Größe des TCP-Empfangspuffers dynamisch anpassen.
In diesem Artikel
- Engpasskontrollstrategien
- NILE-Algorithmus
- PRR-Algorithmus (Proportional Rate Recovery)
- TCP Fast Open (TFO)
- TCP Hystart
- Optimierungstechniken
- Richtlinienbasierte TCP-Profilauswahl
- SACK-Blockgenerierung
- Client-Abtrennung
- Speicherüberprüfungen zur Markierung von end_point auf PCB berücksichtigen nicht den gesamten verfügbaren Speicher
- Unnötige Weiterübertragungen durch fehlende SACK-Blocks
- SNMP für die Anzahl der Verbindungen wurde durch Überlastung optimiert