De belangrijkste mysteries van TCP-verbindingen in netwerkpakketbrokers: de noodzaak van een drievoudige handshake ontrafeld.

TCP-verbinding instellen
Wanneer we op internet surfen, een e-mail versturen of een online game spelen, staan ​​we vaak niet stil bij de complexe netwerkverbinding die daarachter schuilgaat. Toch zijn het juist 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 drieweg-handshake in detail. Stap voor stap leggen we uit waarom de drieweg-handshake nodig is, hoe deze de stabiliteit en betrouwbaarheid van de verbinding waarborgt en hoe belangrijk deze is voor gegevensoverdracht. Met een dieper begrip van de drieweg-handshake krijgen we een beter inzicht in de onderliggende mechanismen van netwerkcommunicatie en een duidelijker beeld van de betrouwbaarheid van TCP-verbindingen.

TCP-drie-weg-handshake-proces en statusovergangen
TCP is een verbindingsgericht transportprotocol, wat betekent dat er een verbinding tot stand moet worden gebracht voordat gegevens kunnen worden verzonden. Dit verbindingsproces vindt plaats via een drieweg-handshake.

 TCP drieweg-handshake

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. Eerst luistert de server actief op een poort en bevindt zich in de LISTEN-status, wat betekent dat de server moet worden opgestart. Vervolgens is de client klaar om de webpagina te bezoeken. Hiervoor moet een verbinding met de server tot stand worden gebracht. Het formaat van het eerste verbindingspakket is als volgt:

 SYN-pakket

Wanneer een client een verbinding initieert, genereert deze een willekeurig initieel volgnummer (client_isn) en plaatst dit in het veld "Sequence number" van de TCP-header. Tegelijkertijd zet de client de SYN-vlag 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 leggen door het eerste SYN-pakket naar de server te verzenden. Dit pakket bevat geen applicatielaaggegevens (dat wil zeggen, verzonden gegevens). Op dit punt wordt de status van de client gemarkeerd als SYN-SENT.

SYN+ACK-pakket

Wanneer een server een SYN-pakket van een client ontvangt, initialiseert deze willekeurig zijn eigen serienummer (server_isn) en plaatst dit nummer in het veld "Serial number" van de TCP-header. Vervolgens vult de server client_isn + 1 in het veld "Acknowledgement number" in en zet zowel de SYN- als de ACK-bit op 1. Ten slotte verzendt de server het pakket naar de client. Dit pakket bevat geen applicatielaaggegevens (en dus ook geen gegevens die de server kan verzenden). Op dit moment bevindt de server zich in de SYN-RCVD-status.

ACK-pakket

Zodra de client het pakket van de server ontvangt, moet deze de volgende optimalisaties uitvoeren om te reageren op het uiteindelijke antwoordpakket: Ten eerste zet de client de ACK-bit van de TCP-header van het antwoordpakket op 1; Ten tweede voert de client de waarde server_isn + 1 in het veld "Bevestig antwoordnummer" in; Ten slotte verzendt de client het pakket naar de server. Dit pakket kan gegevens van de client naar de server bevatten. Na voltooiing van deze bewerkingen komt de client in de ESTABLISHED-status terecht.

Zodra de server het antwoordpakket van de client ontvangt, schakelt deze ook over naar de ESTABLISHED-status.

Zoals je in het bovenstaande proces kunt zien, mag bij een drieweg-handshake de derde handshake wel data overdragen, maar de eerste twee niet. Dit is een vraag die vaak gesteld wordt tijdens sollicitatiegesprekken. Zodra de drieweg-handshake voltooid is, komen beide partijen in de status ESTABLISHED terecht, wat aangeeft dat de verbinding succesvol tot stand is gebracht. Vanaf dat moment kunnen de client en de server data naar elkaar verzenden.

Waarom drie handdrukken? Niet twee, maar vier?
Het gangbare antwoord is: "Omdat de drieweg-handshake de mogelijkheid tot ontvangen en verzenden garandeert." Dit antwoord klopt, maar het is slechts de oppervlakkige reden en geeft niet de kern van de zaak weer. Hieronder analyseer ik de redenen voor de drieweg-handshake vanuit drie perspectieven om ons begrip van dit vraagstuk te verdiepen.

De drieweg-handshake kan effectief voorkomen dat verbindingen die in het verleden herhaaldelijk tot stand zijn gebracht, opnieuw worden geïnitialiseerd (de belangrijkste reden).
De drieweg-handdruk garandeert dat beide partijen een betrouwbaar initieel volgnummer hebben ontvangen.
De drieweg-handdruk voorkomt verspilling van middelen.

Reden 1: Vermijd historische dubbele koppelingen
Kort gezegd is de belangrijkste reden voor de drieweg-handshake het voorkomen van verwarring die ontstaat door het initialiseren van oude, dubbele verbindingen. In een complexe netwerkomgeving worden datapakketten niet altijd volgens het afgesproken tijdstip naar de bestemming verzonden, en kunnen oude datapakketten door netwerkcongestie en andere oorzaken eerder bij de bestemming aankomen. Om dit te voorkomen, gebruikt TCP een drieweg-handshake om de verbinding tot stand te brengen.

De drieweg-handdruk voorkomt historische dubbele verbindingen.

Wanneer een client meerdere SYN-pakketten voor het tot stand brengen van een verbinding achter elkaar verzendt, bijvoorbeeld bij netwerkcongestie, kan het volgende gebeuren:

1- De oude SYN-pakketten komen eerder bij de server aan dan de nieuwste SYN-pakketten.
2. De server stuurt een SYN + ACK-pakket terug naar de client nadat hij het oude SYN-pakket heeft ontvangen.
3. Wanneer de client het SYN + ACK-pakket ontvangt, bepaalt deze op basis van zijn eigen context dat het om een ​​historische verbinding gaat (sequentienummer verlopen of time-out) en stuurt vervolgens het RST-pakket naar de server om de verbinding te verbreken.

Bij een verbinding met twee handshakes is het niet mogelijk om te bepalen of de huidige verbinding een historische verbinding is. De drieweg-handshake stelt de client in staat om, op basis van de context, te bepalen of de huidige verbinding een historische verbinding is wanneer deze klaar is om het derde pakket te verzenden.

1. Als het een historische verbinding betreft (sequentienummer verlopen of time-out), is het pakket dat tijdens de derde handshake wordt verzonden een RST-pakket om de historische verbinding te verbreken.
2. Als het geen historische verbinding betreft, is het pakket dat voor de derde keer wordt verzonden een ACK-pakket, waarmee de twee communicerende partijen de verbinding succesvol tot stand brengen.

De belangrijkste reden waarom TCP de drieweg-handshake gebruikt, is dan ook dat hiermee de verbinding wordt geïnitialiseerd om te voorkomen dat verbindingen uit het verleden worden verbroken.

Reden 2: Om de beginvolgnummers van beide partijen te synchroniseren.
Beide zijden van het TCP-protocol moeten een volgnummer behouden, wat een cruciale factor is voor een betrouwbare transmissie. Volgnummers spelen een belangrijke rol in TCP-verbindingen. Ze hebben de volgende functies:

De ontvanger kan dubbele gegevens verwijderen en de nauwkeurigheid van de gegevens garanderen.

De ontvanger kan pakketten in de volgorde van het volgnummer ontvangen om de integriteit van de gegevens te waarborgen.

● Het volgnummer kan het datapakket identificeren dat door de andere partij is ontvangen, waardoor betrouwbare gegevensoverdracht mogelijk is.

Bij het tot stand brengen van een TCP-verbinding stuurt de client daarom SYN-pakketten met het initiële volgnummer en vraagt ​​de server om te reageren met een ACK-pakket dat de succesvolle ontvangst van het SYN-pakket van de client bevestigt. Vervolgens stuurt de server het SYN-pakket met het initiële volgnummer naar de client en wacht op een definitieve reactie van de client om te garanderen dat de initiële volgnummers betrouwbaar gesynchroniseerd zijn.

Synchroniseer de beginserienummers van beide partijen.

Hoewel een vierweg-handshake 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 drieweg-handshake. De twee handshakes garanderen echter alleen dat het initiële volgnummer van de ene partij succesvol door de andere partij wordt ontvangen, maar bieden geen garantie dat de initiële volgnummers van beide partijen worden bevestigd. Daarom is de drieweg-handshake de beste keuze om de stabiliteit en betrouwbaarheid van TCP-verbindingen te waarborgen.

Reden 3: Voorkom verspilling van hulpbronnen
Als er slechts een "twee-handshake" plaatsvindt, kan de client, wanneer het SYN-verzoek in het netwerk wordt geblokkeerd, het door de server verzonden ACK-pakket niet ontvangen, waardoor het SYN-verzoek opnieuw wordt verzonden. Omdat er echter geen derde handshake plaatsvindt, kan de server niet vaststellen of de client een ACK-bevestiging heeft ontvangen om de verbinding tot stand te brengen. Daarom kan de server pas proactief een verbinding tot stand brengen na ontvangst van elk SYN-verzoek. Dit leidt tot het volgende:

Verspilling van resources: Als het SYN-verzoek van de client wordt geblokkeerd, wat resulteert in de herhaalde verzending van meerdere SYN-pakketten, zal de server na ontvangst van het verzoek meerdere overbodige, ongeldige verbindingen tot stand brengen. Dit leidt tot een onnodige verspilling van serverresources.

Berichtretentie: Door het ontbreken van een derde handshake weet de server niet of de client de ACK-bevestiging correct heeft ontvangen om de verbinding tot stand te brengen. Als gevolg hiervan zal de client, als berichten in het netwerk vastlopen, steeds opnieuw SYN-verzoeken versturen, waardoor de server constant nieuwe verbindingen moet maken. Dit leidt tot meer netwerkcongestie en vertraging en heeft een negatieve invloed op de algehele netwerkprestaties.

Voorkom verspilling van hulpbronnen.

Om de stabiliteit en betrouwbaarheid van de netwerkverbinding te waarborgen, gebruikt TCP daarom de drieweg-handshake om de verbinding tot stand te brengen en zo het ontstaan ​​van deze problemen te voorkomen.

Samenvatting
DeNetwerkpakketbrokerHet tot stand brengen van een TCP-verbinding gebeurt via een drieweg-handshake. Tijdens de drieweg-handshake stuurt de client eerst een pakket met de SYN-vlag naar de server, waarmee wordt aangegeven dat er een verbinding tot stand wil worden gebracht. Na ontvangst van het verzoek van de client stuurt de server een pakket met de SYN- en ACK-vlaggen terug naar de client, waarmee wordt aangegeven dat het verbindingsverzoek is geaccepteerd, en stuurt zijn eigen initiële volgnummer. Ten slotte stuurt de client een ACK-vlag terug naar de server om aan te geven dat de verbinding succesvol tot stand is gebracht. Beide partijen bevinden zich dan in de ESTABLISHED-status en kunnen gegevens naar elkaar verzenden.

Over het algemeen is het drieweg-handshake-proces voor het tot stand brengen van een TCP-verbinding ontworpen om de stabiliteit en betrouwbaarheid van de verbinding te garanderen, verwarring en verspilling van resources door historische verbindingen te voorkomen en ervoor te zorgen dat beide partijen gegevens kunnen ontvangen en verzenden.


Geplaatst op: 8 januari 2025