La Connessione tramite socket: famiglie, tipologie e protocolli TCP/UDP

Slide sulla connessione tramite socket. Il Pdf esplora le famiglie e le tipologie di socket, le modalità di connessione con TCP e UDP, e la comunicazione multicast. Questo materiale di Informatica, adatto a studenti universitari, offre una panoramica tecnica chiara e concisa sull'argomento.

Mostra di più

26 pagine

La
Connessione
tramite socket
Tps Prof.Alessio Palma
Famiglie e
tipologie di socket
Modalità di
connessione con
TCP e UDP
Comunicazione
multicast
02
03
01
Parleremo di

Visualizza gratis il Pdf completo

Registrati per accedere all’intero documento e trasformarlo con l’AI.

Anteprima

La Connessione tramite socket

Introduzione ai Socket

La
Connessione
tramite socket
Tps Prof.Alessio Palma
O
9Parleremo di

  • Famiglie e
    tipologie di socket
  • Modalità di
    connessione con
    TCP e UDP
  • Comunicazione
    multicast

Generalità sui Socket

Generalità
· 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:
open: operazione di apertura del file
read/write: lettura e scrittura
close: terminazione dell'utilizzo del file
Sono poi necessari indirizzo porta e protocollo
COS'E' IL SOCKET
Un socket, in informatica, è un'astrazione software, gestita dal sistema operativo, che
rappresenta un canale di comunicazione di rete tra un processo e una risorsa. Per un
programmatore, un socket è un particolare oggetto sul quale leggere e scrivere i dati
da trasmettere o ricevere.Generalità
· Il client ed il server utilizzano un protocollo di trasporto (TCP o UDP) per comunicare
. Il software di gestione del protocollo di trasporto si trova all'interno del sistema operativo
. Il software dell'applicazione si trova all'esterno del sistema operativo
· Per poter comunicare due applicazioni devono interagire con i rispettivi sistemi operativi:
come? Si utilizza un meccanismo che svolge il ruolo di ponte (interfaccia) tra sistema operativo
ed applicazione di rete: Application Programming Interface (API)Generalità
FUNZIONALITÀ' ED UTILIZZO DEL SOCKET
Il socket, nei sistemi operativi moderni, serve per poter utilizzare delle API standard, condivise
attraverso la rete. Permette l'invio e la ricezione di dati, tra host remoti o tra processi locali. Socket
locali e remoti in comunicazione, formano una coppia, composta da indirizzo e porta di client e
server. Solitamente i sistemi operativi forniscono delle API per permettere alle applicazioni di
controllare e utilizzare i socket di rete.
/ protocolli utilizzabili per l'implementazione dei socket sono:
-protocollo TCP (Transfer Control Protocol);
-protocollo UDP (User Datagram Protocol);
Entrambi questi protocolli si appoggiano sul protocollo IP (Internet Protocol).
I socket possono essere implementati con svariati linguaggi di programmazione, come C, C++ e
java.Generalità
Riepilogando:

  • client e server utilizzano un protocollo di trasporto (TCP o UDP) per comunicare
  • Il software di gestione del protocollo di trasporto si trova all'interno del sistema
    operativo
    . Il software dell'applicazione si trova all'esterno del sistema operativo
    · Per poter comunicare due applicazioni devono interagire con i rispettivi sistemi
    operativi: come?
  • Si utilizza un meccanismo che svolge il ruolo di ponte (interfaccia) tra sistema
    operativo ed applicazione di rete: Application Programming Interface (API)
    . Ogni sistema operativo mette a disposizione nelle API i meccanismi per realizzare
    l'interfacciamento tra diversi protocolli(es.applicativi con trasporto).
    · Le socket API sono delle specifiche API di protocollo che sono disponibili in
    Windows, Solaris e Linux e permettono alle applicazioni di controllare e utilizzare i
    socket di rete.

Funzioni API e Socket

Generalità
Cosa fa un API?

  • Standardizza l'interazione con il sistema operativo (SO)
    · Consente ai processi applicativi di utilizzare i protocolli di rete, definendo:
    - le funzioni consentite
    - gli argomenti per ciascuna funzione
    Client
    Server
    API
    TCP
    UDP
    IPXGeneralità
    Funzioni presenti sia in C che in Java che verranno utilizzate in seguito quando verranno
    programmati i socket:
  • socket()/server socket(): 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 connessione con un host remoto;
  • send()/write(): trasmette dati su una connessione attiva;
  • recv()/read(): riceve dati da una connessione attiva.

Famiglie di Socket

Famiglie di Socket
Esistono varie famiglie di socket (domini)
Ogni famiglia riunisce i socket che utilizzano gli stessi protocolli (Protocol Family) sottostanti. Ciascuna
famiglia supporta un sottoinsieme di stili di comunicazione e possiede un proprio formato di
indirizzamento (Address Family).
Tra le famiglie di socket ricordiamo:

  • Internet socket (AF_INET): è quella che utilizzeremo nelle nostre applicazioni e 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. 11
  • La principale differenza fra le due famiglie di socket sta nell'indirizzo:
  • AF_UNIX è praticamente il pathname valido nel file system della macchina;
  • AF_INET è specificato da due valori:indirizzo IP (32 bit),che individua un unico host
    Internet;numero di porta logica (16 bit),che specifica una particolare processo dell'host.

Tipi di Socket

Tipi di socket
I socket sono fondamentalmente di tre tipi:
-datagram socket
-stream socket
-raw socket
I primi due sono utilizzati a livello applicativo mentre i raw socket sono utilizzati nello
sviluppo di protocolli quindi non verranno analizzati.

Stream Socket

Stream Socket
Con gli stream socket (SOCK_STREAM) si realizza una connessione sequenziale tipicamente
asimmetrica, affidabile e full-duplex basata su stream di byte di lunghezza variabile.
Ogni processo crea il proprio endpoint richiamando la primitiva socket() in C o creando l'oggetto
socket in Java e successivamente:

  • 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 un nuovo socket dedicato alla
    connessione;
  • Il client si pone in coda sul socket del server e quando viene "accettato" dal server crea
    implicitamente il binding con la porta locale.
    Sequenziale:i file possono essere letti solo i sequenza dall'inizio alla fine
    Full-duplex: permette la comunicazione in entrambe le direzioni e simultaneamenteStream Socket
    Tra i due processi server e client, il server è quello che ha controllo maggiore poiché è il
    processo Server che inizialmente crea il socket:
  • Più client possono comunicare attraverso lo stesso socket ma solo un server può
    essere associato a uno specifico socket del singolo client
  • 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.Stream Socket
    Vediamo l'esempio di un Client che vuole
    connettersi a un Server web tramite
    protocollo Http.
  • Il server accetta la richiesta e realizza "un
    canale virtuale" tra il client un nuovo
    socket dell server (indicato XX),lasciano
    quindi la porta libera per le ulteriori
    richieste da parte di altri client.
  • I due processi si scambiano i dati
    (funzioni read() e write()) fino alla
    chiusura del canale di connessione, che
    viene
    effettuata
    rispettivamente
    mediante la chiamata della primitiva
    close()
    A Inizializzazione dei processi.
    Client
    IP
    socket
    1052
    Crea un socket
    Server
    IP
    coda
    socket
    80
    Crea un socket
    Lo connette alla porta 80
    Si pone in ascolto
    B Il client effettua la richiesta di collegamento.
    Client
    Server
    IP
    Richiesta
    di collegamento
    socket
    coda
    socket
    1052
    80
    C Il server accetta la richiesta e stabilisce il collegamento.
    Client
    Server
    IP
    Canale virtuale
    socket
    coda
    socket
    1052
    80
    socket
    XXStream Socket
    Il protocollo TCP è basato su questo tipo di socket.
    Nella figura a lato possiamo osservare che in un
    server TCP abbiamo due tipi di socket:
  • un tipo per accettare connessioni (condiviso),
    che chiamiamo connection socket;
  • un tipo per le operazioni send() e receive() (non
    condiviso), che chiamiamo data socket.
    Client 1
    Server
    Data socket
    Connection socket
    Client 2
    Data socket
    Data socket
    Se pensiamo al protocollo Http il connection socket è sulla porta 80Stream Socket
    Schema logico della connessione TCP mediante Socket
    Durante la fase di
    binding avviene il
    collegamento fra il
    socket e la porta
    Server
    s = socket ()
    Client
    bind (s)
    listen (s)
    x = socket ()
    3-way handshake
    attende
    una connessione
    new = accept (s)
    connect (x)
    attende
    una richiesta
    read (new)
    write (x)
    elabora la risposta
    canale
    read (x)
    invia la risposta
    write (new)
    >
    read (x)
    close (new)
    close (x)
    Le API del linguaggio Java differenziano i due tipi di socket e noi utilizzeremo due entry differenti:
  • ServerSocket(int port): per creare una connection socket legata alla porta specificata per accettare connessioni
    da parte del server;
  • Socket(InetAddress address, int port): per creare una data socket e richiede come parametro una server socket,
    cioè l'esistenza di una connessione (l'indirizzo e la porta).

Three-way Handshake

Stream Socket
Three-way Handsake
Un handshake a tre vie (Three-way handshake) è un metodo utilizzato in una rete
TCP/IP per creare una connessione tra un host/client locale e un server. Si tratta di un
metodo in tre fasi che richiede sia al client che al server di scambiare i pacchetti SYN e
ACK (riconoscimento-acknowledgment) prima dell'inizio della comunicazione dei dati.

  • Un client invia un pacchetto dati SYN su una rete IP a un
    server sulla stessa rete o a una rete esterna. L'obiettivo di
    questo pacchetto è di chiedere se il server è disponibile per
    nuove connessioni.
  • Il server di destinazione deve disporre di porte aperte in grado
    di accettare e avviare nuove connessioni. Quando il server
    riceve il pacchetto SYN dal nodo client, risponde e restituisce
    una ricevuta di conferma, il pacchetto ACK o SYN/ACK.
    . Il client riceve il SYN/ACK dal server e risponde con un
    pacchetto ACK.
  • Al termine di questo processo, viene creata la connessione e
    l'host e il server sono in grado di comunicare.
    SYN
    SYN-ACK
    ACK
    OK

Datagram Socket

Datagram Socket
I datagram socket (SOCK_DGRAM) permette di scambiare dati senza connessione (i messaggi
contengono l'indirizzo di destinazione e provenienza) mediante il trasferimento di datagrammi. I
messaggi hanno lunghezza variabile, non è garantito ne ordine ne arrivo dei pacchetti, quindi si ha
una comunicazione inaffidabile.
Permettono quindi di inviare da un socket a più destinazioni e ricevere su un socket da più sorgenti in
generale realizzano quindi il modello "molti a molti" e sono supportate dal protocollo UDP.
Ogni processo crea il proprio endpoint richiamando la primitiva che crea il socket e
successivamente:

  • il server si mette in attesa di ricevere i dati (mediante la primitiva receive() in Java e alla loro
    ricezione può inviare un risposta (mediante la primitiva send() i;
  • il client invia il pacchetto di dati al server (mediante la primitiva send() in Java e può mettersi
    in attesa di una risposta con le stesse primitive che ha utilizzato il server (cioè mediante la
    primitiva receive() in Java.
    Ovviamente al termine della comunicazione il socket viene chiuso.

Non hai trovato quello che cercavi?

Esplora altri argomenti nella Algor library o crea direttamente i tuoi materiali con l’AI.