Viktiga mysterier med TCP-anslutningar för nätverkspaketmäklare: Avmystifierade behovet av trippelhandskakning

TCP-anslutningsinställningar
När vi surfar på webben, skickar ett e-postmeddelande eller spelar ett onlinespel tänker vi ofta inte på den komplexa nätverksanslutningen bakom den. Det är dock dessa till synes små steg som säkerställer stabil kommunikation mellan oss och servern. Ett av de viktigaste stegen är TCP-anslutningskonfigurationen, och kärnan i detta är trevägshandskakningen.

Den här artikeln kommer att diskutera principen, processen och vikten av trevägshandskakningen i detalj. Steg för steg förklarar vi varför trevägshandskakningen behövs, hur den säkerställer anslutningsstabilitet och tillförlitlighet, och hur viktig den är för dataöverföring. Med en djupare förståelse av trevägshandskakningen får vi en bättre förståelse för de underliggande mekanismerna för nätverkskommunikation och en tydligare bild av tillförlitligheten hos TCP-anslutningar.

TCP trevägshandskakningsprocess och tillståndsövergångar
TCP är ett anslutningsorienterat transportprotokoll som kräver att en anslutning upprättas innan dataöverföring. Denna anslutningsprocess utförs med en trevägshandskakning.

 TCP trevägshandskakning

Låt oss titta närmare på TCP-paketen som skickas i varje anslutning.

Inledningsvis är både klienten och servern STÄNGDA. Först lyssnar servern aktivt på en port och är i LISTEN-läge, vilket innebär att servern måste startas. Därefter är klienten redo att börja komma åt webbsidan. Den behöver upprätta en anslutning till servern. Formatet för det första anslutningspaketet är följande:

 SYN-paket

När en klient initierar en anslutning genererar den ett slumpmässigt initialt sekvensnummer (client_isn) och placerar det i fältet "Sekvensnummer" i TCP-headern. Samtidigt sätter klienten SYN-flaggans position till 1 för att indikera att det utgående paketet är ett SYN-paket. Klienten indikerar att den vill upprätta en anslutning till servern genom att skicka det första SYN-paketet till servern. Detta paket innehåller inte applikationslagerdata (det vill säga skickade data). Vid denna tidpunkt markeras klientens status som SYN-SENT.

SYN+ACK-paket

När en server tar emot ett SYN-paket från en klient, initierar den slumpmässigt sitt eget serienummer (server_isn) och skriver sedan in det numret i fältet "Serienummer" i TCP-headern. Därefter skriver servern in client_isn + 1 i fältet "Bekräftelsenummer" och sätter både SYN- och ACK-bitarna till 1. Slutligen skickar servern paketet till klienten, vilket inte innehåller några applikationslagerdata (och inga data för servern att skicka). För närvarande är servern i SYN-RCVD-läge.

ACK-paket

När klienten tar emot paketet från servern behöver den utföra följande optimeringar för att svara på det slutliga svarspaketet: Först sätter klienten ACK-biten i TCP-headern i svarspaketet till 1; Sedan anger klienten värdet server_isn + 1 i fältet "Bekräfta svarsnummer"; Slutligen skickar klienten paketet till servern. Detta paket kan bära data från klienten till servern. När dessa operationer är slutförda kommer klienten att gå in i tillståndet ESTABLISHED.

När servern tar emot svarspaketet från klienten växlar den också till tillståndet ESTABLISHED.

Som du kan se av processen ovan, när man utför en trevägshandskakning, tillåts den tredje handskakningen bära data, men inte de två första handskakningarna. Detta är en fråga som ofta ställs i intervjuer. När trevägshandskakningen är klar går båda parter in i tillståndet ETABLERAT, vilket indikerar att anslutningen har upprättats, varvid klienten och servern kan börja skicka data till varandra.

Varför tre handslag? Inte två, utan fyra?
Det vanliga svaret är: "Eftersom trevägshandskakningen garanterar möjligheten att ta emot och skicka." Detta svar är korrekt, men det är bara den ytliga anledningen, den anger inte huvudorsaken. I det följande kommer jag att analysera orsakerna till trippelhandskakningen ur tre aspekter för att fördjupa vår förståelse av denna fråga.

Trevägshandskakningen kan effektivt undvika initialisering av historiskt upprepade anslutningar (den främsta orsaken)
Trevägshandskakningen garanterar att båda parter har fått ett tillförlitligt initialt sekvensnummer.
Trevägshandskakningen undviker slöseri med resurser.

Anledning 1: Undvik historiska dubbletter
Kort sagt är den främsta anledningen till trevägshandskakningen att undvika förvirring orsakad av initiering av gamla duplicerade anslutningar. I en komplex nätverksmiljö skickas inte alltid överföringen av datapaket till destinationsvärden i enlighet med den angivna tiden, och gamla datapaket kan anlända till destinationsvärden först på grund av nätverksöverbelastning och andra orsaker. För att undvika detta använder TCP en trevägshandskakning för att upprätta anslutningen.

trevägshandskakning undviker historiska dubbletter

När en klient skickar flera SYN-anslutningspaket i följd, i situationer som nätverksöverbelastning, kan följande inträffa:

1- De gamla SYN-paketen anländer till servern före de senaste SYN-paketen.
2- Servern svarar med ett SYN + ACK-paket till klienten efter att ha mottagit det gamla SYN-paketet.
3- När klienten tar emot SYN + ACK-paketet fastställer den att anslutningen är en historisk anslutning (sekvensnummer har gått ut eller timeout) enligt dess egen kontext, och skickar sedan RST-paketet till servern för att avbryta anslutningen.

Med en tvåhandskakningsanslutning finns det inget sätt att avgöra om den aktuella anslutningen är en historisk anslutning. Trevägshandskakningen låter klienten avgöra om den aktuella anslutningen är en historisk anslutning baserat på kontexten när den är redo att skicka det tredje paketet:

1- Om det är en historisk anslutning (sekvensnumret har gått ut eller timeout), är paketet som skickas av den tredje handskakningen ett RST-paket för att avbryta den historiska anslutningen.
2- Om det inte är en historisk anslutning är paketet som skickas för tredje gången ett ACK-paket, och de två kommunicerande parterna har framgångsrikt upprättat anslutningen.

Därför är den främsta anledningen till att TCP använder trevägshandskakning att den initierar anslutningen för att förhindra historiska anslutningar.

Orsak 2: För att synkronisera de initiala sekvensnumren för båda parter
Båda sidor av TCP-protokollet måste ha ett sekvensnummer, vilket är en nyckelfaktor för att säkerställa tillförlitlig överföring. Sekvensnummer spelar en viktig roll i TCP-anslutningar. De gör följande:

Mottagaren kan eliminera dubbletter av data och säkerställa informationens riktighet.

Mottagaren kan ta emot paket i sekvensnummerordning för att säkerställa dataintegriteten.

● Sekvensnumret kan identifiera datapaketet som har mottagits av den andra parten, vilket möjliggör tillförlitlig dataöverföring.

Därför, när en TCP-anslutning upprättas, skickar klienten SYN-paket med det initiala sekvensnumret och kräver att servern svarar med ett ACK-paket som indikerar att klientens SYN-paket har mottagits. Sedan skickar servern SYN-paketet med det initiala sekvensnumret till klienten och väntar på att klienten ska svara, en gång för alla, för att säkerställa att de initiala sekvensnumren är tillförlitligt synkroniserade.

Synkronisera de initiala serienumren för båda parter

Även om en fyrvägshandskakning också är möjlig för att tillförlitligt synkronisera de initiala sekvensnumren för båda parter, kan det andra och tredje steget kombineras till ett enda steg, vilket resulterar i en trevägshandskakning. De två handskakningarna kan dock bara garantera att den ena partens initiala sekvensnummer tas emot av den andra parten, men det finns ingen garanti för att den initiala sekvensnumret för båda parter kan bekräftas. Därför är en trevägshandskakning det bästa valet att göra för att säkerställa stabiliteten och tillförlitligheten hos TCP-anslutningar.

Anledning 3: Undvik att slösa resurser
Om det bara finns en "tvåhandskakning", när klientens SYN-begäran är blockerad i nätverket, kan klienten inte ta emot ACK-paketet som skickats av servern, så SYN-begäran kommer att skickas om. Men eftersom det inte finns någon tredje handskakning kan servern inte avgöra om klienten fick en ACK-bekräftelse för att upprätta anslutningen. Därför kan servern bara proaktivt upprätta en anslutning efter att ha mottagit varje SYN-begäran. Detta leder till följande:

Resursslöseri: Om klientens SYN-begäran blockeras, vilket resulterar i upprepad överföring av flera SYN-paket, kommer servern att upprätta flera redundanta ogiltiga anslutningar efter att ha mottagit begäran. Detta leder till onödigt slöseri med serverresurser.

Meddelandekvarhållning: På grund av avsaknaden av en tredje handskakning har servern inget sätt att veta om klienten korrekt tog emot ACK-bekräftelsen för att upprätta anslutningen. Som ett resultat, om meddelanden fastnar i nätverket, kommer klienten att fortsätta skicka SYN-förfrågningar om och om igen, vilket gör att servern ständigt upprättar nya anslutningar. Detta kommer att öka nätverksbelastningen och fördröjningen och påverka den totala nätverksprestanda negativt.

Undvik att slösa resurser

För att säkerställa nätverksanslutningens stabilitet och tillförlitlighet använder TCP därför trevägshandskakning för att upprätta anslutningen och undvika att dessa problem uppstår.

Sammanfattning
DeNätverkspaketmäklareTCP-anslutning upprättas med en trevägshandskakning. Under trevägshandskakningen skickar klienten först ett paket med SYN-flaggan till servern, vilket indikerar att den vill upprätta en anslutning. Efter att ha mottagit begäran från klienten svarar servern ett paket med SYN- och ACK-flaggor till klienten, vilket indikerar att anslutningsbegäran är accepterad, och skickar sitt eget initiala sekvensnummer. Slutligen svarar klienten med en ACK-flagga till servern för att indikera att anslutningen har upprättats. Därmed är de två parterna i tillståndet ESTABLISHED och kan börja skicka data till varandra.

Generellt sett är trevägshandskakningsprocessen för TCP-anslutningsupprättning utformad för att säkerställa anslutningsstabilitet och tillförlitlighet, undvika förvirring och slöseri med resurser över historiska anslutningar och säkerställa att båda parter kan ta emot och skicka data.


Publiceringstid: 8 januari 2025