TCP-tilkoblingsoppsett
Når vi surfer på nettet, sender en e-post eller spiller et nettspill, tenker vi ofte ikke på den komplekse nettverkstilkoblingen som ligger bak. Det er imidlertid disse tilsynelatende små trinnene som sikrer stabil kommunikasjon mellom oss og serveren. Et av de viktigste trinnene er TCP-tilkoblingsoppsettet, og kjernen i dette er treveis håndtrykket.
Denne artikkelen vil diskutere prinsippet, prosessen og viktigheten av treveis håndtrykket i detalj. Trinn for trinn vil vi forklare hvorfor treveis håndtrykket er nødvendig, hvordan det sikrer tilkoblingsstabilitet og pålitelighet, og hvor viktig det er for dataoverføring. Med en dypere forståelse av treveis håndtrykket vil vi få en bedre forståelse av de underliggende mekanismene for nettverkskommunikasjon og et klarere syn på påliteligheten til TCP-forbindelser.
TCP treveis håndtrykkprosess og tilstandsoverganger
TCP er en tilkoblingsorientert transportprotokoll, som krever opprettelse av tilkobling før dataoverføring. Denne forbindelsesetableringsprosessen gjøres ved 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 LISTEN-tilstanden, 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 innledende sekvensnummer (client_isn) og plasserer det i "Sekvensnummer"-feltet i TCP-overskriften. Samtidig setter klienten SYN-flaggposisjonen til 1 for å indikere at den utgående pakken er en SYN-pakke. Klienten indikerer at den ønsker å etablere en forbindelse med serveren ved å sende den første SYN-pakken til serveren. Denne pakken inneholder ikke applikasjonslagdata (det vil si data sendt). På dette tidspunktet er statusen til klienten 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 det nummeret i "Serienummer"-feltet i TCP-overskriften. Deretter angir serveren client_isn + 1 i "Bekreftelsesnummer"-feltet og setter både SYN- og ACK-biter til 1. Til slutt sender serveren pakken til klienten, som ikke inneholder applikasjonslagdata (og ingen data for serveren) å 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 til TCP-overskriften til svarpakken til 1; For det andre angir klienten verdien server_isn + 1 i "Bekreft svarnummer"-feltet; Til slutt sender klienten pakken til serveren. Denne pakken kan frakte data fra klienten til serveren. Etter fullføring av disse operasjonene vil klienten gå inn i ETABLERT tilstand.
Når serveren mottar svarpakken fra klienten, bytter den også til ETABLERT tilstand.
Som du kan se fra 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 det ikke. 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 vellykket etablert, og da kan klienten og serveren begynne å sende data til hverandre.
Hvorfor tre håndtrykk? Ikke to, fire ganger?
Det vanlige svaret er: "Fordi treveis håndtrykket garanterer muligheten til å motta og sende." Dette svaret er riktig, men det er bare overflaten grunn, ikke fremsette hovedgrunnen. I det følgende vil jeg analysere årsakene til det tredoble håndtrykket fra tre aspekter for å utdype vår forståelse av dette problemet.
Treveis håndtrykket kan effektivt unngå initialisering av historisk gjentatte forbindelser (hovedårsaken)
Treveis håndtrykket garanterer at begge parter har mottatt et pålitelig første sekvensnummer.
Treveis håndtrykket unngår å sløse med ressurser.
Årsak 1: Unngå historiske dupliserte sammenføyninger
I et nøtteskall er hovedårsaken til treveis håndtrykket for å unngå forvirring forårsaket av den gamle dupliserte tilkoblingsinitieringen. 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 nettverksoverbelastning, kan følgende oppstå:
1- De gamle SYN-pakkene ankommer serveren før de siste 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, bestemmer 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 tilkobling med to håndtrykk er det ingen måte å finne ut om den gjeldende tilkoblingen er en historisk tilkobling. Treveis håndtrykket lar klienten bestemme om den nåværende tilkoblingen er en historisk tilkobling basert på konteksten når den er klar til å sende den tredje pakken:
1- Hvis det er en historisk tilkobling (sekvensnummer utløpt eller tidsavbrudd), er pakken sendt av det tredje håndtrykket en RST-pakke for å avbryte den historiske tilkoblingen.
2- Hvis det ikke er en historisk forbindelse, er pakken som sendes for tredje gang en ACK-pakke, og de to kommuniserende partene har vellykket opprettet forbindelsen.
Derfor er hovedårsaken til at TCP bruker treveis håndtrykk at den initialiserer forbindelsen for å forhindre historiske forbindelser.
Årsak 2: For å synkronisere de første sekvensnumrene til begge parter
Begge sider av TCP-protokollen må ha et sekvensnummer, som er en nøkkelfaktor for å sikre pålitelig overføring. Sekvensnumre spiller en viktig rolle i TCP-forbindelser. De gjør følgende:
Mottakeren kan eliminere dupliserte data og sikre nøyaktigheten av dataene.
Mottakeren kan motta pakker i rekkefølgen til sekvensnummeret for å sikre integriteten til dataene.
● Sekvensnummeret kan identifisere datapakken som er mottatt av den andre parten, noe som muliggjør pålitelig dataoverføring.
Derfor, ved etablering av en TCP-forbindelse, sender klienten SYN-pakker med det innledende 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, en 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 synkronisering av de første sekvensnumrene til begge parter, kan det andre og tredje trinnet kombineres til et enkelt trinn, noe som resulterer i et treveis håndtrykk. Imidlertid kan de to håndtrykkene bare garantere at det første sekvensnummeret til den ene parten er vellykket mottatt av den andre parten, men det er ingen garanti for at det opprinnelige 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øsing med ressurser
Hvis det bare er et "to-håndtrykk", når klientens SYN-forespørsel er blokkert i nettverket, kan ikke klienten motta ACK-pakken sendt av serveren, så SYN vil bli sendt på nytt. Men siden det ikke er et tredje håndtrykk, kan ikke serveren avgjøre om klienten mottok en ACK-bekreftelse for å etablere forbindelsen. Derfor kan serveren kun proaktivt opprette en tilkobling etter å ha mottatt hver SYN-forespørsel. Dette fører til følgende:
Sløsing med ressurser: Hvis klientens SYN-forespørsel er blokkert, noe som resulterer i gjentatt overføring av flere SYN-pakker, vil serveren etablere flere redundante ugyldige tilkoblinger etter å ha mottatt forespørselen. Dette fører til unødvendig sløsing med serverressurser.
Oppbevaring av meldinger: På grunn av mangelen på et tredje håndtrykk, har serveren ingen mulighet til å vite om klienten riktig mottok ACK-bekreftelsen for å opprette forbindelsen. Som et resultat, hvis meldinger blir sittende fast i nettverket, vil klienten fortsette å sende SYN-forespørsler om og om igjen, noe som får serveren til å stadig etablere nye tilkoblinger. Dette vil øke overbelastning og forsinkelse i nettverket og påvirke den generelle nettverksytelsen negativt.
Derfor, for å sikre stabiliteten og påliteligheten til nettverkstilkoblingen, bruker TCP treveis håndtrykk for å etablere forbindelsen for å unngå at disse problemene oppstår.
Sammendrag
DeNetwork Packet BrokerEtablering 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, noe som indikerer at den ønsker å etablere 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 første sekvensnummer. Til slutt svarer klienten med et ACK-flagg til serveren for å indikere at forbindelsen er vellykket etablert. Dermed er de to partene i ETABLERT tilstand og kan begynne å sende data til hverandre.
Generelt er treveis håndtrykk-prosessen for etablering av TCP-tilkobling designet for å sikre tilkoblingsstabilitet og pålitelighet, unngå forvirring og sløsing med ressurser over historiske tilkoblinger, og sikre at begge parter er i stand til å motta og sende data.
Innleggstid: Jan-08-2025