Belangrijkste mysteries van Network Packet Broker TCP-verbindingen: de noodzaak van Triple 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 erachter zit. Het zijn echter 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 three-way handshake.

Dit artikel bespreekt het principe, het proces en het belang van de three-way handshake in detail. Stap voor stap leggen we uit waarom de three-way handshake nodig is, hoe deze de stabiliteit en betrouwbaarheid van de verbinding waarborgt en hoe belangrijk deze is voor gegevensoverdracht. Met een beter begrip van de three-way handshake krijgen we een beter begrip van de onderliggende mechanismen van netwerkcommunicatie en een duidelijker beeld van de betrouwbaarheid van TCP-verbindingen.

TCP-drieweg-handshakeproces en statusovergangen
TCP is een verbindingsgericht transportprotocol dat vereist dat er een verbinding tot stand wordt gebracht vóór gegevensoverdracht. Dit proces vindt plaats via een drieweg-handshake.

 TCP drieweg-handshake

Laten we de TCP-pakketten die bij elke verbinding worden verzonden, eens nader bekijken.

Aanvankelijk 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 gestart moet worden. Vervolgens is de client klaar om de webpagina te openen. Hij moet een verbinding met de server tot stand brengen. De indeling van het eerste verbindingspakket is als volgt:

 SYN-pakket

Wanneer een client een verbinding tot stand brengt, genereert hij een willekeurig initieel volgnummer (client_isn) en plaatst dit in het veld 'Volgnummer' van de TCP-header. Tegelijkertijd stelt de client de positie van de SYN-vlag 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 gegevens op applicatieniveau (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 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 "Bevestigingsnummer" in en stelt zowel de SYN- als de ACK-bit in op 1. Ten slotte stuurt de server het pakket naar de client, dat geen gegevens op applicatieniveau bevat (en 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 hij de volgende optimalisaties uitvoeren om op het definitieve 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 'Antwoordnummer bevestigen' 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 bewerkingen komt de client in de status ESTABLISHED.

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 een three-way handshake de derde handshake data overdragen, maar de eerste twee handshakes niet. Deze vraag wordt vaak gesteld in interviews. Zodra de three-way handshake is voltooid, komen beide partijen in de ESTABLISHED-status, wat aangeeft dat de verbinding succesvol tot stand is gebracht. Op dat moment kunnen de client en server data naar elkaar verzenden.

Waarom drie keer een handdruk? Niet twee keer, maar vier keer?
Het meest voorkomende antwoord is: "Omdat de drievoudige handdruk de mogelijkheid tot ontvangen en verzenden garandeert." Dit antwoord is correct, maar het is slechts een oppervlakkige reden, het geeft niet de belangrijkste reden aan. Hieronder zal ik de redenen voor de drievoudige handdruk vanuit drie invalshoeken analyseren om ons begrip van deze kwestie te verdiepen.

De drieweg-handshake 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.
Door de drievoudige handdruk worden verspilling van hulpbronnen voorkomen.

Reden 1: Vermijd historische dubbele joins
Kort gezegd is de belangrijkste reden voor de three-way handshake het voorkomen van verwarring door de initialisatie van een oude, dubbele verbinding. In een complexe netwerkomgeving worden datapakketten niet altijd op het opgegeven tijdstip 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 three-way handshake om de verbinding tot stand te brengen.

drieweg-handdruk vermijdt historische dubbele verbindingen

Wanneer een client meerdere SYN-verbindingsopbouwpakketten achter elkaar verzendt, kan in situaties zoals netwerkcongestie het volgende gebeuren:

1- De oude SYN-pakketten arriveren bij de server vóór de nieuwste SYN-pakketten.
2- De server stuurt een SYN + ACK-pakket naar de client nadat het oude SYN-pakket is ontvangen.
3- Wanneer de client het SYN + ACK-pakket ontvangt, bepaalt deze op basis van zijn eigen context dat de verbinding een historische verbinding is (volgnummer verlopen of time-out). Vervolgens stuurt de client het RST-pakket naar de server om de verbinding te verbreken.

Bij een two-handshake-verbinding is het niet mogelijk om te bepalen of de huidige verbinding een historische verbinding is. Met een three-way handshake kan de client op basis van de context 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 (volgnummer verlopen of time-out), is het pakket dat door de derde handshake wordt verzonden een RST-pakket om de historische verbinding te verbreken.
2- Als het geen historische verbinding betreft, is het voor de derde keer verzonden pakket een ACK-pakket en brengen de twee communicerende partijen met succes de verbinding tot stand.

De belangrijkste reden dat TCP de three-way handshake gebruikt, is dat het de verbinding initialiseert om historische verbindingen te voorkomen.

Reden 2: Om de beginvolgnummers van beide partijen te synchroniseren
Beide zijden van het TCP-protocol moeten een volgnummer behouden, wat een belangrijke factor is voor een betrouwbare transmissie. Volgnummers spelen een belangrijke rol in 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 gegevensoverdracht mogelijk is.

Daarom verzendt de client, na 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 verzendt de server het SYN-pakket met het initiële volgnummer naar de client en wacht tot de client eenmalig antwoordt om te garanderen dat de initiële volgnummers betrouwbaar gesynchroniseerd zijn.

Synchroniseer de initiële serienummers van beide partijen

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 garanderen echter alleen dat het initiële volgnummer van de ene partij succesvol 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 driewegshandshake de beste keuze om de stabiliteit en betrouwbaarheid van TCP-verbindingen te garanderen.

Reden 3: Vermijd verspilling van hulpbronnen
Als er alleen een "two-handshake" is, wanneer de SYN-aanvraag van de client in het netwerk wordt geblokkeerd, kan de client het door de server verzonden ACK-pakket niet ontvangen en wordt de SYN opnieuw verzonden. Omdat er echter geen derde handshake is, kan de server niet vaststellen of de client een ACK-bevestiging heeft ontvangen om de verbinding tot stand te brengen. De server kan daarom pas proactief een verbinding tot stand brengen na ontvangst van elke SYN-aanvraag. Dit leidt tot het volgende:

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

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 berichten in het netwerk vastlopen, blijft de client dus steeds opnieuw SYN-verzoeken versturen, waardoor de server voortdurend nieuwe verbindingen tot stand moet brengen. Dit verhoogt de netwerkcongestie en -vertraging en heeft een negatieve invloed op de algehele netwerkprestaties.

Vermijd verspilling van hulpbronnen

Om de stabiliteit en betrouwbaarheid van de netwerkverbinding te garanderen, maakt TCP gebruik van de three-way handshake om de verbinding tot stand te brengen en zo te voorkomen dat deze problemen optreden.

Samenvatting
DeNetwerkpakketmakelaarHet tot stand brengen van de TCP-verbinding gebeurt met een three-way handshake. Tijdens de three-way handshake stuurt de client eerst een pakket met de SYN-vlag naar de server, waarmee wordt aangegeven dat er een verbinding tot stand moet worden gebracht. Nadat de server het verzoek van de client heeft ontvangen, stuurt de server een pakket met de SYN- en ACK-vlaggen terug naar de client, waarmee wordt aangegeven dat het verbindingsverzoek is geaccepteerd. De server stuurt vervolgens 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. De twee partijen bevinden zich dan in de ESTABLISHED-status en kunnen gegevens naar elkaar verzenden.

Over het algemeen is het drieweg-handshakeproces voor het tot stand brengen van een TCP-verbinding ontworpen om de stabiliteit en betrouwbaarheid van de verbinding te garanderen, verwarring en verspilling van bronnen ten opzichte van eerdere verbindingen te voorkomen en ervoor te zorgen dat beide partijen gegevens kunnen ontvangen en verzenden.


Plaatsingstijd: 08-01-2025