It geheime wapen fan TCP: Netwurkstreamkontrôle en Netwurkoerlêstkontrôle

TCP Betrouberensferfier
Wy binne allegear bekend mei it TCP-protokol as in betrouber transportprotokol, mar hoe soarget it foar de betrouberens fan transport?

Om betroubere oerdracht te berikken, moatte in protte faktoaren yn oerweging nommen wurde, lykas gegevenskorrupsje, ferlies, duplikaasje en shards dy't net yn oarder binne. As dizze problemen net oplost wurde kinne, kin betroubere oerdracht net berikt wurde.

Dêrom brûkt TCP meganismen lykas sekwinsjenûmer, befêstigingsantwurd, opnij ferstjoerekontrôle, ferbiningsbehear en finsterkontrôle om betroubere oerdracht te berikken.

Yn dit artikel sille wy ús rjochtsje op it skuiffinster, streamkontrôle en oerlêstkontrôle fan TCP. It werútstjoermeganisme wurdt apart behannele yn 'e folgjende seksje.

Netwurkstreamkontrôle
Netwurkstreamkontrôle of bekend as Netwurkferkearskontrôle is eins in manifestaasje fan 'e subtile relaasje tusken produsinten en konsuminten. Jo binne dit senario wierskynlik in protte tsjinkommen op it wurk of yn ynterviews. As de kapasiteit fan 'e produsint om te produsearjen folle grutter is as de kapasiteit fan 'e konsumint om te konsumearjen, sil dit derfoar soargje dat de wachtrige ûnbepaald groeit. Yn in serieuzer gefal kinne jo witte dat as RabbitMQ-berjochten te folle opstapelje, dit kin liede ta prestaasjefermindering fan 'e heule MQ-tsjinner. Itselde jildt foar TCP; as it net kontrolearre wurdt, sille tefolle berjochten yn it netwurk pleatst wurde, en sille de konsuminten har kapasiteit oerslein hawwe, wylst de produsinten trochgean mei it ferstjoeren fan dûbele berjochten, wat de prestaasjes fan it netwurk sterk sil beynfloedzje.

Om dit ferskynsel oan te pakken, biedt TCP in meganisme foar de stjoerder om de hoemannichte ferstjoerde gegevens te kontrolearjen op basis fan 'e werklike ûntfangstkapasiteit fan' e ûntfanger, wat bekend is as streamkontrôle. De ûntfanger ûnderhâldt in ûntfangstfinster, wylst de stjoerder in ferstjoerfinster ûnderhâldt. It moat opmurken wurde dat dizze finsters allinich foar ien TCP-ferbining binne en net alle ferbiningen diele in finster.

TCP soarget foar streamkontrôle troch in fariabele te brûken foar in ûntfangstfinster. It ûntfangstfinster jout de stjoerder in oantsjutting fan hoefolle cache-romte der noch beskikber is. De stjoerder kontrolearret de hoemannichte gegevens dy't ferstjoerd wurdt neffens de werklike akseptaasjekapasiteit fan 'e ûntfanger.

De ûntfangerhost jout de stjoerder melding fan 'e grutte fan 'e gegevens dy't er ûntfange kin, en de stjoerder stjoert oant dizze limyt. Dizze limyt is de finstergrutte, tinksto noch oan 'e TCP-header? D'r is in ûntfangstfinsterfjild, dat brûkt wurdt om it oantal bytes oan te jaan dat de ûntfanger ûntfange kin of wol.

De stjoerderhost sil periodyk in finsterprobepakket ferstjoere, dat brûkt wurdt om te detektearjen oft de ûntfangerhost noch gegevens kin akseptearje. As de buffer fan 'e ûntfanger it gefaar hat om oer te rinnen, wurdt de finstergrutte ynsteld op in lytsere wearde om de stjoerder te ynstruearjen om de hoemannichte ferstjoerde gegevens te kontrolearjen.

Hjir is in diagram fan in netwurkstreamkontrôle:

Ferkearskontrôle

Netwurkkongestiekontrôle
Foardat wy oerlêstkontrôle yntrodusearje, moatte wy begripe dat neist it ûntfangstfinster en it ferstjoerfinster ek in oerlêstfinster is, dat benammen brûkt wurdt om it probleem op te lossen fan mei hokker taryf de stjoerder gegevens nei it ûntfangstfinster begjint te ferstjoeren. Dêrom wurdt it oerlêstfinster ek ûnderhâlden troch de TCP-stjoerder. Wy hawwe in algoritme nedich om te besluten hoefolle gegevens passend binne om te ferstjoeren, om't it ferstjoeren fan te min of te folle gegevens net ideaal is, dêrfandinne it konsept fan in oerlêstfinster.

Yn 'e foarige netwurkstreamkontrôle hawwe wy foarkommen dat de stjoerder de cache fan 'e ûntfanger mei gegevens foldie, mar wy wisten net wat der yn it netwurk barde. Typysk binne kompjûternetwurken yn in dielde omjouwing. As gefolch kin der netwurkoerlêst wêze fanwegen kommunikaasje tusken oare hosts.

As it netwurk oerlêst is, en in grut oantal pakketten trochgean te ferstjoeren, kin dit problemen feroarsaakje lykas fertraging en ferlies fan pakketten. Op dit punt sil TCP de gegevens opnij ferstjoere, mar de opnij ferstjoering sil de lêst op it netwurk ferheegje, wat resulteart yn gruttere fertragingen en mear pakketferliezen. Dit kin yn in fiseuze sirkel komme en hieltyd grutter wurde.

Sa kin TCP net negearje wat der op it netwurk bart. As it netwurk oerlêst is, offert TCP himsels op troch de hoemannichte gegevens dy't it ferstjoert te ferminderjen.

Dêrom wurdt congestiekontrôle foarsteld, dy't bedoeld is om te foarkommen dat it hiele netwurk fol wurdt mei gegevens fan 'e stjoerder. Om de hoemannichte gegevens te regeljen dy't de stjoerder ferstjoere moat, definiearret TCP in konsept dat it congestiefinster neamd wurdt. It algoritme foar congestiekontrôle sil de grutte fan it congestiefinster oanpasse neffens de mjitte fan congestie fan it netwurk, om de hoemannichte gegevens dy't troch de stjoerder ferstjoerd wurdt te kontrolearjen.

Wat is in oerlêstfinster? Wat hat dit te krijen mei it ferstjoerfinster?

It oerlêstfinster is in tastânfariabele dy't ûnderhâlden wurdt troch de stjoerder en dy't de hoemannichte gegevens bepaalt dy't de stjoerder ferstjoere kin. It oerlêstfinster feroaret dynamysk neffens it oerlêstnivo fan it netwurk.

It ferstjoerfinster is in ôfpraat finstergrutte tusken de stjoerder en ûntfanger dy't de hoemannichte gegevens oanjout dy't de ûntfanger ûntfange kin. It oerlêstfinster en it ferstjoerfinster binne relatearre; it ferstjoerfinster is meastentiids gelyk oan it minimum fan 'e oerlêst- en ûntfangende finsters, dat is, swnd = min(cwnd, rwnd).

It oerlêstfinster cwnd feroaret as folget:

As der gjin oerlêst yn it netwurk is, d.w.s. as der gjin time-out foar opnij útstjoeren optreedt, nimt it oerlêstfinster ta.

As der oerlêst yn it netwurk is, nimt it oerlêstfinster ôf.

De stjoerder bepaalt oft it netwurk oerlêst is troch te observearjen oft it ACK-befêstigingspakket binnen de oantsjutte tiid ûntfongen wurdt. As de stjoerder it ACK-befêstigingspakket net binnen de oantsjutte tiid ûntfangt, wurdt it beskôge as oerlêst fan it netwurk.

Neist it oerlêstfinster is it tiid om it TCP-oerlêstkontrôlealgoritme te besprekken. It TCP-oerlêstkontrôlealgoritme bestiet út trije haadûnderdielen:

Stadich begjin:Yn it earstoan is it congestiefinster fan 'e cwnd relatyf lyts, en de stjoerder fergruttet it congestiefinster eksponensjeel om him fluch oan te passen oan 'e kapasiteit fan it netwurk.
Ferkearsûntkoming:Nei't it oerlêstfinster in bepaalde drompel oerskriuwt, fergruttet de stjoerder it oerlêstfinster lineêr om de groeisnelheid fan it oerlêstfinster te fertragen en oerbelêsting fan it netwurk te foarkommen.
Fluch herstel:As der oerlêst optreedt, halvearret de stjoerder it oerlêstfinster en giet yn 'e snelle herstelsteat om de lokaasje fan it netwurkherstel te bepalen fia de ûntfongen dûbele akkounts, en bliuwt dan it oerlêstfinster fergrutsje.

Stadige start
As in TCP-ferbining oprjochte wurdt, wurdt it oerlêstfinster cwnd yn earste ynstânsje ynsteld op in minimale MSS-wearde (maksimale segmintgrutte). Op dizze manier is de earste ferstjoersnelheid sawat MSS/RTT bytes/sekonde. De werklike beskikbere bânbreedte is meastentiids folle grutter as MSS/RTT, dus TCP wol de optimale ferstjoersnelheid fine, dy't berikt wurde kin troch middel fan slow-start.

Yn it stadich opstartproses sil de wearde fan it oerlêstfinster cwnd yn initialisearre wurde nei 1 MSS, en elke kear as it oerdroegen pakketsegment erkend wurdt, sil de wearde fan cwnd mei ien MSS ferhege wurde, dat wol sizze, de wearde fan cwnd sil 2 MSS wurde. Dêrnei wurdt de wearde fan cwnd ferdûbele foar elke suksesfolle oerdracht fan in pakketsegment, ensafuorthinne. It spesifike groeiproses wurdt werjûn yn 'e folgjende figuer.

 Netwurkoerlêstkontrôle

De ferstjoersnelheid kin lykwols net altyd groeie; de ​​groei moat earne ophâlde. Dus, wannear hâldt de tanimming fan 'e ferstjoersnelheid op? In stadich begjin einiget de tanimming fan 'e ferstjoersnelheid typysk op ien fan ferskate manieren:

De earste manier is it gefal fan pakketferlies tidens it ferstjoerproses fan in stadich startproses. As der in pakketferlies optreedt, stelt TCP it oerlêstfinster cwnd fan 'e stjoerder yn op 1 en start it stadich startproses opnij. Op dit punt wurdt in konsept fan in stadich startdrompel ssthresh yntrodusearre, waans begjinwearde de helte is fan 'e wearde fan cwnd dy't pakketferlies genereart. Dat is, as der oerlêst wurdt ûntdutsen, is de wearde fan ssthresh de helte fan 'e finsterwearde.

De twadde manier is om direkt te korrelearjen mei de wearde fan 'e drompelwearde foar stadige start ssthresh. Om't de wearde fan ssthresh de helte is fan 'e finsterwearde as der oerlêst wurdt ûntdutsen, kin pakketferlies foarkomme by elke ferdûbeling as cwnd grutter is as ssthresh. Dêrom is it it bêste om cwnd yn te stellen op ssthresh, wat derta liedt dat TCP oerskeakelt nei de oerlêstkontrôlemodus en de stadige start einiget.

De lêste manier wêrop in trage start einigje kin is as der trije redundante ACK-pakketten ûntdutsen wurde, dan fiert TCP in rappe opnij ferstjoering út en giet de herstelstatus yn. (As it net dúdlik is wêrom't der trije ACK-pakketten binne, sil dit apart útlein wurde yn it opnij ferstjoeringsmeganisme.)

Fermogen fan files
As TCP de steat fan oerlêstkontrôle yngiet, wurdt cwnd ynsteld op de helte fan 'e oerlêstdrompel ssthresh. Dit betsjut dat de wearde fan cwnd net ferdûbele wurde kin elke kear as in pakketsegment ûntfongen wurdt. Ynstee dêrfan wurdt in relatyf konservative oanpak oannaam wêrby't de wearde fan cwnd mei mar ien MSS (maksimale pakketsegmentlingte) ferhege wurdt nei't elke oerdracht foltôge is. Bygelyks, sels as 10 pakketsegmenten erkend wurde, sil de wearde fan cwnd mar mei ien MSS tanimme. Dit is in lineêr groeimodel en it hat ek in boppeste grins foar groei. As pakketferlies optreedt, wurdt de wearde fan cwnd feroare yn in MSS, en de wearde fan ssthresh wurdt ynsteld op de helte fan cwnd. Of it sil ek de groei fan MSS stopje as 3 redundante ACK-antwurden ûntfongen wurde. As trije redundante ACK's noch ûntfongen wurde nei it halvearjen fan 'e wearde fan cwnd, wurdt de wearde fan ssthresh registrearre as de helte fan 'e wearde fan cwnd en wurdt de steat fan rappe herstel yngien.

Fluch herstel
Yn 'e Fast Recovery-steat wurdt de wearde fan it congestiefinster cwnd ferhege mei ien MSS foar elke ûntfongen redundante ACK, dat is, ACK dy't net yn folchoarder oankomt. Dit is om gebrûk te meitsjen fan 'e pakketsegminten dy't mei súkses yn it netwurk oerdroegen binne om de oerdrachtseffisjinsje safolle mooglik te ferbetterjen.

As in ACK fan it ferlerne pakketsegment oankomt, ferleget TCP de wearde fan cwnd en giet dan yn 'e steat fan it foarkommen fan oerlêst. Dit is om de grutte fan it oerlêstfinster te kontrolearjen en fierdere ferheging fan 'e netwurkoerlêst te foarkommen.

As der in time-out optreedt nei de steat fan oerlêstkontrôle, wurdt de netwurktastân serieuzer en migrearret TCP fan 'e steat fan oerlêstfoarkommen nei de steat fan stadich opstarten. Yn dit gefal wurdt de wearde fan it oerlêstfinster cwnd ynsteld op 1 MSS, de maksimale pakketsegmintlingte, en wurdt de wearde fan 'e drompel foar stadich opstarten ssthresh ynsteld op de helte fan cwnd. It doel hjirfan is om de grutte fan it oerlêstfinster stadichoan wer te fergrutsjen nei't it netwurk herstelt is om de oerdrachtsnelheid en de mjitte fan netwurkoerlêst yn lykwicht te bringen.

Gearfetting
As in betrouber transportprotokol ymplementearret TCP betrouber transport troch folchoardernûmer, befêstiging, opnij oerdrage kontrôle, ferbiningsbehear en finsterkontrôle. Dêrûnder kontrolearret it streamkontrôlemeganisme de hoemannichte gegevens dy't troch de stjoerder ferstjoerd wurde neffens de werklike ûntfangstkapasiteit fan 'e ûntfanger, wat de problemen fan netwurkoerlêst en prestaasjefermindering foarkomt. It oerlêstkontrôlemeganisme foarkomt it foarkommen fan netwurkoerlêst troch de hoemannichte gegevens dy't troch de stjoerder ferstjoerd wurde oan te passen. De konsepten fan oerlêstfinster en ferstjoerfinster binne mei-inoar relatearre, en de hoemannichte gegevens by de stjoerder wurdt kontroleare troch de grutte fan it oerlêstfinster dynamysk oan te passen. Stadich starten, oerlêstfoarkommen en rap herstel binne de trije wichtichste ûnderdielen fan it TCP-oerlêstkontrôlealgoritme, dat de grutte fan it oerlêstfinster oanpast troch ferskate strategyen om oan te passen oan 'e kapasiteit en oerlêstgraad fan it netwurk.

Yn 'e folgjende seksje sille wy it werútstjoermeganisme fan TCP yn detail ûndersykje. It werútstjoermeganisme is in wichtich ûnderdiel fan TCP om betroubere oerdracht te berikken. It soarget foar de betroubere oerdracht fan gegevens troch ferlerne, beskeadige of fertrage gegevens opnij oer te stjoeren. It ymplemintaasjeprinsipe en de strategy fan it werútstjoermeganisme sille yn 'e folgjende seksje yn detail yntrodusearre en analysearre wurde. Bliuw op 'e hichte!


Pleatsingstiid: 24 febrewaris 2025