

Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Descrizione delle connessioni socket
Tipologia: Appunti
1 / 2
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!


Il concetto di socket è stato sviluppato come estensione diretta del paradigma UNIX di I/O su file, che si basa sulla sequenza di operazioni open-read-write-close:
L’utilizzo dei socket avviene aggiungendo a questa struttura, l’insieme dei parametri necessari a realizzare la connessione tra macchine remote , richiedendo: -gli indirizzi; -Il protocollo e numero di porta; -Il tipo del protocollo;
Ogni sistema operativo mette a disposizione nelle API i meccanismi per realizzare l’interfacciamento tra i diversi protocolli: le socket API sono delle specifiche API di protocollo che hanno origine con Berkeley BSD UNIX e che oggi sono disponibili in Windows , Solaris e Linux.
Le funzioni presenti nei linguaggi più comuni in C e in Java sono: -socket()/server socket(): crea un nuovo socket -close(): termina l’utilizzo di un socket; -bind():collega un indirizzo di rete ad un socket; -listen(): aspetta messaggi in ingresso; -accept(): comincia a utilizzare una connessione in ingresso; -connect(): crea una connessione con un host remoto; -send()/write(): trasmette dati su una connessione attiva; -recv()/red(): riceve dati da una connessione attiva.
Esistono varie famiglie di socket chiamate domini, dove ogni famiglia riiunisce i socket che utilizzano gli stessi protocolli (protocol family): ogni famiglia supporta un sottoinsieme di stili di comunicazione e possiede un proprio formato di indirizzamento (address family). Tra le famiglie si socket ricordiamo : Internet socket(AF_INET): è quella che permette il trasferimento di dati tra processi posti su macchine remote connesse tramite una LAN o internet. UNIX DOMAIN SOCKET(AF_UNIX): permette il trasferimento di dati tra processi sulla stessa macchina UNIX.
I socket sono fondamentalmente di tre tipi: -stream socket; -datagram socket; -raw socket;
Gli stream socket e datagram socket sono usati a livello applicativo, mentre i raw socket sono utilizzati negli sviluppi dei protocolli. Stream Socket
Con i stream socket si realizza una connessione sequenziale: il server si mette in ascolto, in attesa di un collegamento, e quando gli arriva una richiesta la esaudisce mediante la primitiva accept() che crea il nuovo socket dedicato alla connessione; il client si pone in coda sul socket del server e quando viene accettato dal server crea implicitamente il bing con la porta locale. Tra i due processi server e client, i server è quello che ha controllo maggiore poiché è il processo che inizialmente crea il socket: più client possono comunicare attraverso lo stesso socket ma solo un server può essere associato a uno specifico socket. Inoltre il client ha bisogno di conoscere l’ indirizzo del server mentre il server acquisisce le informazioni del client ( e, quindi, anche il suo indirizzo ) solo dopo che viene stabilita la connessione.
Datagram Socket Con i datagram Socket (SOCK_DGRAM) viene realizzata la comunicazione che permette di scambiare dati senza connessione mediante il trasferimento di datagrammi che inoltrano messaggi di dimensione variabile senza garantire ordine o arrivo di pacchetti , quindi, si ha una comunicazione inaffidabile. Permettono quindi di inviare da un socket a più destinazione e ricevere su un socket da più sorgenti : in generale realizzano quindi il modello “ molti a molti” e sono supportato nel dominio internet dal protocollo UDP. Operativamente , ogni processo crea il proprio endpoint richiamando la primitiva che crea il socket successivamente : -Il server si mette in attesa di ricevere i dati (mediante la primitiva receive () in Java e recfrom() in C ) e alla loro ricezione può inviare una risposta ( mediante la primitiva send() in Java e sendto() in C ); -Il client invia il pacchetto di dati al server ( mediante la primitiva send() in java e sendto () in C ) e può ,mettersi in attesa di una risposta con le stesse primitive che ha utilizzato il sever. Al termine della comunicazione il socket viene chiuso. Il loro vantaggio è quello di trasferire velocemente i dati e non esistono differenze tra le chiamate effettuate dai vari processi coinvolti nella comunicazione: quindi decade anche il concetto di client e server dato che utilizzano le stesse primitive e solo il loro ordine stabilisce nell’applicazione quale processo fa la funzione di server e quale di client.