1
Tartalom Szállítási réteg o Bevezető o Szállítási szolgálati primitívek o Címzés o Nyalábolás o TCP modell o TCP fejrész o TCP összeköttetés létesítés o TCP összeköttetés lebontás o TCP ablakkezelés 2
Tartalom Szállítási réteg o TCP torlódáskezelés o TCP időzítéskezelés o UDP o UDP fejrész o UDP szolgáltatás 3
Szállítási réteg 4
Bevezető A szállítási réteg célja az, hogy hatékony, megbízható és gazdaságos szolgálatot nyújtson felhasználóinak, az alkalmazási rétegben futó folyamatoknak Szállítási entitás (transport entity): hardver és/vagy szoftver elem, amely a munkát végzi. Mi a fő különbség a hálózati és a szállítási réteg között? A szállítási réteg kódja teljes egészében a felhasználók gépein fut, szemben a hálózati réteggel, ami nagyrészt a routereken, a routereket pedig a szolgáltató üzemelteti. Az alkalmazások programozói egy szabványos primitívkészletre írhatják a kódot, és az így megírt programok a hálózatok széles skáláján működnek. 5
Bevezető 6
Szállítási szolgálati primitívek Sok alkalmazás (ezzel együtt programozó) használja a szállítási primitíveket, ezért a szállítási szolgálatnak kényelmesnek és könnyen használhatónak kell lennie Minden szállítási szolgálat egyedi interfésszel rendelkezik amelyen a felhasználók hozzáférnek a szolgálathoz. Primitívek pl: listen, connect, send, receive TPDU (Transport Protocol Data Unit - szállítási protokoll adategység) 7
Címzés Amikor egy alkalmazási folyamat (vagyis egy felhasználó) egy távoli alkalmazási folyamattal akar összeköttetést létrehozni, meg kell jelölnie, hogy melyik folyamattal akar kapcsolatba lépni. Kinek kell elküldeni az egyes üzeneteket? Külön szállítási címeket definiálunk az egyes folyamatok részére, amelyeken várhatják az összeköttetési kéréseket: portok (általános elnevezésük: TSAP Transport Service Access Point, a hálózati rétegben pedig: NSAP, az interneten ez az IP cím) 8
Címzés Szállítási összeköttetés 9
Címzés Honnan tudja az 1. hoszt alkalmazási folyamata hogy pl.a pontosidőszerver az 1522 TSAP-hez csatlakozik? Az időszerver már évek óta az 1522-es NSAP-hez csatlakozik, és ezt a hálózat minden felhasználója megtanulta stabil TSAP Ahelyett, hogy az összes lehetséges szerver egy jólismert TSAP-t figyelne, minden olyan gépnek van egy különleges folyamatszervere (process server), amely szolgálatokat akar felkínálni a távoli felhasználóknak. A folyamatszerver a kevésbé sűrűn használt szerverek megbízottjaként működik. Olyan esetekben amikor a szolgáltatások a folyamatszolgáltatótól függetlenül léteznek (például egy állómányszolgáltató hardveren), hogy a felhasználó egy adott szolgáltatás nevéhez tartozó TSAP-címet megtudja, összeköttetést létesít a névszolgáltatóval (ami a jól ismert TSAP-címén várakozik). A felhasználó üzenetet küld a kért szolgáltatás nevével, mire a névszolgáltató visszaküldi annak TSAP-címét. A felhasználó ezután megszünteti az összeköttetést a névszolgáltatóval, és újat létesít a kívánt szolgáltatással. 10
Nyalábolás Ha például egy hoszton csak egyetlen hálózati cím áll rendelkezésre, akkor azon a gépen minden szállítási összeköttetésnek azt kell használnia. A beérkező TPDU-kat melyik folyamatnak kell továbbítani? feltöltési multiplexelés (upward multiplexing) 11
TCP modell A helyi folyamatoktól kapott felhasználói adatfolyamokat a TCP-entitás 64 KB-ot meg nem haladó méretű darabokra szedi szét a gyakorlatban sokszor 1460 adatbájtos darabokra, mert így az IP- és TCP-fejrészekkel együtt is beleférnek egy Ethernet-keretbe. Az egyes darabokat önálló IP-datagramokban küldi el Az 1024 alatti portokat jól ismert portoknak (well-known port) hívják, és a megszokott szolgáltatások részére vannak fenntartva. Az egyes hosztok a www.iana.org-on definiált jól ismert portok kivételével bárhogyan kioszthatják a portjaikat. 12
TCP modell A TCP-összeköttetésen nem üzenetfolyamok, hanem bájtfolyamok áramlanak Amikor egy alkalmazás adatot ad át a TCP-nek, a TCP dönti el, hogy azonnal elküldi azt vagy puffereli egy ideig, hogy így nagyobb adatmennyiséget küldhessen el egyszerre. Összegyűjtheti több írási utasítás adatait egyetlen szegmensbe, de egy írás adatait is eloszthatja több szegmensbe Urgent data (sürgős adat) jelzéssel kapott adatot a TCP azonnal továbbítja. A TCP-entitások egy csúszóablakos protokoll-változatot használnak: nyugta: a vevő TCP-entitás visszaküld egy olyan szegmenst (adatokkal tele, ha van elküldendő adat, egyébként üresen), amelyben a következőnek várt szegmens sorszámával visszaigazolja az adást. ha a küldő oldalon az időzítő a nyugta vétele előtt lejár, akkor a küldő újra elküldi a szegmenst 13
TCP fejrész 14
TCP összeköttetés létesítés Az egyik fél (szerver) passzívan várakozik a bejövő kérésekre a LISTEN és ACCEPT primitívek végrehajtásával. A másik oldal, melyet kliensnek hívunk, végrehajtja a CONNECT primitívet A CONNECT primitív elküld egy TCP-szegmenst SYN =1 és ACK=0 értékkel, majd választ vár Amikor a szegmens megérkezik a rendeltetési helyre, az ottani TCP-entitás ellenőrzi, hogy létezik-e egy folyamat, amely a célport mezőben meghatározott porton végrehajtotta a LISTEN primitívet. Ha nem, RST=1 válasszal elutasítja az összeköttetés-kérést. Ha valamilyen folyamat figyeli a megadott portot, akkor az megkapja a beérkező TCP-szegmenst, és rajta múlik, hogy elfogadja-e vagy visszautasítja az összeköttetést. Ha elfogadja, egy nyugtázó szegmenst küld vissza. 15
TCP összeköttetés létesítés 16
TCP összeköttetés lebontás Egy összeköttetés bontásához bármelyik fél küldhet egy FIN =1 értékű TCPszegmenst, amivel jelzi, hogy nem szándékozik több adatot küldeni. Amint a FIN nyugtája megérkezik, az az irány lezárul. A másik irányban azonban ettől függetlenül korlátlanul folyhat adatátvitel. Amikor mindkét irányt lezárták, az összeköttetés befejeződött. Az első ACK és a második FIN elhelyezhető ugyanabban a szegmensben is, így összesen csak háromra van szükség. Ha egy FIN-re nem érkezik válasz két csomag-élettartamnyi idő alatt, a FIN küldője bontja az összeköttetést. A másik fél végül észreveszi, hogy már senki sem figyel rá, az általa indított időzítő is lejár. 17
TCP összeköttetés lebontás 18
TCP ablakkezelés Az ablakkezelés nem kötődik olyan szorosan a nyugtázáshoz, mint a legtöbb adatkapcsolati protokollban. Példa: 19
TCP ablakkezelés Amikor az ablakméret 0 bájt, a küldő normális esetben nem küldhet szegmenst, azonban van két kivétel. a sürgős adatot továbbíthatja a küldő elküldhet egy egybájtos szegmenst, melyben arra kéri a vevőt, hogy közölje vele a következő várt bájt sorszámát és az ablakméretet holtpont elkerülése végett, ha véletlen ablakméretközlő szegmens elveszett A küldő nem köteles azonnal továbbítani az alkalmazástól kapott adatot. A vevő sem köteles azonnal nyugtázni a beérkezett szegmenseket. Amikor sok kicsi adat küldése történik, és mind külön szegmensben van, akkor nagy a pazarlás. Erre megoldás Nagle algoritmus: amikor a küldőhöz bájtonként érkezik az adat, csak az elsőt továbbítja, a többit addig puffereli, amíg az elküldött bájt nyugtája meg nem érkezik. Valós idejű alkalmazásoknál nem jó. 20
TCP torlódáskezelés Addig nem indít egy új csomagot a hálózatban, amíg egy régi el nem hagyja azt (tehát célba ér). A TCP az ablakméret dinamikus változtatásával próbálja ez a célt elérni. Az összes TCP-algoritmus feltételezi, hogy időtúllépés torlódás miatt következik be ezért azt figyeli, hogy észlelje a torlódást. Az Internet megoldása: két potenciális probléma létezik - a hálózat kapacitása és a vevő kapacitása -, melyeket külön kell kezelni. Ennek érdekében minden adó két ablakot használ: az egyik ablakot a vevő szabályozza, a másik pedig a torlódási ablak (congestion window). A ténylegesen továbbítható bájtok száma a két ablak értékének minimuma. A torlódási ablakot először a legnagyobb szegmens méretre állítja a küldő, majd próbálja növelni (exponenciálisan) lassú kezdés (slow start) 21
TCP torlódáskezelés 22
TCP időzítéskezelés Ismétlési időzítő (retransmission timer) Milyen hosszú ideig fusson az időzítő? A szállítási rétegben nehéz a körülfordulási időt kiszámítani. Adatkapcsolati réteg (layer 2) Szállítási réteg (layer 4) 23
TCP időzítéskezelés Ismétlési időzítő (retransmission timer) Megoldás: dinamikus algoritmus, amely a teljesítőképesség mérése alapján állandóan változtatja az időintervallumot. RTT Round Trip Time. Egy szegmens mért körülfordulási ideje: RTT RTT i = α RTTi-1 + (1-α) rtti RTO Retransmission Timeout Jacobson algoritmus: RTOi = RTTi-1 + 4 MDEVi-1 24
TCP időzítéskezelés Folytatódó időzítő (persistence timer) holtpont elkerülése végett, ha esetleg elveszik az ablakfrissítés Életben tartó időzítő (keepalive timer) Amikor egy összeköttetés már régóta tétlen, az életben tartó időzítő lejár, és ennek hatására a TCP ellenőrzi, hogy partnere még mindig működik-e. Ha a távoli entitás nem válaszol, az összeköttetés befejeződik. Time-Wait (2MSL maximum segment lifetime) a másik féllel való összeköttetés bontás után indítja az összeköttetés csak lejárta után bontódik, és ezután lehet a portot újrahasználni így biztos minden csomag vagy megérkezett vagy elutasították (nem lapol át a másik összeköttetésbe) 25
UDP User Datagram Protocol - felhasználói datagram protokoll összeköttetés nélküli protokoll A folyamatok a BIND vagy más hasonló primitív használatával kapcsolódhatnak rá egy portra Amikor egy UDP-szegmens megérkezik, akkor az adatmezejét a szállítási entitás kézbesíti a címzett portra kapcsolódó folyamatnak. Az UDP használatának tulajdonképpen az a legnagyobb előnye a nyers IP használatával szemben, hogy a fejrészben megtalálható a feladó és a címzett portszáma is. 26
UDP fejrész 27
UDP szolgáltatás Amit nem csinál: forgalomszabályozás hibakezelés újraküldés rossz szegmens vétele esetén Amire képes: biztosít egy interfészt az IP-protokoll használatához egyszerre több folyamatot képes demultiplexelni A kliens rövid kérdései és a szerver rövid válaszai (pl. DNS Domain Name System - körzeti névkezelő rendszer) olyan terület ahol az UDP hasznos. 28