TCP 3-utas kézfogás (SYN, SYN-ACK, ACK)

⚡ Okos összefoglaló

A TCP 3-utas kézfogás a kapcsolatfelépítési rituálé, amellyel minden TCP munkamenet elkezdődik. Az ügyfél és a szerver SYN, SYN-ACK és ACK csomagokat cserél a sorszámok szinkronizálására és annak megerősítésére, hogy mindkét fél készen áll, mielőtt egyetlen bájtnyi alkalmazásadat elküldésre kerülne.

  • 📨 Ismerd meg a négy üzenettípust: A SYN kezdeményezi, az ACK megerősíti, a SYN-ACK kombinálja mindkettőt, és a FIN lezárja a TCP kapcsolatot.
  • 🔁 Kövesd a három lépést: kliens SYN → szerver SYN-ACK → kliens ACK; a munkamenet csak a harmadik csomag megérkezése után jön létre.
  • 🔢 A sorszámok számítanak: mindkét oldal választ egy kezdeti sorszámot; a másik oldal egy új hozzáadásával nyugtázza ezt, ami rendezetten tartja a bájtfolyamot.
  • 🚪 A bontás terve: Az adatátvitel után a TCP FIN/ACK párokkal lezárja a kapcsolatot, hogy mindkét oldalon felszabadítsa a socketet.
  • 🤖 Használjon mesterséges intelligenciát csomagelemzéshez: MI asszisztensek magyarázata Wireshark rögzít, megjelöli a hiányzó ACK-kat, és kiemeli a SYN elárasztásokat vagy a félig nyitott kapcsolatokat.

TCP 3-Way Handshake

Mi a TCP háromirányú kézfogás?

Az TCP háromutas kézfogás egy olyan eljárás, amelyet egy kliens és egy szerver használ egy TCP/IP hálózat megbízható kapcsolat létrehozása az alkalmazásadatok cseréje előtt. Ahogy a neve is sugallja, három lépésből áll, amelyek során mindkét fél szinkronizációs (SYN) és nyugtázási (ACK) csomagokat cserél, és megállapodik a használandó kezdeti sorszámokban.

A kézfogás úgy van kialakítva, hogy mindkét végpont szimmetrikusan kezdeményezhessen, tárgyalhasson és bonthasson TCP-socketeket. A kézfogás befejezése után a kapcsolat full-duplex – mindkét fél párhuzamosan küldhet és fogadhat, amíg valamelyikük FIN-t nem ad a munkamenet lezárásához.

TCP üzenettípusok

Négy ellenőrző zászló jelenik meg ismételten a kézfogás és a szétszerelés során.

Üzenet Leírás
SYN Kapcsolatot hoz létre és szinkronizálja a sorszámokat az eszközök között.
ACK Megerősíti a másik félnek, hogy az előző szegmenst fogadták.
SYN-ACK Egy kombinált üzenet – egy SYN a helyi eszköztől, plusz egy ACK a partner korábbi SYN-jéről.
FIN Kapcsolat szabályos megszakítására szolgál.

TCP háromutas kézfogási folyamat

A TCP forgalom mindig egy háromirányú kézfogással kezdődik. A kliens a szerverrel való munkamenet kérésével kezdeményezi a beszélgetést.

TCP 3-utas kézfogás diagram

3-utas kézfogási ábra.

  • 1. lépés – SZINKRONIZÁLÁS: A kliens egy beállított SYN jelzővel rendelkező szegmenst küld. Ez közli a szerverrel, hogy „kommunikációt szeretnék kezdeni”, és felajánl egy kezdeti sorszámot.
  • 2. lépés – SYN-ACK: A szerver egy olyan szegmenssel válaszol, amelyben mind a SYN, mind az ACK jelzők be vannak állítva. Az ACK nyugtázza a kliens SYN-jét, és a SYN felajánlja a szerver saját kezdeti sorszámát.
  • 3. lépés – NYUGTA: A kliens egy végső ACK-kal nyugtázza a szerver SYN-ACK-ját. A kapcsolat létrejött, és mindkét fél elkezdheti a munkát. transmitalkalmazásadatok feldolgozása.

Valós példa

TCP háromutas kézfogás – valós példa

Íme egy kidolgozott példa konkrét sorszámokkal.

  • Az X állomás egy TCP SYN csomag küldésével indítja a kapcsolatot a szervernek. A csomag egy véletlenszerű kezdő sorszámot tartalmaz – például: 4321 — amely jelzi a Host X által küldött bájtfolyam kezdetét.
  • A szerver fogadja a SYN-t és egy SYN-ACK-val válaszol. Az ACK szám az X állomás sorszáma 1-gyel növelve (4322), és a SYN felajánlja a szerver saját kezdeti sorszámát.
  • Az X állomás egy végső ACK-val válaszol, amelynek visszaigazolási száma a szerver sorszáma 1-gyel növelve.

Miután az adatcsere befejeződött, a TCP egy négyirányú FIN/ACK szekvenciával bontja a kapcsolatot, így mindkét végpont gond nélkül felszabadíthatja a socketet.

Miért van szüksége a TCP-nek háromirányú kézfogásra?

A kézfogás nem csupán formalitás – három konkrét problémát old meg, amelyek a megbízható bájtfolyam-átvitellel járnak:

  • Sorszám-szinkronizálás: mindkét fél megtanulja a másik oldal kezdeti sorszámát, amelyet a TCP az elveszett vagy sorrenden kívüli szegmensek észlelésére használ.
  • Kapcsolat-állapot megállapodás: A harmadik ACK megerősíti, hogy a szerver SYN-ACK-ja megérkezett, így egyik fél sem kezd el adatot küldeni, amíg mindkettő a megfelelő helyre nem kerül. ALAPÍTOTT állapot.
  • Duplikált csomagok elleni védelem: A véletlenszerű kezdeti sorszámok és az időzített kézfogási állapotok megakadályozzák, hogy egy korábbi munkamenetből származó elavult szegmensek véletlenül elfogadásra kerüljenek.

Gyakori problémák a TCP kézfogással

A kézfogás robusztus, de azonosítható módon hibásan működik. A hálózati mérnökök általában a következők valamelyikét tapasztalják:

  • SYN árvízi támadások: Egy rosszindulatú kliens több ezer SYN üzenetet küld anélkül, hogy válaszolna a SYN-ACK-okra, kimerítve ezzel a szerver kapcsolati táblázatát. A SYN sütik a standard védelem.
  • Félig nyitott kapcsolatok: Amikor a harmadik ACK elvész, a kapcsolat félig nyitott állapotban marad, és végül egy időtúllépés miatt megszűnik.
  • Tűzfal vagy NAT hibaelhárítás közben: Az állapotot elvesztett állapotalapú middleboxok SYN-ACK csomagokat dobhatnak el, és a kliens újrapróbálkozhat.
  • RST visszaállítások: Ha a szerver nem figyel a kért porton, akkor egy SYN-re válaszol egy RST-vel, ami azonnal lezárja a kísérletet.

GYIK

Két üzenettel nem lehet bizonyítani, hogy mindkét fél megegyezett a kezdeti sorszámokban, és készen állnak a küldésre. A harmadik ACK megerősíti a szerver SYN-ACK-jának megérkezését, biztosítva, hogy mindkét végpont elérje az ESTABLISHED állapotot az adatfolyam megkezdése előtt.

A SYN egyetlen jelző, amely megnyitja a beszélgetést és egy kezdeti sorszámot javasol. A SYN-ACK a SYN-t kombinálja a partner korábbi SYN-jének nyugtázásával, így egyetlen csomagban befejeződik a szinkronizálás.

A SYN-elárasztás túlterheli a szervert azzal, hogy sok SYN-csomagot küld a kézfogás befejezése nélkül. A félig nyitott kapcsolatok kitöltik a várakozó sort és blokkolják a jogos felhasználókat. A SYN-sütik a szabványos megoldást jelentik a probléma megoldására.

A TCP egy négyirányú, FIN és ACK cserékből álló kézfogással zárja le a kapcsolatot. Mindkét irány egymástól függetlenül záródik, így az egyik oldal befejezheti az adatküldést, miután a másik fél lezárta a saját felét.

A kezdeti sorszám egy véletlenszerűen kiválasztott 32 bites érték, amelyet minden végpont a saját bájtfolyamához választ. Ez adja meg a hiányzó vagy ismétlődő szegmensek észlelésére és a hamisított csomagok elleni védelemre használt számláló értékét.

Nem. Az UDP kapcsolat nélküli, és kézfogás nélkül küldi a datagrammokat. Ez gyorsabbá és könnyebbé teszi, mint a TCP, de az alkalmazásoknak maguknak kell kezelniük a megbízhatóságot, a rendezést és a torlódások szabályozását.

A mesterséges intelligencia asszisztensei feljegyzik a rögzített csomagokat, osztályozzák azokattransmités RST-ket, és SYN-elárasztásokat észlelnek. Fordítanak Wireshark szűrők egyszerű angolra, és javaslatot tesznek a következő diagnosztikai lépésre a csatlakozási problémák esetén.

Igen. A mesterséges intelligencia által fejlesztett kódolóasszisztensek egy egyszerű angol kérést egy Python Scapy vagy netcat szkriptet, amely elindítja és ellenőrzi a háromirányú kézfogást, majd elmagyarázza az egyes sorokat, hogy a mérnökök áttekinthessék azokat a futtatás előtt.

Foglald össze ezt a bejegyzést a következőképpen: