МРЕЖНИ СЛОЈЕВИ И ПРОТОКОЛИ, ДЕТАЉНИЈЕ Интернет је организован према моделу TCP/IP (енгл. Transmission Control Protocol/Internet Protocol). У том моделу се разликују наредна четири основна слоја: 1. апликативни слој, 2. транспортни слој, 3. мрежни слој (који се назива и интернет слој), 4. везни слој (који се назива и слој мрежног интерфејса). АПЛИКАТИВНИ СЛОЈ Свака апликација која користи мрежне услуге (на пример, апликације за размену електронске поште, прегледачи веба, игре које користе мрежу или апликације за размену датотека каква је BitTorrent) користи одређени протокол који је специфичан управо за тај тип апликације. Ти протоколи су протоколи апликативног слоја. На пример, апликације за преузимање електронске поште треба да саопште серверу команде типа „пошаљи ми листу непрочитаних мејлова на серверу”, „пошаљи ми мејл са датим идентификатором”, „обриши мејл са датим индентификатором” и слично. Мејл-сервер мора да разуме овакве поруке, да може да изврши команде које се овим порукама задају и да резултат пошаље клијенту и то у формату који клијент очекује. Постоје два протокола која се користе за преузимање и организовање мејлова (старији POP3 у којима се подразумева да се све поруке преузимају са сервера и чувају и организују на клијенту и новији IMAP који подржава и команде које омогућавају клијенту да поруке чува и организује на серверу). Апликативни протоколи се могу боље разумети ако се погледају детаљи једног таквог протокола. С обзиром на то да је за веб-програмирање које ћемо у наставку обрадити потребно познавање протокола HTTP, он је детаљно приказан у једној од наредних лекција. ТРАНСПОРТНИ СЛОЈ На транспортном слоју (обично имплементираном на нивоу оперативног система) се примају поруке од апликација и врши се њихова обрада и припрема за даље слање коришћењем услуга нижих слојева. Комуникација на транспортном слоју одвија се на основу транспортних протокола. Најзначајнији транспортни протоколи су TCP (енгл. Transmission Control Protocol) и UDP (енгл. User Datagram Protocol). поднаслов: ПОДЕЛА ПОРУКА НА ПАКЕТЕ Поруке које се приме са апликативног слоја се на транспортном слоју деле на мање пакете и сваки пакет се независно шаље примаоцу. Овај принцип рада назива се комутирање пакета (енгл. packet switching) и користи се од самог почетка на интернету. У случају протокола TCP пакети се називају сегменти, а у случају протокола UDP називају се датаграми. Поделом на мање пакете (величине од неколико десетина до око 1 500 бајтова) се убрзава пренос порука, јер више делова једне поруке може истовремено да путује кроз мрежу. Наиме, поруке пролазе кроз мрежу тако што сваки уређај у ланцу комуникације (а то могу бити и десетине рутера који прослеђују поруку од полазишта до одредишта) прими поруку од претходног уређаја и када је комплетно прими, прослеђује је наредном уређају. Када се поруке изделе на мање пакете, тада чим неки рутер проследи пакет наредном, он већ креће да прима следећи пакет од свог претходника. На тај начин се догађа да чак иако сви пакети пролазе истом путањом, истовремено ланцем комуникације могу путовати десетине пакета. поднаслов: ПОРТОВИ Више апликација покренутих на неком рачунару (било клијенту, било серверу) могу истовремено да учествују у мрежној комуникацији. На пример, док прегледач учитава неку веб-страну, клијент Bittorent може преузимати неку датотеку, а клијент електронске поште може слати неки мејл. Када пакет или порука стигне на тај рачунар, јако је важно да се одреди којој апликацији је он намењен и да јој се проследи. Зато сваки пакет који се размењује треба да поред информације о рачунару (уређају) ком се тај пакет доставља садржи и информацију о софтверу (апликацији) коме тај пакет треба доставити. Уређаји се идентификују на основу адреса, али адреса уређаја није довољна да би се одредило којем је софтверу потребно да се проследи пакет пристигао на тај уређај. Због тога се на транспортном слоју сваком пакету додају бројеви, који се називају портови (енгл. port) и који одређују ком софтверу треба проследити поруку која је стигла. Интересантно, адресе (примаоца, али и пошиљаоца) се пакетима додају тек на мрежном слоју. Портови се записују као бинарни бројеви записани помоћу 16 бита (што даје могућност за 65 536 различитих портова). Неки портови су стандардизовани за најчешће коришћене апликације, тј. апликативне протоколе, а одређени број портова је слободан. На пример, када се са клијента шаље захтев за неком веб-страном, пакет садржи адресу сервера са портом 80, али и адресу клијента са једним (претходно) слободним портом на клијенту. Порт 80 је стандардан порт за протокол HTTP и уптребом тог порта се серверу саопштава да пакет који прими треба да проследи вебсерверском софтверу. Број порта на клијентском рачунару генерише његов оперативни систем и придружује га апликацији која је захтев послала. Када стигне одговор са веб сервера, на основу тог порта клијентски систем зна из којег је програма послат захтев и коме треба проследити пакет који је стигао као одговор. поднаслов: ПОТВРДА ПРИЈЕМА ПАКЕТА У зависности од односа који се жели остварити између поузданости и брзине комуникације, одлучује се о томе да ли ће се користити протокол TCP (који је поузданији) или UDP (који је бржи). TCP се користи за пренос веб-страна, датотека, електронске поште, док се UDP користи углавном за апликације у реалном времену, попут преноса радијског или телевизијског програма преко интернета, звучне и видео комуникације, игара преко мреже и слично. Подела на пакете узрокује одређене проблеме. На пример, пакет може да се изгуби, пакети могу стићи у другачијем редоследу него што су послати (пошто независно путују кроз мрежу, могуће је да каснији део поруке стигне пре неког претходног дела). Протокол TCP осмишљен је тако да решава ове врсте проблема. Прво, за сваки пакет који успешно прими, прималац шаље пошиљаоцу потврду (енгл. acknowledgment, ACК) да је пакет примљен. Ако пошиљалац не прими такву потврду, онда аутоматски поново шаље пакет. Друго, у пакет се поред портова додају информације које примаоцу омогућују склапање порука у целину након што добије све пакете. поднаслов: КОНТРОЛА ПРОТОКА Протокол TCP контролише и брзину тока података (енгл. flow control) да се не би догодило да пошиљалац шаље податке брже него што прималац може да их прими (на пример, ако брз сервер шаље податке споријем мобилном телефону који не може довољно брзо да их прихвати и обради). Наиме, у оквиру потврде прималац јавља и број бајтова које још може да прими, а када се тај број смањи, пошиљалац успорава слање. На нивоу протокола TCP врши се и контрола загушења (енгл. congestion control). Наиме, ако би се преко загушене мреже брзо слао велики број пакета, они би се у великој мери губили, што би проузроковало њихово поновно слање и све веће загушење. Зато су у TCP уграђени механизми који споро започињу пренос података и постепено га убрзавају када се утврди да мрежа није загушена (енгл. slow start). За разлику од протокола TCP, UDP не потврђује пријем, не шаље поново изгубљене пакете и слично, што га чини много бржим, али и непоузданијим. UDP се најчешће користи у апликацијама које морају да раде у реалном времену. На пример, јасно је да се у Skype или Zoom комуникацији или у живом телевизијском преносу неће чекати пакети који се изгубе, већ ће се пренос наставити и без њих (део преноса ће бити изгубљен, али наставиће се као да се то није догодило). МРЕЖНИ СЛОЈ Два основна задатка мрежног слоја су адресирање и рутирање. Адресирање је неопходно да би се могао јединствено одредити уређај до којег се поруке достављају и због тога сваки уређај прикључен на мрежу мора да има адресу која га јединствено идентификује. Рутирање подразумева одређивање путање којом ће се подаци кретати кроз унутрашњост мреже. Основу комуникације на мрежном слоју данас представља протокол IP (енгл. Internet Protocol). Заједно са протоколом TCP, протокол IP представља основу интернета (и скоро свих мрежа данашњице). Постоји неколико верзија протокола IP, од којих су најважнији IPv4 и IPv6. Мада је IPv6 у употреби од 2011, а од 2017. је званичан стандард, ова верзија се уводи релативно споро, па се и даље у око 2/3 интернет комуникације користи верзија IPv4. Због тога ћемо у наставку разматрати само верзију IPv4. Када се пакет (нпр. TCP сегмент) проследи са транспортног слоја на мрежни, њему се додаје ново заглавље, које садржи неколико информација, од којих су најзначајније адреса примаоца и адреса пошиљаоца. Тако формирани пакет назива се обично IP датаграм и он се преноси од пошиљаоца до примаоца, често преко серије рутера. поднаслов: АДРЕСИРАЊЕ У верзији IPv4 адресе су 32-битне и записују се обично као 4 декадна броја. Сви уређаји у истој мрежи деле заједнички почетак IP адресе. На пример, једну мрежу могу да чине уређаји с адресама од 200.150.100.0 до 200.150.100.255. Сви они имају иста прва 24 бита адресе (то су декадни бројеви 200.150.100), док им се последњих 8 битова разликују. Ако као пример узмемо адресу 200.150.100.75, чињеница да прва 24 бита дају адресу мреже а последњих 8 битова адресу унутар мреже, у такозваној CIDR нотацији (енгл. Classless Inter-Domain Routing) означила би се као 200.150.100.75/24. Други начин да истакнемо исту чињеницу је да се уз адресу 200.150.100.75 наведе мрежна маска (енгл. subnet mask), која је у овом случају 255.255.255.0. Мрежна маска саопштава који део адресе представља адресу мреже, што је у нашем примеру прва 24 бита (бинарни запис ове маске састоји се од прве 24 јединице које прати 8 нула). У оквиру сваке мреже две IP адресе имају специјалну намену. Прва адреса (у нашем примеру 250.150.100.0) сматра се адресом мреже и не препоручује се да се истовремено користи за адресу неког конкретног уређаја на мрежи (она се обично прескаче и не додељује се ниједном уређају). Последња адреса (у нашем примеру 250.150.100.255) користи се тако што се свака порука послата на ту адресу, у ствари, доставља свим уређајима унутар наше мреже – адреса се назива адреса за јавно емитовање (енгл. broadcast address). Некада није било могуће да се на произвољан начин направи подела на адресу мреже и адресу унутар мреже, већ су адресе биле дељене на основу одређених класа. Подела на класе довела је до веома нерационалне расподеле адреса (класе су биле тако дизајниране да су организације могле да резервишету или 254 адресе или 1022 адресе или 65534 адресе и ништа између). То је веома брзо довело до исцрпљивања скупа IP адреса јер је велики број адреса био формално резервисан, али није био искоришћен. Средином 1990-их прешло се на бескласно распоређивање адреса, тј. на CIDR (енгл. Classless Inter-Domain Routing), које је допустило да се тачка поделе постави између било која два бита у запису адреса. На пример, мрежа у коју се очекивало укључивање до 1 000 рачунара могла би да добије скуп адреса облика xxxx.xxxx.xxxx.xxxx/22, што значи да 22 бита означавају адресу те мреже, а преосталих 10 битова дају адресе унутар те мреже, што представља тачно 1 022 адресе које се могу ефективно доделити мрежним уређајима. поднаслов: ПРЕВОЂЕЊЕ АДРЕСА – NAT Да би се одговорило на несташицу IPv4 адреса и да би се спречили проблеми који су настали због њихове нерационалне расподеле, адресе 10.0.0.0/8 (то су адресе од 10.0.0.0 до 10.255.255.255), 172.16.0.0/12 (то су адресе од 172.16.0.0 до 172.31.255.255) и 192.168.0.0/16 (то су адресе од 192.168.0.0 до 192.168.255.255) проглашене су за приватне адресе. То значи да многи рачунари у бројним мрежама широм света могу да истовремено имају адресе наведеног облика (ако проверите IP адресу рачунара у својој учионици или у својој кућној мрежи, највероватније ће припадати неком од наведених опсега). Ове адресе се користе само за локалну мрежну комуникацију и не могу да се употребљавају за комуникацију с уређајима изван локалне мреже. Када уређај унутар локалне мреже који има приватну IP адресу покуша да приступи неком ресурсу на интернету, рутер у мрежи (обично излазна капија) замењује локалну адресу пошиљаоца у датаграму својом адресом (која није приватна већ јавна IP адреса) и шаље пакет примаоцу. Прималац, дакле, не зна да је захтев стигао од неког рачунара из локалне мреже, већ има утисак да комуницира искључиво са тим рутером. Када одговор стигне до рутера, он замењује адресу примаоца одговора (то је његова јавна IP адреса) приватном адресом уређаја који је послао захтев и прослеђује му одговор који је добио (коришћењем техника комуникације унутар локалне мреже). Да би могао то да уради, неопходно је да на основу података који су садржани у одговору (а то су порт и адреса рачунара са којег је одговор стигао, као и порт садржан у захтеву) може да одреди адресу рачунара у локалној мрежи са којег је захтев послат и на који тај одговор треба проследити. На пример, када уређај са приватном адресом 192.168.1.1 са порта 12345 пошаље захтев серверу 147.91.66.10 на порт 80, тај захтев прво долази до рутера, који приватну адресу 192.168.1.1 замењује својом јавном адресом (нпр. 5.134.111.19). Одговор веб-сервера који стигне до рутера шаље се са адресе 147.91.66.10 и порта 80 на адресу 5.134.111.19 и порт 12345. На основу ових података рутер препознаје да тај одговор треба да се проследи уређају са адресом 192.168.1.1, своју адресу замењује њом и прослеђује пакет уређају. Ова техника се назива превођење мрежних адреса (енгл. network address translation, NAT). Рутер који врши NAT је, дакле, једини уређај у мрежи који мора да има јавну IP адресу (сви остали уређаји могу да имају приватну IP адресу), чиме се знатно рационализује употреба IP адреса. Цела мрежа се може организовати око само једне јавне IP адресе, што је веома чест случај у кућним мрежама, где од добављача интернета заиста добијате само једну (најчешће јавну) IP адресу. поднаслов: РУТИРАЊЕ У ширим мрежама, какав је интернет, постоји велики број повезаних рутера. Сваки од њих повезан је са једним или више уређаја (других рутера, свичева, сервера, клијентских уређаја), којима може да прослеђује пакете које добије. Рутери обично сачекају да приме читав пакет пре него што га проследе даље (енгл. store and forward). Улога рутера у мрежи је да на основу IP адресе примаоца и на основу табела које су записане у њиховој меморији (тзв. табела рутирања) одреди коме од неколико повезаних чворова треба да проследи пакет да би он што ефикасније стигао до одредишта. Табеле рутирања садрже списак мрежних адреса различитог нивоа хијерархије и податак за сваку од њих о томе којем повезаном уређају треба доставити пакет који се шаље. Занимљивост Рутирање можемо да упоредимо са задатком поштанског службеника који треба да одлучи да ли ће писма за слање да укрца у аутомобил који разноси пошту по граду или ће их возом или авионом послати даље. Службеник чита адресе на ковертама и на основу неких њихових делова одређује шта треба да ради. На пример, ако се службеник налази у истом граду као и одредишна адреса, писмо ће проследити на локалну доставу. Ако је адреса у истој држави, али у другом граду, писмо ће послати на воз који иде ка том месту. Проблем може да настане ако је писмо за неку другу државу (нрп. за Канаду или Јапан). Пошто нема директних летова до тих држава, писмо за Канаду поштар ће послати авионом за Њујорк, а писмо за Јапан послаће за почетак у Москву. Иако службеник вероватно нема записане табеле на основу којих доноси одлуке, он би могао једноставно да их направи тако да по структури у потпуности одговарају табелама које користе рутери. Табела би могла да каже да пошиљке за Северну Америку треба слати у Њујорк, а оне за Француску треба да се пошаљу у Париз. Приметите да ови уноси нису равноправни по детаљности. Правило за Северну Америку је доста шире од правила за Француску јер се у првом случају одређује на нивоу целог континента, а у другом на нивоу појединачне државе. Ово одговара томе да се у мрежним мустрама наведеним у правилима рутирања користи различит број битова. Квалитет рутирања првенствено зависи од тога како су одређене табеле рутирања. Оне могу бити изграђене статички (када администратор мреже ручно задаје правила прослеђивања порука), али много је чешћи случај да се граде динамички, тј. да се аутоматски одређују на основу података о везама, растојањима и брзинама одређених мрежних веза, применом веома софистицираних алгоритама. ВЕЗНИ СЛОЈ У оквиру широке мреже као што је интернет, уређаји (пре свега рутери) у оквиру свог деловања на мрежном слоју комплексан проблем комуникације своде на задатак да се пакет (IP датаграм) пренесе са једног рутера на други или да се пренесе са једног на други уређај у оквиру локалне мреже (на пример, са уређаја који шаље податак до рутера, који представља излазну капију из те локалне мреже). Такви задаци се решавају на најнижем мрежном слоју, а то је везни слој (у неким моделима овај слој се дели на два засебна слоја – слој везе података и физички слој). На том слоју, сваки IP датаграм се обмотава додатним подацима и тако се креирају пакети који се називају оквири (енгл. frame). Подаци који се налазе у оквирима зависе од тога који се протокол користи. поднаслов: ПРЕНОС ПОДАТАКА ИЗМЕЂУ ДИРЕКТНО ПОВЕЗАНИХ РУТЕРА Рутери који су у унутрашњости великих мрежа су често повезани директно (каже се да је остварена веза од тачке до тачке, енгл. point-to-point), изузетно брзим везама (најчешће оптичким). Кућни рутери су опет најчешће директном везом (преко модема, а затим телефонског или коаксијалног кабла) повезани са рутером добављача интернета. Подаци се преносе преко директних веза обично коришћењем протокола PPP (енгл. point-to-point protocol) и његових варијација. Ови протоколи обезбеђују и то да се подаци пре слања криптују (шифрирају) и компресују у циљу заштите и бржег преноса. поднаслов: ПРЕНОС ПОДАТАКА УНУТАР ЛОКАЛНЕ МРЕЖЕ Осим директних веза два уређаја, на везном слоју се решава и комуникацијама унутар локалних мрежа у које је повезано више уређаја. То може да буде више рутера, али и више рачунара и један рутер (у том случају, рутер је обично повезан на интернет и представља излазну капију). Ти уређаји су обично повезани мрежним Ethernet кабловима у случају жичаног повезивања или преко Wi-Fi у случају бежичног повезивања. Пошто је у овом случају повезано више тачака, неопходно је да се сви пакети адресирају. Традиционално се на везном слоју користе физичке адресе уређаја (тзв. MAC адресе). То су јединствене адресе свих уређаја, које су им најчешће додељене приликом производње и које се најчешће представљају помоћу 48 бита, а обично се записују у облику 6 двоцифрених хексадекадних бројева (на пример, 2c:d4:44:a8:be:3b). Оквири који се размењују на овом слоју се обично граде тако што се након одређене преамбуле која садржи битове за синхронизацију додају MAC адреса примаоца и пошиљаоца на почетак оквира. Ако се преко локалне мреже преносе IP датаграми (што је најчешће случај), тада се у оквиру налазе четири адресе – MAC адресе пошиљаоца и примаоца, као и IP адресе пошиљаоца и примаоца. Треба имати на уму да се на овом слоју IP адресе само сматрају делом „товара” који се преноси и уопште се не анализирају. Такође, сасвим је могуће да се MAC адреса и IP адреса примаоца односе на различите уређаје јер се MAC адреса односи на уређај у локалној мрежи који ће имати задатак да проследи датаграм даље (обично излазну капију), док IP адреса представља адресу крајњег одредишта. Уређаји у локалној мрежи могу да се повежу на више начина. Најједноставнији начин (данас донекле превазиђен) јесте постављање хаба између повезаних уређаја, који примљене пакете прослеђује свим уређајима повезаним на њега. Тиме су уређаји у локалној мрежи логички повезани топологијом магистрале и практично се поруке увек прослеђују јавним емитовањем (енгл. broadcast). Свака порука стиже до свих прикључених уређаја, а прихвата је само онај уређај којем је намењена, тј. само онај чија је адреса иста као адреса примаоца наведена у поруци, док је остали уређаји игноришу. Вероватноћа судара порука у мрежи (услед истовременог слања) је велика и стога се не може увек постићи ефикасна комуникација. Данас се уређаји у локалним мрежама обично повезују коришћењем свича уместо хаба. Основна предност свича у односу на хаб јесте у томе што поруку прослеђује само оном уређају којем је намењена. За то је неопходно да свич зна на којем се прикључку налази који уређај. Свич у својој меморији чува табелу која пресликава MAC адресе прикључених уређаја на редне бројеве њихових прикључака. Табела се гради и одржава аутоматски током комуникације. Када прими поруку од пошиљаоца чију MAC адресу у том тренутку не зна, свич памти ту MAC адресу и придружује је прикључку са којег је стигла порука. На тај начин зна да све будуће поруке упућене тој MAC адреси треба да проследи баш на тај прикључак. Уколико свич не зна MAC адресу примаоца, поруку ће му послати тако што ће је јавно емитовати. Када прималац пошаље одговор назад до свича, свич памти његову MAC адресу и придружује је прикључку са којег му је стигао одговор, али се тај одговор сада прослеђује само оригиналном пошиљаоцу (јер његову MAC адресу сада има у својој меморији). Због тога што свич шаље оквире само онима којима су намењени и што их ретко прослеђује свима, знатно се смањује оптерећење мреже, смањује се вероватноћа да се оквири сударе и убрзава се укупан проток података кроз мрежу. У наставку ћемо одговорити на питање како уређај који зна IP адресу примаоца одређује MAC адресу на коју треба проследити одговарајући IP датаграм. Најпре уређај на основу мрежне маске одређује да ли је прималац рачунар у истој мрежи. Ако се налази у истој мрежи, пакет се прослеђује њему. У другом случају пакет се прослеђује излазној капији чију IP адресу уређај такође зна. Дакле, уређај који шаље податке у оба случаја има IP адресу уређаја у локалној мрежи (примаоца који је у истој мрежи или излазне капије) којем треба да проследи податке. Да би то могао да уради, потребно је да одреди MAC адресу тог уређаја и да је упише у оквир као адресу примаоца. За добијање адресе користи се протокол разрешавања адреса (енгл. address resolution protocol, ARP). Тада пошиљалац јавно емитује ARP захтев у којем пита ко има IP адресу на коју ће он послати податке. Захтев стиже до свих уређаја у локалној мрежи и они упоређују своју IP адресу са траженом. Онај ко има ту IP адресу шаље ARP одговор са записаном својом MAC адресом. Када одговор стигне, IP адреса је упарена са MAC адресом и оквир може да се формира и пошаље. Након што пошаље податке, уређај одређено време памти MAC адресу, да се приликом поновног слања података на исту IP адресу не би поново морао користити ARP за добијање MAC адресе. поднаслов: ОСИГУРАВАЊЕ ИСПРАВНОСТИ ПРЕНОСА ПОДАТАКА Један од важних задатака везног слоја јесте тај да се спречи измена података приликом мрежног преноса. Наиме, приликом физичког преноса података могуће је да се неки бит грешком прескочи, измени, понови и слично. Да би се то спречило, на крај оквира се обично додају битови (тзв. секвенца за проверу оквира, енгл. frame check sequence, FCS) који омогућавају примаоцу да провери да ли је приликом преноса дошло до грешке, па чак и да неке грешке исправи без потребе за поновним слањем. На пример, ако би се сви битови у оквиру сабрали и на крај оквира се дода бит чија је вредност 1 (ако је добијени број непаран) или 0 (ако је паран), то би омогућило да се примете грешке настале променом једног бита. Секвенца за проверу оквира обично обухвата више од једног бита, кодираних посебним алгоритмима, тзв. кодовима за откривање и исправљање грешака (енгл. error detection and correction codes), који омогућавају детекцију и исправљање и сложенијих грешака. ФИЗИЧКИ СЛОЈ На најнижем нивоу комуникације (у неким моделима ова комуникација се одвија на засебном слоју који се назива физички слој) потребно је да се пронађу механизми како да се појединачни битови од којих се састоје пакети пошаљу од једног до другог уређаја. То зависи у великој мери од самих медијума комуникације који се користе (да ли је у питању жичана или бежична комуникација, које се врсте каблова користе за пренос података и слично). Стандарди физичког слоја дефинишу сигнале којима се преносе подаци, као и каблове и прикључке којима се ти сигнали преносе. Технике које се користе на физичком слоју дубоко се заснивају на познавању електротехнике и физике (потребно је познавати простирање електромагнетних таласа) и нећемо их детаљно објашњавати.