TCP slaptasis ginklas: tinklo srauto valdymas ir tinklo perkrovos valdymas

TCP patikimumo transportas
Mes visi esame susipažinę su TCP protokolu kaip patikimu transporto protokolu, tačiau kaip jis užtikrina transporto patikimumą?

Norint pasiekti patikimą perdavimą, reikia atsižvelgti į daugybę veiksnių, tokių kaip duomenų sugadinimas, nuostoliai, dubliavimasis ir netinkamu šukių tvarka. Jei šių problemų negalima išspręsti, negalima pasiekti patikimo perdavimo.

Todėl TCP naudoja tokius mechanizmus kaip sekos numeris, patvirtinimo atsakymas, pakartotinio valdymo, ryšio valdymas ir lango valdymas, kad būtų pasiekta patikimas perdavimas.

Šiame darbe sutelksime dėmesį į stumdomąjį langą, TCP srauto valdymą ir spūsčių valdymą. Retransliavimo mechanizmas kitame skyriuje aprašytas atskirai.

Tinklo srauto valdymas
Tinklo srauto valdymas arba žinomas kaip tinklo srauto valdymas iš tikrųjų yra subtilių gamintojų ir vartotojų santykių pasireiškimas. Tikriausiai jūs susidūrėte su šiuo scenarijumi daug darbe ar interviu. Jei gamintojo galimybės gaminti žymiai viršija vartotojo galimybes vartoti, tai sukels eilę neribotą laiką. Rimtesniu atveju galite žinoti, kad kai „RabbitMQ“ pranešimai kaupiasi per daug, tai gali sukelti viso MQ serverio našumo blogėjimą. Tas pats pasakytina apie TCP; Jei jie bus nepažymėti, į tinklą bus įdėta per daug pranešimų, o vartotojai bus viršiję jų pajėgumą, o gamintojai ir toliau siųs dublikatus pranešimus, o tai turės didelę įtaką tinklo veikimui.

Siekdamas išspręsti šį reiškinį, TCP pateikia siuntėjo mechanizmą, kuris valdo duomenų, siunčiamų pagal faktinę imtuvo priėmimo pajėgumą, kuris yra žinomas kaip srauto valdymas, kiekį. Imtuvas palaiko priėmimo langą, o siuntėjas prižiūri siuntimo langą. Reikėtų pažymėti, kad šie langai yra skirti tik vienam TCP ryšiui, o ne visos jungtys dalijasi langu.

TCP teikia srauto valdymą, naudodama kintamąjį, skirtą gauti langą. Gavimo langas siuntėjui rodo, kiek vis dar yra talpyklos vietos. Siuntėjas kontroliuoja duomenų kiekį, išsiųstą pagal faktinį gavėjo priėmimo pajėgumą.

Imtuvo kompiuteris praneša siuntėjui apie duomenų, kuriuos jis gali gauti, dydį, o siuntėjas siunčia šią limitą. Ši riba yra lango dydis, prisimenate TCP antraštę? Yra priėmimo lango laukas, kuris naudojamas nurodant baitų, kuriuos imtuvas gali gauti, skaičių.

Siuntėjo pagrindinis kompiuteris periodiškai siųs lango zondo paketą, kuris naudojamas nustatyti, ar imtuvo pagrindinis kompiuteris vis dar gali priimti duomenis. Kai imtuvo buferiui gresia perpildymas, lango dydis nustatomas iki mažesnės vertės, kad būtų nurodoma siuntėjui valdyti išsiųstų duomenų kiekį.

Čia yra tinklo srauto valdymo schema:

Eismo valdymas

Tinklo perkrovos valdymas
Prieš įvesdami spūsčių valdymą, turime suprasti, kad be priėmimo lango ir lango, taip pat yra spūsčių langas, kuris daugiausia naudojamas išspręsti problemą, kokia greitis siuntėjas pradeda siųsti duomenis į priėmimo langą. Todėl perkrovos langą taip pat prižiūri TCP siuntėjas. Mums reikia algoritmo, kad nuspręstume, kiek duomenų tinka siųsti, nes per mažai ar per daug duomenų nėra idealu, taigi yra perkrovos lango koncepcija.

Ankstesniame tinklo srauto valdyme mes išvengėme, kad siuntėjas užpildė imtuvo talpyklą duomenimis, tačiau mes nežinojome, kas vyksta tinkle. Paprastai kompiuterių tinklai yra bendroje aplinkoje. Dėl to dėl kitų šeimininkų bendravimo gali būti tinklo spūstys.

Kai tinklas yra perpildytas, jei ir toliau siunčiama daugybė paketų, tai gali sukelti tokių problemų kaip vėlavimas ir paketų praradimas. Šiuo metu TCP retransliuos duomenis, tačiau retransliacija padidins tinklo naštą, todėl bus didesnis vėlavimas ir daugiau paketų nuostolių. Tai gali patekti į užburtą ciklą ir vis didėti.

Taigi TCP negali ignoruoti to, kas vyksta tinkle. Kai tinklas yra perpildytas, TCP paaukoja save sumažindama jo siunčiamų duomenų kiekį.

Todėl siūloma spūsčių valdymas, kurio tikslas - išvengti viso tinklo užpildymo siuntėjo duomenimis. Norėdami sureguliuoti siuntėjo duomenų kiekį, TCP apibrėžia sąvoką, vadinamą spūsčių langu. Spūsčių valdymo algoritmas pakoreguos spūsčių lango dydį pagal tinklo grūsčių laipsnį, kad būtų galima valdyti siuntėjo siunčiamų duomenų kiekį.

Kas yra spūsčių langas? Ką tai turi bendro su siuntimo langu?

Spūsčių langas yra valstybės kintamasis, kurį palaiko siuntėjas, kuris nustato duomenų, kuriuos siuntėjas gali išsiųsti, kiekį. Spūsčių langas keičiasi dinamiškai pagal tinklo grūsčių lygį.

Siuntimo langas sudaro lango dydį tarp siuntėjo ir imtuvo, kuris rodo duomenų kiekį, kurį imtuvas gali gauti. Spūsčių langas ir siuntimo langas yra susiję; Siuntimo langas paprastai yra lygus minimaliam perkrovai ir gaunantiems langus, tai yra, SWND = Min (CWND, RWND).

Plaukimo langas CWND keičiasi taip:

Jei tinkle nėra spūsčių, ty, neatsiranda retransliavimo laiko, perkrovos langas padidėja.

Jei tinkle yra spūsčių, spūsčių langas mažėja.

Siuntėjas nustato, ar tinklas yra perpildytas stebint, ar ACK patvirtinimo paketas yra gaunamas per nurodytą laiką. Jei siuntėjas per nurodytą laiką negauna ACK patvirtinimo paketo, manoma, kad tinklas yra perpildytas.

Be grūsčių lango, laikas aptarti TCP perkrovos valdymo algoritmą. TCP perkrovos valdymo algoritmą sudaro trys pagrindinės dalys:

Lėta pradžia:Iš pradžių CWND perkrovos langas yra palyginti mažas, o siuntėjas eksponentiškai padidina perkrovos langą, kad greitai prisitaikytų prie tinklo talpos.
Spūsčių vengimas:Po spūsčių lango viršija tam tikrą slenkstį, siuntėjas tiesiškai padidina spūsčių langą, kad sulėtintų spūsčių lango augimo greitį ir išvengtų tinklo perkrovos.
Greitas atkūrimas:Jei įvyksta spūstys, siuntėjas perpus sumažina perkrovos langą ir patenka į greito atkūrimo būseną, kad nustatytų tinklo atkūrimo vietą per gautus kopijas ACK, o po to toliau didina spūsčių langą.

Lėta pradžia
Kai nustatomas TCP ryšys, perkrovos langas CWND iš pradžių nustatomas iki minimalios MSS (maksimalaus segmento dydžio) vertės. Tokiu būdu pradinis siuntimo norma yra apie MSS/RTT baitus/sekundę. Faktinis turimas pralaidumas paprastai yra daug didesnis nei MSS/RTT, todėl TCP nori rasti optimalų siuntimo greitį, kurį galima pasiekti lėtu.

Lėto starto procese CWND perkrovos lango vertė bus inicijuota iki 1 MSS, o kiekvieną kartą, kai bus pripažintas perduodamas paketų segmentas, CWND vertė padidės vienu MSS, tai yra, CWND vertė taps 2 MSS. Po to CWND vertė dvigubai padidėja kiekvienam sėkmingam paketų segmento perdavimui ir pan. Konkretus augimo procesas parodytas šiame paveikslėlyje.

 Tinklo perkrovos valdymas

Tačiau siuntimo norma ne visada gali augti; Augimas turi baigtis kada nors. Taigi, kada padidėja siuntimo norma? Lėtai startas paprastai užbaigia siuntimo normos padidėjimą vienu iš kelių būdų:

Pirmasis būdas yra paketų praradimo atvejis lėto pradžios siuntimo proceso metu. Kai įvyksta paketo praradimas, TCP nustato siuntėjo perkrovos langą CWND iki 1 ir iš naujo paleidžia lėto starto procesą. Šiuo metu pristatoma lėto pradžios slenksčio SSTHRESH koncepcija, kurios pradinė vertė yra pusė CWND vertės, kuri sukelia paketų praradimą. T. y., Kai aptinkama spūstys, SSTHRESH vertė yra pusė lango vertės.

Antrasis būdas yra tiesiogiai koreliuoti su lėto starto slenksčio ssthresh verte. Kadangi SSTHRESH vertė yra pusė lango vertės, kai aptinkama spūstys, paketų praradimas gali atsirasti kiekvienam padvigubėti, kai CWND yra didesnis nei SSTHRESH. Todėl geriausia nustatyti CWND į „SSTHRESH“, dėl kurio TCP perjungs į grūsčių valdymo režimą ir baigs lėtą startą.

Paskutinis lėtas pradžia gali baigtis, jei aptinkami trys nereikalingi ACK, TCP atlieka greitą retransliaciją ir patenka į atkūrimo būseną. (Jei neaišku, kodėl yra trys ACK paketai, jis bus paaiškintas atskirai retransliavimo mechanizmui.)

Spūsčių vengimas
Kai TCP patenka į spūsčių valdymo būseną, CWND nustatoma kaip pusė perkrovos slenksčio SSTHRESH. Tai reiškia, kad CWND vertė negalima dvigubinti kiekvieną kartą, kai gaunamas paketų segmentas. Vietoj to, laikomasi santykinai konservatyvaus požiūrio, kurio metu CWND vertė padidėja tik viena MSS (maksimalus paketų segmento ilgis), kai bus baigta kiekviena transmisija. Pvz., Net jei bus pripažinti 10 paketų segmentų, CWND vertė padidės tik vienu MSS. Tai yra linijinis augimo modelis, jis taip pat turi viršutinę augimo ribą. Kai paketų praradimas įvyksta, CWND vertė keičiama į MSS, o SSTHRESH vertė nustatoma į pusę CWND. Arba tai taip pat sustabdys MSS augimą, kai bus gauti 3 nereikalingi ACK atsakymai. Jei po perpus sumažinus CWND vertę, vis dar gaunami trys nereikalingi ACK, SSTHRESH vertė užregistruota kaip pusė CWND vertės ir įvedama greito atsigavimo būsena.

Greitas atsigavimas
Greito atkūrimo būsenoje CWND perkrovos lango vertė padidėja po vieną MSS kiekvienam gautam ACK, tai yra, ACK, kuris neatvyksta iš eilės. Tai turi būti naudojami paketų segmentai, kurie buvo sėkmingai perduoti tinkle, kad būtų kuo labiau pagerintas perdavimo efektyvumas.

Kai ateina prarasto paketų segmento ACK, TCP sumažina CWND vertę ir tada patenka į spūsčių vengimo būseną. Tai siekia valdyti spūsčių lango dydį ir išvengti dar labiau padidinti tinklo perkrovą.

Jei laikas įvyksta po spūsčių kontrolės būsenos, tinklo būklė tampa rimtesnė, o TCP migruoja iš spūsčių vengimo būsenos į lėto starto būseną. Tokiu atveju CWND perkrovos lango vertė yra 1 MSS, maksimalus paketų segmento ilgis ir lėto starto slenksčio SSTHRESH vertė yra nustatyta puse CWND. To tikslas yra pakartotinai padidinti perkrovos lango dydį po to, kai tinklas atsigauna, kad būtų subalansuotas perdavimo greitis ir tinklo perkrovos laipsnis.

Santrauka
Kaip patikimas transporto protokolas, TCP įgyvendina patikimą transportą pagal sekos numerį, patvirtinimą, retransliavimo valdymą, ryšio valdymą ir langų valdymą. Tarp jų srauto valdymo mechanizmas kontroliuoja siuntėjo siunčiamų duomenų kiekį pagal faktinę gavėjo priėmimo pajėgumą, o tai išvengia tinklo perkrovos ir veiklos pablogėjimo problemų. Spūsčių kontrolės mechanizmas išvengia tinklo perkrovos, koreguojant siuntėjo siunčiamų duomenų kiekį. Spūsčių lango ir siuntimo lango sąvokos yra susijusios viena su kita, o duomenų kiekis siuntėjoje kontroliuojamas dinamiškai koreguojant perkrovos lango dydį. Lėta pradžia, spūsčių vengimas ir greitas atkūrimas yra trys pagrindinės TCP perkrovos valdymo algoritmo dalys, kurios sureguliuoja perkrovos lango dydį naudodamiesi skirtingomis strategijomis, kad būtų pritaikytos tinklo talpos ir spūsčių laipsnio.

Kitame skyriuje išsamiai išnagrinėsime TCP retransliavimo mechanizmą. Retransliavimo mechanizmas yra svarbi TCP dalis, norint pasiekti patikimą perdavimą. Tai užtikrina patikimą duomenų perdavimą perduodant prarastus, sugadintus ar atidėtus duomenis. Retransliavimo mechanizmo įgyvendinimo principas ir strategija bus įvesti ir išsamiai analizuoti kitame skyriuje. Sekite!


Pašto laikas: 2012 m. Vasario 24 d