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.

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.
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
Í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.


