TCP -verbindingsinstelling
Wanneer we op internet bladeren, een e -mail sturen of een online game spelen, denken we vaak niet aan de complexe netwerkverbinding erachter. Het zijn echter deze schijnbaar kleine stappen die een stabiele communicatie tussen ons en de server waarborgen. Een van de belangrijkste stappen is de TCP-verbindingsinstelling, en de kern hiervan is de drieweg handdruk.
Dit artikel bespreekt het principe, het proces en het belang van de drieweg handdruk in detail. Stap voor stap zullen we uitleggen waarom de drieweg handdruk nodig is, hoe het zorgt voor de stabiliteit en betrouwbaarheid van de verbinding en hoe belangrijk het is voor gegevensoverdracht. Met een dieper inzicht in de drieweg handdruk, zullen we een beter inzicht krijgen in de onderliggende mechanismen van netwerkcommunicatie en een duidelijker beeld van de betrouwbaarheid van TCP-verbindingen.
TCP drieweg handshake-proces en statusovergangen
TCP is een verbindingsgericht transportprotocol, dat verbindingsinstelling vereist vóór gegevensoverdracht. Dit verbindingsproces wordt gedaan door een drieweg handdruk.
Laten we de TCP -pakketten die in elke verbinding worden verzonden nader bekijken.
Aanvankelijk zijn zowel de client als de server gesloten. Ten eerste luistert de server actief op een poort en staat in de luisterstatus, wat betekent dat de server moet worden gestart. Vervolgens is de client klaar om toegang te krijgen tot de webpagina. Het moet een verbinding tot stand brengen met de server. Het formaat van het eerste verbindingspakket is als volgt:
Wanneer een client een verbinding initieert, genereert deze een willekeurig initiële volgnummer (client_isn) en plaatst deze in het veld "Volgnummer" van de TCP -header. Tegelijkertijd stelt de client de SYN -vlagpositie in op 1 om aan te geven dat het uitgaande pakket een SYN -pakket is. De client geeft aan dat hij een verbinding met de server wil tot stand brengen door het eerste SYN -pakket naar de server te verzenden. Dit pakket bevat geen gegevens van toepassingslaag (dat wil zeggen gegevens verzonden). Op dit punt is de status van de client gemarkeerd als syn-sent.
Wanneer een server een SYN -pakket van een client ontvangt, initialiseert het willekeurig zijn eigen serienummer (Server_ISN) en plaatst dat nummer vervolgens in het veld "Serienummer" van de TCP -header. Vervolgens voert de server client_isn + 1 in het veld "bevestigingsnummer" in en stelt zowel SYN- als ACK-bits in op 1. Ten slotte verzendt de server het pakket naar de client, die geen applicatielayer-gegevens bevat (en geen gegevens voor de server om te verzenden). Op dit moment staat de server in Syn-RCVD-status.
Zodra de client het pakket van de server ontvangt, moet het de volgende optimalisaties uitvoeren om te reageren op het laatste antwoordpakket: eerst stelt de client het ACK -bit in van de TCP -header van het antwoordpakket op 1; Ten tweede voert de client de waarde Server_isn + 1 in het veld "Antwoordnummer bevestigen"; Ten slotte verzendt de client het pakket naar de server. Dit pakket kan gegevens van de client naar de server dragen. Na voltooiing van deze bewerkingen zal de klant de gevestigde status invoeren.
Zodra de server het antwoordpakket van de client ontvangt, schakelt deze ook over naar de gevestigde status.
Zoals u in het bovenstaande proces kunt zien, mag de derde handdruk bij het uitvoeren van een drieweg handdruk gegevens vervoeren, maar de eerste twee handdrukken zijn dat niet. Dit is een vraag die vaak wordt gesteld in interviews. Zodra de drieweg handdruk is voltooid, komen beide partijen in de gevestigde status, wat aangeeft dat de verbinding met succes is gelegd, op welk punt de client en server kunnen beginnen met het verzenden van gegevens naar elkaar.
Waarom drie handdrukken? Niet twee keer, vier keer?
Het gemeenschappelijke antwoord is: "Omdat de drieweg handdruk de mogelijkheid garandeert om te ontvangen en te verzenden." Dit antwoord is correct, maar het is alleen de oppervlakte -reden, brengt de belangrijkste reden niet naar voren. In het volgende zal ik de redenen voor de drievoudige handdruk analyseren van drie aspecten om ons begrip van deze kwestie te verdiepen.
De drieweg handdruk kan de initialisatie van historisch herhaalde verbindingen effectief vermijden (de belangrijkste reden)
De drieweg handdruk garandeert dat beide partijen een betrouwbaar initiële volgnummer hebben ontvangen.
De drieweg handdruk vermijdt het verspillen van middelen.
Reden 1: Vermijd historische duplicaat Joins
Kortom, de belangrijkste reden voor de drieweghandshake is om verwarring te voorkomen die wordt veroorzaakt door de oude dubbele initialisatie van de verbinding. In een complexe netwerkomgeving wordt de overdracht van datapakketten niet altijd naar de bestemmingshost verzonden in overeenstemming met de opgegeven tijd, en oude datapakketten kunnen eerst bij de bestemmingshost aankomen vanwege netwerkcongestie en andere redenen. Om dit te voorkomen, gebruikt TCP een drieweg handdruk om de verbinding tot stand te brengen.
Wanneer een klant opeenvolgende SYN -verbindingspakketten verzenden, in situaties zoals netwerkcongestie, kan het volgende optreden:
1- De oude SYN-pakketten komen aan op de server vóór de nieuwste SYN-pakketten.
2- De server beantwoordt een SYN + ACK-pakket op de client na ontvangst van het oude SYN-pakket.
3- Wanneer de client het SYN + ACK-pakket ontvangt, bepaalt het dat de verbinding een historische verbinding is (sequentienummer verlopen of time-out) volgens zijn eigen context, en stuurt vervolgens het RST-pakket naar de server om de verbinding af te breken.
Met een verbinding met twee handschoenen is er geen manier om te bepalen of de huidige verbinding een historische verbinding is. Met de drieweg handdruk kan de klant bepalen of de huidige verbinding een historische verbinding is op basis van de context wanneer deze klaar is om het derde pakket te verzenden:
1- Als het een historische verbinding is (sequentienummer verlopen of time-out), is het pakket dat wordt verzonden door de derde handdruk een RST-pakket om de historische verbinding af te breken.
2- Als het geen historische verbinding is, is het pakket dat voor de derde keer wordt verzonden een ACK-pakket en de twee communicerende partijen leggen met succes de verbinding tot stand.
Daarom is de belangrijkste reden dat TCP de drieweghandshake gebruikt dat het de verbinding initialiseert om historische verbindingen te voorkomen.
Reden 2: om de initiële volgorde van beide partijen te synchroniseren
Beide zijden van het TCP -protocol moeten een sequentienummer behouden, wat een sleutelfactor is om een betrouwbare transmissie te garanderen. Sequentienummers spelen een belangrijke rol in TCP -verbindingen. Ze doen het volgende:
De ontvanger kan dubbele gegevens elimineren en zorgen voor de nauwkeurigheid van de gegevens.
De ontvanger kan pakketten in de volgorde van het volgnummer ontvangen om de integriteit van de gegevens te waarborgen.
● Het sequentienummer kan het gegevenspakket identificeren dat door de andere partij is ontvangen, waardoor betrouwbare gegevensoverdracht mogelijk is.
Daarom verzendt de client bij het tot stand brengen van een TCP -verbinding SYN -pakketten met het initiële volgnummer en vereist dat de server antwoordt met een ACK -pakket dat een succesvolle ontvangst van het SYN -pakket van de client aangeeft. Vervolgens verzendt de server het SYN -pakket met het initiële sequentienummer naar de client en wacht tot de client antwoordt, voor altijd om ervoor te zorgen dat de initiële volgnummers betrouwbaar worden gesynchroniseerd.
Hoewel een vierweg-handdruk ook mogelijk is om de initiële volgorde van beide partijen betrouwbaar te synchroniseren, kunnen de tweede en derde stappen worden gecombineerd in een enkele stap, wat resulteert in een drieweg handdruk. De twee handdrukken kunnen echter alleen maar garanderen dat het eerste volgnummer van de ene partij met succes wordt ontvangen door de andere partij, maar er is geen garantie dat het initiële volgnummer van beide partijen kan worden bevestigd. Daarom is de drieweg handdruk de beste keuze om de stabiliteit en betrouwbaarheid van TCP-verbindingen te waarborgen.
Reden 3: Vermijd het verspillen van middelen
Als er slechts een "twee-handscherm" is, wanneer het client-syn-verzoek in het netwerk wordt geblokkeerd, kan de client niet het ACK-pakket ontvangen dat door de server is verzonden, zodat de SYN herhaald wordt. Aangezien er echter geen derde handdruk is, kan de server echter niet bepalen of de client een ACK -bevestiging heeft ontvangen om de verbinding tot stand te brengen. Daarom kan de server alleen proactief een verbinding tot stand brengen na het ontvangen van elk SYN -verzoek. Dit leidt tot het volgende:
Verspilling van bronnen: als het SYN -verzoek van de client wordt geblokkeerd, wat resulteert in herhaalde verzending van meerdere SYN -pakketten, zal de server na ontvangst van het verzoek meerdere redundante ongeldige verbindingen tot stand brengen. Dit leidt tot een onnodige verspilling van serverbronnen.
Berichtbehoud: vanwege het ontbreken van een derde handdruk, heeft de server geen manier om te weten of de client de ACK -bevestiging heeft ontvangen om de verbinding tot stand te brengen. Dientengevolge, als berichten vast komen te zitten in het netwerk, blijft de client steeds opnieuw SYN -aanvragen verzenden, waardoor de server constant nieuwe verbindingen tot stand brengt. Dit zal de netwerkcongestie en vertraging vergroten en de algehele netwerkprestaties negatief beïnvloeden.
Om de stabiliteit en betrouwbaarheid van de netwerkverbinding te waarborgen, gebruikt TCP daarom de drieweghandshake om de verbinding tot stand te brengen om het optreden van deze problemen te voorkomen.
Samenvatting
DeNetwerkpakketmakelaarTCP-verbindingsinstelling wordt gedaan met een drieweg handdruk. Tijdens de drieweg handdruk verzendt de client eerst een pakket met de SYN-vlag naar de server, wat aangeeft dat hij een verbinding wil tot stand brengen. Na het ontvangen van het verzoek van de client, antwoordt de server een pakket met SYN- en ACK -vlaggen op de client, wat aangeeft dat het verbindingsverzoek wordt geaccepteerd en verzendt zijn eigen initiële volgnummer. Ten slotte antwoordt de client met een ACK -vlag op de server om aan te geven dat de verbinding met succes is vastgesteld. De twee partijen bevinden zich dus in de gevestigde status en kunnen beginnen met het verzenden van gegevens naar elkaar.
Over het algemeen is het drieweg handshake-proces voor TCP-verbindingsinstelling ontworpen om de stabiliteit en betrouwbaarheid van de verbinding te garanderen, verwarring en verspilling van middelen over historische verbindingen te voorkomen en ervoor te zorgen dat beide partijen gegevens kunnen ontvangen en verzenden.
Posttijd: Jan-08-2025