40

Or 2013 14 Predavanje 13 Mrezno Programiranje

Embed Size (px)

DESCRIPTION

mrezno programiranje

Citation preview

  • Mreno programiranjeo TCP/IP stog protokolao Utniceo Programsko suelje utnicao Utnice u PHP-uo Primjeri

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi4

    o Preglednik Weba i posluitelj Weba su procesi unutar operacijskog sustava raunala klijenta i posluitelja

    o Komunikacija izmeu procesao na istom raunaluo na udaljenim raunalima

    o Za uspjeno izvoenje komunikacija potrebno je: o lociranat proceseo ostvarit komunikacijski kanalo koristt zajedniki jezik komunikacije

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi5

    TCP/IP stog protokola

    o Internet temeljen na TCP/IP stogu protokolao IP je temelj interoperabilnost na internetuo neki slojevi ISO/OSI modela nisu implementranio slojevi veze, interneta i transporta ugraeni u operacijske sustave

    raunalao sloj aplikacije implementran unutar pojedinih aplikacija ili kao dodatna

    biblioteka funkcija

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi6

    Usmjeravanje paketa izmeu raunala

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi7

    Dostavljanje paketa procesima

    zaglavlje UDP paketa

    zaglavlje TCP paketa

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi8

    Transportni sloj (TCP i UDP)

    TCP UDPVrsta veze spojna, duplex bezspojnaJedinica prijenosa niz znakova/okteta poruka (datagram)

    Pouzdanostokteti prenijeti bez dupliciranja, pouzdano i u redosljedu slanja

    poruke mogu biti izgubljene, promijenjenog poretka, duplicirane

    Veliina prenoenog sadraja neogranieno

    ogranieno veliinom datagrama (MTU?)

    Upravljanje zaguenjem poiljatelj se prilagoava stanju u mrei nema upravljanja

    Upravljanje tokom poiljatelj se prilagoava primatelju nema upravljanja

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi9

    Stvaranje TCP veze

    o Razmjena tri SYNC paketa za uspostavu veze

    o Proces uenja poiljatelja optmalnoj brzini slanja paketa

    o Opcionalni keep-alive paket tjekom neaktvne veze

    o Nije poeljno uestalo stvaranje i raskidanje veze, prijenos male koliine podataka tjekom trajanja veze

  • Mreno programiranjeo TCP/IP stog protokolao Utniceo Programsko suelje utnicao Utnice u PHP-uo Primjeri

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi11

    Utnice

    o Utnica (eng. socket) - programska apstrakcija krajnje toke komunikacije (eng. communicaton endpoint)

    o Utnica jedinstveno odreena IP adresom, portom i protokolom

    o port = 16 bitni cijeli brojo Prema flozofji UNIX-a, utnice su suelja prema dvosmjernom

    cjevovodu (cjevovod = komunikacijski kanal)o Aplikacijski kd pie podatke u i ita podatke iz utnice

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi12

    Klijent i posluitelj

    o Klijento inicira vezu prema posluitelju (TCP)o izravno alje datagrame posluitelju (UDP)o mora prethodno poznavat adresu procesa posluitelja

    o Posluiteljo oslukuje zahtjeve za uspostavom veze (TCP), ostvaruje komunikacijski

    kanal s klijentom i razmjenjuje podatke dvosmjernim kanalomo zaprima datagrame (UDP) i odgovara klijentu

    o Uloge klijenta i posluitelja samo s obzirom na promatranu vezuo moe bit aktvno vie klijentskih i posluiteljskih utnica u istom

    procesu!

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi13

    URI i utnice

    http://www.fer.unizg.hr/predmet/or

    HTTP koristi spojnu vezu - TCP

    Uz pomo usluge DNS se simbolikaadresa posluitelja pretvara u IP adresu

    podrazumijevaniport 80

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi14

    Alokacija portova

    o Standardne usluge imaju alocirane portove (jednostavnije pronalaenje procesa usluge)

    o Portovi < 1024 dostupni samo procesima s posebnim ovlastmao Portovi >= 1024 dostupni svim procesima

    o korisnikim posluiteljskim procesimao operacijski sustav privremeno dodjeljuje portove klijentma

    Port Protokol Namjena

    20, 21 FTP prijenos datoteka izmeu raunala22 SSH sigurna prijava na raunala25 SMTP elektronika pota

    80 HTTP WWW

    110 POP-3 pristup korisnika elektronikoj poti143 IMAP pristup korisnika elektronikoj poti

  • Mreno programiranjeo TCP/IP stog protokolao Utniceo Programsko suelje utnicao Utnice u PHP-uo Primjeri

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi16

    Berkeley Sockets APIo Openit mehanizam meuprocesne komunikacije

    o izmeu procesa na istom raunaluo izmeu procesa na razliitm raunalima

    o Berkeley sockets API: 4.2 BSD UNIX (1983)o API apstrakcija mrenih prikljunica, jezik Co licencirano do 1989 AT&To de facto standardo ekvivalentni API postoje za veinu programskih jezika

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi17

    Klijent spojna veza

    Stvaranje utinice (TCP, IPv4/IPv6/lokalno)

    Spajanje na posluiteljevu utinicu (adresa utinice)[utinici se dodjeljuje privremeni port]

    Pisanje u izlazni meuspremnik kom. kanala

    itanje iz ulaznog meuspremnika kom. kanala

    Zatvaranje klijentske utinice

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi18

    Posluitelj spojna veza

    Zatvaranje privremene utinice / zatvaranje posluiteljske utinice

    Pisanje u izlazni meuspremnik kom. kanala

    itanje iz ulaznog meuspremnika kom. kanala

    Prihvaanje veze is reda dolaznih zahtjeva ili blokiranje izvravanja procesa do dolaska zahtjeva, prihva- enoj vezi se dodjeljuje privremena utinica

    Postavlja utinicu u posluiteljski mod rada, odreuje veliinu reda dolaznih zahtjeva za vezom

    Vezanje utinice na lokalnu IP adresu* i port(*raunalo moe imati vie mrenih suelja)

    Stvaranje utinice (TCP, IPv4/IPv6/lokalno)

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi19

    Interakcija klijenta i posluitelja

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi20

    Procesni modeli na strani posluiteljao Odreeno akcijom nakon zaprimanja nove veze:

    o jedan proces posluiteljo proces po klijentskoj vezi (novi proces/bazen procesa)o dretva po klijentskoj vezi (nova dretva/bazen dretvi)o ... i sve podvarijante ovih pristupa (predavanje o procesnim modelima

    posluitelja Weba!)

    o Sinkroni model komunikacijeo povezani procesi su sinkroniziranio 1:1 odnos klijenta i izvrnog konteksta na posluitelju

    o Blokirajui i neblokirajui mod rada utnica

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi21

    itanje podataka iz spojne veze

    o Klijent alje sadraj u komunikacijski kanalo Na strani posluitelja naredba recv() ita sadraj dolaznog

    meuspremnikao moe bit potrebno vie naredbi itanja za dohvat itavog sadrajao mogui uzroci

    o kanjenja unutar mree / razliit putovi paketao fragmentacija paketao gubitak/retransmisija paketao ...tko zna?

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi22

    Klijent bezspojna veza

    Stvaranje utinice (UDP, IPv4/IPv6/lokalno)

    Slanje datagrama prema nespojnoj utinici

    Prihvaanje datagrama s nespojne utinice

    Zatvaranje utinice

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi23

    Posluitelj bezspojna veza

    Stvaranje utinice (UDP, IPv4/IPv6/lokalno)

    Prihvaanje datagrama s nespojne utinice

    Slanje datagrama prema nespojnoj utinici

    Zatvaranje utinice

    Vezanje utinice na lokalnu IP adresu* i port(*raunalo moe imati vie mrenih suelja)

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi24

    Interakcija klijenta i posluitelja

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi25

    Procesni modeli na strani posluiteljao Nema trajnih veza s klijentskim procesima

    o svaki prispjeli datagram je neovisan, moe bit iz razliitog procesa

    o datagrami se mogu obraivat u zasebnim dretvama ili procesima ...

  • Mreno programiranjeo TCP/IP stog protokolao Utniceo Programsko suelje utnicao Utnice u PHP-uo Primjeri

  • Otvoreno raunarstvo -

    Stvaranje prikljunice$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

    Stvara klijensku TCP/IP prikljunicudomena: AF_INET IPv4 TCP/IP (postoje i AF_INET6,

    AF_UNIX)tp: SOCK_STREAM pouzdana full-duplex komunikacija

    (TCP)protokol koritene domene: SOL_TCPklijentske prikljunice ne mogu prihvaat veze

    Vraa resurs (prikljunicu) ili FALSE

  • Otvoreno raunarstvo -

    Ostvarivanje vezesocket_connect($socket, $host, $port);

    Pokuava spajanje na posluiteljsku prikljunicu$socket klijentska prikljunica$host IPv4 adresa posluitelja$port vrata posluitelja

    Vraa TRUE ili FALSE

  • Otvoreno raunarstvo -

    itanje$data = socket_read($socket, $dataLen [, $type]);

    ita raspoloive podatke iz prikljunice$socket prikljunica$dataLen maksimalan broj okteta za proitat$type tp podataka

    PHP_BINARY_READ za itanje binarnih podatakaPHP_NORMAL_READ itanje staje na \n ili \r

    Vraa proitane podatke ( za kraj podataka) ili FALSE

  • Otvoreno raunarstvo -

    Pisanje$sent = socket_write($socket, $data [, $dataLen]);

    Pie podatke u prikljunicu (alje na drugi kraj veze)$socket prikljunica$data slani podaci$dataLen duljina slanih podataka (opcionalan

    parametar)

    Vraa broj stvarno poslanih podataka ili FALSE

  • Otvoreno raunarstvo -

    Zatvaranje vezesocket_close($socket);

    Zatvara prikljunicu (i vezu ako postoji), oslobaa resurse

    Nema povratne vrijednost

  • Otvoreno raunarstvo -

    Vezanje prikljunicesocket_bind($socket, $addr[, $port]);

    Vee prikljunicu stvorenu sa socket_create() za navedenu adresu ($addr) i vrata ($port)jedno raunalo moe imat vie mrenih suelja, IP adresabez eksplicitnog vezivanja za jednan par (host, port)

    operacijski sustav bi te informacije stvorio nasumino

    Vraa TRUE ili FALSEvrata mogu bit prethodno zauzetavrata 0-1023 rezervirana za potrebe sustava

  • Otvoreno raunarstvo -

    Posluiteljski mod prikljunicesocket_listen($socket, $backlog);

    Pretvara prikljunicu u posluiteljsku$socket prikljunicaprilkjunica mora bit stvorena i vezana na adresu$backlog duljina reda ekanja na vezuistovremeno moe bit aktvna samo jedna veza s klijentom ostali zahtjevi za vezom se spremaju u red ekanjaukoliko je red ekanja popunjen, daljnji zahtjevi se odbijaju

    Vraa TRUE ili FALSE

  • Otvoreno raunarstvo -

    Prihvaanje veze$cSocket = socket_accept($socket);

    Prihvaa vezu na prikljunici $socket i preusmjerava je na prikljunicu $cSocketfunkcija blokira izvoenje do prispijea zahtjeva za vezuza komunikaciju s klijentom korist se novostvorena

    prikljunicapostojea prikljunica moe prihvaat nove veze

    Vraa novu prikljunicu ili FALSE

  • Mreno programiranjeo TCP/IP stog protokolao Utniceo Programsko suelje utnicao Utnice u PHP-uo Primjeri

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi36

    Klijent Weba (I)

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi37

    Klijent Weba (II)do { $status = socket_write($socket, substr($req, $req_sent)); if( $status == FALSE ) reportError(); $req_sent += $status;} while ($req_sent != strlen($req));$data = "";while( ($rbuff = socket_read($socket, 1500)) != FALSE ) $data .= $rbuff;socket_close($socket);echo "len = " . strlen($data) . "\n";echo $data . "\n";function reportError() { echo "(" . socket_last_error() . ") " . socket_strerror(socket_last_error()). "\n";exit(1);?>

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi38

    echo posluitelj (I)

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi39

    echo posluitelj (II)while(TRUE) { $cSocket = socket_accept($socket); $peerName = ""; socket_getpeername($cSocket, $peerName); echo "Accepted connection from $peerName...\n"; $inData = socket_read($cSocket, 1500, PHP_NORMAL_READ); echo "=>" . $inData . "\n"; socket_write($cSocket, "echo: " . $inData . "\n"); socket_close($cSocket);}socket_close($socket); //nikad se ne izvri?>

  • Otvoreno raunarstvo - Raspodijeljeni raunalni sustavi

    Pitanja?

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40