TCP-verbinding instellen
Wanneer we op internet surfen, een e-mail verzenden of een online game spelen, denken we vaak niet na over de complexe netwerkverbinding erachter. Het zijn echter deze ogenschijnlijk kleine stappen die zorgen voor een stabiele communicatie tussen ons en de server. Een van de belangrijkste stappen is het opzetten van de TCP-verbinding, en de kern hiervan is de drieweg-handshake.
Dit artikel bespreekt het principe, het proces en het belang van de drieweghanddruk in detail. Stap voor stap leggen we uit waarom de drieweg-handshake nodig is, hoe deze de stabiliteit en betrouwbaarheid van de verbinding garandeert en hoe belangrijk deze is voor de gegevensoverdracht. Met een dieper begrip van de drieweg-handshake zullen we een beter inzicht krijgen in de onderliggende mechanismen van netwerkcommunicatie en een duidelijker beeld krijgen van de betrouwbaarheid van TCP-verbindingen.
TCP Three-way Handshake-proces en statusovergangen
TCP is een verbindingsgericht transportprotocol, waarbij verbinding tot stand moet worden gebracht vóór gegevensoverdracht. Dit verbindingsproces wordt uitgevoerd door middel van een drieweghandshake.
Laten we de TCP-pakketten die in elke verbinding worden verzonden eens nader bekijken.
In eerste instantie zijn zowel de client als de server GESLOTEN. Ten eerste luistert de server actief op een poort en bevindt zich in de LISTEN-status, wat betekent dat de server moet worden gestart. Vervolgens is de client klaar om toegang te krijgen tot de webpagina. Er moet een verbinding met de server tot stand worden gebracht. Het formaat van het eerste verbindingspakket is als volgt:
Wanneer een client een verbinding tot stand brengt, genereert deze een willekeurig initieel volgnummer (client_isn) en plaatst dit in het veld "Volgnummer" van de TCP-header. Tegelijkertijd stelt de cliënt 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 tot stand wil brengen door het eerste SYN-pakket naar de server te sturen. Dit pakket bevat geen applicatielaaggegevens (dat wil zeggen verzonden gegevens). Op dit punt wordt de status van de client gemarkeerd als SYN-SENT.
Wanneer een server een SYN-pakket van een client ontvangt, initialiseert hij 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 "Erkenningsnummer" in en stelt zowel SYN- als ACK-bits in op 1. Ten slotte stuurt de server het pakket naar de client, dat geen gegevens uit de applicatielaag bevat (en geen gegevens voor de server). verzenden). Op dit moment bevindt de server zich in de status SYN-RCVD.
Zodra de client het pakket van de server ontvangt, moet deze de volgende optimalisaties uitvoeren om op het uiteindelijke antwoordpakket te reageren: Ten eerste stelt de client de ACK-bit van de TCP-header van het antwoordpakket in op 1; Ten tweede voert de client de waarde server_isn + 1 in het veld "Bevestig antwoordnummer" in; Ten slotte stuurt de client het pakket naar de server. Dit pakket kan gegevens van de client naar de server overbrengen. Na voltooiing van deze handelingen betreedt de cliënt de staat GEVESTIGD.
Zodra de server het antwoordpakket van de client ontvangt, schakelt deze ook over naar de status ESTABLISHED.
Zoals u uit het bovenstaande proces kunt zien, mag bij het uitvoeren van een drieweg-handshake de derde handshake gegevens overdragen, maar de eerste twee handshakes niet. Dit is een vraag die vaak gesteld wordt in interviews. Zodra de drieweghandshake is voltooid, gaan beide partijen naar de status ESTABLISHED, wat aangeeft dat de verbinding succesvol tot stand is gebracht, waarna de client en server kunnen beginnen met het verzenden van gegevens naar elkaar.
Waarom drie handdrukken? Niet twee keer, maar vier keer?
Het algemene antwoord is: "Omdat de drievoudige handdruk de mogelijkheid garandeert om te ontvangen en te verzenden." Dit antwoord is juist, maar het is slechts de oppervlakkige reden en brengt niet de hoofdreden naar voren. Hieronder zal ik de redenen voor de drievoudige handdruk analyseren vanuit drie aspecten om ons begrip van deze kwestie te verdiepen.
De drieweghandshake kan effectief de initialisatie van historisch herhaalde verbindingen vermijden (de belangrijkste reden)
De drievoudige handdruk garandeert dat beide partijen een betrouwbaar initieel volgnummer hebben ontvangen.
De drievoudige handdruk voorkomt verspilling van middelen.
Reden 1: vermijd historische dubbele joins
In een notendop is de belangrijkste reden voor de drieweg-handshake het voorkomen van verwarring veroorzaakt door de oude dubbele verbindingsinitialisatie. In een complexe netwerkomgeving wordt de overdracht van datapakketten niet altijd op de aangegeven tijd naar de bestemmingshost verzonden, en kunnen oude datapakketten als eerste bij de bestemmingshost aankomen vanwege netwerkcongestie en andere redenen. Om dit te voorkomen, gebruikt TCP een drieweg-handshake om de verbinding tot stand te brengen.
Wanneer een client meerdere pakketten voor het tot stand brengen van een SYN-verbinding achter elkaar verzendt, kan in situaties zoals netwerkcongestie het volgende gebeuren:
1- De oude SYN-pakketten arriveren eerder bij de server dan de nieuwste SYN-pakketten.
2- De server antwoordt een SYN + ACK-pakket naar de client na ontvangst van het oude SYN-pakket.
3- Wanneer de client het SYN + ACK-pakket ontvangt, bepaalt deze dat de verbinding een historische verbinding is (volgnummer verlopen of time-out) volgens zijn eigen context, en stuurt vervolgens het RST-pakket naar de server om de verbinding af te breken.
Bij een twee-handshake-verbinding is er geen manier om te bepalen of de huidige verbinding een historische verbinding is. Met de drieweghandshake kan de client 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 betreft (volgnummer verlopen of time-out), is het pakket dat door de derde handshake wordt verzonden 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 brengen de twee communicerende partijen met succes de verbinding tot stand.
Daarom is de belangrijkste reden dat TCP de drieweg-handshake gebruikt, dat het de verbinding initialiseert om historische verbindingen te voorkomen.
Reden 2: Om de initiële volgnummers van beide partijen te synchroniseren
Beide kanten van het TCP-protocol moeten een volgnummer behouden, wat een sleutelfactor is om betrouwbare transmissie te garanderen. Volgnummers spelen een belangrijke rol bij TCP-verbindingen. Ze doen het volgende:
De ontvanger kan dubbele gegevens elimineren en de nauwkeurigheid van de gegevens garanderen.
De ontvanger kan pakketten ontvangen in de volgorde van het volgnummer om de integriteit van de gegevens te garanderen.
● Het volgnummer kan het datapakket identificeren dat door de andere partij is ontvangen, waardoor een betrouwbare datatransmissie 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 de succesvolle ontvangst van het SYN-pakket van de client aangeeft. Vervolgens stuurt de server het SYN-pakket met het initiële volgnummer naar de client en wacht tot de client voor eens en voor altijd antwoordt om ervoor te zorgen dat de initiële volgnummers betrouwbaar worden gesynchroniseerd.
Hoewel een vierwegshandshake ook mogelijk is om de initiële volgnummers van beide partijen betrouwbaar te synchroniseren, kunnen de tweede en derde stap worden gecombineerd tot één stap, wat resulteert in een driewegshandshake. De twee handshakes kunnen echter alleen garanderen dat het initiële 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 drieweghandshake de beste keuze om de stabiliteit en betrouwbaarheid van TCP-verbindingen te garanderen.
Reden 3: Vermijd het verspillen van hulpbronnen
Als er slechts een "twee-handshake" is, wanneer het client-SYN-verzoek in het netwerk wordt geblokkeerd, kan de client het door de server verzonden ACK-pakket niet ontvangen, dus zal de SYN opnieuw worden verzonden. Omdat er echter geen derde handshake plaatsvindt, kan de server 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 ontvangst 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 onnodige verspilling van serverbronnen.
Berichtretentie: Door het ontbreken van een derde handshake kan de server niet weten of de client de ACK-bevestiging correct heeft ontvangen om de verbinding tot stand te brengen. Als gevolg hiervan zal de client, als berichten vastlopen in het netwerk, keer op keer SYN-verzoeken blijven verzenden, waardoor de server voortdurend 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 garanderen, gebruikt TCP daarom de drieweghandshake om de verbinding tot stand te brengen om het optreden van deze problemen te voorkomen.
Samenvatting
DeNetwerkpakketmakelaarHet tot stand brengen van een TCP-verbinding gebeurt met een drieweg-handshake. Tijdens de drieweg-handshake stuurt de client eerst een pakket met de SYN-vlag naar de server, waarmee hij aangeeft dat hij een verbinding tot stand wil brengen. Na ontvangst van het verzoek van de client antwoordt de server een pakket met SYN- en ACK-vlaggen naar de client, waarmee wordt aangegeven dat het verbindingsverzoek is geaccepteerd, en verzendt zijn eigen initiële volgnummer. Ten slotte antwoordt de client met een ACK-vlag naar de server om aan te geven dat de verbinding succesvol tot stand is gebracht. De twee partijen bevinden zich dus in de status GEVESTIGD en kunnen beginnen met het verzenden van gegevens naar elkaar.
Over het algemeen is het drieweg-handshake-proces voor het tot stand brengen van TCP-verbindingen ontworpen om de stabiliteit en betrouwbaarheid van de verbinding te garanderen, verwarring en verspilling van bronnen ten opzichte van historische verbindingen te voorkomen en ervoor te zorgen dat beide partijen gegevens kunnen ontvangen en verzenden.
Posttijd: 08-jan-2025