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 bag det. Det er dog disse tilsyneladende små trin, der sikrer stabil kommunikation mellem os og serveren. Et af de vigtigste trin er TCP-forbindelsesopsætningen, og kernen i dette er trevejshåndtrykket.
Denne artikel vil diskutere princippet, processen og vigtigheden af tre-vejs håndtrykket i detaljer. Trin for trin vil vi forklare, hvorfor tre-vejs håndtrykket er nødvendigt, hvordan det sikrer forbindelsesstabilitet og pålidelighed, og hvor vigtigt det er for dataoverførsel. Med en dybere forståelse af trevejshåndtrykket vil vi få en bedre forståelse af de underliggende mekanismer for netværkskommunikation og et klarere overblik over pålideligheden af TCP-forbindelser.
TCP tre-vejs håndtryksproces og tilstandsovergange
TCP er en forbindelsesorienteret transportprotokol, som kræver oprettelse af forbindelse før datatransmission. Denne forbindelses etableringsproces udføres ved et tre-vejs håndtryk.
Lad os se nærmere på de TCP-pakker, der sendes i hver forbindelse.
I første omgang er både klienten og serveren LUKKET. Først lytter serveren aktivt på en port og er i LISTEN-tilstanden, hvilket betyder at serveren skal startes. Derefter er klienten klar til at begynde at få adgang til websiden. Den skal oprette forbindelse til serveren. Formatet på den første forbindelsespakke er som følger:
Når en klient starter en forbindelse, genererer den et tilfældigt indledende sekvensnummer (client_isn) og placerer det i feltet "Sekvensnummer" i TCP-headeren. Samtidig sætter klienten SYN-flagpositionen til 1 for at indikere, at den udgående pakke er en SYN-pakke. Klienten angiver, at den ønsker at etablere en forbindelse med serveren ved at sende den første SYN-pakke til serveren. Denne pakke indeholder ikke applikationslagsdata (det vil sige 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 sætter derefter dette nummer i feltet "Serial number" 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 nogen applikationslagsdata (og ingen data for serveren) at sende). På dette tidspunkt er serveren i SYN-RCVD-tilstand.
Når først 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 af svarpakken til 1; For det andet 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. Efter afslutning af disse operationer vil klienten gå ind i ETABLERET tilstand.
Når serveren modtager svarpakken fra klienten, skifter den også til ETABLISHED-tilstanden.
Som du kan se fra ovenstående proces, når du udfører et tre-vejs håndtryk, er det tredje håndtryk tilladt at bære data, men de første to håndtryk er ikke. Det er et spørgsmål, der ofte bliver stillet i interviews. Når tre-vejs håndtrykket er fuldført, går begge parter ind i ETABLERET tilstand, hvilket indikerer, at forbindelsen er blevet etableret, hvorefter klienten og serveren kan begynde at sende data til hinanden.
Hvorfor tre håndtryk? Ikke to gange, fire gange?
Det almindelige svar er: "Fordi tre-vejs håndtrykket garanterer muligheden for at modtage og sende." Dette svar er korrekt, men det er kun overfladen grunden, fremsætter 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.
Trevejshåndtrykket kan effektivt undgå initialisering af historisk gentagne forbindelser (hovedårsagen)
Tre-vejs håndtrykket garanterer, at begge parter har modtaget et pålideligt indledende sekvensnummer.
Trevejshåndtrykket undgår ressourcespild.
Årsag 1: Undgå historiske dubletter
I en nøddeskal er hovedårsagen til trevejshåndtrykket for at undgå forvirring forårsaget af den gamle duplikatforbindelsesinitialisering. 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 først til destinationsværten på grund af netværksoverbelastning og andre årsager. For at undgå dette bruger TCP et tre-vejs håndtryk til at etablere forbindelsen.
Når en klient sender flere SYN-forbindelsesetableringspakker efter hinanden, kan følgende forekomme i situationer som netværksoverbelastning:
1- De gamle SYN-pakker ankommer til serveren før de seneste 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 forbindelse med to håndtryk er der ingen måde at afgøre, om den aktuelle forbindelse er en historisk forbindelse. Trevejshåndtrykket giver klienten mulighed for at bestemme, 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 håndtryk en RST-pakke for at afbryde den historiske forbindelse.
2- Hvis det ikke er en historisk forbindelse, er pakken sendt for tredje gang en ACK-pakke, og de to kommunikerende parter etablerer forbindelsen.
Derfor er hovedårsagen til, at TCP bruger trevejshåndtrykket, at den initialiserer forbindelsen for at forhindre historiske forbindelser.
Årsag 2: 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 duplikerede data og sikre nøjagtigheden af dataene.
Modtageren kan modtage pakker i rækkefølgen efter sekvensnummeret for at sikre dataenes integritet.
● Sekvensnummeret kan identificere den datapakke, der er modtaget af den anden part, hvilket muliggør pålidelig datatransmission.
Ved etablering af en TCP-forbindelse sender klienten derfor SYN-pakker med det indledende sekvensnummer og kræver, at serveren svarer med en ACK-pakke, der indikerer 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 fire-vejs håndtryk 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 tre-vejs håndtryk. De to håndtryk kan dog kun garantere, at det første sekvensnummer for den ene part bliver modtaget af den anden part, men der er ingen garanti for, at begge parters oprindelige sekvensnummer kan bekræftes. Derfor er trevejshåndtrykket det bedste valg at tage for at sikre stabiliteten og pålideligheden af TCP-forbindelser.
Årsag 3: Undgå spild af ressourcer
Hvis der kun er et "to-håndtryk", når klientens SYN-anmodning er blokeret i netværket, kan klienten ikke modtage ACK-pakken sendt af serveren, så SYN vil blive sendt igen. Men da der ikke er noget tredje håndtryk, 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 er blokeret, 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.
Beskedopbevaring: På grund af manglen på et tredje håndtryk, har serveren ingen mulighed for at vide, om klienten korrekt modtog ACK-bekræftelsen for at etablere forbindelsen. Som et resultat, hvis meddelelser sætter sig fast i netværket, vil klienten blive ved med at sende SYN-anmodninger igen og igen, hvilket får serveren til konstant at etablere nye forbindelser. Dette vil øge netværkets overbelastning og forsinkelse og påvirke den overordnede netværksydelse negativt.
For at sikre netværksforbindelsens stabilitet og pålidelighed bruger TCP derfor trevejshåndtrykket til at etablere forbindelsen for at undgå forekomsten af disse problemer.
Oversigt
DeNetwork Packet BrokerEtablering af TCP-forbindelse sker med et tre-vejs håndtryk. Under tre-vejs-håndtrykket sender klienten først en pakke med SYN-flaget til serveren, hvilket indikerer, 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 indikerer, at forbindelsesanmodningen er accepteret, og sender sit eget indledende sekvensnummer. Til sidst svarer klienten med et ACK-flag til serveren for at indikere, at forbindelsen er blevet etableret. De to parter er således i ETABLERET tilstand og kan begynde at sende data til hinanden.
Generelt er trevejs-håndtrykprocessen for TCP-forbindelsesetablering designet til at sikre forbindelsesstabilitet og pålidelighed, undgå forvirring og spild af ressourcer over historiske forbindelser og sikre, at begge parter er i stand til at modtage og sende data.
Indlægstid: Jan-08-2025