TCP-yhteyden asetukset
Kun selaat verkkoa, lähetämme sähköpostia tai pelaamme online-pelejä, emme usein ajattele sen takana olevaa monimutkaista verkkoyhteyttä. Kuitenkin nämä näennäisesti pienet askeleet varmistavat vakaan viestinnän meidän ja palvelimen välillä. Yksi tärkeimmistä vaiheista on TCP-yhteyden määrittäminen, ja sen ydin on kolmisuuntainen kättely.
Tässä artikkelissa käsitellään yksityiskohtaisesti kolmisuuntaisen kättelyn periaatetta, prosessia ja merkitystä. Selitämme askel askeleelta, miksi kolmisuuntaista kättelyä tarvitaan, miten se varmistaa yhteyden vakauden ja luotettavuuden ja kuinka tärkeää se on tiedonsiirrolle. Kun ymmärrämme paremmin kolmisuuntaisen kättelyn, saamme paremman käsityksen verkkoviestinnän taustalla olevista mekanismeista ja selkeämmän kuvan TCP-yhteyksien luotettavuudesta.
TCP:n kolmisuuntainen kättelyprosessi ja tilasiirtymät
TCP on yhteyssuuntautunut siirtoprotokolla, joka edellyttää yhteyden muodostamista ennen tiedonsiirtoa. Tämä yhteydenmuodostusprosessi tehdään kolmisuuntaisella kättelyllä.
Katsotaanpa tarkemmin kussakin yhteydessä lähetettäviä TCP-paketteja.
Aluksi sekä asiakas että palvelin ovat SULJETTU. Ensin palvelin kuuntelee aktiivisesti porttia ja on LISTEN-tilassa, mikä tarkoittaa, että palvelin on käynnistettävä. Seuraavaksi asiakas on valmis aloittamaan pääsyn verkkosivulle. Sen on muodostettava yhteys palvelimeen. Ensimmäisen yhteyspaketin muoto on seuraava:
Kun asiakas aloittaa yhteyden, se luo satunnaisen alkuperäisen järjestysnumeron (client_isn) ja sijoittaa sen TCP-otsikon "Sequence number" -kenttään. Samanaikaisesti asiakas asettaa SYN-lipun paikan 1:ksi osoittaakseen, että lähtevä paketti on SYN-paketti. Asiakas ilmoittaa haluavansa muodostaa yhteyden palvelimeen lähettämällä ensimmäisen SYN-paketin palvelimelle. Tämä paketti ei sisällä sovelluskerroksen tietoja (eli lähetettyä dataa). Tässä vaiheessa asiakkaan tilaksi merkitään SYN-SENT.
Kun palvelin vastaanottaa SYN-paketin asiakkaalta, se alustaa satunnaisesti oman sarjanumeronsa (server_isn) ja lisää sitten tämän numeron TCP-otsikon "Serial number" -kenttään. Seuraavaksi palvelin kirjoittaa client_isn + 1 "Acknowledgement number" -kenttään ja asettaa sekä SYN- että ACK-bittien arvoksi 1. Lopuksi palvelin lähettää asiakkaalle paketin, joka ei sisällä sovellustason tietoja (eikä tietoja palvelimelle). lähettää). Tällä hetkellä palvelin on SYN-RCVD-tilassa.
Kun asiakas vastaanottaa paketin palvelimelta, sen on suoritettava seuraavat optimoinnit vastatakseen lopulliseen vastauspakettiin: Ensin asiakas asettaa vastauspaketin TCP-otsikon ACK-bitin arvoon 1; Toiseksi asiakas syöttää arvon server_isn + 1 "Vahvista vastausnumero" -kenttään; Lopuksi asiakas lähettää paketin palvelimelle. Tämä paketti voi kuljettaa dataa asiakkaalta palvelimelle. Kun nämä toiminnot on suoritettu, asiakas siirtyy PERUSTETTU-tilaan.
Kun palvelin vastaanottaa vastauspaketin asiakkaalta, se siirtyy myös ESTABLISHED-tilaan.
Kuten yllä olevasta prosessista näkyy, kolmisuuntaista kättelyä suoritettaessa kolmannen kättelyn sallitaan kuljettaa tietoja, mutta kaksi ensimmäistä kättelyä eivät. Tämä on kysymys, jota kysytään usein haastatteluissa. Kun kolmisuuntainen kättely on valmis, molemmat osapuolet siirtyvät ESTABLISHED-tilaan, mikä osoittaa, että yhteys on muodostettu onnistuneesti, jolloin asiakas ja palvelin voivat alkaa lähettää tietoja toisilleen.
Miksi kolme kädenpuristusta? Ei kahdesti, neljä kertaa?
Yleinen vastaus on: "Koska kolmisuuntainen kättely takaa vastaanottamisen ja lähettämisen." Tämä vastaus on oikea, mutta se on vain pintasyy, ei esitä tärkeintä syytä. Seuraavassa analysoin kolminkertaisen kättelyn syitä kolmesta näkökulmasta syventääksemme ymmärrystämme tästä asiasta.
Kolmisuuntainen kättely voi tehokkaasti välttää historiallisesti toistuvien yhteyksien alustamisen (pääsyy)
Kolmisuuntainen kättely takaa, että molemmat osapuolet ovat saaneet luotettavan aloitusnumeron.
Kolmisuuntainen kättely välttää resurssien tuhlaamisen.
Syy 1: Vältä historiallisia kaksoisliitoksia
Lyhyesti sanottuna tärkein syy kolmisuuntaiseen kättelyyn on välttää vanhan kaksoisyhteyden alustuksen aiheuttamaa sekaannusta. Monimutkaisessa verkkoympäristössä datapakettien siirtoa ei aina lähetetä kohdeisännälle määrätyn ajan mukaisesti, ja vanhat datapaketit voivat saapua ensin kohdeisäntään verkon ruuhkautumisesta ja muista syistä johtuen. Tämän välttämiseksi TCP käyttää kolmisuuntaista kättelyä yhteyden muodostamiseen.
Kun asiakas lähettää useita SYN-yhteydenmuodostuspaketteja peräkkäin, esimerkiksi verkon ruuhkautumistilanteissa voi tapahtua seuraavaa:
1- Vanhat SYN-paketit saapuvat palvelimelle ennen uusimpia SYN-paketteja.
2- Palvelin vastaa SYN + ACK -paketin asiakkaalle saatuaan vanhan SYN-paketin.
3- Kun asiakas vastaanottaa SYN + ACK -paketin, se määrittää, että yhteys on historiallinen yhteys (jononumero vanhentunut tai aikakatkaisu) oman kontekstinsa mukaisesti, ja lähettää sitten RST-paketin palvelimelle yhteyden katkaisemiseksi.
Kahden kättelyn yhteydessä ei ole mahdollista määrittää, onko nykyinen yhteys historiallinen yhteys. Kolmisuuntaisen kättelyn avulla asiakas voi määrittää, onko nykyinen yhteys historiallinen yhteys kontekstin perusteella, kun se on valmis lähettämään kolmannen paketin:
1- Jos kyseessä on historiallinen yhteys (sekvenssinumero vanhentunut tai aikakatkaisu), kolmannen kättelyn lähettämä paketti on RST-paketti historiallisen yhteyden katkaisemiseksi.
2- Jos kyseessä ei ole historiallinen yhteys, kolmannen kerran lähetetty paketti on ACK-paketti, ja molemmat kommunikoivat osapuolet muodostavat yhteyden onnistuneesti.
Siksi tärkein syy siihen, miksi TCP käyttää kolmisuuntaista kättelyä, on se, että se alustaa yhteyden estääkseen historialliset yhteydet.
Syy 2: Synkronoi molempien osapuolten alkuperäiset järjestysnumerot
TCP-protokollan molemmilla puolilla on oltava järjestysnumero, joka on avaintekijä luotettavan tiedonsiirron varmistamiseksi. Järjestysnumeroilla on tärkeä rooli TCP-yhteyksissä. Ne tekevät seuraavaa:
Vastaanotin voi poistaa päällekkäiset tiedot ja varmistaa tietojen tarkkuuden.
Vastaanotin voi vastaanottaa paketteja järjestysnumerojärjestyksessä varmistaakseen datan eheyden.
● Järjestysnumerolla voidaan tunnistaa toisen osapuolen vastaanottama datapaketti, mikä mahdollistaa luotettavan tiedonsiirron.
Tämän vuoksi asiakas lähettää TCP-yhteyden muodostaessaan SYN-paketteja alkuperäisellä järjestysnumerolla ja vaatii palvelimen vastaamaan ACK-paketilla, joka osoittaa asiakkaan SYN-paketin onnistuneen vastaanoton. Sitten palvelin lähettää SYN-paketin alkuperäisellä järjestysnumerolla asiakkaalle ja odottaa asiakkaan vastausta lopullisesti varmistaakseen, että alkuperäiset järjestysnumerot synkronoidaan luotettavasti.
Vaikka nelisuuntainen kättely on myös mahdollista synkronoida luotettavasti molempien osapuolten alkuperäiset järjestysnumerot, toinen ja kolmas vaihe voidaan yhdistää yhdeksi vaiheeksi, jolloin saadaan kolmisuuntainen kättely. Kaksi kättelyä voi kuitenkin taata vain sen, että toinen osapuoli vastaanottaa onnistuneesti toisen osapuolen alkuperäisen järjestysnumeron, mutta ei ole takeita siitä, että molempien osapuolten alkuperäinen järjestysnumero voidaan vahvistaa. Siksi kolmisuuntainen kättely on paras valinta TCP-yhteyksien vakauden ja luotettavuuden varmistamiseksi.
Syy 3: Vältä resurssien tuhlaamista
Jos tapahtuu vain "kahden kädenpuristus", kun asiakkaan SYN-pyyntö on estetty verkossa, asiakas ei voi vastaanottaa palvelimen lähettämää ACK-pakettia, joten SYN lähetetään uudelleen. Koska kolmatta kättelyä ei kuitenkaan ole, palvelin ei voi määrittää, saiko asiakas ACK-kuittauksen yhteyden muodostamiseksi. Siksi palvelin voi muodostaa yhteyden ennakoivasti vasta saatuaan jokaisen SYN-pyynnön. Tämä johtaa seuraavaan:
Resurssien hukkaa: Jos asiakkaan SYN-pyyntö estetään, mikä johtaa useiden SYN-pakettien toistuvaan lähetykseen, palvelin muodostaa useita redundantteja virheellisiä yhteyksiä pyynnön vastaanottamisen jälkeen. Tämä johtaa tarpeettomaan palvelinresurssien tuhlaukseen.
Viestin säilyttäminen: Kolmannen kättelyn puuttumisen vuoksi palvelimella ei ole mahdollisuutta tietää, onko asiakas vastaanottanut oikein ACK-kuittauksen yhteyden muodostamiseksi. Tämän seurauksena, jos viestit juuttuvat verkkoon, asiakas jatkaa SYN-pyyntöjen lähettämistä yhä uudelleen ja uudelleen, jolloin palvelin muodostaa jatkuvasti uusia yhteyksiä. Tämä lisää verkon ruuhkautumista ja viivettä ja vaikuttaa negatiivisesti verkon yleiseen suorituskykyyn.
Siksi verkkoyhteyden vakauden ja luotettavuuden varmistamiseksi TCP käyttää kolmisuuntaista kättelyä yhteyden muodostamiseen välttääkseen näiden ongelmien esiintymisen.
Yhteenveto
TheVerkkopakettien välittäjäTCP-yhteyden muodostaminen tapahtuu kolmisuuntaisella kättelyllä. Kolmisuuntaisen kättelyn aikana asiakas lähettää ensin paketin SYN-lipulla palvelimelle, mikä ilmaisee, että se haluaa muodostaa yhteyden. Vastaanotettuaan asiakkaalta pyynnön palvelin vastaa asiakkaalle paketin, jossa on SYN- ja ACK-liput, mikä osoittaa, että yhteyspyyntö on hyväksytty, ja lähettää oman alkuperäisen järjestysnumeronsa. Lopuksi asiakas vastaa ACK-lipulla palvelimelle osoittaakseen, että yhteys on muodostettu onnistuneesti. Näin ollen molemmat osapuolet ovat PERUSTETTU-tilassa ja voivat alkaa lähettää tietoja toisilleen.
Yleisesti ottaen TCP-yhteyden muodostamisen kolmisuuntainen kättelyprosessi on suunniteltu varmistamaan yhteyden vakaus ja luotettavuus, välttämään sekaannuksia ja resurssien tuhlausta historiallisten yhteyksien vuoksi ja varmistamaan, että molemmat osapuolet voivat vastaanottaa ja lähettää tietoja.
Postitusaika: 08.01.2025