Menu Zavrieť

3.2. Delenie správ a adresácia socketov na transportnej vrstve

Internet je paketmi riadená počítačová sieť. Pakety majú obmedzenú veľkosť, bežne cca 1,5 kB. Keďže správy (dáta) odosielané z aplikačnej vrstvy môžu byť rôzne veľké, pokojne aj niekoľko gigabajtov, transportná vrstva tieto správy rozdelí na menšie časti. Každej z týchto častí pribalí hlavičku s informáciami pre transportnú vrstvu cieľovej stanice, čím vznikne segment. Segment odovzdá ďalej sieťovej vrstve, ktorá sa postará o jeho prenos k transportnej vrstve cieľovej stanice. Transportná vrstva v cieľovej stanici vyextrahuje zo segmentov kúsky správy (dát) a pošle ich správnemu socketu, teda na spracovanie procesu prijímacej aplikácie.

V hlavičke každého segmentu sa nachádzajú dve dôležité dvojbajtové čísla: zdrojový port a cieľový port s možnými hodnotami 0 až 65535. Pozrime sa bližšie na to, ako sa tieto čísla využívajú na adresáciu socketov. Keď proces otvára nový soket, musí byť asociovaný s nejakým číslom portu na jednom, alebo viacerých sieťových rozhraniach (typicky je pridelené jedno sieťové rozhranie so svojou IP adresou pre každú sieťovú kartu a jedno rozhranie pre localhost). Socket môže aplikácia otvoriť buď ako server, alebo ako klient.

Keď proces otvorí serverový socket, explicitne povie číslo portu, s ktorým bude asociovaný, alebo si nechá operačným systémom prideliť voľný port. Každý segment, ktorý bude odoslaný pre tento socket, musí mať ako cieľový port toto číslo portu.

Klientsky proces pri otváraní socketu musí špecifikovať IP adresu cieľovej stanice a číslo cieľového portu, aby bolo jasné, s akým socketom chce komunikovať. Okrem toho musí obsadiť nejaké číslo portu na svojom počítači, t.j. zdrojový port, čím určí „návratovú adresu“ pre serverový proces, aby vedel, kam má poslať odpoveď.

V prípade UDP protokolu je cieľový socket jednoznačne určený cieľovou IP adresou a cieľovým portom. To tiež znamená, že žiaden iný socket už nemôže mať pridelené toto číslo portu na tom istom rozhraní s danou IP adresou. Akékoľvek dáta určené pre tento port na tomto počítači budú odovzdané tomuto socketu.

V protokole TCP je socket jednoznačne určený štvoricou zdrojová IP adresa, zdrojový port, cieľová IP adresa a cieľový port. Keďže ide o protokol, kde sa udržiava spojenie, je potrebné uvažovať dva prípady určovania cieľového socketu. Buď ide o nové, alebo už vytvorené spojenie. Pokiaľ hovoríme o už vytvorenom spojení, tak ide vždy o komunikáciu medzi tými istými socketmi, z ktorých každý má pridelenú stále rovnakú IP adresu a port. Ani k jednému z týchto socketov už nemôže posielať dáta iný proces z iného socketu, lebo má buď inú IP adresu alebo iné číslo portu.

Ako teda nadviazať novú TCP komunikáciu? Serverový TCP socket je špeciálny typ socketu, ktorému sú preposielané všetky pokusy o nadviazanie spojenia na danej IP adrese a porte pre zatiaľ neasociovanú zdrojovú IP adresu a port. Serverový soket vytvorí nový socket, ktorý je asociovaný s rovnakou IP adresou a portom ako serverový soket a zároveň s touto novou zdrojovou adresou a zdrojovým portom. Odteraz aj serverový socket aj nový soket budú počúvať na rovnakej IP adrese a rovnakom porte, ale s týmto novým klientom už bude komunikovať iba nový socket.

Poznámka: Vlastnosť, že mnoho paralelných socketov aplikácie „počúva“ na rovnakom porte má veľkú výhodu pri konfigurovaní firewallov, kedy stačí otvoriť spojenia iba pre zopár konkrétnych portov. Napríklad, ak chceme, aby bol na počítači prístupný iba webový server, otvoríme iba port 80 a ostatné môžeme zakázať. Keby každé nové spojenie vytváralo komunikáciu na inom porte servera, táto komunikácia by cez takto nakonfigurovaný firewall neprešla.