TCP-verbindingsopstelling
Wanneer ons op die web blaai, 'n e-pos stuur of 'n aanlyn speletjie speel, dink ons dikwels nie aan die komplekse netwerkverbinding daaragter nie. Dit is egter hierdie oënskynlik klein stappe wat stabiele kommunikasie tussen ons en die bediener verseker. Een van die belangrikste stappe is die TCP-verbindingsopstelling, en die kern hiervan is die drierigting-handdruk.
Hierdie artikel sal die beginsel, proses en belangrikheid van die drierigting-handdruk in detail bespreek. Stap vir stap sal ons verduidelik waarom die drierigting-handdruk nodig is, hoe dit verbindingstabiliteit en betroubaarheid verseker, en hoe belangrik dit is vir data-oordrag. Met 'n dieper begrip van die drierigting-handdruk, sal ons 'n beter begrip kry van die onderliggende meganismes van netwerkkommunikasie en 'n duideliker beeld van die betroubaarheid van TCP-verbindings.
TCP Drieweg-handskudproses en toestandoorgange
TCP is 'n verbindingsgeoriënteerde vervoerprotokol wat verbindingsoprigting vereis voor data-oordrag. Hierdie verbindingsoprigtingsproses word gedoen deur 'n drierigting-handdruk.
Kom ons kyk noukeuriger na die TCP-pakkette wat in elke verbinding gestuur word.
Aanvanklik is beide die kliënt en bediener GESLUIT. Eerstens luister die bediener aktief op 'n poort en is in die LUISTER-toestand, wat beteken dat die bediener begin moet word. Vervolgens is die kliënt gereed om toegang tot die webblad te verkry. Dit moet 'n verbinding met die bediener tot stand bring. Die formaat van die eerste verbindingspakket is soos volg:
Wanneer 'n kliënt 'n verbinding begin, genereer dit 'n ewekansige aanvanklike volgordenommer (client_isn) en plaas dit in die "Volgordenommer"-veld van die TCP-koptekst. Terselfdertyd stel die kliënt die SYN-vlagposisie op 1 om aan te dui dat die uitgaande pakket 'n SYN-pakket is. Die kliënt dui aan dat dit 'n verbinding met die bediener wil vestig deur die eerste SYN-pakket na die bediener te stuur. Hierdie pakket bevat nie toepassingslaagdata nie (dit wil sê, data gestuur). Op hierdie stadium word die status van die kliënt as SYN-GESTUUR gemerk.
Wanneer 'n bediener 'n SYN-pakket van 'n kliënt ontvang, initialiseer dit lukraak sy eie reeksnommer (server_isn) en plaas dan daardie nommer in die "Serienommer"-veld van die TCP-koptekst. Vervolgens voer die bediener client_isn + 1 in die "Erkenningsnommer"-veld in en stel beide SYN- en ACK-bitte op 1. Laastens stuur die bediener die pakket na die kliënt, wat geen toepassingslaagdata bevat nie (en geen data vir die bediener om te stuur nie). Op hierdie tydstip is die bediener in die SYN-RCVD-toestand.
Sodra die kliënt die pakkie van die bediener ontvang, moet dit die volgende optimaliserings uitvoer om op die finale antwoordpakkie te reageer: Eerstens stel die kliënt die ACK-bit van die TCP-koptekst van die antwoordpakkie op 1; Tweedens voer die kliënt die waarde server_isn + 1 in die "Bevestig antwoordnommer"-veld in; Laastens stuur die kliënt die pakkie na die bediener. Hierdie pakkie kan data van die kliënt na die bediener dra. Na voltooiing van hierdie bewerkings sal die kliënt die GEVASTIGDE toestand betree.
Sodra die bediener die antwoordpakket van die kliënt ontvang, skakel dit ook oor na die GEVASTIGDE-toestand.
Soos u uit die bogenoemde proses kan sien, word die derde handdruk toegelaat om data te dra wanneer 'n drierigting-handdruk uitgevoer word, maar die eerste twee handdrukke nie. Dit is 'n vraag wat dikwels in onderhoude gevra word. Sodra die drierigting-handdruk voltooi is, gaan beide partye na die GEVESTIGDE toestand, wat aandui dat die verbinding suksesvol tot stand gebring is, waarna die kliënt en bediener data na mekaar kan begin stuur.
Waarom drie handdrukke? Nie twee keer nie, maar vier keer?
Die algemene antwoord is: "Omdat die drievoudige handdruk die vermoë om te ontvang en te stuur waarborg." Hierdie antwoord is korrek, maar dit is slegs die oppervlakkige rede, dit gee nie die hoofrede nie. In die volgende sal ek die redes vir die drievoudige handdruk vanuit drie aspekte ontleed om ons begrip van hierdie kwessie te verdiep.
Die drierigting-handdruk kan die inisialisering van histories herhaalde verbindings effektief vermy (die hoofrede)
Die drierigting-handdruk waarborg dat beide partye 'n betroubare aanvanklike volgnommer ontvang het.
Die drierigting-handdruk vermy die vermorsing van hulpbronne.
Rede 1: Vermy historiese duplikaatverbindings
Kortliks, die hoofrede vir die drierigting-handdruk is om verwarring te vermy wat veroorsaak word deur die inisialisering van ou duplikaatverbindings. In 'n komplekse netwerkomgewing word die oordrag van datapakkette nie altyd volgens die gespesifiseerde tyd na die bestemmingsgasheer gestuur nie, en ou datapakkette kan eers by die bestemmingsgasheer aankom as gevolg van netwerkopeenhoping en ander redes. Om dit te vermy, gebruik TCP 'n drierigting-handdruk om die verbinding te vestig.
Wanneer 'n kliënt verskeie SYN-verbindingsvestigingspakkette agtereenvolgens stuur, in situasies soos netwerkopeenhoping, kan die volgende voorkom:
1- Die ou SYN-pakkette arriveer by die bediener voor die nuutste SYN-pakkette.
2- Die bediener sal 'n SYN + ACK-pakket aan die kliënt antwoord nadat die ou SYN-pakket ontvang is.
3- Wanneer die kliënt die SYN + ACK-pakket ontvang, bepaal dit dat die verbinding 'n historiese verbinding is (volgordenommer het verstryk of tydsberekening het verstryk) volgens sy eie konteks, en stuur dan die RST-pakket na die bediener om die verbinding te verbreek.
Met 'n twee-handdruk-verbinding is daar geen manier om te bepaal of die huidige verbinding 'n historiese verbinding is nie. Die drie-rigting-handdruk laat die kliënt toe om te bepaal of die huidige verbinding 'n historiese verbinding is gebaseer op die konteks wanneer dit gereed is om die derde pakket te stuur:
1- Indien dit 'n historiese verbinding is (volgnommer het verstryk of tydsberekening is verstryk), is die pakkie wat deur die derde handdruk gestuur word 'n RST-pakkie om die historiese verbinding te staak.
2- Indien dit nie 'n historiese verbinding is nie, is die pakket wat vir die derde keer gestuur word 'n ACK-pakket, en die twee kommunikerende partye het die verbinding suksesvol tot stand gebring.
Daarom is die hoofrede waarom TCP die drieweg-handdruk gebruik, dat dit die verbinding initialiseer om historiese verbindings te voorkom.
Rede 2: Om die aanvanklike volgordenommers van beide partye te sinchroniseer
Beide kante van die TCP-protokol moet 'n volgordenommer handhaaf, wat 'n sleutelfaktor is om betroubare oordrag te verseker. Volgordenommers speel 'n belangrike rol in TCP-verbindings. Hulle doen die volgende:
Die ontvanger kan duplikaatdata uitskakel en die akkuraatheid van die data verseker.
Die ontvanger kan pakkies in die volgorde van die volgnommer ontvang om die integriteit van die data te verseker.
● Die volgnommer kan die datapakket identifiseer wat deur die ander party ontvang is, wat betroubare data-oordrag moontlik maak.
Daarom, na die vestiging van 'n TCP-verbinding, stuur die kliënt SYN-pakkette met die aanvanklike volgordenommer en vereis dat die bediener antwoord met 'n ACK-pakket wat die suksesvolle ontvangs van die kliënt se SYN-pakket aandui. Dan stuur die bediener die SYN-pakket met die aanvanklike volgordenommer na die kliënt en wag vir die kliënt om eens en vir altyd te antwoord om te verseker dat die aanvanklike volgordenommers betroubaar gesinkroniseer is.
Alhoewel 'n vierrigting-handskud ook moontlik is om die aanvanklike volgordenommers van beide partye betroubaar te sinchroniseer, kan die tweede en derde stappe in 'n enkele stap gekombineer word, wat 'n drierigting-handskud tot gevolg het. Die twee handdrukke kan egter slegs waarborg dat die aanvanklike volgordenommer van een party suksesvol deur die ander party ontvang word, maar daar is geen waarborg dat die aanvanklike volgordenommer van beide partye bevestig kan word nie. Daarom is die drierigting-handskud die beste keuse om die stabiliteit en betroubaarheid van TCP-verbindings te verseker.
Rede 3: Vermy die vermorsing van hulpbronne
Indien daar slegs 'n "twee-handdruk" is, wanneer die kliënt se SYN-versoek in die netwerk geblokkeer word, kan die kliënt nie die ACK-pakket wat deur die bediener gestuur is, ontvang nie, dus sal die SYN weer gestuur word. Aangesien daar egter geen derde handdruk is nie, kan die bediener nie bepaal of die kliënt 'n ACK-erkenning ontvang het om die verbinding te vestig nie. Daarom kan die bediener slegs proaktief 'n verbinding vestig nadat elke SYN-versoek ontvang is. Dit lei tot die volgende:
Vermorsing van hulpbronne: As die kliënt se SYN-versoek geblokkeer word, wat lei tot herhaalde oordrag van veelvuldige SYN-pakkette, sal die bediener veelvuldige oorbodige ongeldige verbindings vestig nadat die versoek ontvang is. Dit lei tot 'n onnodige vermorsing van bedienerhulpbronne.
Boodskapbehoud: As gevolg van die gebrek aan 'n derde handdruk, het die bediener geen manier om te weet of die kliënt die ACK-erkenning korrek ontvang het om die verbinding te vestig nie. Gevolglik, as boodskappe in die netwerk vashaak, sal die kliënt aanhou om SYN-versoeke oor en oor te stuur, wat veroorsaak dat die bediener voortdurend nuwe verbindings vestig. Dit sal netwerkopeenhoping en vertraging verhoog en die algehele netwerkprestasie negatief beïnvloed.
Om die stabiliteit en betroubaarheid van die netwerkverbinding te verseker, gebruik TCP dus die drierigting-handdruk om die verbinding te vestig om die voorkoms van hierdie probleme te vermy.
Opsomming
DieNetwerkpakketmakelaarTCP-verbindingsoprigting word gedoen met 'n drierigting-handdruk. Tydens die drierigting-handdruk stuur die kliënt eers 'n pakkie met die SYN-vlag na die bediener, wat aandui dat dit 'n verbinding wil vestig. Nadat die versoek van die kliënt ontvang is, antwoord die bediener 'n pakkie met SYN- en ACK-vlae aan die kliënt, wat aandui dat die verbindingsversoek aanvaar is, en stuur sy eie aanvanklike volgnommer. Laastens antwoord die kliënt met 'n ACK-vlag aan die bediener om aan te dui dat die verbinding suksesvol tot stand gebring is. Dus is die twee partye in die GEVESTIGDE toestand en kan hulle data na mekaar begin stuur.
Oor die algemeen is die drierigting-handskudproses vir die vestiging van TCP-verbindings ontwerp om verbindingstabiliteit en betroubaarheid te verseker, verwarring en vermorsing van hulpbronne oor historiese verbindings te vermy, en te verseker dat beide partye data kan ontvang en stuur.
Plasingstyd: 8 Januarie 2025