Oppsett av TCP-tilkobling
Når vi surfer på nettet, sender en e-post eller spiller et onlinespill, tenker vi ofte ikke på den komplekse nettverkstilkoblingen bak den. Det er imidlertid disse tilsynelatende små trinnene som sikrer stabil kommunikasjon mellom oss og serveren. Et av de viktigste trinnene er oppsettet av TCP-tilkoblingen, og kjernen i dette er treveishåndtrykket.
Denne artikkelen vil diskutere prinsippet, prosessen og viktigheten av treveishåndtrykk i detalj. Steg for steg vil vi forklare hvorfor treveishåndtrykk er nødvendig, hvordan det sikrer forbindelsesstabilitet og pålitelighet, og hvor viktig det er for dataoverføring. Med en dypere forståelse av treveishåndtrykk vil vi få en bedre forståelse av de underliggende mekanismene for nettverkskommunikasjon og et klarere bilde av påliteligheten til TCP-tilkoblinger.
TCP treveis håndtrykkprosess og tilstandsoverganger
TCP er en forbindelsesorientert transportprotokoll som krever etablering av forbindelse før dataoverføring. Denne forbindelsesetableringsprosessen gjøres med et treveis håndtrykk.
La oss se nærmere på TCP-pakkene som sendes i hver forbindelse.
I utgangspunktet er både klienten og serveren STENGT. Først lytter serveren aktivt på en port og er i LYTT-tilstand, noe som betyr at serveren må startes. Deretter er klienten klar til å begynne å få tilgang til nettsiden. Den må opprette en forbindelse med serveren. Formatet til den første tilkoblingspakken er som følger:
Når en klient starter en tilkobling, genererer den et tilfeldig initialt sekvensnummer (client_isn) og plasserer det i feltet "Sekvensnummer" i TCP-headeren. Samtidig setter klienten SYN-flaggposisjonen til 1 for å indikere at den utgående pakken er en SYN-pakke. Klienten indikerer at den ønsker å opprette en tilkobling med serveren ved å sende den første SYN-pakken til serveren. Denne pakken inneholder ikke applikasjonslagsdata (det vil si data sendt). På dette tidspunktet er klientens status merket som SYN-SENT.
Når en server mottar en SYN-pakke fra en klient, initialiserer den tilfeldig sitt eget serienummer (server_isn) og legger deretter dette nummeret inn i feltet «Serienummer» i TCP-headeren. Deretter skriver serveren inn client_isn + 1 i feltet «Bekreftelsesnummer» og setter både SYN- og ACK-bitene til 1. Til slutt sender serveren pakken til klienten, som ikke inneholder noen applikasjonslagsdata (og ingen data som serveren kan sende). På dette tidspunktet er serveren i SYN-RCVD-tilstand.
Når klienten mottar pakken fra serveren, må den utføre følgende optimaliseringer for å svare på den endelige svarpakken: Først setter klienten ACK-biten i TCP-headeren til svarpakken til 1. Deretter skriver klienten inn verdien server_isn + 1 i feltet "Bekreft svarnummer". Til slutt sender klienten pakken til serveren. Denne pakken kan frakte data fra klienten til serveren. Når disse operasjonene er fullført, vil klienten gå inn i ETABLERT-tilstand.
Når serveren mottar svarpakken fra klienten, bytter den også til ETABLERT-tilstand.
Som du kan se av prosessen ovenfor, når du utfører et treveis håndtrykk, er det tredje håndtrykket tillatt å bære data, men de to første håndtrykkene er ikke det. Dette er et spørsmål som ofte stilles i intervjuer. Når treveis håndtrykket er fullført, går begge parter inn i ETABLERT-tilstanden, noe som indikerer at forbindelsen er opprettet, hvor klienten og serveren kan begynne å sende data til hverandre.
Hvorfor tre håndtrykk? Ikke to, men fire ganger?
Det vanlige svaret er: «Fordi treveishåndtrykk garanterer muligheten til å motta og sende.» Dette svaret er riktig, men det er bare en overfladisk årsak, den fremlegger ikke hovedårsaken. I det følgende vil jeg analysere årsakene til trippelhåndtrykk fra tre aspekter for å utdype vår forståelse av dette problemet.
Treveis håndtrykk kan effektivt unngå initialisering av historisk gjentatte forbindelser (hovedårsaken)
Treveishåndtrykket garanterer at begge parter har mottatt et pålitelig initialt sekvensnummer.
Treveis håndtrykk unngår sløsing med ressurser.
Årsak 1: Unngå historiske duplikatkoblinger
Kort sagt er hovedårsaken til treveis-håndtrykk å unngå forvirring forårsaket av initialisering av gammel duplikattilkobling. I et komplekst nettverksmiljø sendes ikke alltid overføringen av datapakker til destinasjonsverten i samsvar med den angitte tiden, og gamle datapakker kan ankomme destinasjonsverten først på grunn av nettverksbelastning og andre årsaker. For å unngå dette bruker TCP et treveis-håndtrykk for å etablere forbindelsen.
Når en klient sender flere SYN-tilkoblingsetableringspakker etter hverandre, i situasjoner som nettverksbelastning, kan følgende oppstå:
1- De gamle SYN-pakkene ankommer serveren før de nyeste SYN-pakkene.
2- Serveren vil svare en SYN + ACK-pakke til klienten etter å ha mottatt den gamle SYN-pakken.
3- Når klienten mottar SYN + ACK-pakken, avgjør den at tilkoblingen er en historisk tilkobling (sekvensnummer utløpt eller tidsavbrudd) i henhold til sin egen kontekst, og sender deretter RST-pakken til serveren for å avbryte tilkoblingen.
Med en toveis håndtrykkstilkobling er det ingen måte å avgjøre om den gjeldende tilkoblingen er en historisk tilkobling. Treveis håndtrykket lar klienten avgjøre om den gjeldende tilkoblingen er en historisk tilkobling basert på konteksten når den er klar til å sende den tredje pakken:
1- Hvis det er en historisk forbindelse (sekvensnummer utløpt eller tidsavbrudd), er pakken som sendes av det tredje håndtrykket en RST-pakke for å avbryte den historiske forbindelsen.
2- Hvis det ikke er en historisk forbindelse, er pakken som sendes for tredje gang en ACK-pakke, og de to kommuniserende partene oppretter forbindelsen.
Derfor er hovedgrunnen til at TCP bruker treveis håndtrykk at det initialiserer forbindelsen for å forhindre historiske forbindelser.
Årsak 2: For å synkronisere de første sekvensnumrene til begge parter
Begge sider av TCP-protokollen må opprettholde et sekvensnummer, som er en nøkkelfaktor for å sikre pålitelig overføring. Sekvensnumre spiller en viktig rolle i TCP-tilkoblinger. De gjør følgende:
Mottakeren kan eliminere dupliserte data og sikre dataenes nøyaktighet.
Mottakeren kan motta pakker i rekkefølge etter sekvensnummer for å sikre dataenes integritet.
● Sekvensnummeret kan identifisere datapakken som er mottatt av den andre parten, noe som muliggjør pålitelig dataoverføring.
Derfor, når en TCP-tilkobling er opprettet, sender klienten SYN-pakker med det første sekvensnummeret og krever at serveren svarer med en ACK-pakke som indikerer vellykket mottak av klientens SYN-pakke. Deretter sender serveren SYN-pakken med det første sekvensnummeret til klienten og venter på at klienten skal svare, én gang for alle, for å sikre at de første sekvensnumrene er pålitelig synkronisert.
Selv om et fireveis håndtrykk også er mulig for å pålitelig synkronisere de første sekvensnumrene til begge parter, kan det andre og tredje trinnet kombineres til ett enkelt trinn, noe som resulterer i et treveis håndtrykk. De to håndtrykkene kan imidlertid bare garantere at det første sekvensnummeret til den ene parten mottas av den andre parten, men det er ingen garanti for at det første sekvensnummeret til begge parter kan bekreftes. Derfor er treveis håndtrykk det beste valget å ta for å sikre stabiliteten og påliteligheten til TCP-tilkoblinger.
Årsak 3: Unngå å sløse med ressurser
Hvis det bare er et "tohåndstrykk", når klientens SYN-forespørsel er blokkert i nettverket, kan ikke klienten motta ACK-pakken sendt av serveren, så SYN-en vil bli sendt på nytt. Men siden det ikke er noe tredje håndtrykk, kan ikke serveren avgjøre om klienten mottok en ACK-bekreftelse for å opprette forbindelsen. Derfor kan serveren bare proaktivt opprette en forbindelse etter å ha mottatt hver SYN-forespørsel. Dette fører til følgende:
Ressurssløsing: Hvis klientens SYN-forespørsel blokkeres, noe som resulterer i gjentatt overføring av flere SYN-pakker, vil serveren opprette flere redundante, ugyldige forbindelser etter å ha mottatt forespørselen. Dette fører til unødvendig sløsing med serverressurser.
Meldingsoppbevaring: På grunn av mangelen på et tredje håndtrykk, har serveren ingen måte å vite om klienten mottok ACK-bekreftelsen for å opprette forbindelsen på riktig måte. Som et resultat, hvis meldinger setter seg fast i nettverket, vil klienten fortsette å sende SYN-forespørsler om og om igjen, noe som fører til at serveren stadig oppretter nye forbindelser. Dette vil øke nettverksbelastning og forsinkelse og påvirke den generelle nettverksytelsen negativt.
For å sikre stabiliteten og påliteligheten til nettverksforbindelsen bruker TCP derfor treveis håndtrykk for å etablere forbindelsen og unngå at disse problemene oppstår.
Sammendrag
DeNettverkspakkemeglerEtablering av TCP-tilkobling gjøres med et treveis håndtrykk. Under treveis håndtrykket sender klienten først en pakke med SYN-flagget til serveren, som indikerer at den ønsker å opprette en forbindelse. Etter å ha mottatt forespørselen fra klienten, svarer serveren en pakke med SYN- og ACK-flagg til klienten, som indikerer at tilkoblingsforespørselen er akseptert, og sender sitt eget initiale sekvensnummer. Til slutt svarer klienten med et ACK-flagg til serveren for å indikere at forbindelsen er opprettet. Dermed er de to partene i ETABLERT-tilstand og kan begynne å sende data til hverandre.
Generelt er treveis-håndtrykkprosessen for etablering av TCP-tilkobling utformet for å sikre forbindelsesstabilitet og pålitelighet, unngå forvirring og sløsing med ressurser over historiske forbindelser, og sikre at begge parter kan motta og sende data.
Publisert: 08.01.2025