Optimierung der TCP-Leistung mit TCP-Nile
TCP verwendet die folgenden Optimierungstechniken und Strategien (oder Algorithmen) zur Überlastungskontrolle, um Netzwerkengpässe bei der Datenübertragung zu vermeiden.
Strategien zur Staukontrolle
Das Transmission Control Protocol (TCP) wird seit langem verwendet, um Internetverbindungen herzustellen und zu verwalten, Übertragungsfehler zu behandeln und Webanwendungen reibungslos mit Client-Geräten zu verbinden. Der Netzwerkverkehr ist jedoch schwieriger zu kontrollieren, da der Paketverlust nicht nur von der Überlastung des Netzwerks abhängt und eine Überlastung nicht unbedingt zu Paketverlusten führt. Um die Überlastung zu messen, sollte sich ein TCP-Algorithmus daher sowohl auf den Paketverlust als auch auf die Bandbreite konzentrieren.
NIL-Algorithmus
Citrix Systems hat einen neuen Algorithmus zur Überlastungskontrolle entwickelt, NILE, einen TCP-Optimierungsalgorithmus, der für Hochgeschwindigkeitsnetzwerke wie LTE, LTE Advanced und 3G entwickelt wurde. Nile befasst sich mit einzigartigen Herausforderungen, die durch Fading, zufällige oder überlastete Verluste, Neuübertragungen auf Verbindungsschicht und Trägeraggregation entstehen.
Der NIL-Algorithmus:
- Basiert Schätzungen der Warteschlangenlatenz auf Messungen von Hin- und Rücklaufzeiten.
- Verwendet eine Funktion zur Erhöhung des Überlastungsfensters, 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 bei einer Überlastung.
- Kann anhand der geschätzten Warteschlangenlatenz zwischen zufälligen Verlusten und Datenverlusten aufgrund von Engpässen im Netzwerk unterscheiden.
Die Telekommunikationsdienstanbieter können den NILE-Algorithmus in ihrer TCP-Infrastruktur verwenden, um:
- Optimieren Sie Mobil- und Fernnetze − Der NILE-Algorithmus erzielt im Vergleich zu Standard-TCP einen höheren Durchsatz. Diese Funktion ist besonders wichtig für Mobil- und Fernnetze.
- Verringern Sie die wahrgenommene Latenz von Anwendungen und verbessern Sie das Nutzererlebnis − Der Nile-Algorithmus verwendet Informationen zum Paketverlust, um zu bestimmen, ob das Übertragungsfenster vergrößert oder verkleinert werden sollte, und verwendet Informationen zur Wartezeit in der Warteschlange, um die Größe der Erhöhung oder Verringerung zu bestimmen. Diese dynamische Einstellung der Größe des Übertragungsfensters verringert die Anwendungslatenz im Netzwerk.
So konfigurieren Sie die NILE-Unterstützung mithilfe der Befehlszeilenschnittstelle
Geben Sie an der Eingabeaufforderung Folgendes ein:
set ns tcpProfile <name> [-flavor NILE]
<!--NeedCopy-->
Konfiguration der NILE-Unterstützung mithilfe des Konfigurationsprogramms
- 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-Schnellwiederherstellungsmechanismen reduzieren die durch Paketverluste verursachte Weblatenz. Der neue PRR-Algorithmus (Proportional Rate Recovery) ist ein schneller Wiederherstellungsalgorithmus, der TCP-Daten während einer Loss Recovery auswertet. Das Muster ist dem Rate-Halving nachempfunden, indem der Bruchteil verwendet wird, der für das vom Staukontrollalgorithmus gewählte Zielfenster geeignet ist. Dadurch wird die Fensteranpassung minimiert, und die tatsächliche Fenstergröße am Ende der Wiederherstellung liegt nahe am Schwellenwert für langsamen Start (ssthresh).
Schnelles TCP-Öffnen (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 TCP-Handshakes ermöglicht. Diese Funktion ist als TCP-Option im TCP-Profil verfügbar, das an einen virtuellen Server einer NetScaler-Appliance gebunden ist. TFO verwendet ein TCP-Fast-Open-Cookie (ein Sicherheitscookie), das die NetScaler-Appliance generiert, um den Client zu validieren und zu authentifizieren, der eine TFO-Verbindung zum virtuellen Server initiiert. Mithilfe des TFO-Mechanismus können Sie die Netzwerklatenz einer Anwendung um die Zeit reduzieren, die für einen vollständigen Roundtrip erforderlich ist, wodurch die Verzögerung bei kurzen TCP-Übertragungen erheblich reduziert wird.
So funktioniert 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 zu authentifizieren. Wenn die Authentifizierung erfolgreich ist, kann der virtuelle Server auf der NetScaler-Appliance Daten in das SYN-ACK-Segment aufnehmen, obwohl er das letzte ACK-Segment des Drei-Wege-Handshakes nicht empfangen hat. Dadurch wird im Vergleich zu einer normalen TCP-Verbindung, für die ein dreifacher Handshake erforderlich ist, bevor Daten ausgetauscht werden können, bis zu einem kompletten Round-Trip eingespart.
Ein Client und ein Backend-Server führen die folgenden Schritte durch, um eine TFO-Verbindung herzustellen und Daten während des ersten TCP-Handshakes sicher auszutauschen.
- Wenn der Client kein TCP-Fast-Open-Cookie hat, um sich zu authentifizieren, sendet er eine Fast Open Cookie-Anfrage im SYN-Paket an den virtuellen Server auf der NetScaler-Appliance.
- Wenn die TFO-Option in dem an den virtuellen Server gebundenen TCP-Profil aktiviert ist, generiert die Appliance ein Cookie (indem die IP-Adresse des Clients mit einem geheimen Schlüssel verschlüsselt wird) und antwortet dem Client mit einem SYN-ACK, das das generierte Fast Open Cookie in einem TCP-Optionsfeld enthält.
- Der Client speichert das Cookie für zukünftige TFO-Verbindungen zu demselben virtuellen Server auf der Appliance.
- Wenn der Client versucht, eine TFO-Verbindung zu demselben virtuellen Server herzustellen, sendet er SYN, das das zwischengespeicherte Fast Open Cookie (als TCP-Option) zusammen mit HTTP-Daten enthält.
- Die NetScaler-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, einem TFO-Cookie und einer HTTP-Antwort.
Hinweis: Wenn die Client-Authentifizierung fehlschlägt, löscht der Server die Daten und bestätigt das Ereignis nur mit einem SYN, das auf ein Sitzungs-Timeout hinweist.
- Wenn auf der Serverseite die TFO-Option in einem an einen Dienst gebundenen TCP-Profil aktiviert ist, bestimmt die NetScaler-Appliance, ob das TCP Fast Open Cookie in dem Dienst vorhanden ist, zu dem sie 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 Serverinformationscache.
- Wenn die Appliance bereits über ein Cookie für das angegebene Ziel-IP-Paar verfügt, ersetzt sie das alte Cookie durch das neue.
- Wenn das Cookie im Serverinformationscache verfügbar ist, wenn der virtuelle Server versucht, mithilfe derselben SNIP-Adresse erneut eine Verbindung zu demselben Backend-Server herzustellen, kombiniert die Appliance die Daten im SYN-Paket mit dem Cookie und sendet sie 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 NetScaler-Appliance das Datenpaket sofort erneut, nachdem das SYN-Segment und die TCP-Optionen aus dem ursprünglichen Paket entfernt wurden.
Konfiguration von TCP Fast Open
Um die Funktion TCP 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 den Sicherheitsanforderungen für dieses Profil entspricht.
So aktivieren oder deaktivieren Sie TFO mithilfe der Befehlszeile
Geben Sie in der Befehlszeile einen der folgenden Befehle ein, um TFO in einem neuen oder vorhandenen Profil zu aktivieren oder zu deaktivieren.
Hinweis: Der Standardwert ist DISABLED.
add tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
set tcpprofile <TCP Profile Name> - tcpFastOpen ENABLED | DISABLED
unset tcpprofile <TCP Profile Name> - tcpFastOpen
<!--NeedCopy-->
Beispiele:
füge tcpprofile Profile1 hinzu − tcpFastOpen Set tcpprofile Profile1 − tcpFastOpen aktiviert unset tcpprofile Profile1 − tcpFastOpen
So legen Sie den Timeout-Wert für das TCP-FastOpen-Cookie mithilfe der Befehlszeilenschnittstelle fest
Geben Sie in der Befehlszeile Folgendes ein:
set tcpparam –tcpfastOpenCookieTimeout <Timeout Value>
<!--NeedCopy-->
Beispiel:
set tcpprofile –tcpfastOpenCookieTimeout 30secs
<!--NeedCopy-->
So konfigurieren Sie das TCP Fast Open mithilfe der GUI
- Navigieren Sie zu Konfiguration > System > Profile > und klicken Sie dann auf Bearbeiten, um ein TCP-Profil zu ändern.
- Markieren 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 mithilfe der GUI
Navigieren Sie zu Konfiguration > System > Einstellungen > TCP-Parameter ändern und dann zur Seite “ TCP-Parameter konfigurieren”, um den Timeout-Wert für das TCP-Fast-Open-Cookie festzulegen.
TCP-Hystart
Ein neuer TCP-Profilparameter, hystart, aktiviert den Hystart-Algorithmus, bei dem es sich um einen langsamen Start-Algorithmus handelt, der dynamisch einen sicheren Punkt für die Beendigung bestimmt (ssthresh). Es ermöglicht einen Übergang zur Vermeidung von Engpässen ohne starke Paketverluste. Dieser neue Parameter ist standardmäßig deaktiviert.
Wenn ein Stau erkannt wird, geht Hystart in eine Phase zur Vermeidung von Staus über. Wenn Sie es aktivieren, erhalten Sie einen besseren Durchsatz in Hochgeschwindigkeitsnetzwerken mit hohem Paketverlust. Dieser Algorithmus trägt dazu bei, bei der Verarbeitung von Transaktionen eine nahezu maximale Bandbreite aufrechtzuerhalten. Es kann daher den Durchsatz verbessern.
TCP-Hystart konfigurieren
Um die Hystart-Funktion zu verwenden, aktivieren Sie die Option Cubic Hystart im entsprechenden TCP-Profil.
So konfigurieren Sie Hystart mithilfe der Befehlszeilenschnittstelle (CLI)
Geben Sie an der Befehlszeile 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-Support mithilfe 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 Flusskontrollen.
Richtlinienbasierte TCP-Profilauswahl
Der Netzwerkverkehr ist heute vielfältiger und bandbreitenintensiver als je zuvor. Angesichts des erhöhten Datenverkehrs ist der Effekt, den Quality of Service (QoS) auf die TCP-Leistung hat, erheblich. Um die QoS zu verbessern, können Sie jetzt AppQoE-Richtlinien mit verschiedenen TCP-Profilen für verschiedene Klassen von Netzwerkverkehr konfigurieren. Die AppQoE-Richtlinie klassifiziert den Datenverkehr eines virtuellen Servers, um ein TCP-Profil zuzuordnen, das für einen bestimmten Verkehrstyp wie 3G, 4G, LAN oder WAN optimiert ist.
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.
Konfiguration der richtlinienbasierten TCP-Profilauswahl
Die Konfiguration der richtlinienbasierten TCP-Profilauswahl umfasst die folgenden Aufgaben:
- AppQoE aktivieren. Bevor Sie die TCP-Profilfunktion konfigurieren, müssen Sie die AppQoE-Funktion aktivieren.
- AppQoE-Aktion wird hinzugefügt. Nachdem Sie die AppQoE-Funktion aktiviert haben, konfigurieren Sie eine AppQoE-Aktion mit einem TCP-Profil.
- Konfiguration der AppQoE-basierten TCP-Profilauswahl. Um die TCP-Profilauswahl für verschiedene Verkehrsklassen zu implementieren, müssen Sie AppQoE-Richtlinien konfigurieren, anhand derer Ihre NetScaler-Appliance die Verbindungen unterscheiden und die richtige AppQoE-Aktion an jede Richtlinie binden kann.
- Bindung 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
Um AppQOE mithilfe der Befehlszeilenschnittstelle zu aktivieren:
Geben Sie an der Befehlszeile die folgenden Befehle ein, um die Funktion zu aktivieren, und überprüfen Sie, ob sie aktiviert ist:
enable ns feature appqoe
show ns feature
<!--NeedCopy-->
Um ein TCP-Profil zu binden, während Sie eine AppQoE-Aktion mithilfe der Befehlszeilenschnittstelle erstellen
Geben Sie an der Befehlszeile 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 mithilfe der Befehlszeilenschnittstelle
Geben Sie in der Befehlszeile Folgendes ein:
add appqoe policy <name> -rule <expression> -action <string>
<!--NeedCopy-->
Um eine AppQoE-Richtlinie mithilfe der Befehlszeilenschnittstelle an virtuelle Server für Load Balancing, Cache-Umleitung oder Content Switching zu binden
Geben Sie in der Befehlszeile 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-->
Konfiguration der richtlinienbasierten TCP-Profilerstellung mithilfe der GUI
Um AppQOE mithilfe der GUI zu aktivieren
- 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 mithilfe der GUI
- Navigieren Sie zu App-Expert > AppQoE > Actions.
- 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 AppQoE-Aktion konfigurieren Werte für die Parameter ein, oder wählen Sie sie aus. Der Inhalt des Dialogfelds entspricht den unter ““Parameter für die Konfiguration der AppQoE-Aktion” beschriebenen Parametern wie folgt (ein Sternchen gibt einen erforderlichen Parameter an):
- Name−Name
- Action type−respondWith
- Priorität − Priorität
- Policy Queue Depth−polqDepth
- Queue Depth−priqDepth
- DOS Action−dosAction
- Klicken Sie auf Erstellen.
So binden Sie die AppQoE-Richtlinie mithilfe 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.
- Gehen Sie im Schieberegler Richtlinien wie folgt vor:
- Wählen Sie in der Dropdownliste einen Richtlinientyp als AppQoE aus.
- Wählen Sie einen Verkehrstyp aus der Dropdownliste aus.
- Gehen Sie im Abschnitt Richtlinienbindung wie folgt vor:
- Klicken Sie auf Neu, um eine neue AppQoE-Richtlinie zu erstellen.
- Klicken Sie auf Existing Policy, 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 SACK-Mechanismus (Selective Acknowledgement) in Kombination mit einer selektiven Wiederholungsrichtlinie diese Einschränkung. Für jedes eingehende Paket, das nicht in der richtigen Reihenfolge ist, müssen Sie einen SACK-Block generieren.
Wenn das Paket, das nicht in der Reihenfolge ist, in den Queue-Block für die Reassemblierung passt, fügen Sie die Paketinformationen in den Block ein und legen Sie die vollständigen Blockinformationen auf SACK-0 fest. Wenn ein Paket nicht in der richtigen Reihenfolge in den Zusammenbaublock passt, senden Sie das Paket als SACK-0 und wiederholen Sie die früheren SACK-Blöcke. Wenn ein Paket nicht in der richtigen Reihenfolge ein Duplikat ist und die Paketinformation auf SACK-0 gesetzt ist, dann D-Sack den Block.
Hinweis: Ein Paket wird als D-SACK betrachtet, wenn es sich um ein bestätigtes Paket oder um ein fehlerhaftes Paket handelt, das bereits empfangen wurde.
Kunde Reneging
Eine NetScaler-Appliance kann Client-Renegings während einer SACK-basierten Wiederherstellung verarbeiten.
Die Speicherprüfungen zur Markierung des Endpunkts auf der Leiterplatte berücksichtigen nicht den gesamten verfügbaren Speicher
Wenn in einer NetScaler-Appliance der Schwellenwert für die Speichernutzung auf 75 Prozent gesetzt wird, anstatt den gesamten verfügbaren Speicher zu nutzen, führt dies dazu, dass neue TCP-Verbindungen die TCP-Optimierung Bypass.
Unnötige Neuübertragungen aufgrund fehlender SACK-Blöcke
Wenn Sie in einem Modus ohne Endpunkt DUPACKS senden und SACK-Blöcke für einige Pakete fehlen, die nicht in der richtigen Reihenfolge sind, werden zusätzliche Neuübertragungen vom Server ausgelöst.
SNMP für die Anzahl der Verbindungen hat die Optimierung aufgrund von Überlastung umgangen
Die folgenden SNMP-IDs wurden einer NetScaler-Appliance hinzugefügt, um die Anzahl der Verbindungen zu verfolgen, bei denen die TCP-Optimierung aufgrund von Überlastung umgangen wurde.
- 1.3.6.1.4.1.5951.4.1.1.46.13 (TCP-Optimierung aktiviert). Um die Gesamtzahl der mit der TCP-Optimierung aktivierten Verbindungen zu verfolgen.
- 1.3.6.1.4.1.5951.4.1.1.46.132 (tcpOptimizationBypassed). Um die Gesamtzahl der Verbindungen zu verfolgen, wurde die TCP-Optimierung umgangen.
Dynamischer Empfangspuffer
Um die TCP-Leistung zu maximieren, kann eine NetScaler Appliance nun die Größe des TCP-Empfangspuffers dynamisch anpassen.
In diesem Artikel
- Strategien zur Staukontrolle
- NIL-Algorithmus
- PRR-Algorithmus (Proportional Rate Recovery)
- Schnelles TCP-Öffnen (TFO)
- TCP-Hystart
- Optimierungstechniken
- Richtlinienbasierte TCP-Profilauswahl
- SACK-Blockgenerierung
- Kunde Reneging
- Die Speicherprüfungen zur Markierung des Endpunkts auf der Leiterplatte berücksichtigen nicht den gesamten verfügbaren Speicher
- Unnötige Neuübertragungen aufgrund fehlender SACK-Blöcke
- SNMP für die Anzahl der Verbindungen hat die Optimierung aufgrund von Überlastung umgangen