Retele Seminar

Embed Size (px)

DESCRIPTION

Retele Seminar

Citation preview

  • Retele de calculatoare

    Laborator 1

    Retea - interconectare statii de lucru, periferice, terminale se alte device-uri.

    Modelul de referinta OSI ( OPEN SYSTEM INTERCONNECTION ) :

    APLICATIE

    PREZENTARE

    SESIUNE

    TRANSPORT

    RETEA

    LEGATURA DATE

    FIZIC

    Modelul este alcatuit din 7 nivele. Nivelul Aplicatie interactioneaza cu utilizatorul. Nivelul fizic e implementat in hardware. Nivelul legatura de date e implementat in hardware si software, iar urmatoarele cinci nivele superioare doar in software.

    In principal, Legatura de Date realizeaza functiile:

    asigura unul sau mai multe puncte de acces la servicii SAP; SAP = interfata logica intre doua nivele adiacente. la transmisie, asambleaza datele in cadre, atasind cimpurile de adrese si informatia de

    control. la receptie, dezasambleaza cadrele, asigura recunoasterea adresei si controlul erorilor. asigura gestiunea comunicatiei pe legatura stabilita.

    Prima functie este asociata subnivelului LLC ( Logical Link Control ), subfunctiile acesteia fiind specificate de standardul IEEE 802.2.Celelalte trei functii sint grupate in subnivelul MAC ( Media Access Control ), pentru care exista trei variante standardizate ( IEEE 802.3 - 802.5 ).

    Obs. Pentru acelasi LLC se pot oferi mai multe optiuni MAC.

  • CONTROLUL ACCESULUI LA MEDIU ( MAC )

    Intr-o retea locala, statiile de lucru isi disputa dreptul de comunicatie prin mediul fizic al retelei. Exercitarea controlului se poate face centralizat sau distribuit:

    centralizat: o statie care doreste sa transmita asteapta pina cind primeste permisiunea de acces la mediu.distribuit: toate statiile actioneaza pentru a determina, in mod dinamic, ordinea

    in care transmit.

    In cazul centralizat, logica din fiecare statie e simpla; se evita probleme de coordonare si se asigura mai usor parametri cum ar fi prioritatile statiilor sau o rata garantata de transfer. Dezavantaje: scaderea eficientei prin concentrarea functiilor de control si scaderea fiabilitatii ( defectarea controlului duce la caderea retelei ).Controlul distribuit are o logica mai complexa, distribuita in statii, dar asigura retelei o fiabilitate mai mare.

    Tehnicile de control al accesului sint de doua tipuri:

    SINCRONE: nu sint adecvate LAN-urilor, deoarece necesitatile de transmisie ale statiilor sint in general nepredictibile.

    ASINCRONE:

    Round Robin ( rulare prin rotatie ): fiecare statie primeste, prin rotatie, dreptul de a transmite, controlul putind fi centralizat sau distribuit.. Neeficient in cazul transmisiei in rafala, dar eficient cind mai multe statii au date de transmis pe o perioada lunga de timp.Rezervation ( cu rezervare ): timpul de utilizare a mediului este impartit in cuante. Fiecare statie care vrea sa transmita isi rezerva cuanta pe o anumita durata sau pe o durata nedefinita. Controlul poate fi centralizat sau distribuit. Metoda este eficienta pentru transmisii continue.Contention ( prin intelegere ): toate statiile care vor sa transmita concureaza pentru accesul la mediu. Eficienta in cazul implementarii distribuite, in conditii de incarcare redusa si pentru transmisii in rafala.

    CONTROLUL LEGATURII LOGICE ( LLC )

    Tot ce ofera MAN-urile si LAN-urile 802 este un serviviu datagrama de tipul "best-effort" ( cea mai buna incercare ). Uneori, acest servicu este adecvat. De ex., pentru transportul pachetelor IP nu sint cerute sau asteptate garantii. Un pachet IP poate fi pur si simplu inserat intr-un cimp de informatie utila al 802 si trimis pe traseul sau. Daca se pierde, asta este.Exista sisteme in care este de dorit un protocol al legaturii de date cu control al erorilor si al fluxului.

    LLC poate sta deasupra tuturor protocoalelor LAN 802 si MAN; el ascunde diferentele dintre diferitele tipuri de retele 802 prin furnizarea unui singur format si a unei singure interfete pentru nivelul retea.

    Nivelul retea de pe masina emitatoare trimite un pachet catre LLC folosind primitivele de acces ale LLC. Subnivelul LLC adauga apoi un antet LLC continind numerele de secventa si de confirmare. Structura rezultata este apoi inserata in cimpul de informatie utila al unui cadru 802.x si transmisa. La receptor are loc procesul invers.

  • Asadar, unul din scopurile principale LLC este de a oferi o modalitate de transfer al datelor intre utilizatori, folosind o legatura controlata de MAC.

    LLC furnizeaza trei servicii:

    serviciul datagrama nesigur ( fara conexiuni si fara confirmare ) - necesita un protocol cu o complexiatate minima; se utilizeaza cind nivelele superioare se ocupa de tratarea erorilor sau in aplicatii in care se admit pierderi de cadre transmise. Utilizare: aplicatii de achizitii periodice de date, aplicatii in timp real care implica redundanta ( prelucrari de voce ), aplicatii care implica difuzarea de mesaje pentru utilizatorii retelei.Secventa in timp a evenimentelor pentru un serviciu fara conexiune, neconfirmat:

    DL.UNITDATA.request ........................ DL.UNITDATA.indication ( utilizator serviciu ) ( furnizor serviciu ) ( utilizator serviciu )

    Primitivele: DL.UNITDATA.request ( adr.sursa, adr.dest, data, prioritate ) DL.UNITDATA.indication ( adr.sursa, adr.dest, data, prioritate )

    serviciul datagrama cu confirmare ( fara conexiune, dar cu confirmare ) - consta din doua servicii inrudite:

    DL.DATA.ACK - un serviciu de furnizare garantata a datelor trimise de la un utilizator LLC sursa si confirmate.DL.DATA.REPLAY - un serviciu de interogare cu raspuns garantat.

    Serviciul DL.DATA.ACK permite unui utilizator LLC sa trimita date la distanta, cu confirmare imediata privind receptia datelor. Erorile pot aparea local sau la distanta, cauzate de imposibilitatea de a transmite sau de lipsa raspunsului de la celalalt utilizator.

    Tipuri de transfer: transfer de date cu confirmare imediata; transfer nerealizat; interogare; pregatirea unitatii de date prin asociere cu un SAP.

    serviciul sigur orientat pe conexiune - permite stabilirea, mentinerea si terminarea unei conexiuni logice intre doi utilizatori la diferite SAP-uri. Stabilirea conexiunii incepe cu o primitiva DL.CONNECT.REQUEST ( adr.sursa, adr dest, prioritate ).

    Situatii in stabilirea conexiunii: conexiune stabilita cu succes; cereri simultane de conexiune - in care doi utilizatori de LLC cer simultan o conexiune; rejectie de la distanta - utilizatorul distant nu poate accepta o cerere de

    conexiune; rejectie locala - rejectia conexiunii poate fi facuta chiar de serviciul LLC local; rejectia locala poate fi datorata: entitatea LLC de la distanta nu a raspuns niciodata la o cerere de conexiune sau entitatea LLC nu poate stabili conexiunea datorita lipsei de tampoane sau unor defecte in interfata.

  • O conexiune logica poate fi anulata atit de utilizatorii de servicii, cit si de furnizorii de servicii LLC:

    deconectare initiata de utilizator deconectare initiata de furnizor de serviciu

    In orice moment de timp, atit utilizatorii, cit si furnizorii de servicii LLC pot initializa ( RESETA ) conexiunea logica, cu posibilitatea ca datele sa fie pierdute. Secvente de resetare:

    resetare initiata de utilizator cereri simultane de resetare resetare initiata de furnizor refuz de la distanta: utilizatorul LLC de la distanta refuza resetul sau entitatea LLC de la distanta nu raspunde nu exista raspuns

    Standardul LLC include specificatii pentru serviciile cerute de la nivelul MAC. Primitive prin care se asigura serviciile MAC:

    MA_UNITDATA.REQUEST ( adr_sursa, adr_dest, prioritate, clasa_serviciu) transmite toate unitatile de date ( clasa de serviciu specifica daca se realizeaza o

    confirmare a transferului la nivel MAC )

    MA_UNITDATA.INDICATION ( adr_sursa, adr_dest, data, stare_receptie, prioritate, clasa_serviciu )

    preia datele furnizate de MA_UNITDATA.REQUEST si confirma daca receptia a fost efectuata corect sau nu.

    MA_UNITDATA_STATUS.INDICATION ( adr_sursa, adr_dest, stare_transmisie, prioritate_furnizata, clasa_serviciu_furnizata ) primitiva responsabila cu confirmarea ( de la MAC spre LLC ) a unui serviciu cerut prin MA_UNITDATA.REQUEST

  • ETHERNET

    rata de transfer 10Mbps/sec distanta maxima intre 2 statii: 2,5 km procedura de control a legaturii: CSMA/CD complet distribuit cu rezolvare statistica a concurentei protocol mesaje: cadre de lungime variabila, furnizare mesaje dupa metoda "best effort"

    Retelele Ethernet au urmatoarele limitari:

    in orice moment o retea locala Ethernet permite ca o singur statie sa transmita uneia sau mai multor destinatii; comunicarea bidirectionala este asigurata prin multiplexarea in timp a suportului de transmisie, favorizata de transmisia rapida.

    controlul erorilor la nivelul legaturii de date este limitat la detectarea erorilor la nivel de bit in canalul fizic si la detectarea si inlaturarea coliziunilor.

    la nivelul legaturii de date nu se face criptarea datelor pentru securitate ( aceste operatii se pot face la nivelele superioare ).

    viteza este fixa: 10 Mbps. nivelul legaturii de date nu ofera nici o schema de operare pe nivelele de prioritati. nu exista un mecanism de protectie impotriva utilizatorilor rau intentionati.

    Model functional al unei retele Ethernet

    O retea locala Ethernet poate fi privita din doua puncte de vedere:

    structura logica: elemente componente si modul in care acestea sint sint integrate in sistem;

    implementare: functionaea si modul de realizare a elementelor componente, precum si interactiunea dintre ele.

    Din punct de vedere functional, standardul 802.3 poate fi privit ca avind patru parti:

    specificarea serviciilor MAC: se defineste, din punct de vedere functional, serviciul furnizat de 802.3 oricarui utilizator sau oricarui alt nivel mai ridicat. Acest serviciu include facilitati de transmisie si receptie date si de furnizare a informatiilor de stare pentru procedurile de tratare a erorilor de pe nivelele superioare. MAC presupune ca utilizatorul de pe nivelul superior este LLC, dar acest lucru nu e obligatoriu conform principiului organizarii pe nivele prevazut de standardul 802.

    protocolul MAC: nucleul standardului 802.3, denumit si standardul CSMA/CD. Specificatiile protocolului MAC definesc structura cadrelor si interactiunile dintre entitatile MAC.

    partea independenta de mediul de transmisie: specifica interfata dintre MAC si nivelul fizic inferior, incluzind facilitati de transmisie a doua siruri seriale de biti intre cele doua nivele si functii de temporizare necesare algoritmului MAC. Se considera ca statiile sint situate la distanta mica de mediul fizic, astfel incit doar o mica parte a circuitelor necesare vor fi situate in MAU, majoritatea hard-ului si tot soft-ul fiind plasate in statie. Standardul specifica AUI intre statie si MAU, incluzind mediul de transmisie ( cablul ), semnalele si tehnica de transmisie pe acest mediu.

    partea dependenta de mediu: specifica interfata cu mediul de transmisie a retelei si semnalele care se transmit pe mediu.

  • Arhitectura IEEE 802.3:

    .

    .

    .Retea Nivele superioare _________...............________________________

    LLC Logical Link Control DTE

    Leg Date ________________________ ( Data terminal Equipment )

    MAC Media Access Control _________................________________________

    PLS Physical Signaling

    ________________________ _____________

    AUI Attachement Unit interface------- --------------------

    MAU ________________________ ( Medium Attachement PMA Physical Medium Attachment

    Unit ) --------------------- MDI Medium Dependent Interface

    ------- ________________________

    Mediu

    __________.............. ________________________

  • Protocolul MAC-Ethernet, descriere CSMA/CD

    Protocolul CSMA include un algoritm care specifica ce trebuie sa faca o statie daca mediul este ocupat. Intr-un astfel de algoritm, o statie care doreste sa transmita asculta mediul si respecta urmatoarele reguli:

    daca mediul este liber, transmite; daca mediul e ocupat, continua sa asculte pina cind se elibereaza; apoi transmite imediat; daca apare o coliziune detectata prin lipsa confirmarii transmisiei, asteapta o perioada aleatoare de

    timp si repeta de la primul pas.

    Daca doua cadre intra in coliziune, mediul ramine nefolosit pe durata transmisiei lor. Pentru secvente lungi in comparatie cu timpul de propagare, pierderea este considerabila.

    Pentru protocolul CSMA/CD trebuie respectate regulile:

    daca mediul e liber, transmite ( dupa o mica pauza intre cadre pentru a asigura timpul de revenire pentru a alte entitati MAC si pentru mediul fizic );

    daca mediul e ocupat, continua sa asculte pina cind se elibereaza mediul; apoi transmite imediat; daca se detecteaza o coliziune in timpul transmisiei, transmite un semnal scurt de bruiaj ( pentru a

    se asigura ca toate statiile afla de coloziune ) si apoi inceteaza transmisia; dupa transmiterea semnalului de bruiaj, asteapta o perioada aleatoare de timp, apoi reia tentativa de

    transmisie ( de la pasul 1 ).

    Procedurile anterioare ridica mai multe probleme de timp ( temporizare ), toate depinzind de un singur parametru: PERIOADA CRITICA ( SLOT TIME ).SLOT TIME reprezinta 4 aspecte importante in tratarea coliziunilor:

    este o limita superioara a timpului necesar pentru a detecta o coliziune, deci a pierderii de banda de transmisie ( a productivitatii retelei );

    este o limita superioara a timpului de ocupare efectiva a mediului ( acquisition time of the medium ), adica perioada dupa care transmisia nu mai sufera coliziuni;

    este o limita superioara a lungimii fragmentului de cadru transmis la aparitia unei coliziuni; este o cuanta de planificare pentru retransmisie.

    Pentru a acoperi aceste functii, durata critica ( Slot Time ) este definita ca fiind mai mare decit suma dintre timpul de propagare a semnalului dus-intors pe mediul fizic ( de doua ori timpul necesar ca un semnal sa parcurga drumul de la un capat la celalalt al mediului fizic ) si timpul de bruiaj ( la nivelul MAC ). Acest timp depinde de particularitatile mediului fizic.

  • Laborator 2

    Formatul unui cadru MAC

    Exista o deiferenta intre formatul unui cadru specificat de standardul IEEE 802.3, cadrul Ethernet si cadrul LLC specificat de IEEE 802.2 .

    Formatul unui cadru specificat de standardul IEEE 802.3:

    ___________Preambul 7 octeti 1010....1010___________SFD 1 octet 10101011

    __________ ___________Adr. Dest. 2 sau 6 octeti___________Adr. Sursa 2 sau 6 octeti___________Lungime 2 octeti

    64 octeti ___________( lung minima ) LLC Data 0:1500 octeti, 46:1500 octeti

    ___________PAD 46:0 octeti ___________Frame Check 4 octetiSequence

    ____________ ___________

    Formatul general al unui cadru Ethernet este asemanator cu cel al standardului IEEE 802.3, cu diferenta ca, in loc de lungime, este specificat un tip de cadru. Cimpul tip este utilizat pt a determina utilizatorul de servicii; e asemanator cu conceptul SAP. Datele de completare a cadrului sint adaugate, implicit, de nivelul superior.

    Formatul general al unui cadru Ethernet:

    ____________ ___________Adr. Dest. 6 octeti___________Adr. Sursa 6 octeti___________

    64 octeti Tip 2 octeti ( determina utiliz. de( lung. Minima ) ___________ serviciu )

    Data___________Frame Check 4 octetiSequnce

    ____________ ___________

  • Standardul IEEE 802.2 ( LLC ) specifica in mod explicit punctele SAP:

    ___________Dest. SAP 1 octet___________Surse SAP 1 octet___________ 1 octetControl 1 octet___________Data___________

    Semnificatia cimpurilor:

    preambul: 7 octeti stabileste sincronozarea bitilor. Secventa de 1 si 0, terminata obligatoriu cu 0. Pentru codificarea Manchester apare ca un tren de impulsuri cu factorul de umplere pe mediul de transmisie, ceea ce permite ceasului de la receptie sa se sincronizeze cu ceasul de transmisie.

    SFD ( Start Frame Delimiter ): delimitator inceput de cadru, contine secventa 10101011, indicind inceputul secventei si permitind receptorului sa localizeze primul bit dupa preambulul cadrului si sa alinieze bitii.

    Adr. Dest: specifica statia ( statiile ) careia ii este adresat cadrul. Poate fi o adresa fizica unica, o adresa de grup ( multicast group address ) pentru un grup de statii sau adresa globala ( pentru toate statiile retelei locale ). In transmisia in banda de baza de 10 Mbps se utilizeaza numai adrese de 6 octeti.

    Adr. Sursa: specifica statia care a transmis cadrul. Dimensiunea cimpului trebuie sa fie aceeasi cu a adresei destinatie.

    Formatul adresei pe 16 biti:______________I/G | adresa de 15 I/G = 0 - adr. individuala______________ I/G = 1 - adr. de grup

    Formatul adresei pe 48 biti:______________________I/G | U/L | adresa de 46 biti I/G = 0 - adr. individuala______________________ I/G = 1 - adr. de grup

    U/L = 0 - adr administrata globalU/L = 1 - adr administrata local

    In adresa sursa, primul bit este intotdeauna 0. O adresa de grup cu 1 peste tot este o adresa globala cu difuzare catre toate statiile active din retea.Pentru adresele de 48 biti, al doilea bit din cimpurile de adresa este pus pe 0, pentru a indica o adresa gestionata global de catre IEEE la nivel mondial si 1 pentru a indica o adresa administrata local, la nivel de retea.

    lungime: specifica numarul de octeti de date furnizati de LLC care urmeaza; PAD ( Packet Add Data ): reprezinta o completare la blocul de date. Pachetul trebuie sa fie suficient

  • de lung pentru a putea face detectarea coliziunilor. Cadrul trebuie sa acopere cel putin o durata critica ( un SLOT TIME ) pentru a fi transmis. Cind un transmitator detecteaza o coliziune, nu transmite in continuare cadrul curent. Astfel, apare necesitatea de a distinge cadrul de secvente incomplete. Acest lucru se rezolva prin stabilirea lungimii minime a cadrului de 64 octeti. Orice informatie de date care nu are cel putin 64 octeti va fi completata cu PAD. Un alt motiv pentru ca un cadru sa aiba o anumita lungime este acela ca un alt cadru sa nu apara pe linie pina cind primul bit al cadrului curent nu a ajuns la sfirsitul liniei. Timpul de propagare dus-intors in cazul cel mai defavorabil ( 2,5 km lungime ) este de 51,2 microsecunde, ceea ce corespunde unui bloc de 64 octeti.

    Secventa CRC ( FCS = Frame Check Sequence ): reprezinta un cimp care contine secventa de control ciclic CRC pe 32 biti. Suma de control ciclic se realizeaza pentru toate cimpurile cu exceptia preambulului, inceputul secventei SFD si FCS-ului.

    Este specificata si lungimea maxima a unui cadru, din motivele:

    limitarea lungimii tampoanelor de transmisie/receptie la nivel de statii; prevenirea utilizarii exclusive a mediului de catre o statie pe perioade lungi de transmisie; caracteristicile nivelului fizic; facilitati de control al erorilor.

    GLOSAR

    incapsulare: completarea datelor transmise, la fiecare nivel dintr-o familie de protocoale, cu o serie de informatii care vor fi folosite de protocol pentru validarea transmisiei la nivelul respectiv;

    decapsulare ( dezincapsulare ): operatie inversa incapsularii; la receptie, aceste suplimente de informatie sint folosite spre a verifica validitatatea entitatii de informatie primite de la partenerul de pe acelasi nivel;

    Entitatile de schimb au denumiri diferite la nivele diferite:

    pentru nivelul fizic: FRAME; pentru nivelul legatura de date: PACHET; pentru nivelele superioare: MESAJ.

    Obs. CSMA/CD Carrier Sense Multiple Access with Collision Detection.

  • Cablarea 802.3

    In mod obisnuit, sint utilizate patru tipuri de cabluri:

    10Base5: coaxil gros, 500 m, 100 noduri/segment; 10Base2: coaxial subtire, 200 m, 30 noduri/segment; 10Base-T: perechi torsadate, 100 m, 1024 noduri/segment; 10Base-F: fibra optica, 2000 m, 1024 noduri/segment.

    IEEE 802.4: Token-busIEEE 802.5: Token-ringIEEE 802.6: Distributed Queue Dual Bus ( DQDB )IEEE 803.3u: Fast Ethernet

    100Base-T4: fire torsadate, 100 m100Base-TX: fire torsadate, 100 m, full duplex la 100 Mbps100Base-F: fibra optica, 2000 m, full duplex la 100 Mbps pentru distante mari

    Modelul CLIENT-SERVER

    O aplicatie este eterogena daca procedurile la distanta sint executate pe diferite tipuri de sisteme de calcul.Server-ul ofera servicii clientilor din retea care cer acest lucru.Clientul consuma aceste resurse. Aplicatia client-server reprezinta aplicatia in care solicitantul actiunii este un sistem de calcul ( sau un proces ) si executantul actiunii este un alt sistem de calcul ( sau un alt proces ). De exemplu, intr-o astfel de aplicatie clientul trimite serverului un nume de fisier ( despre care se banuieste ca s-ar afla pe server ); serverul ii intoarce clientului fie continutul fisierului, fie un mesaj de eroare daca acesta se afla pe server.

    nume fisierClient Server ( Fisier )

    continut fisier

    sau mesaj eroare

    Scenariul de functionare a mecanismului client-server

    procesul server este lansat pe un sistem de calcul. Acesta il initializeaza si il pune sa stepte cererile clientilor

    un proces client este lansat fie de pe acelasi sistem, fie de pe altul conectat cu el in retea; clientul cere un serviciu, lansind o cerere de servire.

    Dupa ce serverul a rezolvat cererea, trece in starea de asteptare a noi cereri. De regula, serverele sint proiectate astfel incit cererile sa fie acceptate numai intr-o forma standard.

  • Clasificarea serverelor

    1. Durata contactului dintre client si server:

    servere iterative: presupune ca durata cererii si resursele cererii sa fie cunoscute si sa fie rezonabil de mici ( ex.: furnizare data si ora );

    servere concurente: rezolva cereri al caror timp si resurse depind de cererea insasi: serverul primeste cererea de la client, lanseaza un alt proces care va rezolva cererea, dupa care el trece din nou in starea de asteptare a unei noi cereri de la un alt client ( ex: tiparire de fisiere, citire fisiere ).

    1. Gradul de informatii detinute de server:

    servere cu stari ( statefull ): intretine informatii despre clientii lui ( este interesat daca acestia functioneaza corect sau nu );

    servere fara stari ( stateless ): nu detine informatii despre clientii lui.

    1. Tipul de conexiune folosit:

    servere care utilizeaza serviciu orientat pe conexiune: aplicatii care pretind o siguranta sporita;

    servere care folosesc servicii fara conexiune: aplicatii din retele LAN, servicii NFS si NIS.

    Schema de functionare a unui server concurent

    La primirea unei cereri, serverul transmite sarcina rezolvarii cererii unui alt proces.

    /* Initializarea comunicatiei */s = socket ( .. );bind ( .. );listen ( .. );/* Partea ciclica a serverului */for ( ; ; ) {

    f = accept ( s, .. );if ( fork ( ) = = 0 ) {

    /* Codul procesului fiu, cel care rezolva efectiv cererea */}

    else {/* Codul serviciului care asteapta o noua cerere */

    }/* Partea de terminare a activitatii serverului */

    }

    OBS.

    s-a folosit comunicarea orin socket; fork ( ) permite crearea unui nou proces; evitarea proceselor ZOMBIE:

    ZOMBIE: acel proces de sub UNIX care a fost lansat de un proces tata, iar acesta nu a mai asteptat terminarea procesului fiu;

    dupa ce un proces lanseaza, cu fork ( ), un proces fiu, cele doua evolueaza in paralel; cind procesul fiu si-a terminat activitatea, el face un apel sistem exit prin care isi

  • anunta parintele ca si-a terminat activitatea. La rindul lui, la un moment dat, parintele trebuie sa execute un apel sistem wait pentru a astepta termibnarea procesului fiu. Acest apel poate fi facut fie inainte, fie dupa terminarea procesului fiu. Un proces fiu care s-a terminat este trecut de catre nucleu in starea ZOMBIE pina cind parintele executa apelul sistem wait.

    incepind cu UNIX SYSTEM V Release 4, s-a introdus o posibilitate simpla de evitare a aparitiei proceselor ZOMBIE: este suficient ca in partea de initializare a serverului concurent sa apara secventa:

    # include < signal.h >..signal ( SIGCHLD, SIG_IGN );

    Astfel, prin apelul signal se cere procesului respectiv sa ignore ( SIG_IGN ) semnalul de terminare a proceselor fii ( SIGCHLD ).

    pentru UNIX BSD ( Berkeley SoftwaRE Distribution ):

    # include < signal.h >..void waiter ( ) { /* Functie de manipulare a apelurilor signal */

    wait ( 0 ); /* Sterge fiul recent terminat */signal ( SIGCHLD, waiter ); /* Reinstalare handler signal */

    }signal ( SIGCHLD, waiter ); /* plasat in partea de initializare */

    Pentru UNIX BSD, efectul unui apel sistem signal este valabil o singura data.

    Actiunea implicita asociata unui semnal ( cea care se executa la primirea acestuia ) este de terminare a procesului, eventual de un vidaj de memorie ( care va contine, intr-un fisier numit CORE, imaginea de memorie a procesului, pentru a putea fi consultata ulterior ). Exista insa si posibilitatea ca procesul sa desemneze anumite semnale pentru care sa se execute actiuni specifice. Aceasta facilitate se realizeaza prin intermediul functiei SIGNAL care completeaza in zona utilizator, intr-un vector, in pozitia corespunzatoare unui anumit semnal, adresa rutinei specificata de utilizator.

    Exemplu de server cu stare

    OPEN ( nume, mod )Proces client Proces server

    Descriptor fisier, lungime STARE:

    READ ( descriptor, nr.octeti ) nume, mod, Date citire, nr.octeti cititi pozitie curenta

    Exemplul de mai sus reprezinta un server cu stare care accepta cereri de citire dintr-un fisier: cererile lansate de clienti: OPEN si READ; clientul cere serverului sa deschida un fisier trimitindu-i numele fisierului si modul

    de deschidere ( citire, scriere..); clientul primeste inapoi descriptorul de fisier si lungimea fisierului deschis;

  • clientul cere citirea, din fisierul desemnat de descriptor, a unui nr de octeti ( maxim lungimea fisierului );

    serverul retine starea fisierului care a fost deschis, compusa din: nume fisier, modul in care a fost deschis, pozitia curenta in fisier.

    Exemplu de server fara stare ( STATELESS )

    READ ( nume, mod, nr.octeti, pozitie )Proces client Proces server

    Datele citite, nr.octeti cititi

    STARE: nume, mod, poz curenta

    exista doar procedura READ ( nu exista OPEN ); clientul ii transmite toate informatiile necesare citirii, iar el isi intretine singur

    pozitia curenta in fisierul de pe server; de la server - numai rezultatul citirii.

    Laborator 3

    SOCKET: primitiva ( la nivel transport ) pentru socluri TCP folosite in sistemele de operare BERKELEY-UNIX.In general, un socket este un capat de comunicatie sau punctul final de comunicatie, fiind in acelasi timp locul unde programul aplicatie se intilneste cu furnizorul mediului de transport.Doua aplicatii pot comunica intre ele prin socket doar dupa ce fiecareia dintre ele sistemul de operare i-a alocat un socket. Exista un numar de descriptori de socket rezervati pentru aplicatiile de sistem, restul descriptorilor fiind disponibili.

    Interfata socket ( API pentru retelele TCP/IP ) ascunde utilizatorului detaliile retelei fizice, ea este caracterizata doar prin serviciile pe care le asigura.Comunicatia prin socket este parte integranta a nivelului sesiune din modelul OSI.

    Sub UNIX, apelurile sistem I/O iau forma unui proces:

    deschide - citeste - scrie - inchide

    Programatorii UNIX urmeaza aceeasi pasi pentru a obtine accesul la dispozitivele hard. Astfel, sub UNIX se utilizeaza aceleasi apeluri sistem pentru a avea acces la o imprimanta, o unitate de banda sau diverse fisiere. Ca raspuns la astfel de apeluri, functia intoarce un pointer sau un handle, numit de UNIX descriptor de fisier care indica spre o intrare intr-un tabel ce descrie fisierul sau dispozitivul. Un descriptor de fisier UNIX poate indica un fisier, un dispozitiv hard sau orice alt obiect care realizeaza operatii sistem I/O.

    Facind o analogie cu cele specificate mai sus, pentru a comunica cu o retea TCP/IP, programul deschide mai intii o conexiune cu reteaua; la sfirsit, programul inchide conexiunea.Din perspectiva UNIX, acest concept de proiectare a facut comunicatiile in retea asemanatoare cu

  • celelalte operatii I/O sistem din UNIX si, deci, usor de integrat intr-un sistem de operare UNIX.

    Asadar, un socket poate fi privit ca un terminal ( endpoint ) pentru comunicatiile in retea. Cind programele folosesc o interfata socket pentru comunicatii in retea, socket-ul este o reprezentare abstracta a terminalului in procesul comunicatiilor in retea. Pentru ca o comunicatie in retea sa se poata produce ( printr-o interfata socket ), programul respectiv are nevoie de cite un socket la fiecare capat al conversatiei in retea.

    Cind e nevoie de un socket pentru o comunicatie in retea, se definesc caracteristicile socket-ului si apoi se utilizeaza o interfata API pentru a cere softului de retea un handle ( descriptor ) care identifica socket-ul.

    Daca un handle de fisier indica spre un fisier sau spre un dispozitiv, un handle de socket nu reprezinta un terminal anume sau o adresa destinatie. In majoritatea sistemelor de operare, un handle valabil trebuie trebuie sa indice catre un anumit fisier de pe hard disk. Totusi, programele bazate pe socket-uri creeaza un socket si apoi, intr-o alta etapa, conecteaza socket-ul la un terminal destinatie.In cazul unui program TCP/IP, de exemplu, care transmite o datagrama folosind protocoale fara conexiune, acesta va specifica o adresa destinatie pentru datagrama, dar nu va stabili o conexiune directa cu hostul destinatie; totusi, programul transmite datagrama la adresa destinatie. Softul de retea ( nivelul IP ) gestioneaza procesul de livrare. API-ul pentru reteaua TCP/IP necesita o cale prin care sa se obtina un handle I/O valabil fara a crea o conexiune directa cu adresa I/O destinatie ( calculatorul host din retea ).

    Conexiunea intre 2 socket-uri poate fi orientata pe conexiune ( conexiune punct la punct ) sau poate fi fara conexiune.

    Tipuri de socket

    Din punct de vedere al transportului efectuat: socket stream socket datagram

    Comunicarea e posibila numai daca la ambele capete e utilizat acelasi tip de socket.

    Interfata socket STREAM defineste un serviciu orientat pe conexiune. Datele sint transmise fara erori si fara duplicari, fiind receptionate in aceeasi ordine in care au fost transmise. Fluxul de date prin retea e realizat astfel incit sa se evite depasirea unei valori maxime de octeti la un moment dat. Nu se impun nici un fel de limitari.Pentru socket stream transportul este realizat folosind TCP. FTP foloseste serviciile oferite de socket stream.

  • Scenariul aplicatiilor SOCKET STREAM:

    Partea de initializare a serverului:

    SOCKET: cere nucleului sistemului sa creeze un socket prin care sa poata fi contactat de clienti: se fixeaza familia de adrese folosita, tipul de socket folosit: stream sau datagram.

    BIND: trimite nucleului numarul de port la care serverul asteapta sa fie contactat, precum si faptul ca poate fi contactat prin orice interfata de retea de pe masina server.

    LISTEN: cere nucleului sa dimensioneze lungimea cozii de asteptare la socket si sa confirme primirea cererilor de conexiune.

    Initializare client:

    SOCKET: cere nucleului sistemului sa creeze un socket prin care sa poata fi contactat de clienti; se fixeaza familia de adrese folosita, tipul de socket folosit: stream sau datagram.

    La un moment dat, clientul executa un apel sistem CONNECT, prin care ii transmite nucleului lui adresa IP si numarul de port ale server-ului caruia doreste sa-i ceara un serviciu. Nucleul, prin mecanismul socket, contacteaza serverul solicitat.Serverul, odata cu lansarea apelului sistem ACCEPT, ramine in asteptare pina cind un client il contacteaza. Cind a fost contactat, el primeste adresa IP si numarul de port ale clientului care l-a contactat.

  • Clientul executa unul sau mai multe apeluri sistem SEND prin care transmite server-ului un mesaj prin care ii cere un serviciu. Serverul, prin apelurile sistem RECV receptioneaza acest mesaj.

    Serverul executa actiunile necesare satisfacerii cererii clientului. Trimiterea rezultatului de catre server catre client se face similar: serverul trimite prin apeluri SEND, iar clientul receptioneaza prin apeluri RECV.

    OBS. Apelurile sistem SEND si RECV se comporta ca si functii UNIX care executa operatii de I/O obisnuite.

    Scenariul aplicatiilor SOCKET DATAGRAM:

    Interfata socket datagram defineste un serviciu fara conexiune in care datagramele sint transmise ca si pachete separate. Serviciul nu asigura garantii ale receptionarii datelor, care pot fi pierdute ori duplicate, iar datagramele pot ajunge in alta ordine decit cea in care au fost transmise. Marimea unei datagrame este limitata de numarul de octeti care pot fi transmisi intr-o singura tranzactie. Nu se realizeaza nici o dezasamblare si reasamblare a pachetelor. Transportul e realizat folosind protocolul UDP. Dintre protocoalele de nivel aplicatie, TFTP si NFS se bazeaza pe un astfel de socket.

    Initializare server si client:

    SOCKET: cere nucleului sa creeze un socket prin care sa poata comunica cu partenerii; se fixeaza familia de adrese, tipul de socket folosit: stream sau datagram.

    BIND: transmite nucleului numarul de port prin care se va comunica.

  • La un moment dat, clientul executa un apel sistem SENDTO prin care ii transmite nucleului sau adresa IP si numarul de port ale server-ului caruia doreste sa-i ceara un serviciu, precum si mesajul prin care ii cere server-ului un serviciu. Nucleul, prin mecanismul SOCKET, contacteaza serverul solicitat si ii transmite mesajul. Daca cererea este compusa din mai multe mesaje, ele sint transmise succesiv prin apeluri independente.

    Serverul, odata cu lansarea apelului sistem RECVFROM ramine in asteptare pina cind un client il contacteaza. Dupa ce a fost contactat, el primeste adresa IP, numarul de port ale clientului care l-a contactat, precum si mesajul prin care i se cere un serviciu. Apoi, serverul executa actiunile necesare satisfacerii cererii clientului.

    Transmiterea rezultatului de catre server catre client se face similar: serverul trimite prin apeluri sistem SENDTO, iar clientul receptioneaza prin apeluri RECVFROM, eventual prin mesaje succesive, fiecare dintre ele purtind adresele IP de contact si numarul de port. In acest caz, programul client utilizeaza functia RECVFROM in locul functiilor RECV sau READ pentru a prelua datele de la socket.In acelasi timp, programul client apeleaza functia BIND, dar nu si functia SOCKET. In general, un protocol fara conexiune nu stabileste o conexiune punct la punct intre cele doua puncte terminale. In schimb, functia SENDTO necesita ca programul sa specifice o adresa destinatie drept parametru.

    RECVFROM nu asteapta crearea unei conexiuni. In schimb, raspunde oricaror date care sosesc la portul de protocol legat ( bound ). Cinf functia RECVFROM receptioneaza o datagrama de la socket, ea memoreaza adresa de retea a preocesului care a trimis datagrama, precum si datagrama insasi. Programele ( SERVER si CLIENT ) utilizeaza adresa memorata pentru a identifica procesul emitator ( client ). Serverul trimite datagramele de raspuns ( conform cererii ) la adresa furnizata de functia RECVFROM.

    Alegerea tipului de socket

    Realizarea unei comunicatii cu o aplicatie existenta implica folosirea aceluiasi protocol ca si aplicatia respectiva. De exemplu, daca aplicatia in cauza foloseste protocolul TCP/IP, atunci socket-ul va fi de tip stream.Socketurile stream asigura cae mai sigura conexiune, acest lucru realizindu-se cu reducerea performantei, deoarece sint necesare eforturi suplimentare pentru mentinerea conexiunii.Socketurile datagram sint nesigure, deoarece pachetele pot fi ignorate, alterate sau duplicate in timpul transmisiei, ele putind fi acceptabile daca nu este necesara siguranta in receptionarea datelor sau daca aplicatia implementeaza ea insesi un asemenea mecanism folosind serviciile oferite de socketurile de tip datagram. Creste performanta pentru acest tip de socket.

    Pentru cantitati mari de date se vor utiliza socketuri de tip stream.

    Descriptorul de SOCKET

    Cind se creeaza un socket, nu se specifica o adresa. La apelul functiei SOCKET, implementarea creeaza un socket si intoarce un handle al acestuia ( un descriptor ) care identifica de fapt o intrare intr-o tabela de descriptori. Implementarea socket gestioneaza tabela de descriptori in locul programatorului. Accesul la tabela de descriptori, ca programator, poate fi realizat numai prin intermediul descriptorilor de socket.

    De fapt, crearea unui socket inseamna alocarea spatiului pentru memorarea unei structuri de date socket.

    Sub UNIX, fiecare proces controleaza o singura tabela de descriptori de fisiere. Functia SOCKET obtine un descriptor din tabela de descriptori pentru fisiere. Descriptorul este un pointer catre o

  • structura interna de date.

    Index pentru tabela de 0 Familie de protocoale descriptori

    1 Tip serviciu

    2 Adresa IP locala

    3 Pointer la o structura interna Adresa IP departata

    4 Port protocol local

    5 Port protocol departat

    structura de date socket

    STRUCTURA SIMPLA DE DATE SOCKET

    Structura de date socket prezentata include elemente pentru memorarea valorilor parametrilor functiei SOCKET. Structura de date contine, de asemenea, elemente pentru 4 adrese: adresa IP locala, adresa IP departata, portul local, portul departat. De fiecare data cind programul apeleaza functia SOCKET, implementarea socket aloca memorie pentru o noua structura de date si completeaza familia de adrese, tipul de socket si protocolul. In tabela descriptorilor de fisiere, implementarea socket memoreaza un pointer la structura de date. Handle-ul pe care programul il primeste de la functia SOCKET este un index la tabela descriptorilor.

    Interfata SOCKET nu specifica modul de gestionare a descriptorilor de socket. UNIX ii gestioneaza la fel cum gestioneaza descriptorii de fisiere din tabela de descriptori. Dincolo de descriptorul socketului, detaliile sint dependente de implementare.

    Functia SOCKET creeaza structura de date socket, dar lasa cimpurile de adrese vide. Pentru a asocia un socket cu o anumita adresa de retea, trebuie apelate alte functii din socketul API.

    Utilizarea paradigmei de SOCKET

    Paradigma ( modelul ) interfetei SOCKET pentru comunicatiile de retea denumeste calculatoarele host sau procesele care comunica - endpoints ( terminale ). Interfata socket denumeste fiecare terminal al unei conversatii in reteaua socket.

    Modelul client-server face o distinctie intre cele doua puncte terminale pe baza functiei pe care o indeplineste fiecare punct terminal. De exemplu, modelul client-server denumeste punctul terminal care initiaza cererea de servicii de retea ca proces client sau program client. Punctul terminal care raspunde cererii clientului este procesul sau programul server.

    Nivelul transport utilizeaza porturi de protocol pentru a identifica anumite aplicatii ( procese ) care ruleaza pe fiecare calculator host. Ca atare, fiecare proces de retea dintr-un calculator host foloseste un port de protocol ( asemanator cu un handle de task ) ca pe o adresa.

  • OBS. Port de protocol TCP/IP = adresa de aplicatie de retea in cadrul unui calculator host.

    O conexiune de retea intre doua programe include 5 elemente:

    port de protocol local: spcifica unde primeste un program sau un proces mesajele sau datagramele;

    adresa host local: identifica sistemul host care va primi pachetele; port de protocol remote: identifica programul sau procesul destinatie; adresa host departat: sistemul host destinatie; protocol: specifica modul in care programele transfera datele prin retea.

    Structura de socket care corespunde unui handle de socket include toate cele 5 elemente de informatie.

    Astfel, un SOCKET este o reprezentare abstracta a unui endpoint in procesele de comunicatie in retea. Structura de date socket include toate datele necesare unui endpoint pentru comunicatii in retea. Cind un program doreste sa comunice cu un altul, programul emitator transmite informatia la un socket, iar API-ul de socket gestioneaza interfata cu stiva de protocoale TCP/IP.

    Structura interna de date socket trebuie sa contina adresele corecte. Termenul ADRESE SOCKET nu se refera la adresa socketului in sine, ci mai ales la porturile de protocol si la adresele de host memorate in structura interna de date socket.

    Cind se creeaza un socket cu functia SOCKET, nu se specifica porturile de protocol sau adresele de host. In schimb, se folosesc diferite functii API pentru a memora adresele de socket si alte optiuni de configurare. De exemplu, daca programul va utiliza socketul ca port server, programul va apela o functie care specifica portul de protocol local care va fi utilizat. In caz contrar, daca programul va actiona ca un client de retea, programul va permite probabil ca implementarea socket sa aloce orice port disponibil pentru utilizare in momentul in care programul trebuie sa foloseasca socketul.

    Astfel, functia SOCKET aloca spatiu de memorare pentru o structura de date socket si returneaza un handle pe care programul il poate folosi pentru configurarea socketului. Parametrii specificati la creareasocketului vor depinde de scopul programului ( server sau client ), ca si de tipul serviciului de livrare ( flux de octeti sau datagrame ). Tipul serviciului de livrare determina protocolul ( TCP sau UDP ) pe care programul il va specifica. Functiile API pe care le va utiliza programul pentru a memora adresele de host si porturile de protocol vor depinde de faptul daca programul va utiliza socketul pentru aplicatii client sau server.

    In orice program de retea, un socket poate fi creat prin apelarea functiei socket:

    socket_handle = socket ( protocol_family, socket_type, protocol )

    Apoi se vor utiliza alte functii pentru configurarea socketului pe baza modului in care programul va utiliza socketul.De exemplu, pentru a transfera date printr-un socket, se poate utiliza un flux de octeti sau datagrame. Sau se poate utiliza un socket pentru a efectua fie operatii SERVER, fie operatii CLIENT.

  • Structura adreselor SOCKET

    Pentru realizarea unei comunicatii este necesara existenta unui cvintuplu:

    { Protocol, AdresaLocala, ProcesLocal, AdresaDepartata, ProcesDepartat }

    Primul parametru al functiei SOCKET ( care creaza un socket ) identifica o familie de protocoale cum ar fi suita de protocoale TCP/IP. Deoarece functia SOCKET cere programatorilor sa identifice protocoalele pe care programele lor le vor utiliza, interfata SOCKET poate stabili comunicatii in mai multe retele.

    Interfata SOCKET utilizeaza constante simbolice pentru a identifica familiile de protocoale acceptate. De exemplu, constanta simbolica PF_INET identifica familia de protocoale INTERNET ( suita de protocoale TCP/IP ). PF_UNIX identifica familia de protocoale interne UNIX, PF_NFS identifica familia de protocoale XEROX NETWORK SERVICES.

    Legat de familiile de protocoale apar FAMILIILE DE ADRESE.

    Interfata SOCKET permite utilizarea mai multor familii de adrese ( o famile de adrese defineste un stil de adresare ). Formatul adreselor de retea variaza de la o retea la alta. Astfel, a aparut necesitatea utilizarii conceptului de familie de adrese pentru a generaliza si mai mult interfata SOCKET in vederea utilizarii pe mai multe retele.Toate hosturile care sint in aceesi familie de adrese inteleg si folosesc aceeasi schema pentru adresarea capetelor socketului.

    Familiile de adrese sint identificate prin numere intregi. Numele acestora incepe cu AF ( Address Family ).

    Cea mai importanta familie de adrese este AF_INET ( defineste adresarea in domeniul Internet ). Pe linga acest tip de familie, sistemul UNIX recunoaste si alte tipuri cum ar fi AF_UNIX, care reprezinta sistemul local ( protocoale interne UNIX ), AF_NS pentru protocoalele XEROX NS, AF_IMPLINK ( pentru IMP - Interface Message Processor ).

    Fiecare stiva de protocoale defineste propria structura de adrese socket. Numele structurii respective incepe cu sockaddr_ si se termina cu un sufix unic pentru fiecare tip de protocol.

    Structura de adresa socket IPv4 ( numita structura de adresa socket Internet ) este sockaddr_in, fiind definita prin includerea headerului .

    Definitia Posix.1g pentru sockaddr_in este urmatoarea:

    struct in_addr {in_addr_t s_addr; /* pe 32 biti o adresa IPv4 */

    };struct sockaddr_in {

    uint8_t sin_len; /* lungimea structurii ( 16 ) */sa_family_t sin_family; /* valoare AF_INET */in_port_t sin_port; /* nr de port pe 16 biti TCP */

    /* sau UDP */struct in_addr sin_addr; /* adresa IPv4 */char sin_zero[8]; /* nefolosit */

  • nu toti distribuitorii folosesc cimpul lungime_structura, iar standardul Posix.1g nu cere acest cimp;

    sin_port: portul folosit de aplicatie, in ordinea octetilor din retea; sin_zero: trebuie setat initial la valoarea zero; cimpul lungime simplifica manipularea structurilor de socket de lungime variabila.

    Posix.1g cere doar trei elemente in structura sa: sin_family, sin_addr si sin_port. Pentru implementarile care respecta standardul Posix este permisa definirea unor elemente suplimentare in structura socket. Aproape toate implemetarile adauga sin_zero, pin urmare toate structurile de adrese socket au cel putin 16 bytes.

    Tipurile de date pentru s_addr, sin_family si sin_port sint urmatoarele:

    Tip de data Descriere Header

    int8_t signed 8-bit integer uint8_t unsigned 8-bit integer int16_t signed 16-bit integer uint16_t unsigned 16-bit integer int32_t signed 32-bit integer sa_family_t familia de adrese a structurii de adresa socket socklen_t lungimea structurri de adresa socket, normal uint32_t in_addr_t adresa IPv4, normal uint32_t in_port_t port TCP sau UDP, normal uint16_t

    in_addr_t trebuie sa fie de tip unsigned integer de cel putin 32 biti, in_port_t este de tip unsigned integer de cel putin 16 biti, iar sa_family_t poate fi de tip unsigned integer.Adresele IPv4 pe 32 de biti pot fi accesate prin doua cai diferite. De exemplu, daca serv este definit ca o structura de adresa socket Internet, atunci serv.sin_addr atribuie adresa IPv4 pe 32 de biti ca in structura in_addr, in timp ce serv.sin_addr.s_addr atribuie aceeasi adresa IPv4 pe 32 de biti ca in in_addr_t ( in mod normal, un intreg fara semn pe 32 de biti ). Trebuie sa fim siguri ca atribuim corect adresa IPv4 mai ales cind e utilizata ca argument la o functie.

    Structura de adresa socket e utilizata doar pentru un host dat; structura in sine nu este comunicata intre hosturi diferite, desi anumite cimpuri ( adresa IP si portul ) sint folosite pentru comunicatie. Adresele din familia AF_UNIX sint de tip struct sockaddr_un si sint definite in :

    struct sockaddr_un {short sun_family /* AF_UNIX */char sun_path [108] /* cale spre fisier UNIX */

    Structura generica de adresa socket

    Structura de adresa socket este intotdeauna fixata prin referire cind e precizata ca si argument al oricarei functii socket. Functiile socket care iau unul din acesti pointeri ca si argument trebuie sa se puna de acord cu structura de adresa socket care corespunde cu familiile de protocoale suportate.Problema apare in momentul declararii tipului de pointer. In cazul ANSI C solutia este simpla: void * este un tip de pointer generic. Solutia aleasa in 1982 a fost aceea de a defini o structura de adresa socket generica in headerul :

  • struct sockaddr {uint8_t sa_len;sa_family_t sa_family; /* familia de adresa: valoare AF_xxx */char sa_data [14] /* adresa specifica protocolului folosit */

    Asadar, functiile socket sint definite printr-un pointer la o structura de adresa socket generica. Orice apel al functiilor socket trebuie sa trimita pointerul la structura de adresa socket ( adresa specifica protocolului utilizat ).sa_data este diferit pentru fiecare familie de adrese. Continutul celor 14 octeti ai cimpului sa_data este interpretat in functie de familia de adrese folosita. Unele familii folosesc chiar mai mult de 14 octeti in acest scop. Acesta este motivul pentru care adresele sint cerute printr-un pointer la structura si un intreg care reprezinta lungimea adresei, lungime dependenta de familie.

    Fiecare familie de adrese are definita structura proprie de adresa, structura care se suprapune peste cea generica in momentul transmiterii ei catre nucleu.

    Comparatie intre structurile de adresa socket

  • SOCKET - creeaza un nou punct de capat al comunicatieiBIND - atasaza o adresa locala la un socluLISTEN - anunta capacitatea de a accepta conexiuni; determina marimea coziiACCEPT - blocheaza apelantul pina la sosirea unei cereri de conexiuneCONNECT - tentativa ( activa ) de a stabili o conexiuneSEND - trimite datele prin conexiuneRECEIVE - receptioneaza date prin conexiuneCLOSE - elibereaza conexiunea

    In general, un socket este un capat de comunicatie sau punctul final de comunicatie, fiind in acelasi timp locul unde programul aplicatie se intilneste cu furnizorul mediului de transport.Doua aplicatii pot comunica intre ele prin socket doar dupa ce fiecareia dintre ele sistemul de operare i-a alocat un socket. Exista un numar de descriptori de socket rezervati pentru aplicatiile de sistem, restul descriptorilor fiind disponibili.

    Interfata socket ( API pentru retelele TCP/IP ) ascunde utilizatorului detaliile retelei fizice, ea este caracterizata doar prin serviciile pe care le asigura.Comunicatia prin socket este parte integranta a nivelului sesiune din modelul OSI.

    Sub UNIX, apelurile sistem I/O iau forma unui proces:

    deschide - citeste - scrie - inchide

    Programatorii UNIX urmeaza aceeasi pasi pentru a obtine accesul la dispozitivele hard. Astfel, sub UNIX se utilizeaza aceleasi apeluri sistem pentru a avea acces la o imprimanta, o unitate de banda sau diverse fisiere. Ca raspuns la astfel de apeluri, functia intoarce un pointer sau un handle, numit de UNIX descriptor de fisier care indica spre o intrare intr-un tabel ce descrie fisierul sau dispozitivul. Un descriptor de fisier UNIX poate indica un fisier, un dispozitiv hard sau orice alt obiect care realizeaza operatii sistem I/O.

    Facind o analogie cu cele specificate mai sus, pentru a comunica cu o retea TCP/IP, programul deschide mai intii o conexiune cu reteaua; la sfirsit, programul inchide conexiunea.Din perspectiva UNIX, acest concept de proiectare a facut comunicatiile in retea asemanatoare cu celelalte operatii I/O sistem din UNIX si, deci, usor de integrat intr-un sistem de operare UNIX.

    Asadar, un socket poate fi privit ca un terminal ( endpoint ) pentru comunicatiile in retea. Cind programele folosesc o interfata socket pentru comunicatii in retea, socket-ul este o reprezentare abstracta a terminalului in procesul comunicatiilor in retea. Pentru ca o comunicatie in retea sa se poata produce ( printr-o interfata socket ), programul respectiv are nevoie de cite un socket la fiecare capat al conversatiei in retea.

    Cind e nevoie de un socket pentru o comunicatie in retea, se definesc caracteristicile socket-ului si apoi se utilizeaza o interfata API pentru a cere softului de retea un handle ( descriptor ) care identifica socket-ul.

    Daca un handle de fisier indica spre un fisier sau spre un dispozitiv, un handle de socket nu reprezinta un terminal anume sau o adresa destinatie. In majoritatea sistemelor de operare, un handle valabil trebuie trebuie sa indice catre un anumit fisier de pe hard disk. Totusi, programele bazate pe socket-uri creeaza un socket si apoi, intr-o alta etapa, conecteaza socket-ul la un terminal destinatie.In cazul unui program TCP/IP, de exemplu, care transmite o datagrama folosind protocoale fara conexiune, acesta va specifica o adresa destinatie pentru datagrama, dar nu va stabili o conexiune directa cu hostul destinatie; totusi, programul transmite datagrama la adresa destinatie. Softul de retea ( nivelul IP ) gestioneaza procesul de livrare. API-ul pentru reteaua TCP/IP necesita o cale prin care sa

  • se obtina un handle I/O valabil fara a crea o conexiune directa cu adresa I/O destinatie ( calculatorul host din retea ).

    Conexiunea intre 2 socket-uri poate fi orientata pe conexiune ( conexiune punct la punct ) sau poate fi fara conexiune.

    Primele 4 primitive din stiva SOCKET ( SOCKET, BIND, LISTEN, CONNECT ) sint executate in aceasta ordine de catre server.

    SOCKET - creeaza un nou capat al conexiunii si aloca spatiu pentru el in tabela entitatii de transport. In parametri de apel se specifica formatul de adresa utilizat, tipul de serviciu dorit si protocolul. Un apel SOCKET reusit intoarce un descriptor de fisier care va fi utilizat in apelurile urmatoare.Soclurile nou create nu au inca nici o adresa. Atasarea unei adrese se face utilizind primitiva BIND. O data ce un server a atasat o adresa unui soclu, clientii se pot conecta la el. Motivul pentru care apelul SOCKET nu creeaza adresa direct este ca unele procese se ingrijesc de adresa lor, in timp ce altele nu.Urmeaza apelul LISTEN care aloca spatiu pentru a retine apelurile primite in cazul cind mai multi clienti incearca sa se conecteze in acelasi timp.Pentru a se bloca si a astepta un apel, serverul executa o primitiva ACCEPT. Atunci cind soseste o unitate de date a protocolului de transport care cere o conexiune, entitatea de transport creeaza un nou soclu cu acelesi proprietati ca cel initial si intoarce un descriptor de fisier pentru acesta. Serverul poate atunci sa creeze un proces fiu sau fir de executie care va gestiona conexiunea de pe noul soclu si sa astepte in continuare cereri de conexiuni pe soclul initial.Pe partea de client, soclul trebuie creat folosind primitiva SOCKET, dar primitiva BIND nu mai este necesara, deoarece adresa folosita nu mai este importanta pentru server. Primitiva CONNECT blocheaza apelantul si demareaza procesul de conectare. Cind acesta s-a terminat ( unitatea de date a protocolului transport corespunzator a fost primit de la server ), procesul client este deblocat si conexiunea este stabilita. Atit clientul, cit si serverul pot utiliza acum primitivele SEND si RECEIVE pentru a transmite sau receptiona date folosind o conexiune duplex integral.Eliberarea conexiunii e simetrica. Atunci cind ambele parti au executat primitiva CLOSE, conexiunea este eliberata.

    Tipuri de socket

    Din punct de vedere al transportului efectuat:-> socket stream-> socket datagram

    Comunicarea e posibila numai daca la ambele capete e utilizat acelasi tip de socket.

    Interfata socket STREAM defineste un serviciu orientat pe conexiune. Datele sint transmise fara erori si fara duplicari, fiind receptionate in aceeasi ordine in care au fost transmise. Fluxul de date prin retea e realizat astfel incit sa se evite depasirea unei valori maxime de octeti la un moment dat. Nu se impun nici un fel de limitari.Pentru socket stream transportul este realizat folosind TCP. FTP foloseste serviciile oferite de socket stream.

  • Scenariul aplicatiilor SOCKET STREAM:

    Partea de initializare a serverului:

    SOCKET: cere nucleului sistemului sa creeze un socket prin care sa poata fi contactat de clienti: se fixeaza familia de adrese folosita, tipul de socket folosit: stream sau datagram.

    BIND: trimite nucleului numarul de port la care serverul asteapta sa fie contactat, precum si faptul ca poate fi contactat prin orice interfata de retea de pe masina server.

    LISTEN: cere nucleului sa dimensioneze lungimea cozii de asteptare la socket si sa confirme primirea cererilor de conexiune.

    Initializare client:

    SOCKET: cere nucleului sistemului sa creeze un socket prin care sa poata fi contactat de clienti; se fixeaza familia de adrese folosita, tipul de socket folosit: stream sau datagram.

    La un moment dat, clientul executa un apel sistem CONNECT, prin care ii transmite nucleului lui adresa IP si numarul de port ale server-ului caruia doreste sa-i ceara un serviciu. Nucleul, prin mecanismul socket, contacteaza serverul solicitat.Serverul, odata cu lansarea apelului sistem ACCEPT, ramine in asteptare pina cind un client il contacteaza. Cind a fost contactat, el primeste adresa IP si numarul de port ale clientului care l-a contactat.

  • Clientul executa unul sau mai multe apeluri sistem SEND prin care transmite server-ului un mesaj prin care ii cere un serviciu. Serverul, prin apelurile sistem RECV receptioneaza acest mesaj.

    Serverul executa actiunile necesare satisfacerii cererii clientului. Trimiterea rezultatului de catre server catre client se face similar: serverul trimite prin apeluri SEND, iar clientul receptioneaza prin apeluri RECV.

    OBS. Apelurile sistem SEND si RECV se comporta ca si functii UNIX care executa operatii de I/O obisnuite.

    Scenariul aplicatiilor SOCKET DATAGRAM:

    Interfata socket datagram defineste un serviciu fara conexiune in care datagramele sint transmise ca si pachete separate. Serviciul nu asigura garantii ale receptionarii datelor, care pot fi pierdute ori duplicate, iar datagramele pot ajunge in alta ordine decit cea in care au fost transmise. Marimea unei datagrame este limitata de numarul de octeti care pot fi transmisi intr-o singura tranzactie. Nu se realizeaza nici o dezasamblare si reasamblare a pachetelor. Transportul e realizat folosind protocolul UDP. Dintre protocoalele de nivel aplicatie, TFTP si NFS se bazeaza pe un astfel de socket.

  • Initializare server si client:

    SOCKET: cere nucleului sa creeze un socket prin care sa poata comunica cu partenerii; se fixeaza familia de adrese, tipul de socket folosit: stream sau datagram.

    BIND: transmite nucleului numarul de port prin care se va comunica.

    La un moment dat, clientul executa un apel sistem SENDTO prin care ii transmite nucleului sau adresa IP si numarul de port ale server-ului caruia doreste sa-i ceara un serviciu, precum si mesajul prin care ii cere server-ului un serviciu. Nucleul, prin mecanismul SOCKET, contacteaza serverul solicitat si ii transmite mesajul. Daca cererea este compusa din mai multe mesaje, ele sint transmise succesiv prin apeluri independente.

    Serverul, odata cu lansarea apelului sistem RECVFROM ramine in asteptare pina cind un client il contacteaza. Dupa ce a fost contactat, el primeste adresa IP, numarul de port ale clientului care l-a contactat, precum si mesajul prin care i se cere un serviciu. Apoi, serverul executa actiunile necesare satisfacerii cererii clientului.

    Transmiterea rezultatului de catre server catre client se face similar: serverul trimite prin apeluri sistem SENDTO, iar clientul receptioneaza prin apeluri RECVFROM, eventual prin mesaje succesive, fiecare dintre ele purtind adresele IP de contact si numarul de port. In acest caz, programul client utilizeaza functia RECVFROM in locul functiilor RECV sau READ pentru a prelua datele de la socket.In acelasi timp, programul client apeleaza functia BIND, dar nu si functia SOCKET. In general, un protocol fara conexiune nu stabileste o conexiune punct la punct intre cele doua puncte terminale. In schimb, functia SENDTO necesita ca programul sa specifice o adresa destinatie drept parametru.

    RECVFROM nu asteapta crearea unei conexiuni. In schimb, raspunde oricaror date care sosesc la portul de protocol legat ( bound ). Cinf functia RECVFROM receptioneaza o datagrama de la socket, ea memoreaza adresa de retea a preocesului care a trimis datagrama, precum si datagrama insasi. Programele ( SERVER si CLIENT ) utilizeaza adresa memorata pentru a identifica procesul emitator ( client ). Serverul trimite datagramele de raspuns ( conform cererii ) la adresa furnizata de functia RECVFROM.

    Adrese SOCKET

    Pentru realizarea unei comunicatii este necesara existenta unui cvintuplu:

    { Protocol, AdresaLocala, ProcesLocal, AdresaDepartata, ProcesDepartat }

    Primul parametru al functiei SOCKET ( care creaza un socket ) identifica o familie de protocoale cum ar fi suita de protocoale TCP/IP. Deoarece functia SOCKET cere programatorilor sa identifice protocoalele pe care programele lor le vor utiliza, interfata SOCKET poate stabili comunicatii in mai multe retele.

    Interfata SOCKET utilizeaza constante simbolice pentru a identifica familiile de protocoale acceptate. De exemplu, constanta simbolica PF_INET identifica familia de protocoale INTERNET ( suita de protocoale TCP/IP ). PF_UNIX identifica familia de protocoale interne UNIX, PF_NFS identifica familia de protocoale XEROX NETWORK SERVICES.

    Legat de familiile de protocoale apar FAMILIILE DE ADRESE.

    Interfata SOCKET permite utilizarea mai multor familii de adrese ( o famile de adrese defineste un stil de adresare ). Formatul adreselor de retea variaza de la o retea la alta. Astfel, a aparut necesitatea utilizarii conceptului de familie de adrese pentru a generaliza si mai mult interfata SOCKET in

  • vederea utilizarii pe mai multe retele.Toate hosturile care sint in aceesi familie de adrese inteleg si folosesc aceeasi schema pentru adresarea capetelor socketului.

    Familiile de adrese sint identificate prin numere intregi. Numele acestora incepe cu AF ( Address Family ).

    Cea mai importanta familie de adrese este AF_INET ( defineste adresarea in domeniul Internet ). Pe linga acest tip de familie, sistemul UNIX recunoaste si alte tipuri cum ar fi AF_UNIX, care reprezinta sistemul local ( protocoale interne UNIX ), AF_NS pentru protocoalele XEROX NS, AF_IMPLINK ( pentru IMP - Interface Message Processor ).

    Structura unei adrese SOCKET este urmatoarea ( fisierul socket.h ):

    struct sockaddr {uint8_t sa_len;sa_family_t sa_family; /* familia de adrese AF_xx */char sa _data [14]; /* pina la 14 octeti de */

    /* adresa directa */};

    sa_data este diferit pentru fiecare familie de adrese. Continutul celor 14 octeti ai cimpului sa_data este interpretat in functie de familia de adrese folosita. Unele familii folosesc chiar mai mult de 14 octeti in acest scop. Acesta este motivul pentru care adresele sint cerute printr-un pointer la structura si un intreg care reprezinta lungimea adresei, lungime dependenta de familie.

    Fiecare familie de adrese are definita structura proprie de adresa, structura care se suprapune peste cea generica in momentul transmiterii ei catre nucleu.

    O adresa Internet este formata din 32 biti si identifica in mod unic cuplorul de retea. Un host are atitea adrese Internet cite interfete de retea sint instalate in calculatorul respectiv.

    Adresele din familia AF_INET sint de tip struct sockaddr_in si sint definite in < netinet/in.h > ( structura de adresa socket Internet ):

    struct in_addr {in_addr_t s_addr; /* pe 32 biti o adresa IPv4 */

    };struct sockaddr_in {

    uint8_t sin_len; /* lungimea structurii ( 16 ) */sa_family_t sin_family; /* valoare AF_INET */in_port_t sin_port; /* nr de port pe 16 biti TCP */

    /* sau UDP */struct in_addr sin_addr; /* adresa IPv4 */char sin_zero[8]; /* nefolosit */

    nu toti distribuitorii folosesc cimpul lungime_structura, iar standardul Posix.1g nu cere acest cimp;

    sin_port: portul folosit de aplicatie, in ordinea octetilor din retea; sin_zero: trebuie setat initial la valoarea zero

  • De remarcat ca structura sockaddr_in include in interiorul ei structura in_addr.

    Adresele din familia AF_UNIX sint de tip struct sockaddr_un si sint definite in < sys/un.h >:

    struct sockaddr_un {short sun_family; /* AF_UNIX */char sun_path[108] /* cale spre fisier UNIX */

    }

    Fiecare familie de adrese defineste de obicei propria sa structura care poate fi suprapusa peste structura sockaddr.Ambele structuri de adrese specificate incep cu un indicator de familie. Deci, schimbind indicatorul de familie aceeasi zona de memorie poate fi interpretata ca un alt tip de adresa:

    struct socaddr_in

    Familia AF_INET

    Port 2 octeti

    Adresa IP 4 octeti

    Saptiu nefolosit

    struct sockaddr_un

    Familia AF_UNIX

    Nume de cale,maxim 108 octeti

    OBS. PORTURI - din perspectiva unei aplicatii, un port este un capat al unui canal de

  • comunicatie. O aceeasi interfata de retea poate fi folosita simultan de mai multe aplicatii, fiecare dintre acestea avind alocat un port. Astfel, pachetele receptionate la nivel fizic vor fi disttribuite catre aplicatia careia ii sint destinate. Porturile sint reprezentate de numere intregi de 16 biti, citeva din ele fiin rezervate pentru aplicatii particulare ale sistemului de operare.

    ORDINEA OCTETILOR IN RETEA - porturile si adresele sint de obicei specificate pentru apeluri folosind conventia ordonarii octetilor in retea. Ordinea octetilor in retea poate fi: ordonare de octeti in stil INTEL sau in stil MOTOROLA ( opusa stilului INTEL ). Ordonarea octetilor in retea pentru schimburile de date intre host-uri permite host-urilor care folosesc diferite arhitecturi sa schimbe informatii referitoare la adrese.

    Alegerea tipului de socket

    Realizarea unei comunicatii cu o aplicatie existenta implica folosirea aceluiasi protocol ca si aplicatia respectiva. De exemplu, daca aplicatia in cauza foloseste protocolul TCP/IP, atunci socket-ul va fi de tip stream.Socketurile stream asigura cae mai sigura conexiune, acest lucru realizindu-se cu reducerea performantei, deoarece sint necesare eforturi suplimentare pentru mentinerea conexiunii.Socketurile datagram sint nesigure, deoarece pachetele pot fi ignorate, alterate sau duplicate in timpul transmisiei, ele putind fi acceptabile daca nu este necesara siguranta in receptionarea datelor sau daca aplicatia implementeaza ea insesi un asemenea mecanism folosind serviciile oferite de socketurile de tip datagram. Creste performanta pentru acest tip de socket.

    Pentru cantitati mari de date se vor utiliza socketuri de tip stream.

  • Laborator 4

    Descriptorul de SOCKET

    Cind se creeaza un socket, nu se specifica o adresa. La apelul functiei SOCKET, implementarea creeaza un socket si intoarce un handle al acestuia ( un descriptor ) care identifica de fapt o intrare intr-o tabela de descriptori. Implementarea socket gestioneaza tabela de descriptori in locul programatorului. Accesul la tabela de descriptori, ca programator, poate fi realizat numai prin intermediul descriptorilor de socket.

    De fapt, crearea unui socket inseamna alocarea spatiului pentru memorarea unei structuri de date socket.

    Sub UNIX, fiecare proces controleaza o singura tabela de descriptori de fisiere. Functia SOCKET obtine un descriptor din tabela de descriptori pentru fisiere. Descriptorul este un pointer catre o structura interna de date.

    Index pentru ---------------------- STRUTURA SIMPLAtabela de 0 DE DATE SOCKET descriptori ----------------------

    1 ---------------------- 2 ---------------------- 3 pointer la o structura interna -------- ---------------------- | 4 | ---------------------- | 5 | ---------------------- |

    | || || |

    \/ | |

    ------------------------------- | |-----> Familie de protocoale

    Tip serviciu Adresa IP locala structura de Adresa IP departata date Port protocol local socket Port protocol departat

    | \/

    Structura de date socket prezentata include elemente pentru memorarea valorilor parametrilor functiei SOCKET. Structura de date contine, de asemenea, elemente pentru 4 adrese: adresa IP locala, adresa IP departata, portul local, portul departat. De fiecare data cind programul apeleaza functia SOCKET, implementarea socket aloca memorie pentru o noua structura de date si completeaza familia de adrese, tipul de socket si protocolul. In tabela descriptorilor de fisiere, implementarea socket memoreaza un pointer la structura de date. Handle-ul pe care programul il primeste de la functia SOCKET este un index la tabela descriptorilor.

  • Interfata SOCKET nu specifica modul de gestionare a descriptorilor de socket. UNIX ii gestioneaza la fel cum gestioneaza descriptorii de fisiere din tabela de descriptori. Dincolo de descriptorul socketului, detaliile sint dependente de implementare.

    Functia SOCKET creeaza structura de date socket, dar lasa cimpurile de adrese vide. Pentru a asocia un socket cu o anumita adresa de retea, trebuie apelate alte functii din socketul API.

    Utilizarea paradigmei de SOCKET

    Paradigma ( modelul ) interfetei SOCKET pentru comunicatiile de retea denumeste calculatoarele host sau procesele care comunica - endpoints ( terminale ). Interfata socket denumeste fiecare terminal al unei conversatii in reteaua socket.

    Modelul client-server face o distinctie intre cele doua puncte terminale pe baza functiei pe care o indeplineste fiecare punct terminal. De exemplu, modelul client-server denumeste punctul terminal care initiaza cererea de servicii de retea ca proces client sau program client. Punctul terminal care raspunde cererii clientului este procesul sau programul server.

    Nivelul transport utilizeaza porturi de protocol pentru a identifica anumite aplicatii ( procese ) care ruleaza pe fiecare calculator host. Ca atare, fiecare proces de retea dintr-un calculator host foloseste un port de protocol ( asemanator cu un handle de task ) ca pe o adresa.

    OBS. Port de protocol TCP/IP = adresa de aplicatie de retea in cadrul unui calculator host.

    O conexiune de retea intre doua programe include 5 elemente:

    port de protocol local: spcifica unde primeste un program sau un proces mesajele sau datagramele;

    adresa host local: identifica sistemul host care va primi pachetele; port de protocol remote: identifica programul sau procesul destinatie; adresa host departat: sistemul host destinatie; protocol: specifica modul in care programele transfera datele prin retea.

    Structura de socket care corespunde unui handle de socket include toate cele 5 elemente de informatie.

    Astfel, un SOCKET este o reprezentare abstracta a unui endpoint in procesele de comunicatie in retea. Structura de date socket include toate datele necesare unui endpoint pentru comunicatii in retea. Cind un program doreste sa comunice cu un altul, programul emitator transmite informatia la un socket, iar API-ul de socket gestioneaza interfata cu stiva de protocoale TCP/IP.

    Structura interna de date socket trebuie sa contina adresele corecte. Termenul ADRESE SOCKET nu se refera la adresa socketului in sine, ci mai ales la porturile de protocol si la adresele de host memorate in structura interna de date socket.

    Cind se creeaza un socket cu functia SOCKET, nu se specifica porturile de protocol sau adresele de host. In schimb, se folosesc diferite functii API pentru a memora adresele de socket si alte optiuni de configurare. De exemplu, daca programul va utiliza socketul ca port server, programul va apela o functie care specifica portul de protocol local care va fi utilizat. In caz contrar, daca programul va actiona ca un client de retea, programul va permite probabil ca implementarea socket sa aloce orice port disponibil pentru utilizare in momentul in care programul trebuie sa foloseasca socketul.

  • Astfel, functia SOCKET aloca spatiu de memorare pentru o structura de date socket si returneaza un handle pe care programul il poate folosi pentru configurarea socketului. Parametrii specificati la crearea socketului vor depinde de scopul programului ( server sau client ), ca si de tipul serviciului de livrare ( flux de octeti sau datagrame ). Tipul serviciului de livrare determina protocolul ( TCP sau UDP ) pe care programul il va specifica. Functiile API pe care le va utiliza programul pentru a memora adresele de host si porturile de protocol vor depinde de faptul daca programul va utiliza socketul pentru aplicatii client sau server.

    In orice program de retea, un socket poate fi creat prin apelarea functiei socket:

    socket_handle = socket ( protocol_family, socket_type, protocol )

    Apoi se vor utiliza alte functii pentru configurarea socketului pe baza modului in care programul va utiliza socketul.De exemplu, pentru a transfera date printr-un socket, se poate utiliza un flux de octeti sau datagrame. Sau se poate utiliza un socket pentru a efectua fie operatii SERVER, fie operatii CLIENT.

    Functii API socket folosite pentru configurarea unui SOCKET pentru comunicatii in retea

    Utilizare SOCKET Informatie locala Informatie remote

    client orientat pe conexiune Un apel al functiei CONNECT memoreaza atit informatia, cit si pe cea indepartata in structura

    de date socket

    server orientat pe conexiune BIND LISTEN & ACCEPT

    client fara conexiune BIND SENDTO

    server fara conexiune BIND RECVFROM

    Model functional al unei retele EthernetProtocolul MAC-Ethernet, descriere CSMA/CDFormatul unui cadru MACModelul CLIENT-SERVERScenariul de functionare a mecanismului client-serverClasificarea serverelor Schema de functionare a unui server concurentOBS.