TCP -forbindelsesopsætning
Når vi gennemser internettet, sender en e -mail eller spiller et online spil, 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 trevejs håndtryk.
Denne artikel vil diskutere princippet, processen og betydningen af trevejs håndtryk i detaljer. Trin for trin, vi forklarer, hvorfor der er behov for tre-vejs håndtryk, hvordan det sikrer forbindelsesstabilitet og pålidelighed, og hvor vigtigt det er for dataoverførsel. Med en dybere forståelse af det trevejs håndtryk får vi 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 statsovergange
TCP er en forbindelsesorienteret transportprotokol, som kræver tilslutning af forbindelse inden datatransmission. Denne forbindelses etableringsproces udføres af et trevejs håndtryk.
Lad os se nærmere på de TCP -pakker, der sendes i hver forbindelse.
Oprindeligt er både klienten og serveren lukket. Først lytter serveren aktivt på en port og er i lyttilstand, hvilket betyder, at serveren skal startes. Dernæst er klienten klar til at begynde at få adgang til websiden.Det skal etablere en forbindelse med serveren. Formatet for den første forbindelsespakke er som følger:
Når en klient indleder en forbindelse, genererer den et tilfældigt indledende sekvensnummer (client_isn) og placerer det i feltet "sekvensnummer" i TCP -header. På samme tid indstiller klienten SYN -flag -positionen 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 sendt data). 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 nummeret i "serienummer" -feltet i TCP -overskriften. Dernæst indtaster serveren client_isn + 1 i feltet "Anerkendelsesnummer" og indstiller både SYN og ACK-bits til 1. Endelig sender serveren pakken til klienten, der ikke indeholder nogen applikationslagsdata (og ingen data for serveren at sende). På dette tidspunkt er serveren i syn-rcvd-tilstand.
Når klienten har modtaget pakken fra serveren, skal den udføre følgende optimeringer for at svare på den endelige svarpakke: For det første indstiller klienten ACK -biten af TCP -overskriften i svarpakken til 1; For det andet kommer klienten ind i værdien server_isn + 1 i feltet "Bekræft svarnummer"; Endelig sender klienten pakken til serveren. Denne pakke kan transportere data fra klienten til serveren. Efter afslutningen af disse operationer kommer klienten ind i den etablerede tilstand.
Når serveren modtager svarpakken fra klienten, skifter den også til den etablerede tilstand.
Som du kan se fra ovenstående proces, når du udfører et trevejs håndtryk, får det tredje håndtryk lov til at bære data, men de to første håndtryk er det ikke. Dette er et spørgsmål, der ofte stilles i interviews. Når tre-vejs håndtryk er afsluttet, kommer begge parter ind i den etablerede tilstand, hvilket indikerer, at forbindelsen er blevet etableret med succes, på hvilket tidspunkt klienten og serveren kan begynde at sende data til hinanden.
Hvorfor tre håndtryk? Ikke to gange, fire gange?
Det almindelige svar er, "Fordi den trevejs håndtryk garanterer evnen til at modtage og sende." Dette svar er korrekt, men det er kun overfladeårsagen, fremfører ikke hovedårsagen. I det følgende vil jeg analysere årsagerne til tredobbelt håndtryk fra tre aspekter for at uddybe vores forståelse af dette spørgsmål.
Tre-vejs håndtryk kan effektivt undgå initialisering af historisk gentagne forbindelser (hovedårsagen)
Tre-vejs håndtryk garanterer, at begge parter har modtaget et pålideligt indledende sekvensnummer.
Tre-vejs håndtryk undgår at spilde ressourcer.
Årsag 1: Undgå historiske duplikatforhold
I et nøddeskal er hovedårsagen til trevejs håndtryk at undgå forvirring forårsaget af den gamle duplikatforbindelsesinitialisering. I et komplekst netværksmiljø sendes transmission af datapakker ikke altid til destinationsværten i overensstemmelse med den specificerede tid, og gamle datapakker kan først ankomme til destinationsværten på grund af netværksoverbelastning og andre grunde. For at undgå dette bruger TCP et tre-vejs håndtryk til at etablere forbindelsen.
Når en klient sender flere SYN -forbindelses etableringspakker i rækkefølge, i situationer såsom netværksoverbelastning, kan følgende forekomme:
1- De gamle synpakker ankommer til serveren inden de nyeste synpakker.
2- Serveren svarer 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 den første pakket til serveren for at afbryde forbindelsen.
Med en to-håndshake-forbindelse er der ingen måde at afgøre, om den aktuelle forbindelse er en historisk forbindelse. Tre-vejs håndtryk 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 første 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 opretter med succes forbindelsen.
Derfor er hovedårsagen til, at TCP bruger trevejs håndtryk, at det 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, som 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 duplikatdata og sikre nøjagtigheden af dataene.
Modtageren kan modtage pakker i rækkefølgen af sekvensnummeret for at sikre integriteten af dataene.
● Sekvensnummeret kan identificere den datapakke, der er modtaget af den anden part, hvilket muliggør pålidelig datatransmission.
Efter 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 en vellykket modtagelse af klientens SYN -pakke. Derefter sender serveren SYN -pakken med det indledende sekvensnummer til klienten og venter på, at klienten svarer en gang for alle for at sikre, at de indledende sekvensnumre er pålideligt synkroniserede.
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 trevejs håndtryk. Imidlertid kan de to håndtryk kun garantere, at det indledende sekvensnummer på den ene part med succes modtages af den anden part, men der er ingen garanti for, at det indledende sekvensnummer for begge parter kan bekræftes. Derfor er trevejshåndtryk 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 en "to-håndshake", når klienten SYN-anmodningen er blokeret i netværket, kan klienten ikke modtage ACK-pakken sendt af serveren, så synet vil være med. Da der ikke er noget tredje håndtryk, kan serveren ikke afgøre, om klienten har modtaget en ACK -anerkendelse for at etablere forbindelsen. Derfor kan serveren kun proaktivt etablere en forbindelse efter modtagelse af hver SYN -anmodning. Dette fører til følgende:
Affald af ressourcer: Hvis klientens SYN -anmodning er blokeret, hvilket resulterer i gentagen transmission af flere SYN -pakker, vil serveren etablere flere overflødige ugyldige forbindelser efter at have modtaget anmodningen. Dette fører til et unødvendigt spild af serverressourcer.
Meddelelsesopbevaring: På grund af manglen på et tredje håndtryk har serveren ingen måde at vide, om klienten korrekt modtog ACK -anerkendelsen for at etablere forbindelsen. Som et resultat, hvis meddelelser sidder fast i netværket, vil klienten fortsætte 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 samlede netværksydelse negativt.
For at sikre stabiliteten og pålideligheden af netværksforbindelsen bruger TCP derfor tre-vejs håndtryk til at etablere forbindelsen for at undgå forekomsten af disse problemer.
Oversigt
DeNetværkspakke mæglerTCP-forbindelsesetablering udføres med et trevejs håndtryk. I løbet af det trevejs håndtryk 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 accepteres, og sender sit eget oprindelige sekvensnummer. Endelig svarer klienten med et ACK -flag til serveren for at indikere, at forbindelsen er blevet etableret med succes. De to parter er således i den etablerede tilstand og kan begynde at sende data til hinanden.
Generelt er den trevejs håndtryksproces for TCP-forbindelse-etablering designet til at sikre forbindelsesstabilitet og pålidelighed, undgå forvirring og spild af ressourcer i forhold til historiske forbindelser og sikre, at begge parter er i stand til at modtage og sende data.
Posttid: Jan-08-2025