Die Geheimwaffe von TCP: Netzwerkflusskontrolle und Netzwerküberlastungskontrolle

TCP -Zuverlässigkeit Transport
Wir sind alle mit dem TCP -Protokoll als zuverlässiges Transportprotokoll vertraut, aber wie sorgt es für die Zuverlässigkeit des Transports?

Um eine zuverlässige Übertragung zu erreichen, müssen viele Faktoren berücksichtigt werden, wie z. B. Datenversorgung, Verlust, Duplizierung und Scherben außerhalb der Ordnung. Wenn diese Probleme nicht gelöst werden können, kann eine zuverlässige Übertragung nicht erreicht werden.

Daher verwendet TCP Mechanismen wie Sequenznummer, Bestätigungsantwort, Wiederversenden der Steuerung, Verbindungsmanagement und Fensterregelung, um eine zuverlässige Übertragung zu erreichen.

In diesem Artikel konzentrieren wir uns auf das Schiebenfenster, die Durchflussregelung und die Überlastungskontrolle von TCP. Der Nachmittagsmechanismus wird im nächsten Abschnitt getrennt abgedeckt.

Netzwerkflussregelung
Netzwerkflussregelung oder als Netzwerkverkehrskontrolle ist tatsächlich eine Manifestation der subtilen Beziehung zwischen Produzenten und Verbrauchern. Sie haben wahrscheinlich viel auf dieses Szenario bei der Arbeit oder in Interviews gestoßen. Wenn die Fähigkeit des Herstellers, die Verbrauchskapazität des Verbrauchers zu produzieren, erheblich überschreitet, wird die Warteschlange auf unbestimmte Zeit wachsen. In einem schwerwiegenderen Fall wissen Sie möglicherweise, dass sich Rabbitmq -Nachrichten zu stark stapeln können, wenn der gesamte MQ -Server die Leistungsverschlechterung verursacht. Gleiches gilt für TCP; Wenn sie nicht überprüft werden, werden zu viele Nachrichten in das Netzwerk eingereicht, und die Verbraucher haben ihre Kapazität überschritten, während die Hersteller weiterhin doppelte Nachrichten senden, was die Leistung des Netzwerks stark beeinflusst.

Um dieses Phänomen zu beheben, stellt TCP dem Absender einen Mechanismus zur Verfügung, mit dem die Datenmenge basierend auf der tatsächlichen Empfangskapazität des Empfängers, die als Flusskontrolle bezeichnet wird, gesendet wird. Der Empfänger unterhält ein Empfangsfenster, während der Absender ein Sendfenster verwaltet. Es ist zu beachten, dass diese Fenster nur für eine einzelne TCP -Verbindung gelten und nicht alle Verbindungen ein Fenster teilen.

TCP liefert eine Flusssteuerung, indem eine Variable für ein Empfangsfenster verwendet wird. Das Empfangsfenster gibt dem Absender einen Hinweis darauf, wie viel Cache -Speicherplatz noch verfügbar ist. Der Absender steuert die Datenmenge gemäß der tatsächlichen Akzeptanzkapazität des Empfängers.

Der Empfängerhost benachrichtigt den Absender über die Größe der von ihm empfangenen Daten, und der Absender sendet an diese Grenze. Diese Grenze ist die Fenstergröße, erinnere dich an den TCP -Header? Es gibt ein Empfangsfensterfeld, mit dem die Anzahl der Bytes angezeigt wird, die der Empfänger in der Lage oder bereit ist zu empfangen.

Der Absenderhost sendet regelmäßig ein Fenster -Sondenpaket, mit dem festgestellt wird, ob der Empfängerhost noch Daten akzeptieren kann. Wenn der Puffer des Empfängers in Gefahr des Überflusses in Gefahr ist, ist die Fenstergröße auf einen kleineren Wert eingestellt, um den Absender zu unterweisen, die Datenmenge zu steuern.

Hier ist ein Netzwerkflussregelungsdiagramm:

Verkehrskontrolle

Netzwerkerkontrolle
Bevor wir die Überlastungsregelung einführen, müssen wir verstehen, dass zusätzlich zum Empfangsfenster und des Send -Fensters auch ein Überlastungsfenster vorhanden ist, das hauptsächlich zur Lösung des Problems verwendet wird, in welcher Rate der Absender anfängt, Daten an das Empfangsfenster zu senden. Daher wird das Überlastungsfenster auch vom TCP -Absender aufrechterhalten. Wir benötigen einen Algorithmus, um zu entscheiden, wie viel Daten angemessen sind, da das Senden von zu wenig oder zu viel Daten nicht ideal ist, daher das Konzept eines Überlastungsfensters.

In der vorherigen Netzwerkflusssteuerung hat wir vermieden, dass der Absender den Cache des Empfängers mit Daten füllte, aber wir wussten nicht, was im Netzwerk geschah. In der Regel befinden sich Computernetzwerke in einer gemeinsamen Umgebung. Infolgedessen kann es aufgrund der Kommunikation zwischen anderen Hosts eine Netzwerküberlastung geben.

Wenn das Netzwerk überlastet ist und eine große Anzahl von Paketen weiterhin gesendet wird, kann dies zu Problemen wie Verzögerung und Verlust von Paketen führen. Zu diesem Zeitpunkt wird TCP die Daten übertragen, die Übertragung erhöht jedoch die Belastung des Netzwerks, was zu größeren Verzögerungen und mehr Paketverlusten führt. Dies kann in einen Teufelskreis gelangen und immer größer werden.

Daher kann TCP nicht ignorieren, was im Netzwerk passiert. Wenn das Netzwerk überlastet ist, opfert sich TCP durch die Reduzierung der Datenmenge, die es sendet.

Daher wird eine Überlastungskontrolle vorgeschlagen, die das Füllen des gesamten Netzwerks mit Daten vom Absender vermeiden soll. Um die Datenmenge zu regulieren, die der Absender senden sollte, definiert TCP ein Konzept, das als Überlastungsfenster bezeichnet wird. Der Algorithmus zur Überlastungsregelung wird die Größe des Stauungsfensters entsprechend dem Überlastungsgrad des Netzwerks anpassen, um die vom Absender gesendete Datenmenge zu kontrollieren.

Was ist ein Überlastungsfenster? Was hat das mit dem Send -Fenster zu tun?

Das Überlastungsfenster ist eine vom Absender verwaltete Zustandsvariable, die die Datenmenge bestimmt, die der Absender senden kann. Das Überlastungsfenster ändert sich dynamisch entsprechend der Überlastung des Netzwerks.

Das Sendungsfenster ist eine vereinbarte Fenstergröße zwischen dem Absender und dem Empfänger, der die Datenmenge angibt, die der Empfänger empfangen kann. Das Überlastungsfenster und das Sendungsfenster sind verwandt; Das Sendungsfenster entspricht normalerweise dem Minimum der Überlastung und der Empfangsfenster, dh swnd = min (cwnd, rwnd).

Das Stauungsfenster ändert sich wie folgt:

Wenn im Netzwerk keine Überlastung vorliegt, dh keine Zeitüberschreitung auftritt, nimmt das Überlastungsfenster zu.

Wenn im Netzwerk eine Überlastung vorliegt, nimmt das Überlastungsfenster ab.

Der Absender stellt fest, ob das Netzwerk überlastet ist, indem er feststellt, ob das ACK -Bestätigungspaket innerhalb der angegebenen Zeit empfangen wird. Wenn der Absender das ACK -Bestätigungspaket innerhalb der angegebenen Zeit nicht erhält, wird davon ausgegangen, dass das Netzwerk überlastet ist.

Zusätzlich zum Überlastungsfenster ist es an der Zeit, den TCP -Verbrauchskontrollalgorithmus zu diskutieren. Der TCP -Algorithmus zur Steuerung des Staus besteht aus drei Hauptteilen:

Langsamer Start:Zunächst ist das CWND -Überlastungsfenster relativ gering, und der Absender erhöht das Überlastungsfenster exponentiell, um sich schnell an die Kapazität des Netzwerks anzupassen.
Überlastungsvermeidung:Nachdem das Überlastungsfenster einen bestimmten Schwellenwert überschreitet, erhöht der Absender das Überlastungsfenster linear, um die Wachstumsrate des Überlastungsfensters zu verlangsamen und das Überladen des Netzwerks zu vermeiden.
Schnelle Genesung:Wenn eine Überlastung auftritt, hält der Absender das Überlastungsfenster und tritt in den schnellen Wiederherstellungszustand ein, um den Standort der Netzwerkwiederherstellung über die empfangenen doppelten ACKs zu bestimmen, und erhöht dann das Stauungsfenster weiter.

Langsamer Start
Wenn eine TCP -Verbindung hergestellt wird, wird das Stauungsfenster CWND zunächst auf einen minimalen MSS -Wert (maximale Segmentgröße) eingestellt. Auf diese Weise betrifft der anfängliche Sendungsrate MSS/RTT -Bytes/Sekunde. Die tatsächliche verfügbare Bandbreite ist normalerweise viel größer als MSS/RTT, sodass TCP die optimale Sendungsrate finden möchte, die durch langsames Start erreicht werden kann.

Im langsamen Prozess wird der Wert des CWND des Überlastungsfensters auf 1 MSS initialisiert, und jedes Mal, wenn das übertragene Paketsegment anerkannt wird, wird der Wert von CWND durch ein MSS erhöht, dh der Wert von CWND wird 2 MSS. Danach wird der Wert von CWND für jede erfolgreiche Übertragung eines Paketsegments und so weiter verdoppelt. Der spezifische Wachstumsprozess ist in der folgenden Abbildung dargestellt.

 Netzwerkerkontrolle

Die Sendungsrate kann jedoch nicht immer wachsen. Das Wachstum muss irgendwann enden. Wann nimmt die Sendungsrate zu? Slow-Start beendet in der Regel die Erhöhung der Sendungsrate auf verschiedene Arten:

Der erste Weg ist der Fall des Paketverlusts während des Sendungsprozesses des langsamen Starts. Wenn ein Paketverlust auftritt, stellt TCP das Staus des Störungsfensters des Absenders auf 1 fest und startet den Slow-Start-Prozess neu. Zu diesem Zeitpunkt wird ein Konzept der langsamen Startschwelle SSThresh eingeführt, deren anfänglicher Wert die Hälfte des Wertes von CWND beträgt, der Paketverlust erzeugt. Das heißt, wenn die Stauung erkannt wird, beträgt der Wert von SSThresh die Hälfte des Fensterwerts.

Der zweite Weg besteht darin, direkt mit dem Wert des SSThresh-Schwellenwerts mit langsamem Start zu korrelieren. Da der Wert von SSThresh die Hälfte des Fensterwerts bei der Erkennung von Überlastungen beträgt, kann der Paketverlust auftreten, wobei die Verdoppelung bei CWND größer als SSThresh ist. Daher ist es am besten, CWND auf SSThresh zu setzen, wodurch TCP in den Stauungssteuermodus umgestellt und langsames Start beendet wird.

Der letzte Weg, den langsame Start enden kann, ist, wenn drei redundante ACKs festgestellt werden, TCP führt eine schnelle Wiedervermittlung durch und tritt in den Wiederherstellungszustand ein. (Wenn nicht klar ist, warum es drei ACK -Pakete gibt, wird es im Returnmission -Mechanismus getrennt erklärt.)

Überlastungsvermeidung
Wenn TCP in den Stauungsstatus eintritt, wird CWND auf die Hälfte der SSThresh -Stau -Schwelle eingestellt. Dies bedeutet, dass der Wert von CWND nicht jedes Mal verdoppelt werden kann, wenn ein Paketsegment empfangen wird. Stattdessen wird ein relativ konservativer Ansatz angewendet, bei dem der Wert von CWND nach Abschluss der Übertragung nur um einen MSS (maximale Paketsegmentlänge) erhöht wird. Selbst wenn 10 Paketsegmente anerkannt werden, erhöht sich der Wert von CWND nur um ein MSS. Dies ist ein lineares Wachstumsmodell und hat auch eine Obergrenze für das Wachstum. Wenn Paketverlust auftritt, wird der Wert von CWND in einen MSS geändert und der Wert von SSThresh auf die Hälfte des CWND eingestellt. Oder es wird auch das Wachstum von MSS stoppen, wenn 3 redundante ACK -Antworten erhalten werden. Wenn nach der Halbierung des Wertes von CWND noch drei redundante ACKs erhalten werden, wird der Wert von SSThresh als die Hälfte des Werts von CWND erfasst und der schnelle Wiederherstellungszustand eingegeben.

Schnelle Genesung
Im schnellen Wiederherstellungszustand wird der Wert des Stauungsfensters CWND für jeden empfangenen redundanten ACK durch einen MSS erhöht, dh ACK, das nicht nacheinander ankommt. Dies dient dazu, die Paketsegmente zu nutzen, die im Netzwerk erfolgreich übertragen wurden, um die Übertragungseffizienz so weit wie möglich zu verbessern.

Wenn ein ACK des verlorenen Paketsegments eintrifft, verringert TCP den Wert von CWND und tritt dann in den Stauungsvermeidungszustand ein. Dies soll die Größe des Überlastungsfensters kontrollieren und die Verstärkung des Netzwerks weiter erhöhen.

Wenn nach dem Überlastungsstatus eine Zeitüberschreitung auftritt, wird die Netzwerkbedingung schwerwiegender und TCP wandert vom Stauvermietungszustand in den langsamen Zustand des langsamen Starts aus. In diesem Fall wird der Wert des Stauungsfensters CWND auf 1 MSS, die maximale Paketsegmentlänge und der Wert des SSThresh-Schwellenwerts mit langsamer Start festgelegt. Dies ist der Zweck, die Größe des Überlastungsfensters nach dem Netzwerk, um die Übertragungsrate und den Grad der Netzwerküberlastung auszugleichen, neu zu erhöhen.

Zusammenfassung
Als zuverlässiger Transportprotokoll implementiert TCP einen zuverlässigen Transport nach Sequenznummer, Bestätigung, Übertragungsregelung, Verbindungsmanagement und Fenstersteuerung. Unter ihnen steuert der Durchflusssteuerungsmechanismus die vom Absender gesendete Datenmenge gemäß der tatsächlichen Empfangskapazität des Empfängers, wodurch die Probleme der Netzwerküberlastung und der Leistungsverschlechterung vermieden werden. Der Überlastungskontrollmechanismus vermeidet das Auftreten der Netzwerküberlastung, indem die vom Absender gesendete Datenmenge angepasst wird. Die Konzepte des Überlastungsfensters und des Sendungsfensters hängen miteinander zusammen, und die Datenmenge am Absender wird durch dynamisch Einstellung der Größe des Verbrauchsfensters gesteuert. Langsamer Start, Überlastungsvermeidung und schnelle Erholung sind die drei Hauptteile des TCP -Stau -Control -Algorithmus, die die Größe des Überlastungsfensters durch unterschiedliche Strategien anpassen, um sich an die Kapazität und den Stauungsgrad des Netzwerks anzupassen.

Im nächsten Abschnitt untersuchen wir den TCP -Wiedervermietungsmechanismus im Detail. Der Returnmission -Mechanismus ist ein wichtiger Bestandteil von TCP, um eine zuverlässige Übertragung zu erreichen. Es gewährleistet die zuverlässige Übertragung von Daten, indem verlorene, beschädigte oder verzögerte Daten übermittelt werden. Das Implementierungsprinzip und die Strategie des Übertragungsmechanismus werden im nächsten Abschnitt ausführlich eingeführt und analysiert. Bleiben Sie dran!


Postzeit: Februar-24-2025