Az internet korábbi éveiben az Internet Protocol (IP) volt az egyetlen protokoll, amellyel az emberek csatlakoztak az internethez. Az IP-vel az volt a probléma, hogy üzenetet küldhetett, és nem volt biztos abban, hogy a címzett megkapja-e vagy sem. Emiatt jött létre a TCP/IP.

A TCP/IP biztosítja, hogy az összes elküldött adat eljusson a címzetthez. Ezt úgy teszi, hogy az adatok küldése előtt biztonságos kapcsolatot biztosít a kliens és a szerver számára. Ez a biztonságos kapcsolat egy háromirányú kézfogásként ismert folyamaton keresztül jön létre, más néven TCP/IP-kézfogásként.

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

Kép forrása: Fleshgrinder/Wikimedia

A háromirányú kézfogás (TCP/IP handshake) az első három interakció a kliens és a TCP-kapcsolatot létrehozó szerver között. Ezek a kezdeti interakciók elengedhetetlenek a biztonságos kapcsolat létrehozásához. Ebben a fázisban mind a kliens, mind a szerver megállapodik azokban a paraméterekben, amelyeket a bejövő és kimenő adatcsomagok ellenőrzésére és ellenőrzésére használ. Ezek a paraméterek TCP szegmensek formájában lesznek.

instagram viewer

Mi az a TCP szegmens?

A TCP/IP-kapcsolatban minden elküldött adatot le kell vágni, és az úgynevezett TCP-szegmensekre kell strukturálni. Ezek a szegmensek olyan információkat tartalmaznak, mint az IP-címek, portok, jelzőbitek, sorszámok, nyugtázási számok és az opcionális adat vagy hasznos adat.

Az első három interakció (háromirányú kézfogás) csak TCP szegmensfejléceket tartalmaz hasznos terhelés vagy csatolt adatok nélkül. Itt van egy minta egy TCP szegmensből

Kép forrása: Ere/Wikimedia

Vegye figyelembe, hogy a fenti ábra csak a TCP-re vonatkozik. A teljes TCP/IP szegmenshez mindkettő szükséges IP-címek a feladótól és a fogadótól a fenti TCP szegmens tetején.

Amikor csomagot küld valakinek, a futárszolgálat köteles kitölteni egy tájékoztató űrlapot, majd feladás előtt csatolni kell a csomaghoz. Hasonlóképpen, a TCP megköveteli a feladótól, hogy csatoljon egy szegmensfejet (információs űrlapot) az adatokhoz (csomaghoz), mielőtt elkezdené a szegmens (csomag) küldését a címzettnek.

Amikor egy kliens kommunikál a szerverrel, mindkét félnek TCP-szegmens formájában kell formáznia interakcióit. A TCP szegmens egy TCP szegmensfejből áll, amely a küldeni kívánt adatokhoz kapcsolódik. A feladónak ki kell töltenie a szegmensfej által igényelt információkat.

A háromirányú kézfogáshoz a feladónak ki kell töltenie a következőket:

  • Forrás port: Azonosítja a feladó portját
  • Célkikötő: Azonosítja a vevő portját
  • Sorszám: A szegmensek sorrendjét jelzi
  • Elismerési szám: Azt jelzi, hogy egy szegmens nyugtázása megtörtént azáltal, hogy hozzáadott egyet az adott sorszámhoz

A szegmensfej-mezők kitöltése mellett a küldőnek ki kell választania egy jelzőbitet is. Összesen hat jelzőbit van, de a háromirányú kézfogáshoz csak a következő kettőre lesz szüksége:

  1. SYN: Sorszámot ad. Ezt a sorszámot fogja használni az összes bejövő szegmens sorozatának megszámlálására az interakció hátralévő részében.
  2. ACK: Azt jelzi, hogy a SYN szám fogadója elfogadja a kapcsolódási kérelmet azáltal, hogy a megadott SYN számhoz hozzáad egyet (1).

Most, hogy tudja, mi az a TCP szegmens, nézzük meg, hogyan használják a háromirányú kézfogásban.

Hogyan működik a háromirányú kézfogás

Háromirányú kézfogás jön létre, ha mind a kliens, mind a gazdagép információkat cserélt, és nyugtázták egymás sorszámát. Ahogy a név is sugallja, a háromirányú kézfogás három lépésben történik.

Először az ügyfél egy tiszta SYN szegmenst küld, jelezve, hogy kapcsolatot akar. Másodszor, a szerver egy SYN-ACK szegmenssel válaszol, ami azt jelenti, hogy nyugtázta a kérést, és elküldi a saját SYN számát a kliens számára. Harmadszor, a kliens egy ACK szegmenst küld a szervernek, hogy értesítse, hogy a szerver SYN-számát nyugtázták, és azt a további csatlakozáshoz használják.

A háromirányú kézfogás valahogy így fog kinézni:

Eszközjóváírás: Fleshgrinder/Wikimedia

Bontsuk fel, és nézzük meg a szegmenseket, hogy megtudja, mi történik pontosan, amikor a kliens és a kiszolgáló sorszámokat cserél és nyugtázik.

1. lépés: Az ügyfél SYN szegmenst küld

Eszközjóváírás: Fleshgrinder/Wikimedia

A kliens egy SYN szegmens küldésével kér kapcsolatot küld a szervernek. A kliens a kliens IP-címét használja a szerver megkeresésére és a TCP szegmens elküldésére.

A szegmens bonyolultságának csökkentése érdekében hagyjunk figyelmen kívül néhány szegmensmezőt, és koncentráljunk a háromirányú kézfogási kapcsolat alapvető szükségleteire. Ez magában foglalja a forrásportot, a célportot, a sorszámot, a nyugtázási számot és a használt jelzőbit típusát.

És ezzel egy SYN/request szegmensnek így kell kinéznie:

A képet az író készítette 

Az ügyfélport egy véletlen szám 49152 és 65536 között. Ez a porttartomány az a megállapodás szerinti tartomány, amelyet a nyilvános eszközök dinamikusan használhatnak az internethez való csatlakozáshoz. Az 1024 és 49151 közötti porttartományok privátak. A megadott tartományon belüli port használatához egy entitásnak regisztrálnia kell őket. Az 1024 alatti portszámok különféle funkciók és internetes protokollok számára fenntartott portok, például FTP (20-as port), SMTP (25-ös port), DNS (53-as port) és HTTP (80-as port).

A való életben a sorszám véletlen szám. A példában a 0000000000 számot használtuk, hogy megkönnyítsük a megjelenítést.

A lépések során vegye figyelembe a sorszámot. Jelenleg 000000000. Jelenleg nincs nyugtázási szám, mivel nincs mit elismerni.

2. lépés: A szerver SYN-ACK szegmenssel válaszol

Eszközjóváírás: Fleshgrinder/Wikimedia

Amint a szerver megkapja a SYN szegmenst, egy ACK szegmens küldésével válaszol, amely tartalmazza a nyugtázási számot. A nyugtázási szám az ügyfél sorszáma plusz egy (1).

A képet az író készítette

Nézd meg a forrásportot. Azt mutatja, hogy a szegmens a 20-as portról származik, jelezve, hogy válaszként a szervertől érkezett.

Most nézze meg az elismervény számát. Ez 0000000001, ami az ügyfél sorszáma (0000000000) plusz egy (1). Így követhető nyomon egy szegmens. Tegyük fel, hogy az ügyfél ACK szegmensválaszt kapott, ahol a nyugtázási szám 0000000002. Ez azt jelzi az ügyfélnek, hogy a 0000000001 szegmens hiányzik, és az ügyfélnek várnia kell, amíg megérkezik. így nem tapasztalsz csomagvesztést.

Amint látja, két jelzőbit van aktiválva – a SYN és az ACK.

A kliens sorszámának nyugtázásán kívül a szerver saját sorszámot is küld a kliens számára, hogy nyugtázza a szerver sorszámát plusz egy (1). Példánkban a 1111111111-et használtuk a szerver sorszámaként. A való világban ez a szám ismét véletlenszerű.

Vegye figyelembe, hogy az ügyfél és a kiszolgáló sorszámának nem kell egyeznie. Mindaddig, amíg mindkét fél elismeri egymás egyedi sorszámát, a kapcsolat megbízható lesz.

3. lépés: Az ügyfél ACK szegmenssel válaszol

Eszközjóváírás: Fleshgrinder/Wikimedia

Végül a kliens nyugtázza a szerver sorszámát.

A képet az író készítette

Az utolsó szegmens egy ACK szegmens az ügyféltől.

Ahogyan Ön is tudja, a kliens a szerver sorszámát (1111111111) plusz egy (1) választva nyugtázza a szerver sorszámát, ami 1111111112.

A kliens és a szerver többé nem küld sorszámot, mivel a sorozat kezdetét már nyugtázták. Mindazonáltal mindkét fél elvárja, hogy a nyugtázási szegmensek sorszámmal plusz egy (1) folytatódjanak, és az interakció során a bájtok száma. Ebben az esetben a kliens azt várja, hogy a következő szerverválasz 0000000002 ACK-t kapjon (ha nincs csatolt adat).

Ezt követően létrejön a háromirányú kézfogás!

A hálózati kapcsolatok működésének megértése

Most, hogy megtanulta a háromirányú kézfogás működését, a kézfogás után könnyebben megértheti a TCP működését is. A kliens és a szerver akkor kezdi el az adatküldést, amikor a kézfogás létrejön. Ezúttal a teljes szegmensformátum kerül felhasználásra, plusz az opcionális adatok vagy a hasznos teher.

Az adatokat általában szegmentálják/vágják kisebb darabokra a könnyebb átvitel érdekében. Minden adatszegmensnek saját szegmensfeje van, amely sorszámot és nyugtázási számot tartalmaz. A sorszámnak az az oka, hogy ismerjük a szegmensek sorrendjét, amikor végül újra összeállnak. A nyugtázási számok azért vannak, hogy a feladóval ellenőrizzék, hogy a szegmensét megkapták-e, és hogy az megfelelt-e a bejövő szegmensek sorrendjének.

A sorszámok megszámlálásával és egy visszaigazolással történő ellenőrzésével a TCP megbízhatóan szállíthat hatalmas adattömeget anélkül, hogy hiányzó adatcsomagok kellenek.

És ezzel elég jó elképzelése van a TCP működéséről.