TCP Betroubaarheidsvervoer
Ons is almal vertroud met die TCP-protokol as 'n betroubare vervoerprotokol, maar hoe verseker dit die betroubaarheid van vervoer?
Om betroubare oordrag te bereik, moet baie faktore in ag geneem word, soos datakorrupsie, verlies, duplisering en skerwe wat nie in volgorde is nie. Indien hierdie probleme nie opgelos kan word nie, kan betroubare oordrag nie bereik word nie.
Daarom gebruik TCP meganismes soos volgnommer, erkenningsantwoord, herstuurbeheer, verbindingsbestuur en vensterbeheer om betroubare oordrag te verkry.
In hierdie artikel sal ons fokus op die skuifvenster, vloeibeheer en opeenhopingsbeheer van TCP. Die heruitsendingsmeganisme word afsonderlik in die volgende afdeling behandel.
Netwerkvloeibeheer
Netwerkvloeibeheer, of bekend as Netwerkverkeersbeheer, is eintlik 'n manifestasie van die subtiele verhouding tussen produsente en verbruikers. Jy het waarskynlik al baie by die werk of in onderhoude hierdie scenario teëgekom. As die produsent se kapasiteit om te produseer die verbruiker se kapasiteit aansienlik oorskry, sal dit veroorsaak dat die tou onbepaald groei. In 'n meer ernstige geval weet jy dalk dat wanneer RabbitMQ-boodskappe te veel ophoop, dit die prestasieverswakking van die hele MQ-bediener kan veroorsaak. Dieselfde geld vir TCP; as dit nie nagegaan word nie, sal te veel boodskappe in die netwerk geplaas word, en die verbruikers sal hul kapasiteit oorskry het, terwyl die produsente sal aanhou om duplikaatboodskappe te stuur, wat die prestasie van die netwerk grootliks sal beïnvloed.
Om hierdie verskynsel aan te spreek, bied TCP 'n meganisme vir die sender om die hoeveelheid data wat gestuur word te beheer gebaseer op die werklike ontvangskapasiteit van die ontvanger, wat bekend staan as vloeibeheer. Die ontvanger handhaaf 'n ontvangsvenster, terwyl die sender 'n stuurvenster handhaaf. Daar moet kennis geneem word dat hierdie vensters slegs vir 'n enkele TCP-verbinding is en nie alle verbindings deel 'n venster nie.
TCP bied vloeibeheer deur 'n veranderlike vir 'n ontvangsvenster te gebruik. Die ontvangsvenster gee die sender 'n aanduiding van hoeveel kasruimte nog beskikbaar is. Die sender beheer die hoeveelheid data wat gestuur word volgens die werklike aanvaardingskapasiteit van die ontvanger.
Die ontvanger-gasheer stel die sender in kennis van die grootte van die data wat dit kan ontvang, en die sender stuur tot hierdie limiet. Hierdie limiet is die venstergrootte, onthou jy die TCP-koptekst? Daar is 'n ontvangvensterveld wat gebruik word om die aantal grepe aan te dui wat die ontvanger in staat is of bereid is om te ontvang.
Die sender se gasheer sal periodiek 'n venster-ondersoekpakket stuur, wat gebruik word om te bepaal of die ontvanger se gasheer steeds data kan aanvaar. Wanneer die ontvanger se buffer gevaar loop om oor te loop, word die venstergrootte op 'n kleiner waarde gestel om die sender opdrag te gee om die hoeveelheid data wat gestuur word, te beheer.
Hier is 'n netwerkvloeibeheerdiagram:
Netwerkopeenhopingsbeheer
Voordat ons opeenhopingsbeheer instel, moet ons verstaan dat daar benewens die ontvangsvenster en die stuurvenster ook 'n opeenhopingsvenster is, wat hoofsaaklik gebruik word om die probleem op te los van teen watter tempo die sender data na die ontvangsvenster begin stuur. Daarom word die opeenhopingsvenster ook deur die TCP-sender in stand gehou. Ons benodig 'n algoritme om te besluit hoeveel data gepas is om te stuur, aangesien die stuur van te min of te veel data nie ideaal is nie, vandaar die konsep van 'n opeenhopingsvenster.
In die vorige netwerkvloeibeheer het ons vermy dat die sender die ontvanger se kasgeheue met data vul, maar ons het nie geweet wat in die netwerk gebeur nie. Tipies is rekenaarnetwerke in 'n gedeelde omgewing. Gevolglik kan daar netwerkopeenhoping wees as gevolg van kommunikasie tussen ander gashere.
Wanneer die netwerk oorlaai is, as 'n groot aantal pakkies steeds gestuur word, kan dit probleme soos vertraging en verlies van pakkies veroorsaak. Op hierdie stadium sal TCP die data heruitstuur, maar die heruitsending sal die las op die netwerk verhoog, wat lei tot groter vertragings en meer pakkieverliese. Dit kan in 'n bose kringloop beland en aanhou groter word.
Dus kan TCP nie ignoreer wat op die netwerk gebeur nie. Wanneer die netwerk oorlaai is, offer TCP homself op deur die hoeveelheid data wat dit stuur te verminder.
Daarom word opeenhopingsbeheer voorgestel, wat daarop gemik is om te verhoed dat die hele netwerk met data van die sender gevul word. Om die hoeveelheid data wat die sender moet stuur, te reguleer, definieer TCP 'n konsep genaamd die opeenhopingsvenster. Die opeenhopingsbeheer-algoritme sal die grootte van die opeenhopingsvenster aanpas volgens die opeenhopingsgraad van die netwerk, om sodoende die hoeveelheid data wat deur die sender gestuur word, te beheer.
Wat is 'n opeenhopingsvenster? Wat het dit met die stuurvenster te doen?
Die opeenhopingsvenster is 'n toestandsveranderlike wat deur die sender onderhou word en wat die hoeveelheid data wat die sender kan stuur, bepaal. Die opeenhopingsvenster verander dinamies volgens die opeenhopingsvlak van die netwerk.
Die Stuurvenster is 'n ooreengekome venstergrootte tussen die sender en ontvanger wat die hoeveelheid data aandui wat die ontvanger kan ontvang. Die opeenhopingsvenster en die stuurvenster is verwant; die stuurvenster is gewoonlik gelyk aan die minimum van die opeenhopings- en ontvangvensters, dit wil sê, swnd = min(cwnd, rwnd).
Die opeenhopingsvenster cwnd verander soos volg:
Indien daar geen opeenhoping in die netwerk is nie, d.w.s. geen heruitsendingstydverstryking plaasvind nie, neem die opeenhopingsvenster toe.
As daar opeenhoping in die netwerk is, verminder die opeenhopingsvenster.
Die sender bepaal of die netwerk oorlaai is deur te kyk of die ACK-erkenningspakket binne die gespesifiseerde tyd ontvang word. Indien die sender nie die ACK-erkenningspakket binne die gespesifiseerde tyd ontvang nie, word dit beskou asof die netwerk oorlaai is.
Benewens die opeenhopingsvenster, is dit tyd om die TCP-opeenhopingsbeheer-algoritme te bespreek. Die TCP-opeenhopingsbeheer-algoritme bestaan uit drie hoofdele:
Stadige begin:Aanvanklik is die cwnd-opeenhopingsvenster relatief klein, en die sender verhoog die opeenhopingsvenster eksponensieel om vinnig aan te pas by die kapasiteit van die netwerk.
Vermyding van verkeersopeenhoping:Nadat die opeenhopingsvenster 'n sekere drempel oorskry, verhoog die sender die opeenhopingsvenster lineêr om die groeikoers van die opeenhopingsvenster te vertraag en oorlading van die netwerk te vermy.
Vinnige herstel:Indien opeenhoping voorkom, halveer die sender die opeenhopingsvenster en gaan die vinnige hersteltoestand binne om die ligging van die netwerkherstel deur die ontvangde duplikaatbevestigings te bepaal, en gaan dan voort om die opeenhopingsvenster te vergroot.
Stadige Begin
Wanneer 'n TCP-verbinding tot stand gebring word, word die opeenhopingsvenster cwnd aanvanklik op 'n minimum MSS (maksimum segmentgrootte) waarde gestel. Op hierdie manier is die aanvanklike stuurspoed ongeveer MSS/RTT grepe/sekonde. Die werklike beskikbare bandwydte is gewoonlik baie groter as MSS/RTT, daarom wil TCP die optimale stuurspoed vind, wat deur middel van stadige begin bereik kan word.
In die stadige-begin-proses sal die waarde van die opeenhopingsvenster cwnd geïnisialiseer word na 1 MSS, en elke keer as die oorgedra pakkiesegment erken word, sal die waarde van cwnd met een MSS verhoog word, dit wil sê, die waarde van cwnd sal 2 MSS word. Daarna word die waarde van cwnd verdubbel vir elke suksesvolle oordrag van 'n pakkiesegment, ensovoorts. Die spesifieke groeiproses word in die volgende figuur getoon.
Die stuurtempo kan egter nie altyd groei nie; die groei moet iewers eindig. So, wanneer eindig die toename in die stuurtempo? Stadige begin beëindig tipies die toename in die stuurtempo op een van verskeie maniere:
Die eerste manier is die geval van pakkieverlies tydens die stuurproses van stadige begin. Wanneer 'n pakkieverlies plaasvind, stel TCP die sender se opeenhopingsvenster cwnd op 1 en herbegin die stadige beginproses. Op hierdie punt word 'n konsep van stadige begindrempel ssthresh bekendgestel, waarvan die aanvanklike waarde die helfte van die waarde van cwnd is wat pakkieverlies genereer. Dit wil sê, wanneer opeenhoping bespeur word, is die waarde van ssthresh die helfte van die vensterwaarde.
Die tweede manier is om direk te korreleer met die waarde van die stadige begin-drempel ssthresh. Aangesien die waarde van ssthresh die helfte van die vensterwaarde is wanneer opeenhoping bespeur word, kan pakkieverlies met elke verdubbeling voorkom wanneer cwnd groter is as ssthresh. Daarom is dit die beste om cwnd op ssthresh te stel, wat sal veroorsaak dat TCP na opeenhopingsbeheermodus oorskakel en stadige begin beëindig.
Die laaste manier waarop stadige begin kan eindig, is as drie oorbodige ACK-pakkette opgespoor word, TCP voer 'n vinnige heruitsending uit en gaan die hersteltoestand binne. (As dit nie duidelik is waarom daar drie ACK-pakkette is nie, sal dit afsonderlik in die heruitsendingsmeganisme verduidelik word.)
Vermyding van opeenhoping
Wanneer TCP die opeenhopingsbeheertoestand betree, word cwnd op die helfte van die opeenhopingsdrempel ssthresh gestel. Dit beteken dat die waarde van cwnd nie elke keer as 'n pakkiesegment ontvang word, verdubbel kan word nie. In plaas daarvan word 'n relatief konserwatiewe benadering gevolg waarin die waarde van cwnd met slegs een MSS (maksimum pakkiesegmentlengte) verhoog word nadat elke oordrag voltooi is. Byvoorbeeld, selfs al word 10 pakkiesegmente erken, sal die waarde van cwnd slegs met een MSS toeneem. Dit is 'n lineêre groeimodel en dit het ook 'n boonste grens op groei. Wanneer pakkieverlies plaasvind, word die waarde van cwnd na 'n MSS verander, en die waarde van ssthresh word op die helfte van cwnd gestel. Of dit sal ook die groei van MSS stop wanneer 3 oorbodige ACK-antwoorde ontvang word. As drie oorbodige ACK's steeds ontvang word nadat die waarde van cwnd gehalveer is, word die waarde van ssthresh as die helfte van die waarde van cwnd aangeteken en word die vinnige hersteltoestand betree.
Vinnige herstel
In die Vinnige Herstel-toestand word die waarde van die opeenhopingsvenster cwnd met een MSS verhoog vir elke ontvangde oorbodige ACK, dit wil sê, ACK wat nie in volgorde aankom nie. Dit is om gebruik te maak van die pakkiesegmente wat suksesvol in die netwerk oorgedra is om die oordragdoeltreffendheid soveel as moontlik te verbeter.
Wanneer 'n ACK van die verlore pakkiesegment arriveer, verminder TCP die waarde van cwnd en gaan dan die toestand van opeenhopingvermyding oor. Dit is om die grootte van die opeenhopingsvenster te beheer en te verhoed dat die netwerkopeenhoping verder toeneem.
Indien 'n tydsbeperking plaasvind na die opeenhopingsbeheertoestand, word die netwerktoestand ernstiger en migreer TCP van die opeenhopingsvermydingstoestand na die stadige begintoestand. In hierdie geval word die waarde van die opeenhopingsvenster cwnd op 1 MSS gestel, die maksimum pakkiesegmentlengte, en die waarde van die stadige begindrempel ssthresh word op die helfte van cwnd gestel. Die doel hiervan is om die grootte van die opeenhopingsvenster geleidelik te verhoog nadat die netwerk herstel het om die oordragspoed en die mate van netwerkopeenhoping te balanseer.
Opsomming
As 'n betroubare vervoerprotokol implementeer TCP betroubare vervoer deur volgnommer, erkenning, heruitsendingbeheer, verbindingsbestuur en vensterbeheer. Onder hulle beheer die vloeibeheermeganisme die hoeveelheid data wat deur die sender gestuur word volgens die werklike ontvangskapasiteit van die ontvanger, wat die probleme van netwerkopeenhoping en prestasie-agteruitgang vermy. Die opeenhopingsbeheermeganisme vermy die voorkoms van netwerkopeenhoping deur die hoeveelheid data wat deur die sender gestuur word, aan te pas. Die konsepte van opeenhopingsvenster en stuurvenster hou met mekaar verband, en die hoeveelheid data by die sender word beheer deur die grootte van die opeenhopingsvenster dinamies aan te pas. Stadige begin, opeenhopingsvermyding en vinnige herstel is die drie hoofdele van die TCP-opeenhopingsbeheeralgoritme, wat die grootte van die opeenhopingsvenster deur verskillende strategieë aanpas om aan te pas by die kapasiteit en opeenhopingsgraad van die netwerk.
In die volgende afdeling sal ons TCP se heruitsendingsmeganisme in detail ondersoek. Die heruitsendingsmeganisme is 'n belangrike deel van TCP om betroubare oordrag te bewerkstellig. Dit verseker die betroubare oordrag van data deur verlore, korrupte of vertraagde data weer oor te dra. Die implementeringsbeginsel en strategie van die heruitsendingsmeganisme sal in die volgende afdeling in detail bekendgestel en geanaliseer word. Bly ingeskakel!
Plasingstyd: 24 Februarie 2025