TCP's Secret Weapon: Network Flow Control en Network Congestion Control

TCP betrouwbaarheidstransport
We zijn allemaal bekend met het TCP -protocol als een betrouwbaar transportprotocol, maar hoe zorgt het voor de betrouwbaarheid van transport?

Om betrouwbare overdracht te bereiken, moeten veel factoren worden overwogen, zoals gegevenscorruptie, verlies, duplicatie en buitenaardse scherven. Als deze problemen niet kunnen worden opgelost, kan betrouwbare transmissie niet worden bereikt.

Daarom maakt TCP gebruik van mechanismen zoals het sequentienummer, erkenningsantwoord, verzending, verbindingsbeheer en raambesturing om betrouwbare transmissie te bereiken.

In dit artikel zullen we ons concentreren op het glijdende venster, stroomregeling en congestiecontrole van TCP. Het hertransmissiemechanisme wordt afzonderlijk bedekt in de volgende sectie.

Netwerkstroombesturing
Netwerkstroomcontrole of bekend als netwerkverkeersleiding is eigenlijk een manifestatie van de subtiele relatie tussen producenten en consumenten. Je bent dit scenario waarschijnlijk veel tegengekomen op het werk of in interviews. Als het vermogen van de producent om te produceren de capaciteit van de consument om te consumeren sterk te overtreffen, zal de wachtrij voor onbepaalde tijd groeien. In een serieuzer geval weet u misschien dat wanneer RabbitMQ -berichten te veel opstapelen, dit de prestatiedegradatie van de gehele MQ -server kan veroorzaken. Hetzelfde geldt voor TCP; Als het niet wordt aangevinkt, worden er te veel berichten in het netwerk geplaatst en zullen de consumenten hun capaciteit hebben overschreden, terwijl de producenten dubbele berichten blijven verzenden, die de prestaties van het netwerk sterk zullen beïnvloeden.

Om dit fenomeen aan te pakken, biedt TCP een mechanisme voor de afzender om de hoeveelheid gegevens te regelen op basis van de werkelijke ontvangstcapaciteit van de ontvanger, die bekend staat als stroomcontrole. De ontvanger onderhoudt een ontvangstvenster, terwijl de afzender een verzendvenster onderhoudt. Opgemerkt moet worden dat deze vensters slechts voor een enkele TCP -verbinding zijn en niet alle verbindingen een venster delen.

TCP biedt stroomregeling met behulp van een variabele voor een ontvangstvenster. Het ontvangstvenster geeft de afzender een indicatie van hoeveel cacheruimte nog beschikbaar is. De afzender regelt de hoeveelheid gegevens die zijn verzonden volgens de werkelijke acceptatiecapaciteit van de ontvanger.

De ontvangerhost waarschuwt de afzender van de grootte van de gegevens die hij kan ontvangen en de afzender verzendt naar deze limiet. Deze limiet is de venstergrootte, weet je de TCP -header nog? Er is een ontvangstvensterveld, dat wordt gebruikt om het aantal bytes aan te geven dat de ontvanger in staat of bereid is te ontvangen.

De afzenderhost verzendt periodiek een vensterpakket, dat wordt gebruikt om te detecteren of de ontvangerhost nog steeds in staat is om gegevens te accepteren. Wanneer de buffer van de ontvanger het gevaar loopt over te stromen, wordt de venstergrootte ingesteld op een kleinere waarde om de afzender te instrueren om de hoeveelheid verzonden gegevens te regelen.

Hier is een netwerkstroombesturingsdiagram:

Verkeersregeling

Netwerkcongestiebestrijding
Voordat we congestiebestrijding introduceren, moeten we begrijpen dat naast het ontvangstvenster en het verzendvenster er ook een congestie -venster is, dat voornamelijk wordt gebruikt om het probleem op te lossen in welk percentage de afzender gegevens naar het ontvangstvenster begint te verzenden. Daarom wordt het congestie -venster ook onderhouden door de TCP -afzender. We hebben een algoritme nodig om te beslissen hoeveel gegevens passend zijn om te verzenden, omdat het verzenden van te weinig of te veel gegevens niet ideaal is, vandaar het concept van een congestie -venster.

In de vorige netwerkstroomcontrole was we de afzender die de cache van de ontvanger vulde met gegevens, maar we wisten niet wat er in het netwerk gebeurde. Meestal bevinden computernetwerken zich in een gedeelde omgeving. Als gevolg hiervan kan er netwerkcongestie zijn als gevolg van communicatie tussen andere hosts.

Wanneer het netwerk overbelast is, als een groot aantal pakketten wordt verzonden, kan dit problemen veroorzaken zoals vertraging en verlies van pakketten. Op dit punt zal TCP de gegevens opnieuw overbrengen, maar de hertransmissie zal de last op het netwerk vergroten, wat resulteert in grotere vertragingen en meer pakketverliezen. Dit kan in een vicieuze cirkel komen en steeds groter worden.

TCP kan dus niet negeren wat er op het netwerk gebeurt. Wanneer het netwerk overbelast is, offert TCP zichzelf op door de hoeveelheid gegevens die het verzendt te verminderen.

Daarom wordt congestiecontrole voorgesteld, wat bedoeld is om het hele netwerk te voorkomen met gegevens van de afzender. Om de hoeveelheid gegevens te reguleren die de afzender moet verzenden, definieert TCP een concept met de naam het congestie -venster. Het congestie -besturingsalgoritme zal de grootte van het congestie -venster aanpassen volgens de congestie graad van het netwerk, om de hoeveelheid gegevens die door de afzender is verzonden te regelen.

Wat is een congestie -venster? Wat heeft dit te maken met het verzendvenster?

Het congestie -venster is een door de afzender onderhouden statusvariabele die de hoeveelheid gegevens bepaalt die de afzender kan verzenden. Het congestie -venster verandert dynamisch volgens het congestieniveau van het netwerk.

Het verzendvenster is een overeengekomen venstergrootte tussen de afzender en ontvanger die de hoeveelheid gegevens aangeeft die de ontvanger kan ontvangen. Het congestie -venster en het verzendvenster zijn gerelateerd; Het verzendvenster is meestal gelijk aan het minimum van de congestie en het ontvangen van ramen, dat wil zeggen swnd = min (cwnd, rwnd).

Het congestie -venster CWND verandert als volgt:

Als er geen congestie in het netwerk is, dwz er geen time -out voor hertransmissie plaatsvindt, neemt het congestieverslang toe.

Als er congestie is in het netwerk, neemt het congestie -venster af.

De afzender bepaalt of het netwerk overbelast is door te observeren of het ACK -bevestigingspakket binnen de opgegeven tijdstip wordt ontvangen. Als de afzender het ACK -bevestigingspakket niet binnen de opgegeven tijd ontvangt, wordt geacht dat het netwerk overbelast is.

Naast het congestie -venster is het tijd om het TCP -algoritme voor congestiecontrole te bespreken. TCP Congestion Control -algoritme bestaat uit drie hoofdonderdelen:

Langzaam begin:Aanvankelijk is het CWND -congestiestaam relatief klein en de afzender verhoogt het congestie -venster exponentieel om zich snel aan te passen aan de capaciteit van het netwerk.
Congestie vermijding:Nadat het congestie -venster een bepaalde drempel heeft overschreden, verhoogt de afzender het congestie -venster op een lineaire manier om de groeisnelheid van het congestie -venster te vertragen en het netwerk te voorkomen.
Snel herstel:Als de congestie optreedt, heft de afzender het congestie -venster en gaat de snelle herstelstatus in om de locatie van het netwerkherstel te bepalen via de ontvangen dubbele ACK's en blijft het congestie -venster verhogen.

Langzame start
Wanneer een TCP -verbinding wordt tot stand gebracht, wordt het congestie -venster CWND in eerste instantie ingesteld op een minimale MSS (maximale segmentgrootte) waarde. Op deze manier gaat de initiële verzendsnelheid over MSS/RTT bytes/seconde. De werkelijke beschikbare bandbreedte is meestal veel groter dan MSS/RTT, dus TCP wil de optimale verzendsnelheid vinden, die kan worden bereikt door middel van slow-start.

In het langzame startproces wordt de waarde van het congestie-venster CWND geïnitialiseerd tot 1 MSS, en elke keer wordt het verzonden pakketsegment erkend, de waarde van CWND wordt verhoogd door One MSS, dat wil zeggen de waarde van CWND 2 MSS wordt. Daarna wordt de waarde van CWND verdubbeld voor elke succesvolle transmissie van een pakketsegment, enzovoort. Het specifieke groeiproces wordt weergegeven in de volgende figuur.

 Netwerkcongestiebestrijding

De verzendende snelheid kan echter niet altijd groeien; De groei moet ergens eindigen. Dus, wanneer neemt de verzendende snelheid toe? Slow-start eindigt meestal de toename van de verzendsnelheid op een van de verschillende manieren:

De eerste manier is het geval van pakketverlies tijdens het verzendproces van Slow Start. Wanneer een pakketverlies optreedt, stelt TCP het congestievenster van de afzender in op 1 en start het slow-start-proces opnieuw. Op dit punt wordt een concept van slow startdrempel sstresh geïntroduceerd, waarvan de beginwaarde de helft is van de waarde van CWND die pakketverlies genereert. Dat wil zeggen, wanneer congestie wordt gedetecteerd, is de waarde van sstresh de helft van de vensterwaarde.

De tweede manier is om direct te correleren met de waarde van de slow-start drempel sstresh. Aangezien de waarde van sstresh de helft van de vensterwaarde is wanneer de congestie wordt gedetecteerd, kan pakketverlies bij elke verdubbeling optreden wanneer CWND groter is dan sstresh. Daarom is het het beste om CWND in te stellen op Sstresh, waardoor TCP overstaat naar de congestie-regelkeuze en een eindje langzaam start.

De laatste manier waarop Slow Start kan eindigen, is dat als drie overbodige ACK's worden gedetecteerd, TCP een snelle hertransmissie uitvoert en de herstelstatus binnengaat. (Als het niet duidelijk is waarom er drie ACK -pakketten zijn, wordt het afzonderlijk uitgelegd in het hertransmissiemechanisme.)

Congestie vermijding
Wanneer TCP de congestiecontrolestatus binnengaat, is CWND ingesteld op de helft van de congestie -drempel Sstresh. Dit betekent dat de waarde van CWND niet kan worden verdubbeld telkens wanneer een pakketsegment wordt ontvangen. In plaats daarvan wordt een relatief conservatieve benadering gebruikt waarin de waarde van CWND wordt verhoogd met slechts één MSS (maximale pakkettensegmentlengte) nadat elke transmissie is voltooid. Zelfs als 10 pakketsegmenten bijvoorbeeld worden erkend, zal de waarde van CWND slechts met één MSS toenemen. Dit is een lineair groeimodel en het heeft ook een bovengrens op groei. Wanneer pakketverlies optreedt, wordt de waarde van CWND gewijzigd in een MSS en is de waarde van sstresh ingesteld op de helft van CWND. Of het zal ook de groei van MSS stoppen wanneer 3 overbodige ACK -reacties worden ontvangen. Als drie overtollige ACK's nog steeds worden ontvangen na het halveren van de waarde van CWND, wordt de waarde van Sstresh geregistreerd als de helft van de waarde van CWND en wordt de snelle herstelstatus ingevoerd.

Snel herstel
In de snelle herstelstatus wordt de waarde van het congestie -venster CWND verhoogd door één MSS voor elke ontvangen redundante ACK, dat wil zeggen ACK die niet in volgorde aankomt. Dit is om gebruik te maken van de pakketsegmenten die met succes in het netwerk zijn verzonden om de transmissie -efficiëntie zoveel mogelijk te verbeteren.

Wanneer een ACK van het verloren pakketsegment arriveert, verlaagt TCP de waarde van CWND en voert vervolgens de congestie -vermijdingsstatus in. Dit is om de grootte van het congestie -venster te regelen en de netwerkcongestie verder te vergroten.

Als een time-out optreedt na de toestand van de congestiecontrole, wordt de netwerkconditie ernstiger en migreert TCP van de congestie-vermijdingstoestand naar de langzame status. In dit geval is de waarde van het congestie-venster CWND ingesteld op 1 MSS, de maximale pakketsegmentlengte en de waarde van de slow-start drempel Sstresh is ingesteld op de helft van CWND. Het doel hiervan is om de omvang van het congestieversie opnieuw te vergroten nadat het netwerk herstelt om de transmissiesnelheid en de mate van netwerkcongestie in evenwicht te brengen.

Samenvatting
Als een betrouwbaar transportprotocol implementeert TCP betrouwbaar transport per sequentienummer, bevestiging, hertransmissiecontrole, verbindingsbeheer en vensterbesturing. Onder hen regelt het stroomcontrolemechanisme de hoeveelheid gegevens die door de afzender zijn verzonden volgens de werkelijke ontvangstcapaciteit van de ontvanger, die de problemen van netwerkcongestie en prestatiedegradatie vermijdt. Het congestiecontrolemechanisme vermijdt het optreden van netwerkcongestie door de hoeveelheid gegevens die door de afzender zijn verzonden aan te passen. De concepten van het congestie -venster en het verzenden van het venster zijn gerelateerd aan elkaar en de hoeveelheid gegevens bij de afzender wordt bestuurd door de grootte van het congestie -venster dynamisch aan te passen. Langzame start, congestie -vermijding en snel herstel zijn de drie belangrijkste onderdelen van het TCP -congestie -besturingsalgoritme, die de grootte van het congestie -venster door verschillende strategieën aanpassen om zich aan te passen aan de mate van capaciteit en congestie van het netwerk.

In de volgende sectie zullen we het hertransmissiemechanisme van TCP in detail onderzoeken. Retransmission -mechanisme is een belangrijk onderdeel van TCP om betrouwbare transmissie te bereiken. Het zorgt voor de betrouwbare overdracht van gegevens door verloren, beschadigde of vertraagde gegevens opnieuw te maken. Het implementatieprincipe en de strategie van het hertransmissiemechanisme zullen in de volgende sectie worden geïntroduceerd en in detail worden geanalyseerd. Blijf op de hoogte!


Posttijd: 24-2025