Viktiga mysterier med Network Packet Broker TCP-anslutningar: Avmystifierade behovet av Triple Handshake

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 det. Det är dock dessa till synes små steg som säkerställer en stabil kommunikation mellan oss och servern. Ett av de viktigaste stegen är TCP-anslutningsinställningen, och kärnan i detta är trevägshandskakningen.

Den här artikeln kommer att diskutera principen, processen och vikten av trevägshandslaget i detalj. Steg för steg kommer vi att förklara varför trevägshandskakningen behövs, hur det säkerställer anslutningsstabilitet och tillförlitlighet och hur viktigt det är för dataöverföring. Med en djupare förståelse för trevägshandskakningen kommer vi att få 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ägs handskakningsprocess och tillståndsövergångar
TCP är ett anslutningsorienterat transportprotokoll som kräver upprättande av anslutning innan dataöverföring. Denna process för upprättande av anslutning görs genom ett trevägshandslag.

 TCP trevägshandslag

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

Till en början ä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 måste upprätta en anslutning till servern. Formatet för det första anslutningspaketet är som följer:

 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-huvudet. Samtidigt sätter klienten SYN-flaggpositionen 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-SÄND.

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 lägger sedan in det numret i fältet "Serial number" i TCP-huvudet. Därefter anger servern client_isn + 1 i fältet "Bekräftelsenummer" och sätter både SYN- och ACK-bitar till 1. Slutligen skickar servern paketet till klienten, som inte innehåller några applikationslagerdata (och inga data för servern) att skicka). För närvarande är servern i SYN-RCVD-tillstånd.

ACK-paket

När klienten väl tar emot paketet från servern måste den utföra följande optimeringar för att svara på det slutliga svarspaketet: Först ställer klienten in ACK-biten i TCP-huvudet för svarspaketet till 1; För det andra 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. Efter slutförandet av dessa operationer kommer klienten att gå in i ETABLISHED-tillståndet.

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

Som du kan se från ovanstående process, när du utför en trevägshandskakning, tillåts den tredje handskakningen bära data, men de två första handskakningarna är det inte. Det är en fråga som ofta ställs i intervjuer. När trevägshandskakningen är klar går båda parter in i ETABLISHED-tillståndet, vilket indikerar att anslutningen har upprättats, vid vilken tidpunkt klienten och servern kan börja skicka data till varandra.

Varför tre handslag? Inte två gånger, fyra gånger?
Det vanliga svaret är: "Eftersom trevägshandslaget garanterar förmågan att ta emot och skicka." Det här svaret är korrekt, men det är bara ytan skäl, inte lägga fram huvudorsaken. I det följande kommer jag att analysera orsakerna till det tredubbla handslaget ur tre aspekter för att fördjupa vår förståelse av denna fråga.

Trevägshandslaget kan effektivt undvika initiering av historiskt upprepade anslutningar (huvudorsaken)
Trevägshandslaget garanterar att båda parter har fått ett tillförlitligt initialt sekvensnummer.
Trevägshandslaget undviker slöseri med resurser.

Orsak 1: Undvik historiska dubbletter
I ett nötskal är huvudorsaken till trevägshandskakningen för att undvika förvirring orsakad av den gamla dubbla anslutningsinitieringen. I en komplex nätverksmiljö skickas överföringen av datapaket inte alltid till destinationsvärden i enlighet med den angivna tiden, och gamla datapaket kan anlända till destinationsvärden först på grund av nätverksstockning och andra skäl. För att undvika detta använder TCP en trevägshandskakning för att upprätta anslutningen.

trevägshandslag undviker historiska dubbletter av anslutningar

När en klient skickar flera SYN-anslutningsetableringspaket 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 kommer att svara ett SYN + ACK-paket till klienten efter att ha tagit emot det gamla SYN-paketet.
3- När klienten tar emot SYN + ACK-paketet bestämmer den att anslutningen är en historisk anslutning (sekvensnummer har löpt ut eller timeout) enligt sitt eget sammanhang, 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å sammanhanget när den är redo att skicka det tredje paketet:

1- Om det är en historisk anslutning (sekvensnummer 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 upprättar anslutningen.

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

Orsak 2: För att synkronisera de första 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 att data är korrekta.

Mottagaren kan ta emot paket i ordningsföljd enligt sekvensnumret för att säkerställa dataintegriteten.

● Sekvensnumret kan identifiera datapaketet som har tagits emot 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 framgångsrik mottagning av klientens SYN-paket. 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 första 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 det initiala sekvensnumret för den ena parten framgångsrikt tas emot av den andra parten, men det finns ingen garanti för att det initiala sekvensnumret för båda parterna kan bekräftas. Därför är trevägshandskakning det bästa valet att ta för att säkerställa stabiliteten och tillförlitligheten hos TCP-anslutningar.

Orsak 3: Undvik att slösa med 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 skickas av servern, så SYN kommer att skickas igen. 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 endast proaktivt upprätta en anslutning efter att ha tagit emot varje SYN-begäran. Detta leder till följande:

Slöseri med resurser: 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 tagit emot begäran. Detta leder till ett onödigt slöseri med serverresurser.

Meddelandelagring: På grund av avsaknaden av en tredje handskakning har servern inget sätt att veta om klienten korrekt tagit 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ätverksstockning och fördröjning och påverka den övergripande nätverksprestandan negativt.

Undvik att slösa med resurser

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

Sammanfattning
DeNätverkspaketmäklareTCP-anslutning upprättas med ett trevägshandslag. 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 har accepterats, och skickar sitt eget initiala sekvensnummer. Slutligen svarar klienten med en ACK-flagga till servern för att indikera att anslutningen har upprättats. Således är de två parterna i ETABLISTERAT tillstånd och kan börja skicka data till varandra.

I allmänhet är trevägshandskakningsprocessen för etablering av TCP-anslutningar 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.


Posttid: Jan-08-2025