TCP 3-Way Handshake (SYN, SYN-ACK, ACK)

โšก ร„lykรคs yhteenveto

TCP:n 3-suuntainen kรคttely on yhteydenmuodostusrituaali, jolla jokainen TCP-istunto alkaa. Asiakas ja palvelin vaihtavat SYN-, SYN-ACK- ja ACK-paketteja synkronoidakseen jรคrjestysnumerot ja varmistaakseen, ettรค molemmat osapuolet ovat valmiita ennen kuin yhtรคkรครคn sovellusdatan tavua lรคhetetรครคn.

  • ๐Ÿ“จ Tunne neljรค viestityyppiรค: SYN aloittaa, ACK vahvistaa, SYN-ACK yhdistรครค molemmat ja FIN lopettaa TCP-yhteyden.
  • ๐Ÿ” Noudata kolmea vaihetta: asiakas SYN โ†’ palvelin SYN-ACK โ†’ asiakas ACK; istunto muodostetaan vasta kolmannen paketin saapumisen jรคlkeen.
  • ๐Ÿ”ข Jรคrjestysnumeroilla on merkitystรค: kumpikin puoli valitsee aluksi jรคrjestysnumeron; toinen puoli kuittaa sen lisรครคmรคllรค sellaisen, mikรค pitรครค tavuvirran jรคrjestyksessรค.
  • ๐Ÿšช Purkusuunnitelma: Tiedonsiirron jรคlkeen TCP sulkee yhteyden FIN/ACK-pareilla vapauttaakseen soketin molemmista pรคistรค.
  • ๐Ÿค– Kรคytรค tekoรคlyรค pakettien analysointiin: Tekoรคlyavustajat selittรคvรคt Wireshark kaappaa, merkitsee puuttuvat ACK:t ja korostaa SYN-tulvat tai puoliavoimet yhteydet.

TCP 3-Way Handshake

Mikรค on TCP:n kolmisuuntainen kรคttely?

TCP kolmisuuntainen kรคttely on menettelytapa, jota asiakas ja palvelin kรคyttรคvรคt TCP/IP-verkko luotettavan yhteyden muodostamiseksi ennen sovellustietojen vaihtoa. Kuten nimestรค voi pรครคtellรค, se koostuu kolmesta vaiheesta, joissa molemmat osapuolet vaihtavat synkronointi- (SYN) ja kuittaus- (ACK) paketteja ja sopivat kรคyttรคmistรครคn alkuperรคisistรค jรคrjestysnumeroista.

Kรคttely on suunniteltu siten, ettรค molemmat pรครคtepisteet voivat aloittaa, neuvotella ja purkaa TCP-socketteja symmetrisesti. Kun kรคttely on valmis, yhteys on kaksisuuntainen โ€“ molemmat osapuolet voivat lรคhettรครค ja vastaanottaa rinnakkain, kunnes jompikumpi antaa FIN-komennon istunnon sulkemiseksi.

TCP-viestityypit

Neljรค kontrollilippua ilmestyy toistuvasti kรคttelyn ja purun aikana.

Viesti Tuotetiedot
SYN Aloittaa yhteyden ja synkronoi laitteiden vรคlisen jรคrjestysnumeron.
ACK Vahvistaa toiselle osapuolelle, ettรค edellinen segmentti vastaanotettiin.
SYN-ACK Yhdistetty viesti โ€” paikallisen laitteen SYN-viesti ja vertaislaitteen aiemman SYN-viestin ACK.
FIN Kรคytetรครคn yhteyden katkaisemiseen sujuvasti.

TCP:n kolmisuuntainen kรคttelyprosessi

TCP-liikenne alkaa aina kolmen osapuolen kรคttelyllรค. Asiakas aloittaa keskustelun pyytรคmรคllรค istuntoa palvelimen kanssa.

TCP:n 3-suuntaisen kรคttelyn kaavio

Kolmisuuntainen kรคttelykaavio.

  • Vaihe 1 โ€” SYN: Asiakas lรคhettรครค segmentin, jossa on SYN-lippu asetettu. Se kertoo palvelimelle "Haluan aloittaa kommunikoinnin" ja ehdottaa aluksi jรคrjestysnumeroa.
  • Vaihe 2 โ€” SYN-ACK: Palvelin vastaa segmentillรค, jossa sekรค SYN- ettรค ACK-liput on asetettu. ACK kuittaa asiakkaan SYN-liput ja SYN ehdottaa palvelimen omaa alkuperรคistรค jรคrjestysnumeroa.
  • Vaihe 3 โ€“ ACK: Asiakas kuittaa palvelimen SYN-ACK-kuittauksen lopullisella ACK-kuittauksella. Yhteys on nyt muodostettu ja molemmat osapuolet voivat aloittaa. transmitsovellustietojen kรคsittely.

Esimerkki tosielรคmรคstรค

TCP:n kolmisuuntainen kรคttely โ€“ reaalimaailman esimerkki

Tรคssรค on toimiva esimerkki konkreettisilla jรคrjestysnumeroilla.

  • Palvelin X aloittaa yhteyden lรคhettรคmรคllรค TCP SYN -paketin palvelimelle. Paketissa on satunnainen alkujรคrjestysnumero, esimerkiksi 4321 โ€” joka merkitsee isรคntรคkoneen X lรคhettรคmรคn tavuvirran alkua.
  • Palvelin vastaanottaa SYN-kuittauksen ja vastaa SYN-ACK:lla. ACK-numero on isรคntรคkoneen X jรคrjestysnumero kasvatettuna yhdellรค (4322), ja SYN ehdottaa palvelimen omaa alkuperรคistรค jรคrjestysnumeroa.
  • Isรคntรค X vastaa lopullisella ACK:lla, jonka kuittausnumero on palvelimen jรคrjestysnumero korotettuna yhdellรค.

Kun tiedonvaihto on valmis, TCP katkaisee yhteyden nelisuuntaisella FIN/ACK-sekvenssillรค, jotta molemmat pรครคtepisteet voivat vapauttaa soketin puhtaasti.

Miksi TCP tarvitsee kolmiosaisen kรคttelyn

Kรคttely ei ole pelkkรค muodollisuus โ€“ se ratkaisee kolme konkreettista ongelmaa, jotka liittyvรคt luotettavaan tavuvirran siirtoon:

  • Sarjanumeroiden synkronointi: Molemmat vertaiskรคyttรคjรคt oppivat toisen osapuolen alkuperรคisen jรคrjestysnumeron, jota TCP kรคyttรครค kadonneiden tai vรครคrรคssรค jรคrjestyksessรค olevien segmenttien havaitsemiseen.
  • Yhteystilasopimus: Kolmas ACK vahvistaa palvelimen SYN-ACK:n saapuneen, joten kumpikaan osapuoli ei aloita datan lรคhettรคmistรค ennen kuin molemmat ovat perillรค. PERUSTI valtio.
  • Kaksoiskappalepakettien suojaus: Satunnaiset alkujรคrjestysnumerot ja ajastetut kรคttelytilat estรคvรคt edellisen istunnon vanhentuneiden segmenttien vahingossa tapahtuvan hyvรคksymisen.

Yleisiรค ongelmia TCP-kรคttelyn kanssa

Kรคttely on vankka, mutta siinรค on tunnistettavia hรคiriรถitรค. Verkkoinsinรถรถrit havaitsevat yleensรค jonkin seuraavista:

  • SYN-tulvahyรถkkรคykset: Haitallinen asiakas lรคhettรครค tuhansia SYN-viestejรค vastaamatta SYN-ACK-viesteihin, mikรค kuluttaa palvelimen yhteystaulukon loppuun. SYN-evรคsteet ovat vakiopuolustus.
  • Puoliavoimet yhteydet: Kun kolmas ACK menetetรครคn, yhteys jรครค puoliavoimeksi ja lopulta aikakatkaisu puhdistuu.
  • Palomuurin tai NAT:n toimintahรคiriรถt kesken toimintakerran: Tilalliset keskilaatikot, jotka menettรคvรคt tilan, voivat pudottaa SYN-ACK-paketteja ja jรคttรครค asiakkaan yrittรคmรครคn uudelleen.
  • RST-nollaukset: Jos palvelin ei kuuntele pyydettyรค porttia, se vastaa SYN-komennolle RST-komennolla, joka sulkee yrityksen vรคlittรถmรคsti.

UKK

Kaksi viestiรค ei voi todistaa, ettรค molemmat osapuolet sopivat alkuperรคisistรค jรคrjestysnumeroista ja ovat valmiita lรคhettรคmรครคn. Kolmas ACK vahvistaa palvelimen SYN-ACK:n saapuneen varmistaen, ettรค molemmat pรครคtepisteet saavuttavat ESTABLISHED-tilan ennen datavirran alkamista.

SYN on yksittรคinen lippu, joka avaa keskustelun ja ehdottaa ensimmรคistรค jรคrjestysnumeroa. SYN-ACK yhdistรครค SYN-viestin vertaiskoneen aiemman SYN-viestin kuittaukseen, jolloin synkronointi suoritetaan yhdessรค paketissa.

SYN-tulva ylikuormittaa palvelimen lรคhettรคmรคllรค useita SYN-paketteja kรคttelyรค suorittamatta loppuun. Puoliavoimet yhteydet tรคyttรคvรคt ruuhkajonon ja estรคvรคt lailliset kรคyttรคjรคt. SYN-evรคsteet ovat vakiokeino tulvan lieventรคmiseen.

TCP sulkee yhteyden neliosaisella FIN- ja ACK-kรคttelyllรค. Kumpikin suunta suljetaan erikseen, jolloin toinen osapuoli voi lopettaa datan lรคhettรคmisen, vaikka toinen osapuoli olisi sulkenut oman osuutensa.

Alkuperรคinen jรคrjestysnumero on satunnaisesti valittu 32-bittinen arvo, jonka jokainen pรครคtepiste valitsee omalle tavuvirralleen. Se syรถttรครค laskurin, jota kรคytetรครคn puuttuvien tai kaksoiskappaleiden havaitsemiseen ja vรครคrennettyjen pakettien torjuntaan.

Ei. UDP on yhteydetรถn ja lรคhettรครค datagrammeja ilman kรคttelyรค. Tรคmรค tekee siitรค nopeamman ja kevyemmรคn kuin TCP, mutta sovellusten on itse hoidettava luotettavuus, jรคrjestys ja ruuhkan hallinta.

Tekoรคlyavustajat kommentoivat pakettien sieppauksia, luokittelevat uudelleentransmits ja RST:t, ja havaitsevat SYN-tulvia. Ne kรครคntรคvรคt Wireshark suodattuu selkokielelle ja suosittelee seuraavaa diagnostiikkavaihetta yhteysongelmien varalta.

Kyllรค. Tekoรคlykoodausavustajat muuttavat selkokielisen pyynnรถn Python Scapy tai netcat-skripti, joka laukaisee ja tarkastaa kolmiosaisen kรคttelyn, ja selitรค sitten jokainen rivi, jotta insinรถรถrit voivat tarkistaa sen ennen sen suorittamista.

Tiivistรค tรคmรค viesti seuraavasti: