Sei sulla pagina 1di 14

LIVELLO DI APPLICAZIONE

Un’applicazione di rete è un processo software che comunica attraverso la


rete e che gira su sistemi terminali diversi.
Es: posta elettronica, web, messaggistica, giochi via rete ecc...
Lo sviluppo è influenzato dalla tipologia di architettura utilizzata, le
principali sono: client-server, peer-to-peer, architetture ibride.

L’architettura client-server è caratterizzata da un processo server ed un


processo client.
Il server ha un ip fisso con un host sempre attivo, mentre il client
comunica con il server e può contattarlo in qualsiasi momento.

Un server farm è un cluster di host utilizzati per creare un potente server


virtuale, quindi attraverso la virtualizzazzione.
Es: Google, amazon…

L’architettura P2P è caratterizzata da coppie di host chiamate “peer” che


comunicano tra di loro senza la necessità di essere sempre attivi. In questa
architettura il server non è sempre attivo, inoltre è caratterizzata dalla
scalabilità.
Es: eMule.

Esempi di architetture ibride:


- Napster, che consiste nello scambio di file secondo la logica P2P.
caratterizzati dalla ricerca di file centralizzata che consiste nella
registrazione del contenuto dei peer presso un server centrale.
Successivamente i peer chiedono al server di localizzare il contenuto.
- Messaggistica istantanea, la chat tra due utenti è di tipo P2P, l’utente
registra il suo IP presso un server centrale quando è online, l’utente
contatta il server.

Un processo è un programma in esecuzione su di un host, i processi


comunicanti riguardano:
- Client side: client comincia la comunicazione
- Server side: server attente di essere contattato
Un processo invia o riceve messaggi a o da la sua socket.
Una socket è analoga ad una porta che serve per far transitare un
messaggio da un client ad un server. I messaggi passando da una socket
all’altra attraverso la rete.

La socket rappresente l’API(interfaccia di programmazione con cui le


applicazioni di rete vengono costruite).
Durante questo sviluppo, c’è un controllo totale sul livello applicativo
della socket ma poco controllo sul livello di trasporto.

Il protocollo a livello di trasporto ha il compito di consegnare messaggi


alla porta del processo ricevente.
I servizi necessari ad un’applicazione sono:
- Il trasferimento dati affidabile che garantisce la consegna dei dati in
maniera corretta e completa(alcune possono tollerare qualche perdita
come l’audio, altri no come il trasferimento di file).
- Ampiezza di banda che deve garantire, secondo il protocollo di
trasporto, almeno r bps.
- Temporizzazione (applicazioni real time).
- Sicurezza

Internet fornisce due protocolli di trasporto:


- Transmission Control Protocol (TCP), è un servizio affidabile.
- User Datagram Protocol (UDP), è un servizio inaffidabile.

L’host per inviare un messaggio deve conoscere l’IP dell’altro host ma non
solo, poiché ogni host ha un IP, ma su una macchina possono girare diversi
processi. Dato che l’IP identifica solo la macchina da raggiungere bisogna
conoscere la porta associata al processo. Così con la coppia IP + PORTA è
possibile identificare in maniera univoca il processo destinatario.

Un protocollo applicativo definisce:


- I tipi di messaggi scambiati
- La sintassi
- La semantica
- Le regole per determinare quando e come un processo invia e
risponde ai messagi
Inoltre i protocolli possono essere: di pubblico dominio e proprietari.
Il Web opera su richiesta, una pagina web è formata da un file HTML che
include diversi oggetti referenziati. Ogni oggetto è referenziato da un
URL.

Es URL: nome dell’host + nome del percorso.

L’Hypertext Transfer Protocol (HTTP) è il protocollo a livello di


applicazione del web, utilizza un modello client/server in cui un browser
(client) che richiede, riceve e visualizza gli oggetti del web, mentre il
server web invia oggetti in risposta ad una richiesta.

Il protocollo http usa TCP, questo avviene con il client che inizializza la
connessione TCP creando una socket con il server usando la porta 80(porta
standard). Il server accetta la connessione TCP dal client e
successivamente il client HTTP(il browser) e il server HTTP(server web)
si scambiano messaggi http.
E’ un protocollo senza stato poiché il sever non mantiene informazioni
sulle richieste, le richieste sono indipendenti.
Ci sono due tipi di connessioni http:
- Connessioni non persistenti: almeno un oggetto viene trasmesso su
una stessa connessione TCP
- Connessioni persistenti: più oggetti possono essere trasmessi su una
singola connessione TCP.

Il round-trip time (RTT) è il tempo impiegato da un piccolo pacchetto per


andare dal client al server e poi tornare di nuovo al client.
Il tempo di risposta totale equivale a 2RTT + tempo di trasmissione.
(Un RTT per inizializzare TCP, un altro RTT perché ritorni la richiesta http
di connessione e i primi byte della risposta http, e il tempo di trasmissione
del file).

Back-to-back: il client invia una nuova richiesta solo quando ha ricevuto la


risposta precedente ed è necessario un RTT per ogni oggetto referenziato.

Pipeling: il client invia una richiesta non appena incontra un oggetto


referenziato, senza attendere la risposta alla richiesta precedente. Un solo
RTT per gli oggetti referenziati.
I tipi di messaggi http sono:
- Messaggi di richiesta (scritto in testo ASCII)
- Messaggi di risposta (formato da una riga di stato, una sezione
header e un body)
La riga di stato riporta un codice a tre cifre catalogato nel seguente modo:

 ¤ 1xx: Informational (messaggi informativi)

 ¤ 2xx: Successfull (la richiesta è stata soddisfatta)

 ¤ 3xx: Redirection (non c'è risposta immediata, ma la richiesta è sensata e viene detto
come ottenere la risposta)

 ¤ 4xx: Client error (la richiesta non può essere soddisfatta perché sbagliata)

 ¤ 5xx: Server error (la richiesta non può essere soddisfatta per un problema interno
del server

Codici di risposta
 ̈ 200 OK. Il server ha fornito correttamente il contenuto nella sezione body.

 ̈ 301 Moved Permanently. La risorsa che abbiamo richiesto non è

raggiungibile perché è stata spostata in modo permanente.

 ̈ 302 Found. La risorsa è raggiungibile con un altro URI indicato nel header Location. Di norma i browser
eseguono la richiesta all'URI indicato in modo automatico senza interazione dell'utente.

 ̈ 400 Bad Request. La risorsa richiesta non è comprensibile al server.

 ̈ 404 Not Found. La risorsa richiesta non è stata trovata e non se ne conosce l'ubicazione. Di solito avviene
quando l'URI è stato indicato in modo incorretto, oppure è stato rimosso il contenuto dal server.

 ̈ 500 Internal Server Error. Il server non è in grado di rispondere alla richiesta per un suo problema
interno.

 ̈ 505 HTTP Version Not Supported. La versione di http non è supportata.

Contenuto della risposta


 ̈ Server. Indica il tipo e la versione del server. Può essere visto come l'equivalente
dell'header di richiesta User-Agent

 ̈ Content-Type. Indica il tipo di contenuto restituito.

Metodo GET: l’input arriva al server nel campo URL della riga di richiesta

Metodo POST: Una pagina web può permettere ad un utente di inserire


delle informazioni attraverso una form. Invece l’input arriva al server nel
corpo dell’entità.

Poi abbiamo altri metodi: HEAD, PUT, DELETE.

I cookie permettono di rimediare parzialmente alla mancanza di stato di


HTTP.

Per poterli usare abbiamo bisogno di:

- Una riga d’intestazione nel messaggio di risposta e una riga


d’intestazione nel messaggio di richiesta http

- Un file cookie mantenuto sul sistema terminale

- Un database sul sito

I cookie contengono: un identificativo utente, le azioni e le pagine visitate


dall’utente, lo stato della sessione dell’utente, delle raccomandazioni.

I cookie non contengono il nome o l’indirizzo e-mail dell’utente.

Es: quando un utente registrandosi ad un sito fornite i propri dati e il


numero della carta di credito, il sito associa l’ID cookie all’utente
registrato. Sono spesso criticati per via della privacy e permettono ai siti di
tracciare le abitudini degli utenti.
Una cache web o server proxy permetti di soddisfare le richieste del client
senza coinvolgere il server originale (fa da server intermedio).
L’utente configura il browser impostando un accesso al Web d’origine
tramite la cache. Il browser trasmette tutte le richieste http alla cache, se
l’oggetto è presente la carche lo fornisce, altrimenti la carche richiede
l’oggetto al server d’origine e lo inoltra il client successivamente. Quindi
la cache opera come un client ed un server. E’ tipicamente installata da un
ISP.

I ritardi vengono calcolati separatamente per ogni “pezzo” della rete e il


ritardo totale è dato salla somma di Internet publica, accesso, lan.

Il file transfer protocol (FTP) è utilizzato per il trasferimento file a/da un


host remoto, si basa sul modello client/server(client quando l’host remoto
inizia il trasferimento, server ricezione su host remoto).Utilizza due tipi di
connessione:

- Controllo ( richiesta dal client) è usata per lo scambio di


informazioni di controllo tra gli host, come le password,
l’identificativo utente o i comandi per inviare e ricevere file.

- Dati (richiesta dal server) è usata per il trasferimento di risorse.

FTP si dice fuori banda poiché invia le informazioni di controllo su una


connessione separata da quella dei dati. Per ogni nuovo file da trasferire
viene aperta una nuova connessione dati mente la connessione di controllo
resta aperta. Il server FTP mantiene lo stato della connessione tutto il
tempo.

Ci sono due modalità:

- Modalità attiva, in cui il client si connette al server mediante la porta


21 e comunica al server la porta(> 1024) sul quale è in ascolto per la
connessione dati, se il server accetta la connessione apre la
connessione dati tra la porta 20 del server ed una porta >1024 del
client(specificata all’apertura).
- Modalità passiva, in cui il client si connette alla porta 21 del server
da una porta non privilegiata e specifica la connessione
passiva(PASV). Il client apre una porta >1024 in caso di accettazione
della connessione e la comunica al client. Il client a sua volta apre
una porta >1024 per la connessione dati che viene avviata. Questo
permette di evitare eventuale restrizioni imposte dai firewall.

La posta elettronica è gestita attraverso:

- Agente utente, si occupa delle operazioni sui messaggi di posta


elettronica

- Server di posta, mantiene una casella di posta con i messaggi in


arrivo e gestisce la coda dei messaggi da trasmettere

- Protocollo Simple mail transfer protocol(SMTP), ha lo scoto di


inviare messaggi di posta elettronica tra server. In particolare usa
TCP per trasferire i messaggi dal client al server attraverso la porta
25. I comandi sono formati dal testo ASCII, mentre la risposta è data
da un codice di stato.

Le differenze tra http e smtp sono:

- http è definito pull protocol, quindi le informazioni sul server sono


scaricate dagli utenti. Ogni oggetto è incapsulato nel suo messaggio
di risposta.

- smtp è definito push protocol, il server spedisce le informazioni ad


un altro server. Più oggetti vengono trasmessi in un unico messaggio.
(es: allegati). Quindi non si può usare per scaricare la posta.

I protocolli POP3 e IMAP, permettono il trasferimento di messaggi da un


server ad un host.

POP3 permette ad un client di scaricare la posta da un server tramite porta,


questo avviene tramite la fase di autorizzazione in cui l’utente invia un
nome utente e password, la fase di transazione in cui l’utente recupera i
messaggi sul server, e la fase di aggiornamento che avviene dopo che il
client ha inviato il comando di uscita. Quindi non permette di tenere
cartelle su un server remoto quindi i messaggi scaricati non potranno
essere scaricati di nuovo.

IMAP, invece, permette di associare una cartella ad ogni messaggio


inviato, i messaggi possono essere spostati in cartelle creati dagli utenti
oppure in altre cartelle. Inoltre, offre la ricerca tra i messaggi.

Il Domain Name System(DNS) è un servizio internet per la risoluzione


dei nomi degli host in indirizzi IP. E’ caratterizzato da un database
distribuito implementato in una gerarchia di server DNS, e dal
protocollo a livello di applicazione che consegne agli host, ai router e ai
server DNS di comunicare per risolvere i nomi (tradurre i nomi in
indirizzi), per l’host aliasing (un host può avere più nomi), mail server
aliasing(riferimento mail server). DNS utilizza diversei server
organizzati in maniera gerarchica e divisi in tre classi:

- Server radice, esistono 13 server radice etichettati da A ad M e sono


organizzati come un cluster di server organizzati.

- Server top-level domain (TLD), si occupano dei domini.

- Server di competenza.

Il server DNS locale non appartiene alla gerarchia ma è fondamentale,


ogni ISP ne ha uno chiamato default name server. Quando un host si
connette ad un ISP ricevere un indirizzo IP e un DNS locale. Il server DNS
locale opera da proxy quando un host effettua una richiesta dns, quindi la
query viene inoltrata in una gerarchia di server DNS.

Le query si distinguono in:

- Ricorsive, affidano il compito di tradurre il nome al server DNS


contattato

- Iterative, il server risponde con il nome del server da contattare


Quando un DNS determina la mappatura la inserisce in cache e le
informazioni all’interno della cache spariscono dopo un certo periodo di
tempo, inoltre un server DNS locale memorizza nella cache gli indirizzi IP
dei server TLD, ignorando i server radice.

Un DNS memorizza i record di risorsa (RR), ogni record è formato da:


name, value, type TTL. Il significato di name e value dipendono da type,
mentre il TTL (time to life) determina quando una risorsa deve essere
rimossa dalla cache. Type assume:

- Type = A

- Type = NS

- Type = CNAME

- Type = MX

In una rete peer-to-peer ogni nodo che vuole condividere una risorsa si
chiama peer, e ogni risorsa può essere condivisa agli altri peer. E’ scalabile
ma un problema è come tenere traccia delle risorse disponibili.

Nelle reti peer-to-peer centralizzate si utilizzano dei server per tenere


traccia dei peer collegati e delle risorse che condividono (P2P ibride). I
server centrali sono vulnerabili agli attacchi e non sono scalabili.

In una P2P decentralizzata i peer si organizzano in una overlay network


(una rete logica sopra la rete fisica). Due approcci:

- Reti non strutturate, le connessioni tra i peer sono casuali e un peer


chiede una risorsa inviando in flooding la query ( ogni nodo invia la
richiesta ai suoi vicini)

- Reti strutturate, i peer e le connessioni sono organizzati usando un


insieme di regole precise.

Torrent: la condivisione del file avviene attraverso un processo chiamato


torrent, ogni peer che partecipa alla connessione preleva delle parti del file
(chunk) e condivide i chung ad altri peer. L’insieme dei peer che partecipa
alla condivisione è chiamata swarm (sciame). Il tracker invece tiene traccia
delle operazioni dello sciame. Un peer per scaricare un file preleva il file
torrent contenete informazioni sui chunk del file e sull’indirizzo del tracker
che gestisce il torrent.

PROGRAMMAZIONE DELLE SOCKET


Socket API: utilizzano il paradigma client/server quindi due entità dove
una fa la richiesta all’altra e offronto due tipologie di servizi di trasporto:

- Datagramma inaffidabile

- Affidabile, orientato ai byte

Una socket è un’intergaccia di un host locale che viene creata dalle


applicazioni e controllata dal S.O. in cui processo puo inviare e ricevere
messaggi.

Quindi una socket è una porta tra il processo di un’applicazione e il


protocollo di trasporto end-to-end (UDP o TCP).

Il servizio TCP garantisce un trasferimento di byte affidabile, quindi il


flusso di byte arriva al destinatario senza errori e nell’ordine giusto, ed è
indispensabile come ad esempio nelle situazioni per la gestione dei
pagamenti online.

Esempio di utilizzo di un servizio UDP: il DNS è un’applicazione che per


il livello di trasporto usa UDP, non è affidabile poiché i dati da spostare
sono pochi e quindi in caso di ricezione inconsistente il costo risulta basso
per richiederli nuovamente.

La programmazione delle socket TCP prevede:

- Lato server: il processo server deve essere sempre in esecuzione,


inoltre ha creato precedentemente una sockert che da il benvenuto al
contatto con il client, questa è chiamata “welcoming socket” ed è
sempre aperta.

- Lato client: Quando il client effettua una richiesta, la welcoming


socket comunica al client come connettersi alla connection socket,
che è una porta che viene creata da server TCP per consentire le
comunicazioni.

Un flusso(stream) è una sequenza di caratteri che fluisce da/verso un


processo. Si distingue in:

- Flusso d’ingresso: origine di dati in input per il processo.

- Flusso d’uscita: è un’uscita di dati per il processo.

La programmazione delle socket UDP prevede:

In questo caso non c’è connessione tra client e server, assenza di


handshaking e il mittente allega a ogni pacchetto l’indirizzo IP e la
porta di destinazione, poi il server dovrà estrarre questi dati dal
pacchetto ricevuto. UDP non è affidabile poiché i dati potrebbero
andare persi oppure arrivare in un ordine diverso da quelli d’invio.
Inoltre non c’è una welcoming socket.

Packet sniffer:

Lo sniffing è un’attività di intercettazione passiva dei dati che


transitanto una rete, per scopi leciti come l’individuazione di problemi e
per scopi illeciti come l’intercettazione di dati sensibili.

Il packet sniffer cattura i messaggi inviati o ricevuti dal proprio


computer e ne memorizza o visualizza i contenuti (packet analyzer), e
non invia mai i pacchetti di per sé, pertanto è passivo. Il packet analyzer
opera a livello applicazione e analizza i dettagli del protocollo a livello
applicativo. Si occupa di visuallizzare i contenuti di tutti i campi
presenti in un messaggio, pertanto spacchetta fino ad arrivare al livello
applicazione, che è la parte che sa leggere. Dopo aver identificato il
datagramma IP, estra da esso il segmento TCP, a sua volta ne estrae il
messaggio http che poi andrà ad analizzare.

Il comando ipconfig permette ti mostrare tutti i parametri associati alla


connessione TCP/IP
Ping invece è utilizzato per verificare lo stato della connessione del
proprio host verso una destinazione e indicando se è stata restituita una
risposta dalla destinazione e il tempo di ricezione.

Tracert può essere utilizzato per rilevare il percorso seguito da un


pacchetto IP per giungere a destinazione. Quando vengono inviati
pacchetti, vengono utilizzati dei valori TTL che ad ogni inoltro
diminuiscono di 1. Quando il TTL di un pacchetto raggiunge lo zero il
pacchetto si ferma ed è utile per capire in quale punto della rete il
pacchetto si è interrotto.

Netstat permette di vedere lo stato delle connessioni instaurate sul


computer locale.

Nslookup consente di effettuare delle query ad un server DNS.

LIVELLO DI TRASPORTO
I servizi e il protocollo di trasporto forniscono la comunicazione logica tra
processi applicativi di host differenti. Converte i messaggi ricevuti dal
livello di applicazione in segmenti a livello di trasporto. Il loro obiettivo è
quello di estendere il servizio di consegna a livello di rete (IP) tra sistemi
terminali a quello di consegna tra processi in esecuzione su sistemi
terminali. Ciò avviene in maniera affidabile con TCP, mentre in maniera
inaffidabile con UDP.

Demultiplexing consiste in consegnare i segmenti ricevuti alla socket


appropriata. L’host riceve i datagrammi IP provenienti dal livello rete,
ogni datagramma trasporta 1 segmento. Ogni segmento ha un numero di
porta di origine e uno di destinazione e l’host utilizzera questi dati per
inviare il segmento alla socket. Invece nel caso di demultiplexing senza
connessione (UDP), la socket udp viene identificata con IP e numero porta
di destinazione. Nel caso di demultiplexing orientato alla connessione
(TCP) la socket viene identificata da 4 paramentri: indirizzo ip e numero di
porta di origine, indirizzo ip e numero di porta di destinazione.

Multiplexting consiste nel raccogliere i dati da vare socket e incapsularli


con l’intestazione.

UDP è un protocollo di trasporto che offre un servizio di consegna a


massimo sforzo, cioè fa di tutto per funzionare al meglio ma non da
garanzie sulla consegna dei segmenti. ES: un router ha il buffer pieno. Non
c’è handshaking e ogni segmento è gestito indipendentemente. Viene usato
perché non introduce ritardo nello stabilire una connessione, non ci sono
buffer di ricezione e di invio, quindi ha un funzionamento più snello con
segmenti corti. Ha anche altri impieghi, come nel caso di DNS in cui non
ci interessa l’affidabilità poiché posso ri effettuare la richiesta, oppure, nel
caso di SNMP per un applicazione diagnostica. Se pretendiamo un
trasferimento affidabile con UDP bisogna aggiungere affidabilità a livello
di applicazione.

RDT 1.0: Trasferimento affidabile su canale affidabile.

Il canale sottostante è perfettamente affidabile, non ci sono errori nei bit


davanti a interferenze elettromagnetiche o perdite di pacchetti. La presenza
di un automa distinto per mittente e destinatario dove leggono e inviano
dati nel canale sottostante.

RDT 2.0: Canale con errori nei bit

///////////////////

Il protocollo di trasporto TCP è orientato alla connessione, in questo caso


la connessione non è un circuito end-to-end poiché è una comunicazione
virtuale tra gli host, i dispositivi intermedi non sanno nulla della
connessione.
Il TCP offre un servizio full-duplex, quindi il flusso dei dati viaggia
contemporaneamente in entrambe le direzioni. I segmenti possono avere al
massimo una certa dimensione per questo MSS (maximum segment size).
Questo valore viene scelto in base all’unità trasmissiva massima (MTU) e
viene scelto il valore di MSS in modo da non superare MTU.

Il numero di sequenza indica il primo byte che si trasmette (primo


pacchetto), invece il numero di riscontro indica il numero di sequenza del
prossimo byte che ci si aspetta. Il primo numero di sequenza non è zero ma
è scelto a caso. Mentre ACK indica il numero di sequenza che mi aspetto
di ricevere.

TCP offre un servizio di trasporto dati affidabile. Poiché la gestione del


timer è costosa utilizza un solo timer di ritrasmissione. Gestisce tre eventi
realtivi alla trasmissione e alla ritrasmissione:

- Dati provenienti dall’applicazione

- Timeout (timer unico, simile a GBN)

- Ricezione di ACK

Potrebbero piacerti anche