Opsætning af TCP-forbindelse
Når vi surfer på nettet, sender en e-mail eller spiller et onlinespil, tænker vi ofte ikke på den komplekse netværksforbindelse bagved. Det er dog disse tilsyneladende små trin, der sikrer stabil kommunikation mellem os og serveren. Et af de vigtigste trin er opsætningen af TCP-forbindelsen, og kernen i dette er trevejs-handshake.
Denne artikel vil diskutere princippet, processen og vigtigheden af trevejs-handshake i detaljer. Trin for trin vil vi forklare, hvorfor trevejs-handshake er nødvendigt, hvordan det sikrer forbindelsesstabilitet og pålidelighed, og hvor vigtigt det er for dataoverførsel. Med en dybere forståelse af trevejs-handshake får vi en bedre forståelse af de underliggende mekanismer i netværkskommunikation og et klarere billede af pålideligheden af TCP-forbindelser.
TCP trevejs-handshake-proces og tilstandsovergange
TCP er en forbindelsesorienteret transportprotokol, der kræver etablering af forbindelse før dataoverførsel. Denne forbindelsesoprettelsesproces udføres ved et trevejs-handshake.
Lad os se nærmere på de TCP-pakker, der sendes i hver forbindelse.
I starten er både klienten og serveren LUKKET. Først lytter serveren aktivt på en port og er i LYTT-tilstand, hvilket betyder, at serveren skal startes. Derefter er klienten klar til at begynde at tilgå websiden. Den skal oprette en forbindelse til serveren. Formatet for den første forbindelsespakke er som følger:
Når en klient opretter en forbindelse, genererer den et tilfældigt initialt sekvensnummer (client_isn) og placerer det i feltet "Sekvensnummer" i TCP-headeren. Samtidig sætter klienten SYN-flagets position til 1 for at angive, at den udgående pakke er en SYN-pakke. Klienten angiver, at den ønsker at etablere en forbindelse til serveren ved at sende den første SYN-pakke til serveren. Denne pakke indeholder ikke applikationslagsdata (dvs. data sendt). På dette tidspunkt er klientens status markeret som SYN-SENT.
Når en server modtager en SYN-pakke fra en klient, initialiserer den tilfældigt sit eget serienummer (server_isn) og indtaster derefter dette nummer i feltet "Serienummer" i TCP-headeren. Derefter indtaster serveren client_isn + 1 i feltet "Bekræftelsesnummer" og sætter både SYN- og ACK-bits til 1. Til sidst sender serveren pakken til klienten, som ikke indeholder data på applikationslaget (og ingen data, som serveren kan sende). På dette tidspunkt er serveren i SYN-RCVD-tilstand.
Når klienten modtager pakken fra serveren, skal den udføre følgende optimeringer for at svare på den endelige svarpakke: Først sætter klienten ACK-bitten i TCP-headeren i svarpakken til 1; Dernæst indtaster klienten værdien server_isn + 1 i feltet "Bekræft svarnummer". Til sidst sender klienten pakken til serveren. Denne pakke kan overføre data fra klienten til serveren. Når disse operationer er afsluttet, går klienten i tilstanden ETABLERET.
Når serveren modtager svarpakken fra klienten, skifter den også til tilstanden ETABLERET.
Som du kan se af ovenstående proces, må det tredje handshake, når du udfører et trevejs-handshake, bære data, men det må de to første handshakes ikke. Dette er et spørgsmål, der ofte stilles i interviews. Når trevejs-handshaket er gennemført, går begge parter i tilstanden ETABLERET, hvilket indikerer, at forbindelsen er etableret, hvorefter klienten og serveren kan begynde at sende data til hinanden.
Hvorfor tre håndtryk? Ikke to, men fire gange?
Det almindelige svar er: "Fordi trevejshåndtrykket garanterer evnen til at modtage og sende." Dette svar er korrekt, men det er kun den overfladiske årsag, den fremfører ikke hovedårsagen. I det følgende vil jeg analysere årsagerne til det tredobbelte håndtryk ud fra tre aspekter for at uddybe vores forståelse af dette problem.
Trevejs-handshake kan effektivt undgå initialisering af historisk gentagne forbindelser (hovedårsagen)
Trevejshåndtrykket garanterer, at begge parter har modtaget et pålideligt initialt sekvensnummer.
Trevejshåndtrykket undgår spild af ressourcer.
Årsag 1: Undgå historiske duplikater af joins
Kort sagt er hovedårsagen til trevejs-handshake at undgå forvirring forårsaget af initialisering af gamle duplikerede forbindelser. I et komplekst netværksmiljø sendes transmissionen af datapakker ikke altid til destinationsværten i overensstemmelse med det angivne tidspunkt, og gamle datapakker kan ankomme til destinationsværten først på grund af netværksbelastning og andre årsager. For at undgå dette bruger TCP et trevejs-handshake til at etablere forbindelsen.
Når en klient sender flere SYN-forbindelsesetableringspakker efter hinanden, kan følgende forekomme i situationer som netværksbelastning:
1- De gamle SYN-pakker ankommer til serveren før de nyeste SYN-pakker.
2- Serveren vil svare en SYN + ACK-pakke til klienten efter at have modtaget den gamle SYN-pakke.
3- Når klienten modtager SYN + ACK-pakken, bestemmer den, at forbindelsen er en historisk forbindelse (sekvensnummer udløbet eller timeout) i henhold til sin egen kontekst, og sender derefter RST-pakken til serveren for at afbryde forbindelsen.
Med en two-handshake-forbindelse er der ingen måde at afgøre, om den aktuelle forbindelse er en historisk forbindelse. Trevejs-handshake giver klienten mulighed for at afgøre, om den aktuelle forbindelse er en historisk forbindelse baseret på konteksten, når den er klar til at sende den tredje pakke:
1- Hvis det er en historisk forbindelse (sekvensnummer udløbet eller timeout), er pakken sendt af det tredje handshake en RST-pakke til at afbryde den historiske forbindelse.
2- Hvis det ikke er en historisk forbindelse, er pakken, der sendes for tredje gang, en ACK-pakke, og de to kommunikerende parter har etableret forbindelsen.
Derfor er hovedårsagen til, at TCP bruger trevejs-handshake, at det initialiserer forbindelsen for at forhindre historiske forbindelser.
Årsag 2: For at synkronisere de indledende sekvensnumre for begge parter
Begge sider af TCP-protokollen skal opretholde et sekvensnummer, hvilket er en nøglefaktor for at sikre pålidelig transmission. Sekvensnumre spiller en vigtig rolle i TCP-forbindelser. De gør følgende:
Modtageren kan eliminere dubletter og sikre dataenes nøjagtighed.
Modtageren kan modtage pakker i rækkefølge efter sekvensnummer for at sikre dataenes integritet.
● Sekvensnummeret kan identificere den datapakke, som den anden part har modtaget, hvilket muliggør pålidelig dataoverførsel.
Derfor sender klienten, når der er etableret en TCP-forbindelse, SYN-pakker med det indledende sekvensnummer og kræver, at serveren svarer med en ACK-pakke, der angiver vellykket modtagelse af klientens SYN-pakke. Derefter sender serveren SYN-pakken med det indledende sekvensnummer til klienten og venter på, at klienten svarer én gang for alle for at sikre, at de indledende sekvensnumre er pålideligt synkroniseret.
Selvom et firevejs-handshake også er muligt for pålideligt at synkronisere de indledende sekvensnumre for begge parter, kan det andet og tredje trin kombineres til et enkelt trin, hvilket resulterer i et trevejs-handshake. De to handshakes kan dog kun garantere, at den ene parts indledende sekvensnummer modtages af den anden part, men der er ingen garanti for, at den indledende sekvensnummer for begge parter kan bekræftes. Derfor er et trevejs-handshake det bedste valg at tage for at sikre stabiliteten og pålideligheden af TCP-forbindelser.
Årsag 3: Undgå at spilde ressourcer
Hvis der kun er et "to-handshake", når klientens SYN-anmodning er blokeret i netværket, kan klienten ikke modtage den ACK-pakke, der sendes af serveren, så SYN'en vil blive sendt igen. Men da der ikke er et tredje handshake, kan serveren ikke afgøre, om klienten har modtaget en ACK-bekræftelse for at etablere forbindelsen. Derfor kan serveren kun proaktivt etablere en forbindelse efter at have modtaget hver SYN-anmodning. Dette fører til følgende:
Spild af ressourcer: Hvis klientens SYN-anmodning blokeres, hvilket resulterer i gentagen transmission af flere SYN-pakker, vil serveren etablere flere redundante, ugyldige forbindelser efter at have modtaget anmodningen. Dette fører til unødvendigt spild af serverressourcer.
Meddelelsesopbevaring: På grund af manglen på et tredje handshake har serveren ingen måde at vide, om klienten korrekt modtog ACK-bekræftelsen for at etablere forbindelsen. Som følge heraf vil klienten blive ved med at sende SYN-anmodninger igen og igen, hvis meddelelser sidder fast i netværket, hvilket får serveren til konstant at oprette nye forbindelser. Dette vil øge netværksbelastningen og forsinkelsen og påvirke den samlede netværksydelse negativt.
For at sikre netværksforbindelsens stabilitet og pålidelighed bruger TCP derfor trevejs-handshake til at etablere forbindelsen og undgå disse problemer.
Oversigt
DeNetværkspakkemæglerEtablering af TCP-forbindelse sker med et trevejs-handshake. Under trevejs-handshake sender klienten først en pakke med SYN-flaget til serveren, hvilket angiver, at den ønsker at etablere en forbindelse. Efter at have modtaget anmodningen fra klienten, svarer serveren en pakke med SYN- og ACK-flag til klienten, hvilket angiver, at forbindelsesanmodningen er accepteret, og sender sit eget initiale sekvensnummer. Endelig svarer klienten med et ACK-flag til serveren for at indikere, at forbindelsen er etableret. Dermed er de to parter i ETABLERET tilstand og kan begynde at sende data til hinanden.
Generelt er trevejs-handshake-processen til etablering af TCP-forbindelse designet til at sikre forbindelsesstabilitet og pålidelighed, undgå forvirring og spild af ressourcer i forbindelse med historiske forbindelser og sikre, at begge parter er i stand til at modtage og sende data.
Opslagstidspunkt: 8. januar 2025