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:

Service Name and Transport Protocol Port Number Registry
Service names and port numbers are used to distinguish between different services that run over transport protocols such as TCP, UDP, DCCP, and SCTP. Service names are assigned on a first-come, first-served process, as documented in [RFC6335].
https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

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:

  1. gli indirizzi
  1. il protocollo e numero di porta
  1. 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:

Tipi di Socket

Gli stream e datagram socket sono usati a livello applicativo mentre i raw nello sviluppo di protocolli.