{"id":301,"date":"2020-04-05T23:43:04","date_gmt":"2020-04-05T21:43:04","guid":{"rendered":"http:\/\/tech.sosthe.sk\/?p=301"},"modified":"2020-04-06T16:31:06","modified_gmt":"2020-04-06T14:31:06","slug":"3-2-delenie-sprav-a-adresacia-socketov-na-transportnej-vrstve","status":"publish","type":"post","link":"http:\/\/tech.sosthe.sk\/index.php\/2020\/04\/05\/3-2-delenie-sprav-a-adresacia-socketov-na-transportnej-vrstve\/","title":{"rendered":"3.2.\u2002Delenie spr\u00e1v a adres\u00e1cia socketov na transportnej vrstve"},"content":{"rendered":"<p>Internet je paketmi riaden\u00e1 po\u010d\u00edta\u010dov\u00e1 sie\u0165. Pakety maj\u00fa obmedzen\u00fa ve\u013ekos\u0165, be\u017ene cca 1,5 kB. Ke\u010f\u017ee spr\u00e1vy (d\u00e1ta) odosielan\u00e9 z aplika\u010dnej vrstvy m\u00f4\u017eu by\u0165 r\u00f4zne ve\u013ek\u00e9, pokojne aj nieko\u013eko gigabajtov, transportn\u00e1 vrstva tieto spr\u00e1vy rozdel\u00ed na men\u0161ie \u010dasti. Ka\u017edej z t\u00fdchto \u010dast\u00ed pribal\u00ed hlavi\u010dku s inform\u00e1ciami pre transportn\u00fa vrstvu cie\u013eovej stanice, \u010d\u00edm vznikne\u00a0<strong>segment<\/strong>. Segment odovzd\u00e1 \u010falej sie\u0165ovej vrstve, ktor\u00e1 sa postar\u00e1 o jeho prenos k transportnej vrstve cie\u013eovej stanice. Transportn\u00e1 vrstva v cie\u013eovej stanici vyextrahuje zo segmentov k\u00fasky spr\u00e1vy (d\u00e1t) a po\u0161le ich spr\u00e1vnemu socketu, teda na spracovanie procesu prij\u00edmacej aplik\u00e1cie.<\/p>\n<p>V hlavi\u010dke ka\u017ed\u00e9ho segmentu sa nach\u00e1dzaj\u00fa dve d\u00f4le\u017eit\u00e9 dvojbajtov\u00e9 \u010d\u00edsla:\u00a0<strong>zdrojov\u00fd port<\/strong>\u00a0a\u00a0<strong>cie\u013eov\u00fd port<\/strong> s mo\u017en\u00fdmi hodnotami 0 a\u017e 65535. Pozrime sa bli\u017e\u0161ie na to, ako sa tieto \u010d\u00edsla vyu\u017e\u00edvaj\u00fa na adres\u00e1ciu socketov. Ke\u010f proces otv\u00e1ra nov\u00fd soket, mus\u00ed by\u0165 asociovan\u00fd s nejak\u00fdm \u010d\u00edslom portu na jednom, alebo viacer\u00fdch sie\u0165ov\u00fdch rozhraniach (typicky je pridelen\u00e9 jedno sie\u0165ov\u00e9 rozhranie so svojou IP adresou pre ka\u017ed\u00fa sie\u0165ov\u00fa kartu a jedno rozhranie pre localhost). Socket m\u00f4\u017ee aplik\u00e1cia otvori\u0165 bu\u010f ako server, alebo ako klient.<\/p>\n<p>Ke\u010f proces otvor\u00ed serverov\u00fd socket, explicitne povie \u010d\u00edslo portu, s ktor\u00fdm bude asociovan\u00fd, alebo si nech\u00e1 opera\u010dn\u00fdm syst\u00e9mom prideli\u0165 vo\u013en\u00fd port. Ka\u017ed\u00fd segment, ktor\u00fd bude odoslan\u00fd pre tento socket, mus\u00ed ma\u0165 ako cie\u013eov\u00fd port toto \u010d\u00edslo portu.<\/p>\n<p>Klientsky proces pri otv\u00e1ran\u00ed socketu mus\u00ed \u0161pecifikova\u0165 IP adresu cie\u013eovej stanice a \u010d\u00edslo cie\u013eov\u00e9ho portu, aby bolo jasn\u00e9, s ak\u00fdm socketom chce komunikova\u0165. Okrem toho mus\u00ed obsadi\u0165 nejak\u00e9 \u010d\u00edslo portu na svojom po\u010d\u00edta\u010di, t.j. zdrojov\u00fd port, \u010d\u00edm ur\u010d\u00ed \u201en\u00e1vratov\u00fa adresu\u201c pre serverov\u00fd proces, aby vedel, kam m\u00e1 posla\u0165 odpove\u010f.<\/p>\n<p>V pr\u00edpade UDP protokolu je cie\u013eov\u00fd socket jednozna\u010dne ur\u010den\u00fd cie\u013eovou IP adresou a cie\u013eov\u00fdm portom. To tie\u017e znamen\u00e1, \u017ee \u017eiaden in\u00fd socket u\u017e nem\u00f4\u017ee ma\u0165 pridelen\u00e9 toto \u010d\u00edslo portu na tom istom rozhran\u00ed s danou IP adresou. Ak\u00e9ko\u013evek d\u00e1ta ur\u010den\u00e9 pre tento port na tomto po\u010d\u00edta\u010di bud\u00fa odovzdan\u00e9 tomuto socketu.<\/p>\n<p>V protokole TCP je socket jednozna\u010dne ur\u010den\u00fd \u0161tvoricou zdrojov\u00e1 IP adresa, zdrojov\u00fd port, cie\u013eov\u00e1 IP adresa a cie\u013eov\u00fd port. Ke\u010f\u017ee ide o protokol, kde sa udr\u017eiava spojenie, je potrebn\u00e9 uva\u017eova\u0165 dva pr\u00edpady ur\u010dovania cie\u013eov\u00e9ho socketu. Bu\u010f ide o nov\u00e9, alebo u\u017e vytvoren\u00e9 spojenie. Pokia\u013e hovor\u00edme o u\u017e vytvorenom spojen\u00ed, tak ide v\u017edy o komunik\u00e1ciu medzi t\u00fdmi ist\u00fdmi socketmi, z ktor\u00fdch ka\u017ed\u00fd m\u00e1 pridelen\u00fa st\u00e1le rovnak\u00fa IP adresu a port. Ani k jedn\u00e9mu z t\u00fdchto socketov u\u017e nem\u00f4\u017ee posiela\u0165 d\u00e1ta in\u00fd proces z in\u00e9ho socketu, lebo m\u00e1 bu\u010f in\u00fa IP adresu alebo in\u00e9 \u010d\u00edslo portu.<\/p>\n<p>Ako teda nadviaza\u0165 nov\u00fa TCP komunik\u00e1ciu? Serverov\u00fd TCP socket je \u0161peci\u00e1lny typ socketu, ktor\u00e9mu s\u00fa preposielan\u00e9 v\u0161etky pokusy o nadviazanie spojenia na danej IP adrese a porte pre zatia\u013e neasociovan\u00fa zdrojov\u00fa IP adresu a port. Serverov\u00fd soket vytvor\u00ed nov\u00fd socket, ktor\u00fd je asociovan\u00fd s rovnakou IP adresou a portom ako serverov\u00fd soket a z\u00e1rove\u0148 s touto novou zdrojovou adresou a zdrojov\u00fdm portom. Odteraz aj serverov\u00fd socket aj nov\u00fd soket bud\u00fa po\u010d\u00fava\u0165 na rovnakej IP adrese a rovnakom porte, ale s t\u00fdmto nov\u00fdm klientom u\u017e bude komunikova\u0165 iba nov\u00fd socket.<\/p>\n<p><em>Pozn\u00e1mka: Vlastnos\u0165, \u017ee mnoho paraleln\u00fdch socketov aplik\u00e1cie \u201epo\u010d\u00fava\u201c na rovnakom porte m\u00e1 ve\u013ek\u00fa v\u00fdhodu pri konfigurovan\u00ed firewallov, kedy sta\u010d\u00ed otvori\u0165 spojenia iba pre zop\u00e1r konkr\u00e9tnych portov. Napr\u00edklad, ak chceme, aby bol na po\u010d\u00edta\u010di pr\u00edstupn\u00fd iba webov\u00fd server, otvor\u00edme iba port 80 a ostatn\u00e9 m\u00f4\u017eeme zak\u00e1za\u0165. Keby ka\u017ed\u00e9 nov\u00e9 spojenie vytv\u00e1ralo komunik\u00e1ciu na inom porte servera, t\u00e1to komunik\u00e1cia by cez takto nakonfigurovan\u00fd firewall nepre\u0161la.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Internet je paketmi riaden\u00e1 po\u010d\u00edta\u010dov\u00e1 sie\u0165. Pakety maj\u00fa obmedzen\u00fa ve\u013ekos\u0165, be\u017ene cca 1,5 kB. Ke\u010f\u017ee spr\u00e1vy (d\u00e1ta) odosielan\u00e9 z aplika\u010dnej vrstvy m\u00f4\u017eu by\u0165 r\u00f4zne ve\u013ek\u00e9,&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"_links":{"self":[{"href":"http:\/\/tech.sosthe.sk\/index.php\/wp-json\/wp\/v2\/posts\/301"}],"collection":[{"href":"http:\/\/tech.sosthe.sk\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/tech.sosthe.sk\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/tech.sosthe.sk\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/tech.sosthe.sk\/index.php\/wp-json\/wp\/v2\/comments?post=301"}],"version-history":[{"count":1,"href":"http:\/\/tech.sosthe.sk\/index.php\/wp-json\/wp\/v2\/posts\/301\/revisions"}],"predecessor-version":[{"id":302,"href":"http:\/\/tech.sosthe.sk\/index.php\/wp-json\/wp\/v2\/posts\/301\/revisions\/302"}],"wp:attachment":[{"href":"http:\/\/tech.sosthe.sk\/index.php\/wp-json\/wp\/v2\/media?parent=301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/tech.sosthe.sk\/index.php\/wp-json\/wp\/v2\/categories?post=301"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/tech.sosthe.sk\/index.php\/wp-json\/wp\/v2\/tags?post=301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}