Verkkopakettivälittäjä TCP -yhteydet: Demystified Triple Handshake -tarve

TCP -yhteysasennus
Kun selatamme verkkoa, lähetämme sähköpostia tai pelaamme online -peliä, emme usein ajattele sen takana olevaa monimutkaista verkkoyhteyttä. Juuri nämä näennäisesti pienet vaiheet varmistavat vakaan viestinnän meidän ja palvelimen välillä. Yksi tärkeimmistä vaiheista on TCP-yhteyden asennus, ja tämän ydin on kolmisuuntainen kädenpuristus.

Tässä artikkelissa käsitellään yksityiskohtaisesti kolmisuuntaisen kädenpuristuksen periaatetta, prosessia ja merkitystä. Askel askeleelta selitämme, miksi kolmisuuntainen kädenpuristus tarvitaan, miten se varmistaa yhteyden vakauden ja luotettavuuden ja kuinka tärkeä tiedonsiirto on. Ymmärtämällä syvemmin kolmisuuntaista kädenpuristusta, saamme paremman käsityksen verkkoviestinnän taustalla olevista mekanismeista ja selkeämmän kuvan TCP-yhteyksien luotettavuudesta.

TCP kolmisuuntainen kädenpuristusprosessi ja valtionsiirtymät
TCP on yhteyskeskeinen kuljetusprotokolla, joka vaatii yhteyden luomista ennen tiedonsiirtoa. Tämä yhteyden perustamisprosessi tehdään kolmisuuntaisella kädenpuristuksella.

 TCP kolmisuuntainen kädenpuristus

Katsotaanpa tarkemmin TCP -paketteja, jotka lähetetään jokaisessa yhteydessä.

Aluksi sekä asiakas että palvelin ovat suljettuja. Ensinnäkin palvelin kuuntelee aktiivisesti portissa ja on kuuntelutilassa, mikä tarkoittaa, että palvelin on käynnistettävä. Seuraavaksi asiakas on valmis aloittamaan verkkosivustolle pääsyn. Sit on luotava yhteys palvelimeen. Ensimmäisen yhteyspaketin muoto on seuraava:

 Synti

Kun asiakas aloittaa yhteyden, se tuottaa satunnaisen alkuperäisen sekvenssinumeron (Client_ISN) ja asettaa sen TCP -otsikon "sekvenssinumero" -kenttään. Samanaikaisesti asiakas asettaa SYN -lipun sijainnin 1: een osoittaakseen, että lähtevä paketti on SYN -paketti. Asiakas ilmoittaa haluavansa luoda yhteyden palvelimeen lähettämällä ensimmäisen SYN -paketin palvelimelle. Tämä paketti ei sisällä sovelluskerrostietoja (ts. Lähetetty tieto). Tässä vaiheessa asiakkaan tila on merkitty synteiksi.

SYN+ACK -paketti

Kun palvelin vastaanottaa SYN -paketin asiakkaalta, se alustaa satunnaisesti oman sarjanumeronsa (Server_ISN) ja asettaa sitten tämän numeron TCP -otsikon "sarjanumero" -kenttään. Seuraavaksi palvelin siirtyy Client_ISN + 1 -kenttään "kuittausnumero" -kenttään ja asettaa sekä SYN- että ACK-bitit 1: ään. Lopuksi palvelin lähettää paketin asiakkaalle, joka ei sisällä sovelluskerroksen tietoja (eikä palvelimen lähettämistä koskevia tietoja). Tällä hetkellä palvelin on SYN-RCVD-tilassa.

ACK -paketti

Kun asiakas vastaanottaa paketin palvelimelta, sen on suoritettava seuraavat optimoinnit vastaamaan lopulliseen vastauspakettiin: Ensinnäkin asiakas asettaa vastauspaketin TCP -otsikon ACK -bitin arvoon 1; Toiseksi asiakas siirtyy arvopalvelin_isn + 1 "Vahvista vastausnumero" -kenttään; Lopuksi asiakas lähettää paketin palvelimelle. Tämä paketti voi kuljettaa tietoja asiakkaalta palvelimelle. Näiden toimintojen päätyttyä asiakas tulee vakiintuneeseen tilaan.

Kun palvelin vastaanottaa vastauspaketin asiakkaalta, se siirtyy myös vakiintuneeseen tilaan.

Kuten yllä olevasta prosessista voidaan nähdä, kun suoritetaan kolmisuuntainen kädenpuristus, kolmannen kädenpuristuksen sallitaan kuljettaa tietoja, mutta kaksi ensimmäistä kädenpuristusta ei ole. Tämä on kysymys, jota usein kysytään haastatteluissa. Kun kolmisuuntainen kädenpuristus on valmis, molemmat osapuolet syöttävät vakiintuneen tilan, mikä osoittaa, että yhteys on luotu onnistuneesti, jolloin asiakas ja palvelin voivat aloittaa tietojen lähettämisen toisilleen.

Miksi kolme kädenpuristusta? Ei kahdesti, neljä kertaa?
Yleinen vastaus on "Koska kolmisuuntainen kädenpuristus takaa kyvyn vastaanottaa ja lähettää." Tämä vastaus on oikea, mutta se on vain pinta -syy, ei esitetä pääasiallista syytä. Seuraavassa analysoin kolmen kädenpuristuksen syitä kolmesta näkökulmasta syventääksesi ymmärrystämme tästä aiheesta.

Kolmisuuntainen kädenpuristus voi tehokkaasti välttää historiallisesti toistuvien yhteyksien alustamisen (pääasiallinen syy)
Kolmisuuntainen kädenpuristus takaa, että molemmat osapuolet ovat saaneet luotettavan alkuperäisen sekvenssinumeron.
Kolmisuuntainen kädenpuristus välttää resurssien tuhlausta.

Syy 1: Vältä historiallisia kaksoiskappaleita
Lyhyesti sanottuna kolmisuuntaisen kädenpuristuksen pääasiallinen syy on välttää sekaannusta, joka johtuu vanhan kaksoisyhteysalustamisen aiheuttamasta sekaannuksesta. Monimutkaisessa verkkoympäristössä datapakettien siirtoa ei aina lähetetä määränpäähän isäntälle määritetyn ajan mukaisesti, ja vanhat datapaketit voivat saapua ensin määränpään isäntälle verkon ruuhkien ja muiden syiden takia. Tämän välttämiseksi TCP käyttää kolmisuuntaista kädenpuristusta yhteyden luomiseen.

kolmisuuntainen kädenpuristus välttää historialliset kaksoiskappaleet

Kun asiakas lähettää useita SYN Connection -laitoksen paketteja peräkkäin, esimerkiksi verkon ruuhkia voi tapahtua:

1- Vanhat SYN-paketit saapuvat palvelimelle ennen uusimpia SYN-paketteja.
2- Palvelin vastaa SYN + ACK -pakettiin asiakkaalle vanhan SYN-paketin vastaanottamisen jälkeen.
3- Kun asiakas vastaanottaa SYN + ACK -paketin, se määrittää, että yhteys on historiallinen yhteys (sekvenssinumero vanhentunut tai aikakatkaisu) oman kontekstinsa mukaan ja lähettää sitten ensimmäisen paketin palvelimelle keskeyttääksesi yhteyden.

Kahden kädenslausyhteydellä ei ole mitään keinoa määrittää, onko nykyinen yhteys historiallinen yhteys. Kolmitie kädenpuristus antaa asiakkaalle mahdollisuuden selvittää, onko nykyinen yhteys historiallinen yhteys kontekstin perusteella, kun se on valmis lähettämään kolmannen paketin:

1- Jos se on historiallinen yhteys (sekvenssinumero vanhentunut tai aikakatkaisu), kolmannen kädenpuristuksen lähettämä paketti on ensimmäinen paketti historiallisen yhteyden keskeyttämiseksi.
2- Jos se ei ole historiallinen yhteys, kolmannen kerran lähetetty paketti on ACK-paketti, ja kaksi kommunikoivaa osapuolta luovat yhteyden onnistuneesti.

Siksi tärkein syy siihen, että TCP käyttää kolmisuuntaista kädenpuristusta, on se, että se alustaa yhteyden historiallisten yhteyksien estämiseksi.

Syy 2: Molempien osapuolten alkuperäisten sekvenssinumeroiden synkronointi
TCP -protokollan molemmin puolin on ylläpidettävä sekvenssinumeroa, joka on avaintekijä luotettavan siirron varmistamiseksi. Sekvenssinumeroilla on tärkeä rooli TCP -yhteyksissä. He tekevät seuraavat:

Vastaanotin voi poistaa kaksoiskappaleet ja varmistaa tietojen tarkkuuden.

Vastaanotin voi vastaanottaa paketteja sekvenssinumeron järjestyksessä tietojen eheyden varmistamiseksi.

● Sekvenssinumero voi tunnistaa toisen osapuolen vastaanottaman datapaketin, mikä mahdollistaa luotettavan tiedonsiirron.

Siksi TCP -yhteyden perustamisen jälkeen asiakas lähettää SYN -paketteja alkuperäisen sekvenssinumeron kanssa ja vaatii palvelimen vastaamaan ACK -paketilla, joka osoittaa asiakkaan SYN -paketin onnistuneen vastaanoton. Sitten palvelin lähettää SYN -paketin alkuperäisen sekvenssinumeron kanssa asiakkaalle ja odottaa asiakkaan vastausta lopullisesti ja kaikille, jotta alkuperäiset sekvenssinumerot synkronoidaan luotettavasti.

Synkronoi molempien osapuolten alkuperäiset sarjanumerot

Vaikka nelisuuntainen kädenpuristus on myös mahdollista synkronoida luotettavasti molempien osapuolten alkuperäiset sekvenssinumerot, toinen ja kolmas vaiheet voidaan yhdistää yhdeksi vaiheeksi, mikä johtaa kolmisuuntaiseen kädenpuristukseen. Kaksi kädenpuristusta voi kuitenkin taata vain, että toinen osapuoli vastaanottaa yhden osapuolen alkuperäisen sekvenssinumeron onnistuneesti, mutta ei ole mitään takeita siitä, että molempien osapuolten alkuperäinen sekvenssinumero voidaan vahvistaa. Siksi kolmisuuntainen kädenpuristus on paras valinta TCP-yhteyksien vakauden ja luotettavuuden varmistamiseksi.

Syy 3: Vältä resurssien tuhlaamista
Jos on vain "kaksikäyttöinen hajaus", kun asiakas SYN-pyyntö on estetty verkossa, asiakas ei voi vastaanottaa palvelimen lähettämää ACK-pakettia, joten SYN on pahoinpidelty. Koska kolmannen kädenpuristusta ei kuitenkaan ole, palvelin ei kuitenkaan voi määrittää, saiko asiakas ACK -kuittauksen yhteyden luomiseksi. Siksi palvelin voi luoda ennakoivasti yhteyden kunkin SYN -pyynnön vastaanottamisen jälkeen. Tämä johtaa seuraavaan:

Resurssien tuhlausta: Jos asiakkaan SYN -pyyntö estetään, mikä johtaa useiden SYN -pakettien toistuvaan siirtoon, palvelin luo useita redundantteja virheellisiä yhteyksiä pyynnön vastaanottamisen jälkeen. Tämä johtaa tarpeettomaan palvelinresurssien tuhlaukseen.

Viestien säilyttäminen: Kolmannen kädenpuristuksen puutteen vuoksi palvelimella ei ole tapaa tietää, saiko asiakas oikein ACK -kuittauksen yhteyden luomiseksi. Seurauksena on, että jos viestit takertuvat verkkoon, asiakas lähettää SYN -pyyntöjä uudestaan ​​ja uudestaan, aiheuttaen palvelimen jatkuvasti uusien yhteyksien luomisen. Tämä lisää verkon ruuhkia ja viivästystä ja vaikuttaa negatiivisesti verkon yleiseen suorituskykyyn.

Vältä resurssien tuhlaamista

Siksi verkkoyhteyden vakauden ja luotettavuuden varmistamiseksi TCP käyttää kolmisuuntaista kädenpuristusta yhteyden luomiseen näiden ongelmien esiintymisen välttämiseksi.

Yhteenveto
SeVerkkopakettivälittäjäTCP-yhteyden perustaminen tehdään kolmisuuntaisella kädenpuristuksella. Kolmisuuntaisen kädenpuristuksen aikana asiakas lähettää ensin paketin SYN-lipun kanssa palvelimelle, mikä osoittaa haluavansa muodostaa yhteyden. Saatuaan pyynnön asiakkaalta, palvelin vastaa asiakkaalle Syn- ja ACK -lippujen paketin, mikä osoittaa, että yhteyspyyntö hyväksytään, ja lähettää oman alkuperäisen sekvenssinumeronsa. Lopuksi asiakas vastaa ACK -lipun kanssa palvelimelle osoittamaan, että yhteys on luotu onnistuneesti. Siten osapuolet ovat vakiintuneessa tilassa ja voivat alkaa lähettää tietoja toisilleen.

Yleensä TCP-yhteyden perustamisen kolmisuuntainen kädenpuristusprosessi on suunniteltu varmistamaan yhteyden vakauden ja luotettavuus, välttämään resurssien sekaannusta ja tuhlausta historiallisten yhteyksien suhteen ja varmistamaan, että molemmat osapuolet pystyvät vastaanottamaan ja lähettämään tietoja.


Viestin aika: tammikuu 08-2025