TCP-ferbining ynstelle
As wy op it web blêdzje, in e-post stjoere of in online spultsje spielje, tinke wy faak net oan de komplekse netwurkferbining dy't derachter sit. It binne lykwols dizze skynber lytse stappen dy't soargje foar stabile kommunikaasje tusken ús en de server. Ien fan 'e wichtichste stappen is de TCP-ferbiningsynstelling, en de kearn hjirfan is de trijefâldige handshake.
Dit artikel sil it prinsipe, it proses en it belang fan 'e trijewege handshake yn detail beprate. Stap foar stap sille wy útlizze wêrom't de trijewege handshake nedich is, hoe't it ferbiningsstabiliteit en betrouberens garandearret, en hoe wichtich it is foar gegevensoerdracht. Mei in djipper begryp fan 'e trijewege handshake sille wy in better begryp krije fan 'e ûnderlizzende meganismen fan netwurkkommunikaasje en in dúdliker byld krije fan 'e betrouberens fan TCP-ferbiningen.
TCP Trije-wei Handshake-proses en steatoergongen
TCP is in ferbiningsrjochte transportprotokol, dat fereasket dat der in ferbining opset wurdt foar gegevensoerdracht. Dit proses fan ferbiningsoprjochting wurdt dien troch in trijefâldige handshake.
Litte wy ris tichterby sjen nei de TCP-pakketten dy't yn elke ferbining ferstjoerd wurde.
Yn it earstoan binne sawol de kliïnt as de tsjinner SLUTEN. Earst lústeret de tsjinner aktyf op in poarte en is yn 'e LÛSTER-steat, wat betsjut dat de tsjinner opstart wurde moat. Dêrnei is de kliïnt klear om tagong te krijen ta de webside. Hy moat in ferbining mei de tsjinner opsette. It formaat fan it earste ferbiningspakket is as folget:
As in kliïnt in ferbining inisjearret, genereart it in willekeurich earste folchoardernûmer (client_isn) en pleatst it yn it fjild "Folchoardernûmer" fan 'e TCP-header. Tagelyk stelt de kliïnt de SYN-flaggeposysje yn op 1 om oan te jaan dat it útgeande pakket in SYN-pakket is. De kliïnt jout oan dat it in ferbining mei de tsjinner opsette wol troch it earste SYN-pakket nei de tsjinner te stjoeren. Dit pakket befettet gjin applikaasjelaachgegevens (dat is, ferstjoerde gegevens). Op dit punt wurdt de status fan 'e kliïnt markearre as SYN-SENT.
As in server in SYN-pakket fan in kliïnt ûntfangt, inisjalisearret it willekeurich syn eigen serienûmer (server_isn) en set dat nûmer dan yn it fjild "Serienûmer" fan 'e TCP-header. Dêrnei fiert de server client_isn + 1 yn yn it fjild "Befêstigingsnûmer" en stelt sawol SYN- as ACK-bits yn op 1. Uteinlik stjoert de server it pakket nei de kliïnt, dat gjin applikaasjelaachgegevens befettet (en gjin gegevens foar de server om te ferstjoeren). Op dit stuit is de server yn 'e SYN-RCVD-steat.
Sadree't de kliïnt it pakket fan 'e tsjinner ûntfangt, moat it de folgjende optimalisaasjes útfiere om te reagearjen op it definitive antwurdpakket: Earst stelt de kliïnt it ACK-bit fan 'e TCP-header fan it antwurdpakket yn op 1; Twadde, fiert de kliïnt de wearde server_isn + 1 yn yn it fjild "Befêstigje antwurdnûmer"; Uteinlik stjoert de kliïnt it pakket nei de tsjinner. Dit pakket kin gegevens fan 'e kliïnt nei de tsjinner drage. Nei it foltôgjen fan dizze operaasjes sil de kliïnt de steat ESTABLISHED yngean.
Sadree't de tsjinner it antwurdpakket fan 'e kliïnt ûntfangt, skeakelt er ek oer nei de steat ESTABLISHED.
Lykas jo kinne sjen út it boppesteande proses, by it útfieren fan in trijefâldige handshake, mei de tredde handshake gegevens drage, mar de earste twa handshakes net. Dit is in fraach dy't faak steld wurdt yn ynterviews. Sadree't de trijefâldige handshake foltôge is, geane beide partijen yn 'e steat FESTIGE, wat oanjout dat de ferbining mei súkses oprjochte is, wêrnei't de kliïnt en server gegevens nei elkoar kinne ferstjoere.
Wêrom trije hândrukken? Net twa kear, mar fjouwer kear?
It gewoane antwurd is: "Omdat de trijefâldige hândruk de mooglikheid garandearret om te ûntfangen en te ferstjoeren." Dit antwurd is korrekt, mar it is allinich de oerflakkige reden, it neamt net de wichtichste reden. Yn it folgjende sil ik de redenen foar de trijefâldige hândruk fanút trije aspekten analysearje om ús begryp fan dit probleem te ferdjipjen.
De trijefâldige handshake kin effektyf foarkomme dat histoarysk werhelle ferbiningen yn earste ynstânsje ynfierd wurde (de wichtichste reden)
De trijefâldige handdruk garandearret dat beide partijen in betrouber earste folchnûmer krigen hawwe.
De trijefâldige handdruk foarkomt fergriemen fan boarnen.
Reden 1: Foarkom histoaryske dûbele joins
Koartsein, de wichtichste reden foar de trijefâldige handshake is om betizing te foarkommen dy't feroarsake wurdt troch de inisjalisaasje fan 'e âlde dûbele ferbining. Yn in komplekse netwurkomjouwing wurdt de oerdracht fan gegevenspakketten net altyd nei de bestimmingshost ferstjoerd neffens de oantsjutte tiid, en âlde gegevenspakketten kinne earst by de bestimmingshost oankomme fanwegen netwurkoerlêst en oare redenen. Om dit te foarkommen brûkt TCP in trijefâldige handshake om de ferbining te meitsjen.
As in kliïnt meardere SYN-ferbiningspakketten efterinoar ferstjoert, kin it folgjende barre yn situaasjes lykas netwurkoerlêst:
1- De âlde SYN-pakketten komme foar de lêste SYN-pakketten op de server oan.
2- De tsjinner sil in SYN + ACK-pakket nei de kliïnt antwurdzje nei't er it âlde SYN-pakket ûntfongen hat.
3- As de kliïnt it SYN + ACK-pakket ûntfangt, bepaalt it dat de ferbining in histoaryske ferbining is (folchnûmer ferrûn of time-out) neffens syn eigen kontekst, en stjoert dan it RST-pakket nei de server om de ferbining te ûnderbrekken.
Mei in twa-handshake-ferbining is der gjin manier om te bepalen oft de hjoeddeiske ferbining in histoaryske ferbining is. De trije-weg handshake lit de kliïnt bepale oft de hjoeddeiske ferbining in histoaryske ferbining is op basis fan 'e kontekst wannear't it klear is om it tredde pakket te ferstjoeren:
1- As it in histoaryske ferbining is (folchnûmer ferrûn of time-out), is it pakket dat troch de tredde handshake ferstjoerd wurdt in RST-pakket om de histoaryske ferbining te ûnderbrekken.
2- As it gjin histoaryske ferbining is, is it pakket dat foar de tredde kear ferstjoerd wurdt in ACK-pakket, en de twa kommunisearjende partijen hawwe de ferbining mei súkses opboud.
Dêrom is de wichtichste reden dat TCP de trijewege handshake brûkt, dat it de ferbining inisjalisearret om histoaryske ferbiningen te foarkommen.
Reden 2: Om de earste sekwinsjenûmers fan beide partijen te syngronisearjen
Beide kanten fan it TCP-protokol moatte in folchoardernûmer behâlde, wat in wichtige faktor is om betroubere oerdracht te garandearjen. Folchoardernûmers spylje in wichtige rol yn TCP-ferbiningen. Se dogge it folgjende:
De ûntfanger kin dûbele gegevens eliminearje en de krektens fan 'e gegevens garandearje.
De ûntfanger kin pakketten ûntfange yn 'e folchoarder fan it sekwinsjenûmer om de yntegriteit fan 'e gegevens te garandearjen.
● It sekwinsjenûmer kin it gegevenspakket identifisearje dat troch de oare partij ûntfongen is, wêrtroch betroubere gegevensoerdracht mooglik is.
Dêrom, by it meitsjen fan in TCP-ferbining, stjoert de kliïnt SYN-pakketten mei it earste sekwinsjenûmer en freget de tsjinner om te antwurdzjen mei in ACK-pakket dat oanjout dat it SYN-pakket fan 'e kliïnt mei súkses ûntfongen is. Dan stjoert de tsjinner it SYN-pakket mei it earste sekwinsjenûmer nei de kliïnt en wachtet op antwurd fan 'e kliïnt, ien kear foar altyd, om te soargjen dat de earste sekwinsjenûmers betrouber syngronisearre binne.
Hoewol in fjouwerwegshandshake ek mooglik is om de earste sekwinsjenûmers fan beide partijen betrouber te syngronisearjen, kinne de twadde en tredde stappen wurde kombineare yn ien stap, wat resulteart yn in trijewegshandshake. De twa handshakes kinne lykwols allinich garandearje dat it earste sekwinsjenûmer fan ien partij mei súkses ûntfongen wurdt troch de oare partij, mar d'r is gjin garânsje dat it earste sekwinsjenûmer fan beide partijen befestige wurde kin. Dêrom is de trijewegshandshake de bêste kar om de stabiliteit en betrouberens fan TCP-ferbiningen te garandearjen.
Reden 3: Foarkom it fergrieme fan boarnen
As der mar in "twa-handshake" is, en it SYN-fersyk fan 'e kliïnt yn it netwurk blokkearre is, kin de kliïnt it ACK-pakket dat troch de tsjinner ferstjoerd is net ûntfange, sadat de SYN opnij ferstjoerd wurdt. Omdat der lykwols gjin tredde handshake is, kin de tsjinner net bepale oft de kliïnt in ACK-befêstiging ûntfongen hat om de ferbining te meitsjen. Dêrom kin de tsjinner allinich proaktyf in ferbining meitsje nei it ûntfangen fan elk SYN-fersyk. Dit liedt ta it folgjende:
Fergriemerij fan boarnen: As it SYN-fersyk fan 'e kliïnt blokkearre wurdt, wat resulteart yn werhelle oerdracht fan meardere SYN-pakketten, sil de server meardere redundante ûnjildige ferbiningen opsette nei ûntfangst fan it fersyk. Dit liedt ta in ûnnedige fergriemerij fan serverboarnen.
Berjochtbehâld: Troch it ûntbrekken fan in tredde handshake hat de server gjin manier om te witten oft de kliïnt de ACK-befêstiging goed ûntfongen hat om de ferbining te meitsjen. As gefolch dêrfan, as berjochten fêstkomme yn it netwurk, sil de kliïnt hieltyd wer SYN-oanfragen ferstjoere, wêrtroch't de server konstant nije ferbiningen makket. Dit sil netwurkoerlêst en fertraging ferheegje en de algemiene netwurkprestaasjes negatyf beynfloedzje.
Dêrom, om de stabiliteit en betrouberens fan 'e netwurkferbining te garandearjen, brûkt TCP de trijewege handshake om de ferbining te meitsjen om it foarkommen fan dizze problemen te foarkommen.
Gearfetting
DeNetwurkpakketmakelaarIt opsetten fan in TCP-ferbining wurdt dien mei in trijefâldige handshake. Tidens de trijefâldige handshake stjoert de kliïnt earst in pakket mei de SYN-flagge nei de tsjinner, wat oanjout dat er in ferbining opsette wol. Nei it ûntfangen fan it fersyk fan 'e kliïnt antwurdet de tsjinner in pakket mei SYN- en ACK-flaggen nei de kliïnt, wat oanjout dat it ferbiningsfersyk akseptearre is, en stjoert syn eigen earste sekwinsjenûmer. Uteinlik antwurdet de kliïnt mei in ACK-flagge nei de tsjinner om oan te jaan dat de ferbining mei súkses opset is. Sa binne de twa partijen yn 'e ESTABLISHED-steat en kinne se begjinne mei it ferstjoeren fan gegevens nei elkoar.
Yn 't algemien is it trijefâldige handshakeproses foar it oprjochtsjen fan TCP-ferbiningen ûntworpen om ferbiningsstabiliteit en betrouberens te garandearjen, betizing en fergriemerij fan boarnen oer histoaryske ferbiningen te foarkommen, en te garandearjen dat beide partijen gegevens kinne ûntfange en ferstjoere.
Pleatsingstiid: Jan-08-2025