Upload
jelena-gavanski
View
21
Download
2
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