V minulom dieli sme prenikli do základov sietí, predstavili si modely OSI a TCP/IP a prebrali sme aplikačnú, prezentačnú a relačnú vrstvu. V dnešnom pokračovaní sa pozrieme na ďalšie 2 vrstvy, konkrétne na transportnú a sieťovú.
Transportná vrstva, protokoly transportnej vrstvy
Transportná vrstva (Layer 4)
Dáta, ktoré vytvorí určitá aplikácia a prejdú prezentačnou a relačnou vrstvou nie sú ešte vhodné na prenos. Sú totiž v súvislom bloku, v akom ich vytvorila aplikácia. Na transportnej vrstve dochádza k ich segmentácií (PDU tejto vrstvy je segment). Navyše, segmenty môžu do cieľa prísť v rôznom poradí, či dokonca neprísť vôbec. Riešiť tieto problémy je úlohou práve transportnej vrstvy.
Úlohou transportnej vrstvy je teda zabezpečiť komunikáciu medzi konkrétnymi komunikujúcimi službami (pomocou portov) a postarať sa o to, aby segmenty došli do cieľa v správnom poradí, ak to aplikácia vyžaduje. Na zabezpečenie druhej menovanej požiadavky môžu segmenty niesť poradové číslo, prípadne iné informácie, aby sa u príjemcu dali poskladať do správneho poradia. To, že transportná vrstva segmentuje dáta, umožňuje viacerým aplikáciám súbežne odosielať a prijímať dáta.
S transportnou vrstvou súvisia ešte pojmy ako spojovanosť, spoľahlivosť, usporiadanosť a riadenie toku dát. Niektoré aplikácie totiž vyžadujú spojovo orientovanú službu, iné nespojovo orientovanú. Môžu tiež vyžadovať potvrdzovaný, resp. nepotvrdzovaný príjem, alebo spoľahlivý či nespoľahlivý prenos dát. Poďme si ich vysvetliť.
Spojovanosť znamená, že sa obe strany pred výmenou informácií dohodnú na určitých parametroch, vytvorí sa spojenie a potom sa môžu poslať dáta. Po prenose je spojenie nutné ukončiť. Pri nespojovaných službách je možné komunikovať kedykoľvek bez prípravy.
Spoľahlivosť je zrejme jasnejšia. Je to proces, ktorý garantuje, že dáta budú prijaté presne v takom tvare, v akom boli odoslané, a teda, že budú všetky a v správnom poradí. Nespoľahlivý prenos toto negarantuje.
Riadenie toku dát je schopnosť regulovať rýchlosť odosielania segmentov, aby sa predišlo zahlteniu siete a s tým súvisiacou stratou segmentov.
Transportná vrstva v TCP/IP architektúre najčastejšie používa TCP (Transmission Control Protocol) a UDP (User Datagram Protocol) protokoly. Známy je ešte SCTP (Stream Control Transmission Protocol), tomu sa však nebudeme venovať.
TCP
TCP je spojovo orientovaný, spoľahlivý, potvrdzovaný, bajtovo orientovaný protokol. Riadi tok dát. Čísluje segmenty a dbá na to, aby boli doručené. V prípade, že sa tak nestane, zabezpečí opätovný prenos segmentu. Príkladom je napríklad bežné surfovanie internetom, keď sa využíva TCP. Predsa len by bolo nepríjemné, keby nejaké dáta zo stránky chýbali. Do komunikácie však vkladá réžiu, a tak sa TCP nepoužíva tam, kde sa kladie dôraz na rýchlosť (napríklad VoIP).
Pred začatím komunikácie s použitím TCP je nutné otvoriť spojenie. Pri tom sa komunikujúce strany dohodnú, akými číslami začnú číslovať svoje segmenty (Initial Sequence Number - kedysi sa za začiatok brala 0, dnes je to náhodné číslo). Potom sa môže začať výmena, vykoná sa tzv. Three-way handshake. Na otvorenie spojenia sa používajú správy SYN, správou ACK sa vykonáva potvrdzovanie.
Každá strana čísluje svoje segmenty, pričom toto číslo je dvihnuté o počet odoslaných bajtov v segmente. Potvrdzovanie o doručení je dopredné, čo znamená, že ak jedna strana potvrdí príjem bajtu n znamená to, že prijala všetky bajty až po n-1. Potvrdzovanie sa deje pomocou poľa Acknowledgment Number v TCP hlavičke. Ak potvrdenie do určitého času nepríde, odosielajúca strana znova zopakuje odoslanie od posledného potvrdeného bajtu. Tým sa zabezpečí, že príjemca dostane všetky segmenty. Dôsledok číslovania a potvrdzovania je očividný. Predchádza sa tak stratám a pomiešaniu poradia segmentov.
TCP pre riadenie toku dát využíva techniku tzv. posuvného okna. Okno v tomto prípade znamená maximálny objem dát, ktorý jedna strana môže preniesť bez prijatia akéhokoľvek potvrdenia. Veľkosť tohto okna sa uvádza v poli Window Size a jeho veľkosť sa môže meniť, čím dochádza k riadeniu toku. Ak je napríklad odosielateľ od prijímateľa upovedomený o stratách segmentov vplyvom zahltenia, odosielateľ zmenší veľkosť okna.
Po výmene informácii je spojenie ukončené správou FIN.
Veľkosť hlavičky TCP je 20B bez prídavných informácií.
UDP
Naproti tomu UDP je nespojovo orientovaný, nespoľahlivý, nepotvrdzovaný a datagramovo orientovaný protokol. Neriadi tok dát. Ako ste už možno vycítili, použije sa tam, kde sú pripustené straty, avšak vyžaduje sa rýchlosť. Typickým príkladom je video či hlas, kde je potreba real-time komunikácie, avšak keď video stratí pár snímok, príliš to nevadí. Príkladom je video hovor prostredníctvom Skype-u, keď sme často benevolentní voči občasným seknutiam obrazu či zvuku. Ide sčasti aj o subjektívny pocit, avšak celkom určite by bolo nepríjemnejšie, keby dáta dorazili neskôr a strácal by sa tak dojem real-time komunikácie.
UDP sa ani nestará, či segmenty dorazili k príjemcovi, a teda ani nerieši ich opätovný prenos.
Ak je potrebné, aby sa s použitím UDP použila aj spoľahlivosť, musí si to zabezpečiť aplikácia, ktorá UDP používa.
Známe služby využívajúce UDP: DHCP (porty 67 a 68), DNS (53), VoIP (5060)...
Veľkosť hlavičky UDP je 8B.
Už som spomenul slovko port, pomocou ktorého transportná vrstva vie, kde má doručiť segmenty. Port je v podstate číslo, ktoré operačný systém priradí konkrétnemu bežiacemu procesu pre konkrétne spojenie. Čísla portov pre každý protokol sú nezávislé, TCP 80 nie je to isté ako UDP 80.
Adresné informácie sa nesú v hlavičke segmentu. Tam sú zapísané čísla zdrojového i cieľového portu. Dvojica IP adresy a čísla portu sa nazýva socket (v tvare IP:port). Socketom je jednoznačne určený pár komunikujúcich aplikácií. Porty sú 2-bajtové čísla, je ich možné teda použiť 216=65 535. Delíme ich do troch skupín.
1. porty 0-1023 (tzv. well-know ports). Ide o porty rezervované pre služby, na ktorých počúvajú servery.
2. porty 1024-49 151 (tzv. registrated ports). Porty určené pre používateľské služby a procesy. Môžu na nich počúvať klienti i servery.
3. porty 49 152-65 535 (majú viaceré názvy ako private, dynamic, ephemeral ports). Sú určené najmä pre klientov, servery na nich počúvajú iba zriedka.
Servery zvyčajne počúvajú na vopred známych portoch, ktoré sa nemenia. Klienti používajú dynamicky pridelené čísla portov. Čísla portov ostávajú počas komunikácie rovnaké.
BiGTomEE