Lykilráðardómar TCP-tenginga netpakkamiðlara: Afhjúpaði þörfina fyrir þrefalt handaband

Uppsetning TCP-tengingar
Þegar við vöfrum vefinn, sendum tölvupóst eða spilum netleik hugsum við oft ekki um flóknu nettenginguna sem liggur að baki því. Hins vegar eru það þessi sýnilega litlu skref sem tryggja stöðug samskipti milli okkar og netþjónsins. Eitt mikilvægasta skrefið er uppsetning TCP-tengingarinnar og kjarninn í því er þríhliða handaband.

Í þessari grein verður fjallað ítarlega um meginregluna, ferlið og mikilvægi þríhliða handbandsins. Skref fyrir skref munum við útskýra hvers vegna þríhliða handbandið er nauðsynlegt, hvernig það tryggir stöðugleika og áreiðanleika tenginga og hversu mikilvægt það er fyrir gagnaflutning. Með dýpri skilningi á þríhliða handbandinu munum við öðlast betri skilning á undirliggjandi ferlum netsamskipta og skýrari mynd af áreiðanleika TCP-tenginga.

TCP þríhliða handabandsferli og stöðubreytingar
TCP er tengingarmiðuð flutningssamskiptaregla sem krefst þess að tenging sé komið á áður en gagnaflutningur hefst. Þessi tenging er gerð með þríhliða handaband.

 Þríhliða handaband í TCP

Við skulum skoða nánar TCP-pakkana sem eru sendir í hverri tengingu.

Í upphafi eru bæði biðlarinn og netþjónninn LOKAÐIR. Fyrst hlustar netþjónninn virkt á tengi og er í HLUSTA-stöðu, sem þýðir að netþjónninn verður að vera ræstur. Næst er biðlarinn tilbúinn til að byrja að opna vefsíðuna. Hann þarf að koma á tengingu við netþjóninn. Snið fyrsta tengingarpakkans er sem hér segir:

 SYN-pakki

Þegar biðlari tengist, býr hann til handahófskennda raðnúmer (client_isn) og setur það í reitinn „Raðnúmer“ í TCP hausnum. Á sama tíma setur biðlarinn SYN fánann á 1 til að gefa til kynna að sendandi pakkinn sé SYN pakki. Biðlarinn gefur til kynna að hann vilji tengjast við netþjóninn með því að senda fyrsta SYN pakkann til netþjónsins. Þessi pakki inniheldur ekki gögn á forritalaginu (þ.e. gögn sem send voru). Á þessum tímapunkti er staða biðlarans merkt sem SYN-SENT.

SYN+ACK pakki

Þegar netþjónn tekur við SYN-pakka frá notanda, frumstillir hann af handahófi sitt eigið raðnúmer (server_isn) og setur það númer í reitinn „Serial number“ í TCP-hausnum. Næst slær netþjónninn inn client_isn + 1 í reitinn „Acknowledgement number“ og stillir bæði SYN og ACK bita á 1. Að lokum sendir netþjónninn pakkann til notandans, sem inniheldur engin gögn á forritalaginu (og engin gögn fyrir netþjóninn til að senda). Á þessum tímapunkti er netþjónninn í SYN-RCVD ástandi.

ACK-pakki

Þegar viðskiptavinurinn móttekur pakkann frá þjóninum þarf hann að framkvæma eftirfarandi hagræðingar til að svara lokasvarpakkanum: Fyrst stillir viðskiptavinurinn ACK bitann í TCP hausnum á svarpakkanum á 1; Í öðru lagi slær viðskiptavinurinn inn gildið server_isn + 1 í reitinn "Staðfesta svarnúmer"; Að lokum sendir viðskiptavinurinn pakkann til þjónsins. Þessi pakki getur flutt gögn frá viðskiptavininum til þjónsins. Að þessum aðgerðum loknum fer viðskiptavinurinn í STABLISHED ástand.

Þegar netþjónninn móttekur svarpakkann frá viðskiptavininum skiptir hann einnig yfir í STABLISHED ástandið.

Eins og sjá má af ferlinu hér að ofan, þegar þríhliða handaband er framkvæmt, er þriðja handabandið leyft að flytja gögn, en fyrstu tvö handabandin ekki. Þetta er spurning sem oft er spurt í viðtölum. Þegar þríhliða handabandinu er lokið fara báðir aðilar í STAÐAÐ ástand, sem gefur til kynna að tengingunni hafi verið komið á og þá geta viðskiptavinurinn og netþjónninn byrjað að senda gögn sín á milli.

Af hverju þrisvar handabandi? Ekki tvisvar, heldur fjórum sinnum?
Algengt svar er: „Vegna þess að þríhliða handaband tryggir möguleikann á að taka á móti og senda.“ Þetta svar er rétt, en það er aðeins yfirborðsleg ástæða, ekki aðalástæðan sett fram. Hér á eftir mun ég greina ástæður þrefalds handabands út frá þremur sjónarhornum til að dýpka skilning okkar á þessu máli.

Þríhliða handaband getur á áhrifaríkan hátt komið í veg fyrir að tengingar sem hafa verið endurteknar áður hafi verið frumstilltar (aðalástæðan)
Þríhliða handaband tryggir að báðir aðilar hafi fengið áreiðanlegt upphafsraðnúmer.
Þríhliða handabandið kemur í veg fyrir sóun á auðlindum.

Ástæða 1: Forðastu sögulegar tvítekningar
Í stuttu máli er aðalástæðan fyrir þríhliða handabandinu að forðast rugling sem stafar af upphafsstillingu gamalla tvítekinna tenginga. Í flóknu netumhverfi er sending gagnapakka ekki alltaf send til áfangastaðarhýsilsins á tilgreindum tíma og gamlir gagnapakkar geta komið fyrst til áfangastaðarhýsilsins vegna netþrengsla og annarra ástæðna. Til að forðast þetta notar TCP þríhliða handaband til að koma á tengingunni.

Þríhliða handaband kemur í veg fyrir sögulegar tvítekningar

Þegar viðskiptavinur sendir marga SYN-tengingarpakka í röð, eins og í netþröng, getur eftirfarandi gerst:

1- Gömlu SYN-pakkarnir berast á þjóninn á undan nýjustu SYN-pakkunum.
2- Þjónninn mun svara SYN + ACK pakka til viðskiptavinarins eftir að hafa móttekið gamla SYN pakkann.
3- Þegar viðskiptavinurinn fær SYN + ACK pakkann, ákvarðar hann að tengingin sé söguleg tenging (raðnúmer útrunnið eða tímamörk) í samræmi við samhengið og sendir síðan RST pakkann til netþjónsins til að slíta tengingunni.

Með tvíhliða handabandstengingu er engin leið til að ákvarða hvort núverandi tenging sé söguleg tenging. Þríhliða handabandið gerir notandanum kleift að ákvarða hvort núverandi tenging sé söguleg tenging út frá samhenginu þegar hann er tilbúinn að senda þriðja pakkann:

1- Ef um söguleg tengingu er að ræða (raðnúmer útrunnið eða biðtími liðinn), þá er pakkinn sem sendur er með þriðja handabandinu RST-pakki til að rjúfa sögulegu tenginguna.
2- Ef ekki er um söguleg tengingu að ræða, þá er pakkinn sem sendur er í þriðja sinn ACK-pakki og aðilarnir tveir sem eiga í samskiptum hafa tekist að koma á tengingunni.

Þess vegna er aðalástæðan fyrir því að TCP notar þríhliða handaband að það frumstillir tenginguna til að koma í veg fyrir sögulegar tengingar.

Ástæða 2: Til að samstilla upphafsraðnúmer beggja aðila
Báðar hliðar TCP samskiptareglunnar verða að viðhalda raðnúmeri, sem er lykilatriði til að tryggja áreiðanlega sendingu. Raðnúmer gegna mikilvægu hlutverki í TCP tengingum. Þau gera eftirfarandi:

Móttakandinn getur útrýmt tvíteknum gögnum og tryggt nákvæmni gagnanna.

Móttakandinn getur tekið á móti pökkum í röð eftir raðnúmeri til að tryggja heilleika gagnanna.

● Raðnúmerið getur borið kennsl á gagnapakka sem hinn aðilinn hefur móttekið, sem gerir áreiðanlega gagnaflutning mögulegan.

Þess vegna, þegar TCP-tenging er komið á, sendir viðskiptavinurinn SYN-pakka með upphafsraðnúmerinu og krefst þess að þjónninn svari með ACK-pakka sem gefur til kynna að SYN-pakka viðskiptavinarins hafi verið móttekinn. Síðan sendir þjónninn SYN-pakkann með upphafsraðnúmerinu til viðskiptavinarins og bíður eftir að viðskiptavinurinn svari, í eitt skipti fyrir öll, til að tryggja að upphafsraðnúmerin séu áreiðanlega samstillt.

Samstilla upphafsraðnúmer beggja aðila

Þó að fjögurra hliða handaband sé einnig mögulegt til að samstilla upphafsraðnúmer beggja aðila áreiðanlega, er hægt að sameina annað og þriðja skrefið í eitt skref, sem leiðir til þriggja hliða handabands. Hins vegar geta tvö handaband aðeins tryggt að upphafsraðnúmer annars aðilans berist til hins aðilans, en það er engin trygging fyrir því að hægt sé að staðfesta upphafsraðnúmer beggja aðila. Þess vegna er þriggja hliða handaband besti kosturinn til að tryggja stöðugleika og áreiðanleika TCP-tenginga.

Ástæða 3: Forðastu að sóa auðlindum
Ef aðeins er um „tvískipt handaband“ að ræða, þegar SYN beiðni biðlarans er læst í netkerfinu, getur biðlarinn ekki tekið við ACK pakkanum sem þjónninn sendir, þannig að SYN verður sent aftur. Hins vegar, þar sem enginn þriðji handaband er til staðar, getur þjónninn ekki ákvarðað hvort biðlarinn hafi fengið ACK staðfestingu til að koma á tengingunni. Þess vegna getur þjónninn aðeins komið á tengingu fyrirbyggjandi eftir að hafa móttekið hverja SYN beiðni. Þetta leiðir til eftirfarandi:

Sóun á auðlindum: Ef SYN beiðni viðskiptavinarins er læst, sem leiðir til endurtekinna sendinga margra SYN pakka, mun þjónninn koma á fót mörgum ógildum tengingum eftir að beiðnin hefur borist. Þetta leiðir til óþarfa sóunar á auðlindum þjónsins.

Geymsla skilaboða: Vegna skorts á þriðja handabandinu hefur netþjónninn enga leið til að vita hvort viðskiptavinurinn hafi rétt móttekið ACK-staðfestinguna til að koma á tengingunni. Þar af leiðandi, ef skilaboð festast í netkerfinu, mun viðskiptavinurinn halda áfram að senda SYN-beiðnir aftur og aftur, sem veldur því að netþjónninn þarf stöðugt að koma á nýjum tengingum. Þetta mun auka álag og tafir á netkerfinu og hafa neikvæð áhrif á heildarafköst netsins.

Forðastu að sóa auðlindum

Þess vegna, til að tryggja stöðugleika og áreiðanleika nettengingarinnar, notar TCP þríhliða handaband til að koma á tengingunni og koma í veg fyrir að þessi vandamál komi upp.

Yfirlit
HinnNetpakkamiðlariTCP-tenging er stofnun með þríhliða handabandi. Í þríhliða handabandi sendir biðlarinn fyrst pakka með SYN-fánanum til netþjónsins, sem gefur til kynna að hann vilji stofna tengingu. Eftir að beiðnin frá biðlaranum hefur borist svarar þjónninn pakka með SYN- og ACK-fánunum til biðlarans, sem gefur til kynna að beiðnin um tengingu sé samþykkt og sendir sína eigin upphafsraðnúmer. Að lokum svarar biðlarinn með ACK-fánanum til netþjónsins til að gefa til kynna að tengingunni hafi verið komið á. Þannig eru báðir aðilar í STABLISHED-stöðu og geta byrjað að senda gögn hvor til annars.

Almennt séð er þríhliða handabandsferlið fyrir TCP-tengingu hannað til að tryggja stöðugleika og áreiðanleika tengingar, forðast rugling og sóun á auðlindum vegna fyrri tenginga og tryggja að báðir aðilar geti móttekið og sent gögn.


Birtingartími: 8. janúar 2025