TCP hálózat működése
- Az Internet egy csomagkapcsolt hálózat --> csak a végpontokról van infó, a köztes hálózatról nincs.
- Ha kettőnél több számítógépközpontot kötünk össze, akkor a sávszélesség felosztása problémákba ütközhet. Ennek megoldására és a csomagok célba juttatására született meg a TCP (transmission control protocol - átvitelvezérlő protokoll).
Sziasztok! megpróbáltam kicsit kiegészíteni - ha jó, amit írtam, akkor töröljétek ki a kéket (meg ezt is :)) üdv, Cz
Tartalomjegyzék
TCP hálózat alapjai
- Alapvető adatátvitel: Egy oktettekből álló folytonos adatfolyam átvitelét látja el, úgy hogy a bájtokat szegmensekre bontja szét.
- Megbízhatóság: A TCP dolga az elveszett, megsérült, megduplázódott, nem helyes sorrendben érkezett csomagok érzékelése, és ezek kiküszöbölése. Ezt úgy éri el, hogy minden egyes kiküldött oktetthez tartozik egy sorszám, és a fogadó oldalnak pozitív megerősítést kell adjon a megérkezett oktettekről. Ha egy bizonyos időn belül nem jön pozitív megerősítés, akkor az adatot újraküldi a küldő oldal. Mindamellet ez a sorszám arra is jó, hogy a fogadó oldal a nem helyes sorrendben jött adatokat helyesen sorba tudja rendezni és észlelje a duplázódásokat. Az adatok sérülésének észrevételére pedig ellenörzőösszeget használ.
- Adatfolyam vezérlés: A TCP egy úgynevezett torlódási ablakot (congestion window - cwnd) használ az adatfolyamvezérlésre.
- Multiplexitás: Mint említettük a TCP folyamat-folyamat közti kommunikációra szolgál, azonban egy hoszton több folyamat is futhat, és több is akarhat párhuzamosan kommunikálni, így a TCP a hoszton ún. portokat használ. A kapcsolat kommunikációnál használt hálózati címe, és a TCP port együtt adják az ún. socket-et és a socketekből álló egyértelmű párokkal azonosítjuk a kapcsolatot. Minden egyes hoszt saját feladata, hogy a feladatok számára portokat biztosítson egy hozzárendeléssel(bind()).
- Kapcsolatok: Lévén a kommunikációt egy nem feltétlenül megbízható alapokra helyezett hálózaton kell lefolytatni, a kapcsolat létrehozásához kézfogási (Handshake) mechanizmusokat kell beépíteni.
- Megelőző biztonság: A TCP szükség esetén gondoskodik helyes default értékek használatáról, és beállításáról. (Pl. kapcsolódó kliens esetén automatikusan kap portot, ha nem adunk meg külön ablakméretet, akkor az OS TCP kezelő része ad meg ilyet, stb.)
Hardver
- Routereknél default kézbesítés: best effort (legjobb tudás szerint) és SORBAN. Spec esetekben (diffuser mód) prioritás feladó, címzett vagy típus alapján.
- A routerek hardveres felépítése a következő: a routernek vannak bemenetei és kimenetei (tipikusan GBPS sávszélességű kapcsolaton).
- A bemenetre érkező csomagok várakozási sorba (queue) kerülnek.
- Maga a router egy sokprocessoros számítógép, ami elvégzi a csomagok továbbítását a következő router (vagy a célgép) felé.
- A továbbítás úgy történik, hogy a router a vele kapcsolatban álló routerektől begyűjt egy irányítási táblázatot (routing table), amely a router körüli közvetlen hálózat topológiájáról tartalmaz információkat és ami alapján a router meg tudja határozni, hogy az adott csomagot melyik kimenetén kell továbbítania.
A TCP protokoll
- Ha egy csomag célbaért, akkor a célgép nyugtázó csomagot (acknowledgement packet - ACK) küld a küldő gép felé. Ennek mérete kicsi, csak fejléc és minimális tartalom (következő küldendő csomag sorszáma). Ha nem érkezik meg meghatározott időn belül, vagy az ACK-k érkezésekor egy sorszám kimarad, újra kell küldeni a hiányzó csomagot.
- Roundtrip time (RTT) - ami alatt a kiküldött csomag ACK-ja visszaérkezik a küldő géphez (teljes körbemenet ideje). Mérése: több csomag küldéséból az utolsó kettő átlaga. Szórás: az átlagos RTT és az aktuálisan beérkezett különbsége. Szofisztikáltabb módszer a szórás, a legutolsó csomag RTT-je, az átlagos RTT, '-vel a frissített értékeket jelöltem:
- Csomagvesztés: ha az átlagos RTT után -val sem jön válasz. Ehhez legalább három sikeres csomagküldés szükséges (a szórás becsléséhez). Mivel a csomagvesztés manapság kicsi (minden 1000-10000-edik csomag veszik csak el), az ACK-k ötös-tízes csomagokban érkeznek, csak azt kell újraküldeni, ami ebből kimarad.
- Csomagvesztés következhet be, ha
- TTL elfogy
- Checksum nem stimmel
- betelik a buffer és nem fér be
Sávszél-tesztelés
Vagy másnéven Slow Start. Sávszél-tesztelés alatt a sávszélesség exponenciálisan növekszik (1 RTT-nyi idő alatt több csomagot is kiküld a rendszer). Ezt addig folytatja, amíg el nem veszik egy csomag. Ekkor a sávszélességet a csomagvesztés előtti utolsó érték felére veszi vissza, majd exponenciális helyett lineáris sávszélesség-növelés kezdődik (és a rendszer átvált torlódás-elkerülő üzemmódba). Ezen módszer segítségével logaritmikus idő alatt megtalálja a rendszer az általa elérhető sávszélességet. A sávszélesség aktuális értéke: , ahol P a csomagméret, a roundtrip time, w pedig a kiküldött csomagok száma.
Torlódás-kezelés
Ebben a módban a cwnd-t ACK beérkezése esetén a cwnd aktuális értékének reciprokával megnöveli, és ennek az értéknek mindig az egészrészét tartja kiküldve. Csomagvesztés esetén a cwnd feleződik. (A rendszerben tartott csomagok csökkentését úgy éri el, hogy beérkező ACK esetén sem küld ki új csomagot, amíg több van a rendszerben, mint a cwnd mérete.)
Röviden a cwnd változása egyenletekkel:
csomagvesztés esetén.
sikeres csomagkézbesítés esetén.
Makroszkópikus egyenlet a cwnd időbeli változására .
A TCP fűrészfogasan fogja követni az elérhető sávszélesség változását.
Ha azonban a sávszélesség nagyon lecsökken, , és alatt csak egy csomagot (vagy annyit sem) tudok kiküldeni, akkor ez az algoritmus nem működik.
A Karn-féle algoritmus
- Ha a , múlva küld csak csomagot.
- Ha az elveszett, akkor a következőt múlva küldi.
- Folyamatosan duplázza a küldések közötti időt, egészen -ig.
- Ha ekkor is csomagvesztés lép fel, lehal a TCP.
- Amikor sikeresen kiküldött egy csomagot, visszatér torlódás-kezelő módba.
Egyszerű modell
A hálózatot egy black box-nak tekintjük, tehát a két pont között csak egy "link-et látunk":
d késleltetéssel, p csomagonkénti veszteségi rátával, C sávszélességgel és B buffer-mérettel.
Ez a modell hosszú idejű TCP kapcsolatok szimulálásához jó, mert beáll(hat) valamilyen stacionárius állapotra. (A gyors "burst"-ök nem érzékenyek pl a sávszélességre...)
Megjegyzés: Ezzel szemben a valódi kapcsolatokra inkább az jellemző, hogy vagy nagyon hosszú vagy nagyon rövid a kapcsolat - közepes hosszúak egyre kevesebben vannak ("elefántok és egerek").
időnként megy ki egy csomag (P csomagméret) - érdemes áttérni erre az időegységre, így az egyenletünk:
, esetén. Ennek megoldása: , tehát gyökösen nő w a csomagvesztés után (ill csomagvesztés után közvetlen kell egy kis idő a növekedés elkezdéséig, amíg visszaér az ACK).
A megoldásból kihozható (-kra Poisson-eloszlást feltételezve), hogy az átlagos cnwd:
~ , tehát ~ , így:
, ahol - ami univerzális a hálózatokra (dimenziós okokból kevésbé függ a hálózat tulajdonságaitól)
Ezek után felírható, hogy a TCP sávszélességnek az igénye:
Ez történik p valószínűségű csomagvesztés esetén.
- Ha NINCS véletlen csomagvesztés (p=0), akkor az egyre nagyobb cnwd miatta a buffer betelik. Így nem random iteráció lesz, hanem mindig akkor veszik el a csomag, amikor . (B a buffer mérete.) Csomagvesztéskor így mindig B/2-re áll be a cnwd. Tehát
, ahonnan a periódus ideje:
A csomagvesztésre felírható itt, hogy ~ , ahonnan ~ . Ezeket felhasználva, megkaphatjuk cnwd várható értékét:
A TCP hálózat, mint kaotikus rendszer
- Ha veszünk sok (~20) TCP-t, melyeknek a trajektóriáit nézzük, akkor azt tapasztalhatjuk, hogy kis perturbációra igen érzékeny a rendszer: Ha perturbáció után vizsgáljuk az eredeti és a perturbált adatsort, akkor azt láthatjuk, hogy rövid időn (szinte) nem változik, viszont egy idő után erősen el fognak térni a rendszerek. Itt az eltávolodást Ljapunov-exponenssel lehet mérni...
- 2 db TCP viselkedését nézve azt tapasztaljuk, hogyha a 2 TCP -it egymás függvényében ábrázoljuk, akkor "különös attraktort" látunk - mely egy tört dimenziós fraktál (box-counting-gal mérhető pl.)
- Már egy TCP is tud kaotikus viselkedést mutatni (megfelelő paraméterezéssel)