Socket
Identificazione di un processo
Affinchè un processo, presente su un determinato host, invii un messaggio a un qualsiasi altro host, il processo mittente deve identificare il processo destinatario in modo univoco. Questa identificazione avviene oggi attraverso le porte logiche identificate da un numero detto port address.
Il numero di port è specificato con 2 bytes (da 0 a 65535) e si dividono in range:
0 - 1023
Riservati ad applicazioni particolari → well-known port numbers
1024 - 49151
Riservati a porte registrate e usati su alcuni servizi ma possono essere anche utilizzate dai client
49152 - 65535
Liberi per essere assegnati dinamicamente
Cos'è un socket
Un socket è formato dalla coppia <indirizzoIP:numeroPorta>
: è un identificatore analogo a una porta, cioè a un punto di accesso/uscita, unico per ogni rete.
Identificano quindi in maniera univoca una connessione.
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 pressochè con la stessa modalità ma aggiungendo a questa struttura l'insieme dei parametri necessari a realizzare la connessione tra macchine remote, cioè richiedendo:
- gli indirizzi
- il protocollo e numero di porta
- il tipo di protocollo
Le funzioni principali (presenti in C e Java)
Socket() - ServerSocket() // crea un nuovo socket
close() // termina l'utilizzo di un socket
bind() // collega un indirizzo di rete a un socket
listen() // aspetta messaggi in ingresso
accept() // comincia a utilizzare una connessione in ingresso
connect() // crea una connession con un host remoto
send() - write() // trasmette dati su una connessione attiva
recv() - read() // riceve dati da una connessione attiva
Famiglie di Socket
Esistono varie famiglie di socket (chiamate anche domini) dove ogni famiglia riunisce 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 più importanti ci sono:
- Internet socket (AF_INET): permette il trasferimento di dati tra processi posti su macchine remote connesse tramite una LAN o Internet
- Unix Domain Socket (AF_UNIX): permetti il trasferimento di dati tra processi sulla stessa macchina Unix
Tipi di Socket
Gli stream e datagram socket sono usati a livello applicativo mentre i raw nello sviluppo di protocolli.