Socket (reti): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Annullata la modifica 104545342 di 143.225.7.94 (discussione) Vandalismo
Etichetta: Annulla
A.gr209 (discussione | contributi)
Nessun oggetto della modifica
Riga 2:
Un '''socket''', in [[informatica]], nei [[sistema operativo|sistemi operativi]] moderni, indica un'[[Astrazione (informatica)|astrazione]] [[software]] progettata per poter utilizzare delle [[Application programming interface|API]] standard e condivise per la trasmissione e la ricezione di dati attraverso una [[Rete informatica|rete]] oppure come meccanismo di [[Comunicazione tra processi|IPC]]. È il punto in cui il codice applicativo di un [[processo (informatica)|processo]] accede al canale di comunicazione per mezzo di una [[Porta (reti)|porta]], ottenendo una comunicazione tra processi che lavorano su due macchine fisicamente separate.
Dal punto di vista di un [[programmatore]] un socket è un particolare oggetto sul quale leggere e scrivere i dati da trasmettere o ricevere.
 
== Descrizione ==
I socket ci permettono di comunicare attraverso la rete utilizzando la pila TCP/IP, essi sono principalmente composti da due parti:
 
* Indirizzo IP: codice univoco della macchina, spesso server, che offre il servizio richiesto (32 bit).
* Numero di porta : Utilizzato dal singolo processo per richiedere il protocollo all’interno della macchina (16 bit).
 
== Domini ==
I socket che utilizzano i medesimi protocolli vengono racchiusi all'interno di una stessa famiglia, chiamati dominio.
 
Esistono principalmente due tipologie di domini:
 
* '''Internet socket''':  permette di trasferire i dati tra processi posti all’interno di  macchine remote connesse, ad esempio appartenenti alla stessa LAN.
* '''Unix Domain socket''': permette di trasferire i dati tra processi appartenenti alla stessa macchina.
 
== Tipi di socket ==
I socket possono essere classificati principalmente in tre categorie, ciascuna di essere caratterizzata da una propria modalità di comunicazione.
Ci sono due tipi fondamentali di socket:
 
* i socket tradizionali su protocollo [[Internet Protocol|IP]], usati in molti sistemi operativi per le comunicazioni attraverso un [[livello di trasporto|protocollo di trasporto]] (quali [[Transmission Control Protocol|TCP]] o [[User Datagram Protocol|UDP]]);
* '''Datagram Socket''': questa tipologia di socket utilizza una connessione basata sul protocollo UDP, ciò significa che l’invio dei dati avviene mediante il trasferimento di piccoli datagramma, senza garantire il corretto ordine d’arrivo e la correttezza dell’informazione. Il client e il server non instaurano una vera a propria connessione, ma il client comunica direttamente con il server, quando vuole.
* gli ''Unix domain socket'' (detti anche ''socket locali'' o ''socket in dominio Unix''), usati nei sistemi operativi [[POSIX]] per le comunicazioni tra processi residenti sullo stesso [[computer]].
* '''Stream Socket''': utilizzano una connessione basata sul protocollo TCP, quindi, connection-oriented e affidabile.
 
La connessione viene instaurata tramite la seguente sequenza:
 
# Vengono inizializzati i processi client e server.
# Il processo client invia la richiesta di connessione al server indicando il socket.
# Il server accetta la richiesta e da vita a un canale virtuale che utilizzerà per la trasmissione dei dati.
 
* '''Raw socketSocket''': utilizzatiquesta tipologia di socket viene utilizzata per lo sviluppo di particolari protocolli.
 
 
A sua volta esistono due tipi di socket su IP:
 
* '''listen''', che rappresentano la possibilità di ricevere nuove [[connessione (informatica)|connessioni]]. Un socket di questo tipo è identificato dalla terna [[livello di trasporto|protocollo di trasporto]], [[indirizzo IP]] del computer, [[porta (reti)|numero di porta]];
* '''established''', che rappresentano una particolare connessione attiva. Un socket di questo tipo è identificato dalla 5-tupla [[livello di trasporto|protocollo di trasporto]], [[indirizzo IP]] sorgente, [[indirizzo IP]] destinazione, [[porta (reti)|numero di porta]] sorgente, [[porta (reti)|numero di porta]] destinazione.
 
In base alla modalità di connessione, inoltre, si distinguono:<ref>{{Cita web|url = http://fortyzone.it/socket-cosa-sono/|titolo = Socket: cosa sono e come funzionano - FortyZone|accesso = 2017-03-19}}</ref>
* '''Stream socket''': [[Comunicazione orientata alla connessione|connection-oriented]], basati su TCP;
* '''Datagram socket''': [[Protocollo connectionless|connectionless]], basati su UDP;
* '''Raw socket''': utilizzati per lo sviluppo di protocolli.
I socket sono stati introdotti nel [[1983]] in [[BSD]] e poi sono stati ripresi da praticamente tutti gli altri sistemi operativi. Per questo motivo solitamente le funzioni di programmazione dei socket vengono chiamate ''Berkeley socket API''.