Nyckelmysterier för nätverkspaketmäklare TCP -anslutningar: Avmystifierade behovet av trippelhandskakning

TCP -anslutningsinställning
När vi bläddrar på webben, skickar ett e -postmeddelande eller spelar ett onlinespel, tänker vi ofta inte på den komplexa nätverksanslutningen bakom den. Det är emellertid dessa till synes små steg som säkerställer 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ä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 viktigt det är för dataöverföring. Med en djupare förståelse av 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 för TCP-anslutningar.

TCP trevägshandskakningsprocess och tillståndsövergångar
TCP är ett anslutningsorienterat transportprotokoll, som kräver anslutningsanläggning före dataöverföring. Denna anslutningsprocess görs genom en trevägs handskakning.

 TCP trevägshandskakning

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

Ursprungligen är både klienten och servern stängda. Först lyssnar servern aktivt på en port och är i lyssningstillståndet, vilket innebär att servern måste startas. Därefter är klienten redo att börja komma åt webbsidan. Det måste skapa en anslutning till servern. Formatet för det första anslutningspaketet är som följer:

 Synpaket

När en klient initierar en anslutning genererar den ett slumpmässigt initialt sekvensnummer (CLICE_ISN) och placerar det i fältet "Sekvensnummer" i TCP -rubriken. Samtidigt ställer klienten Syn Flag -positionen till 1 för att indikera att det utgående paketet är ett SYN -paket. Klienten indikerar att den vill upprätta en anslutning med servern genom att skicka det första synpaketet till servern. Detta paket innehåller inte applikationslagerdata (det vill säga data som skickas). Vid denna tidpunkt är klientens status markerad som SYN-SENT.

Syn+ACK -paket

När en server tar emot ett synpaket från en klient initialiserar det slumpmässigt sitt eget serienummer (server_isn) och sätter sedan det numret i fältet "Serienummer" i TCP -rubriken. Därefter kommer servern in i klient_isn + 1 i fältet "Erkännande nummer" och ställer in både SYN- och ACK-bitar till 1. Slutligen skickar servern paketet till klienten, som inte innehåller någon applikationsskiktdata (och ingen data för att servern ska skicka). För närvarande är servern i Syn-RCVD-tillstånd.

Ack -paket

När klienten har fått paketet från servern måste det utföra följande optimeringar för att svara på det slutliga svarspaketet: Först ställer klienten ACK -biten i TCP -rubriken för svarspaketet till 1; För det andra kommer klienten in i värdet SERVER_ISN + 1 i fältet "Bekräfta svarnummer"; Slutligen skickar klienten paketet till servern. Detta paket kan bära data från klienten till servern. Efter avslutad verksamhet kommer klienten att gå in i det etablerade tillståndet.

När servern har fått svarspaketet från klienten byter det också till det etablerade tillståndet.

Som du kan se från ovanstående process, när du utför en trevägshandskakning, får den tredje handskakningen bära data, men de två första handskakningarna är det inte. Detta är en fråga som ofta ställs i intervjuer. När trevägshandskakningen är klar, kommer båda parter in i det etablerade tillståndet, vilket indikerar att anslutningen har framgångsrikt etablerats, då klienten och servern kan börja skicka data till varandra.

Varför tre handskakningar? Inte två gånger, fyra gånger?
Det vanliga svaret är, "Eftersom trevägshandskakningen garanterar förmågan att ta emot och skicka." Det här svaret är korrekt, men det är bara ytan, inte lägger fram huvudorsaken. I det följande kommer jag att analysera orsakerna till trippelhandskakningen från tre aspekter för att fördjupa vår förståelse för denna fråga.

Trevägshandskakningen kan effektivt undvika initialiseringen av historiskt upprepade anslutningar (huvudorsaken)
Trevägshandskakningen garanterar att båda parter har fått ett pålitligt initial sekvensnummer.
Trevägshandskakningen undviker att slösa bort resurser.

Orsak 1: Undvik historiska duplicerade sammanfogningar
I ett nötskal är det främsta skälet till trevägshandskakningen att undvika förvirring orsakad av den gamla duplikatanslutningsinitieringen. I en komplex nätverksmiljö skickas inte överföringen av datapaket inte alltid till destinationsvärdet i enlighet med den angivna tiden, och gamla datapaket kan komma till destinationsvärdet först på grund av nätverkstockning och andra skäl. För att undvika detta använder TCP en trevägshandskakning för att fastställa anslutningen.

Trevägshandskakning undviker historiska duplicerade anslutningar

När en klient skickar flera Syn Connection -etableringspaket i följd, i situationer som nätverkstockning, kan följande uppstå:

1- De gamla synpaketen anländer till servern före de senaste synpaketen.
2- Servern svarar 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 det att anslutningen är en historisk anslutning (sekvensnummer som löper ut eller timeout) enligt sitt eget sammanhang och sedan skickar det första paketet till servern för att avbryta anslutningen.

Med en tvåhandskakningsanslutning finns det inget sätt att avgöra om den nuvarande anslutningen är en historisk anslutning. Trevägshandskakningen gör det möjligt för klienten att avgöra om den aktuella anslutningen är en historisk anslutning baserad 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 första 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å kommunikationspartierna skapar anslutningen.

Därför är det främsta skälet till att TCP använder trevägshandskakningen att den initialiserar anslutningen för att förhindra historiska anslutningar.

Anledning 2: För att synkronisera de initiala sekvensnumren för båda parter
Båda sidor av TCP -protokollet måste upprätthålla 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 duplicerade data och säkerställa dataens noggrannhet.

Mottagaren kan ta emot paket i storleksordningen för sekvensnumret för att säkerställa dataens integritet.

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

Därför skickar klienten Syn -paket med det initiala sekvensnumret efter att ha skapat en TCP -anslutning och kräver att servern svarar med ett ACK -paket som indikerar en 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 pålitligt synkroniserade.

Synkronisera de initiala serienumren för båda parter

Även om ett fyrvägshandskakning också är möjligt att på ett tillförlitligt sätt synkronisera det initiala sekvensnumret för båda parter, kan de andra och tredje stegen kombineras till ett enda steg, vilket resulterar i en trevägshandskakning. De två handskakningarna kan emellertid bara garantera att det initiala sekvensnumret för en part framgångsrikt tas emot av den andra parten, men det finns ingen garanti för att det initiala sekvensnumret för båda parter kan bekräftas. Därför är trevägshandskakningen det bästa valet att ta för att säkerställa stabiliteten och tillförlitligheten för 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 skickas av servern, så SYN kommer att håsta. Eftersom det inte finns någon tredje handskakning kan servern inte avgöra om klienten fick ett ACK -bekräftelse för att fastställa anslutningen. Därför kan servern endast proaktivt upprätta en anslutning efter att ha mottagit varje SYN -begäran. Detta leder till följande:

Slösning av resurser: Om klientens SYN -begäran är blockerad, vilket resulterar i upprepad överföring av flera synpaket, kommer servern att upprätta flera redundanta ogiltiga anslutningar efter att ha fått begäran. Detta leder till ett onödigt slöseri med serverresurser.

Meddelanderetention: På grund av bristen på en tredje handskakning har servern inget sätt att veta om klienten korrekt fick ACK -bekräftelsen för att fastställa 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 skapar nya anslutningar. Detta kommer att öka nätverkets trängsel och försena och påverka den totala nätverksprestanda.

Undvik att slösa bort resurser

För att säkerställa stabiliteten och tillförlitligheten för nätverksanslutningen använder TCP därför trevägshandskakningen för att fastställa anslutningen för att undvika förekomsten av dessa problem.

Sammanfattning
DeNätverkspaketTCP-anslutningsanläggning görs med en trevägs handskakning. Under trevägshandskakningen skickar klienten först ett paket med synflaggan till servern, vilket indikerar att den vill skapa 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 accepteras och skickar sitt eget initiala sekvensnummer. Slutligen svarar klienten med en ACK -flagga till servern för att indikera att anslutningen har upprättats framgångsrikt. Således är de två parterna i den etablerade staten och kan börja skicka data till varandra.

I allmänhet är den trevägs handskakningsprocessen för TCP-anslutningsanläggning utformad för att säkerställa anslutningsstabilitet och tillförlitlighet, undvika förvirring och slöseri med resurser över historiska förbindelser och se till att båda parter kan ta emot och skicka data.


Posttid: Jan-08-2025