A szállítási réteg
Feladata:
hogy megbízható, gazdaságos adatszállítást biztosítson a forráshoszttól a
célhosztig, függetlenül magától a fizikai hálózattól vagy az aktuálisan
használt kommunikációs alhálózatoktól.
A szállítási réteg szolgálata:
·
összeköttetés
alapú szállítási szolgálat
·
összeköttetés
nélküli szállítási szolgálat
Különbségek a hálózati réteg és a szállítási réteg
szolgálatai 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
(legalábbis a nagy kiterjedésű hálózatokban). A szállítási réteg létezése
lényegében azt teszi lehetővé, hogy a szállítási szolgálat megbízhatóbb
lehessen annál a hálózati szolgálatnál, amelyre ráépül. A szállítási réteg képes
felfedezni, és kiegyenlíteni az elveszett csomagok, és a csonkolt adatok okozta
hibákat.
A szállítási rétegen belül
azt a hardver és/vagy szoftver elemet, amely a munkát végzi, szállítási funkcionális elemnek vagy szállítási entitásnak (transport
entity) nevezzük. Ez lehet az operációs rendszer magjának (kernelének) része,
önálló felhasználói folyamat, egy hálózati alkalmazáshoz tartozó könyvtár vagy
a hálózati illesztő kártya.
A
szállítási rétegnek köszönhetően 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. Mindezt anélkül, hogy a programozóknak a különféle
alhálózati interfészekkel és a megbízhatatlan átvitellel törődniük kellene. Ha
minden létező hálózat tökéletes lenne, és mindegyik egy olyan közös szolgálatprimitív-készletet
használna, amely garantáltan soha de soha nem változik, akkor lehet, hogy nem
lenne szükség a szállítási rétegre. A gyakorlati életben azonban azt a kulcsfontosságú
feladatot teljesíti, hogy elszigeteli a magasabb rétegeket a műszaki
megoldásoktól és az alhálózat tökéletlenségeitől.
A
fenti ok miatt sokan megkülönböztetik az 1-4. rétegeket a 4. feletti réteg(ek)től.
Az alsó négy réteget tekinthetjük a szállítási szolgáltatónak (transport
service provider), míg a magasabb réteg(ek)et tekinthetjük a szállítási
szolgálat felhasználójának (transport service user). A szolgáltató és a felhasználó
ezen elkülönítése jelentős hatással van a rétegek kialakítására, és kulcsfontosságú
helyzetbe hozza a szállítási réteget, mivel ez alkotja a fő határvonalat a
szolgáltató és a megbízható adatátviteli szolgálat felhasználója között.
A
valódi hálózatok nem hibamentesek, de pontosan a szállítási réteg feladata az,
hogy egy nem megbízható hálózatra épülve megbízható szolgálatot nyújtson.
A szállítási
protokollok feladata: hibakezelés, sorszámozás és forgalomszabályozás.
Az Internet szállítási protokolljai:
ü
az összeköttetés
nélküli protokoll az UDP,
ü
az összeköttetés alapú
protokoll a TCP.
UDP (User Datagram
Protocol - felhasználói datagram protokoll).
Az UDP olyan alkalmazásoknak
kínálja a szolgálatát, amelyek összeköttetés kiépítése nélkül akarnak
beágyazott IP-datagramokat küldeni.
Az UDP olyan szegmenseket
(segment) használ az átvitelhez, amelyek egy 8 bájtos fejrészből, valamint a
felhasználói adatokból állnak.
Az UDP-fejrész:
32bit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UDP Forrásport |
UDP Célport |
|
UDP szegmens hossza |
UDP ellenőrző összeg |
|
ADAT |
|
|
OPCIÓK |
|
Az UDP használatának 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. A portszámokat tartalmazó mezők
nélkül a szállítási réteg nem tudná, hogy mit kezdjen a csomaggal. A segítségükkel
azonban helyesen tudja kézbesíteni a szegmenseket.
Az UDP nem végez
forgalomszabályozást, hibakezelést vagy újraküldést egy rossz szegmens vétele
esetén. Viszont biztosít egy interfészt az IP-protokoll használatához, azzal a
többletszolgáltatással, hogy a portok használatával egyszerre több folyamatot
képes demultiplexelni. Az olyan alkalmazásoknak, amelyeknek fontos a
csomagforgalom, a hibakezelés vagy az időzítés precíz ellenőrzése, az UDP
pontosan azt nyújtja, amire szükségük van.
Minden olyan programnak, amely
valamely hoszt neve (pl.www.cs.berkeley.edu)
alapján akarja kikeresni a hoszt IP-címét, egy UDP-csomagot kell
elküldenie valamelyik DNS-szervernek. A szerver egy olyan UDP-csomaggal
válaszol, amely a hoszt IP-címét tartalmazza. Nincs szükség előzetes
összeköttetés létesítésre, sem az összeköttetés lebontására az átvitel után. A
hálózaton csak két üzenet halad át.
DNS: (Domain Name System -
körzeti névkezelő rendszer)
A
szükséges információt a hívótól a hívott felé a paraméterekben, visszafelé
pedig az eljárás eredményében lehet átvinni, a programozó elől azonban minden
üzenetváltás rejtve marad. Ezt a módszert RPC-nek (Remote Procedure Call - távoli
eljáráshívás) nevezték el és sok hálózati alkalmazás alapjául szolgált már. A
hívó folyamatot hagyományosan kliensnek, a hívott folyamatot, pedig szervernek
hívják.
A kliens-szerver RPC egy
olyan terület, amelyen az UDP széles körben használatos.
Egy másik ilyen a multimédiás
alkalmazásoké. Ahogyan az internetes rádió, az
internetes telefon, a
hálózati zeneszolgáltatás (music-on-demand), a videokonferencia és más
multimédiás alkalmazások egyre elterjedtebbé váltak, a tervezők észrevették,
hogy minden egyes alkalmazáshoz többé-kevésbé ugyanazt a valós idejű szállítási
protokollt találták fel újra és újra.
Egy általános, több célra
alkalmazható valós idejű szállítási protokoll a napjainkban, széles körben
használatos RTP (Real-Time Transport Protocol - valós idejű szállítási
protokoll).
Az RTP alapvető feladata az,
hogy több valós idejű adatfolyamot multiplexeijen
UDP-szegmensek egyetlen
folyamába. Az UDP-folyamot egy címre (egyesküldés), vagy több címre
(többesküldés) is feladhatja. Mivel az RTP csak a szabványos UDP-t használja, a
blokkjait a routerek nem kezelik különleges módon.
RTP nem használ forgalomszabályozást,
hibakezelést, nyugtázást és újraküldést, kérő megoldásokat.
A TCP-t (Transmission Control Protocol - átvitel-vezérlési protokoll)
- feladata:
bitfolyamok biztonságos átvitele megbízhatatlan összeköttetéses hálózaton
- hoszt azonosítása:
IP cím + TCP portcím
- a küldő és a vevő
között az adatok szegmensekben mennek
- TCP szegmens: 20
bájt fejléc + nem kötelező opcionális rész + adatok
Kifejezetten arra tervezték,
hogy megbízható bájtfolyamot biztosítson a végpontok között egy egyébként
megbízhatatlan összekapcsolt hálózaton.
A TCP-t arra tervezték, hogy
dinamikusan alkalmazkodjon az összekapcsolt hálózatok tulajdonságaihoz,
valamint hogy nagymértékben ellenálló legyen sokféle meghibásodással szemben. Pozitív
nyugtázást és csúszóablakot használ.
Minden TCP-t támogató gép
rendelkezik egy TCP szállítási entitással, amely lehet egy könyvtári eljárás,
egy felhasználói folyamat vagy a kernel része. A TCP-folyamokat és az IP-réteg
felé használható interfészeket minden esetben a TCP-entitás kezeli. 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. Amikor egy géphez
TCP-adatokat tartalmazó datagram érkezik, az a TCP-entitáshoz kerül, amely
visszaállítja az eredeti bájtfolyamokat.
A TCP szolgálati modell:
A TCP-szolgálat úgy valósul
meg, hogy mind a küldő, mind a fogadó létrehoz egy csatlakozónak (socket)
nevezett végpontot. Minden csatlakozónak
van egy száma, azaz csatlakozócíme, ami a hoszt IP-címéből és egy hoszton belül
érvényes 16 bites számból, a port azonosítójából tevődik össze.
Egy csatlakozó egyidejűleg
több összeköttetés kezelésére is használható. 65536 port van, az 1024 alatti
portokat jól ismert portoknak (well-known port) hívják.
32bit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Forrásport |
Célport |
|
|||||||
|
Sorszám |
|||||||||
|
Nyugtaszám |
|||||||||
|
Eltolás |
|
URG |
ACK |
PSH |
RST |
SYN |
FIN |
Ablakméret |
|
|
Ellenőrzőösszeg |
Sürgősségi mutatók |
|
|||||||
|
|
|
||||||||
|
Opciók (0 vagy több 32 bites szó) |
|||||||||
|
Adatok (opcionális) |
|||||||||
Forrásport: a
forráskapu száma
Célport: a
célkapu száma
Sorszám: a
szegmens első adatbájtjának sorszáma
Nyugtaszám: a
következő várt bájt sorszáma
Eltolás: TCP fejrész hossz, hány 32 bites
szóból áll a TCP-fejléc
Foglalt: későbbi
használatra fenntartott üres mező
U: URG:
sürgős
A: ACK:
érvényes nyugtázás
P: PSH:
késedelem nélküli adattovábbítás (pufferelés tiltva)
R: RST:
kapcsolat megszakítása
S: SYN: sorszámok
összehangolása, összeköttetés létesítésére szolgál
- háromutas
kézfogás:
- SYN = 1, ACK = 0:
kapcsolat felépítésének kezdeményezése
- SYN = 1, ACK = 1:
kapcsolat elfogadása
- SYN = 0, ACK = 1:
kapcsolat nyugtázása
F: FIN:
küldés vége, utolsó adat
Ablakmére (Unused): mennyi adat vételére képes a vevő
Ellenőrzőösszeg: a fejléc és az adatok ellenőrző összege
Sürgősségi mutatók: ha az URG=1 akkor a sürgős adatok a keret elejére kerülnek
Opciók és kitöltés (0 vagy több): Forgalomirányítás kitöltés stb.
Az általánosan használt
módszer az, hogy 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. Az Interneten ezeket a
végpontokat portoknak hívják.
Amikor egy folyamat egy
TCP-kapcsolatot szeretne kiépíteni egy másik, távoli folyamattal, akkor
hozzácsatolja magát egy addig a saját gépén nem használt TCP-porthoz. Ezt
nevezzük forrás portnak (source
port), és ez mondja meg a TCP-szoftvemek, hogy hová küldje az adott
kapcsolathoz tartozó bejövő csomagokat. A folyamat megad egy cél portot (destination port) is, hogy
megmondja, kinek kell a csomagokat adni a távoli oldalon. A 0-1023-ig terjedő
portokat a jól ismert szolgáltatások számára tartották fenn. A webkiszolgálók
például a 80-as portot használják, így a távoli kliensek könnyen megtalálják
őket. Minden kimenő TCP-üzenet tartalmaz egy forrás és egy cél portot is. Ez a
két port együtt azonosítja a kapcsolatot, használó folyamatokat mindkét
végponton.
Mivel a TCP Forrás port 16
bites, legfeljebb 65 536 gépet lehet egy IP-címhez rendelni.
|
Port |
Protokoll |
Alkalmazás |
|
20-21 |
FTP |
Fájlátvitel
(20-adatátvitel, 21-vezérlő) |
|
22 |
SSH |
Titkosított távoli parancssoros
bejelentkezés |
|
23 |
TELNET |
Távoli parancssoros bejelentkezés |
|
25 |
SMTP |
E-levelezés (TCP) |
|
53 |
DNS |
Névkezelés (UDP) |
|
69 |
TFTP |
Trivial FTP (Egyszerűbb fájlátvitel) |
|
67 |
DHCP |
IP-címkérés |
|
80 |
HTTP |
WEB |
|
110 |
POP3 |
Levelezés |
|
135-139 |
NETBIOS |
Windows |
|
143 |
IMAP4 |
Levelezés |
|
443 |
HTTPS |
Biztonságos WEB |
|
445 |
MS-DS |
Microsoft nyitott portja |
A küldő és a vevő
TCP-entitások az adatokat szegmensekben viszik át egymás között. A
TCP-szegmensek (TCP segment) egy rögzítetten 20 bájtos fejrészből (és egy nem
kötelező, opcionális részből), valamint 0 vagy több adatbájtból állnak.
A szegmensek méretének két
korlátja van. Egyrészt, minden szegmensnek a hozzá tartozó TCP-fejrésszel
együtt bele kell férnie a 65 515 bájtos IP-adatmezőbe. Másrészt, minden
hálózaton meghatározzák az úgynevezett legnagyobb átvihető adategységet
(Maximum Transfer Unit - MTU), amelybe minden szegmensnek bele kell férnie.
A TCP-entitások egy
csúszóablakos protokoll-változatot használnak. A küldő minden szegmens
feladásakor egy időzítőt is elindít. Amikor a szegmens megérkezik a célhoz, 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ő entitás újra elküldi a szegmenst.
Teljesítőképesség:
1. A teljesítőképesség
problémái.
2. A hálózat
teljesítőképességének mérése.
3. Rendszertervezés a
teljesítőképesség növelésére.
4. Gyors TPDU-feldolgozás.
5. A jövő nagy teljesítményű
hálózati protokolljai.
Összefoglalás
A szállítási réteg megértése
kulcsfontosságú a rétegekbe szervezett protokollok megértéséhez. Számos
különböző szolgálatot kínál, amelyek közül a legfontosabb a végpontok közötti,
összeköttetés alapú, megbízható bájtfolyam a küldőtől a vevőig. Ehhez egy olyan
szolgálatprimitív-készlet segítségével lehet hozzáférni, amely az összeköttetések
kiépítését, használatát és lebontását teszi lehetővé. Egy gyakran alkalmazott
szállítási réteg interfész a Berkeley-csatlkozók (sockets) által nyújtott
interfész.
A szállítási protokolloknak
képesnek kell lenniük arra, hogy összeköttetés-kezelést végezzenek egy
megbízhatatlan hálózaton. Az összeköttetések kiépítését az olyan késleltetett
és megkettőzött csomagok léte nehezíti, amelyek teljesen váratlan pillanatokban
újra felbukkanhatnak. Emiatt háromutas kézfogásra van szükség az összeköttetések
felépítéséhez. Az összeköttetések bontása könnyebb, mint a kiépítésük, de a két
hadsereg problémája miatt még így is távol áll a triviálistól.
A szállítási rétegnek még
akkor is sok dolga van, ha a hálózati réteg teljesen megbízható. Kezelnie kell
az összes szolgálatprimitívet, az összeköttetéseket és az időzítőket, valamint
adási jogokat kell adnia és felhasználnia.
Az Internet két fő szállítási
protokollt használ, az UDP-t és a TCP-t. Az UDP egy összeköttetés nélküli
protokoll, amely lényegében egy olyan héj az IP-csomagok körül, amely lehetővé
teszi több folyamat multiplexelését és a demultiplexelését egyetlen IP-címen.
Az UDP kliens-szerver párbeszédek lefolytatására alkalmas, például RPC
használatával. Felhasználható még az RTP-hez hasonló valós idejű protokollok
építőelemeként. Az Internet fő szállítási protokollja a TCP, amely megbízható,
kétirányú bájtfolyamot biztosít. Minden szegmensben 20 bájtos fejrészt
alkalmaz. A szegmenseket az Interneten belüli routerek feldarabolhatják, ezért
fontos, hogy a hosztok képeseknek legyenek a darabok újbóli összerakására.
Nagymennyiségű munka fekszik a TCP teljesítmény-optimalizálásában, amely Nagle,
Clark, Jacobson, Karn és mások algoritmusait használja fel. A vezeték nélküli
összeköttetések használata számos módon bonyolítja a TCP alkalmazását. A
tranzakciós TCP a TCP olyan kiterjesztése, amely kevesebb csomaggal valósítja
meg a kliens-szerver párbeszédeket.
A hálózat hatékonysága
általában főként a protokoll és a TPDU-feldolgozás kommunikációs költségén
múlik, és a sebesség növelésével a helyzet egyre romlik. A protokollokat arra
kell tervezni, hogy a lehető legkevesebbre csökkentsék a felhasznált TPDU-k, a
szükséges környezetváltások és az egyes TPDU-k lemásolásainak számát. A
gigabites hálózatok egyszerű protokollokat igényelnek.
TPDU (Transport Protocol Data Unit - szállítási
protokoll adategység)
CR: CONNECTION REQUEST (összeköttetés kérése)
CA: CONNECTION ACCEPTE (összeköttetés elfogadva)