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