Sei sulla pagina 1di 59

RETI DI CALCOLATORI

➢ INDICE

Capitolo 1 DEFINIZIONI E NOMENCLATURA;

Capitolo 2 LIVELLO APPLICAZIONE;

Capitolo 3 LIVELLO TRASPORTO;

Capitolo 4 LIVELLO RETE;

Capitolo 5 LIVELLO DATA LINK;

Capitolo 6 WIRELESS E RETI MOBILI.

Fonti: James F. Kurose, Keith W. Ross. Reti di calcolatori ed Internet. Un


approccio top-down;

Slide.
Capitolo1 : DEFINIZIONI E NOMENCLATURA
Una rete di calcolatori è un insieme di dispositivi hardware e
software collegati l'uno con l'altro da appositi canali di
comunicazione, che permette il passaggio da un utente all'altro
di risorse, informazioni e dati in grado di essere pubblicati e
condivisi.
Sia i servizi che le comunicazioni sono divisibili in 4 modalità:
-comunicazione sincrona: il mittente e il destinatario sono attivi
nello stesso momento;
-comunicazione asincrona:l’invio e la ricezione hanno luogo in
momenti diversi;
-comunicazione broadcast (o multicast):una singola fonte e
molti ascoltatori;
-comunicazione unicast( point-to-point): un singolo mittente e
un singolo ascoltatore.
Internet è una rete di calcolatori che interconnette milioni di
dispositivi detti HOSTS(ospiti) o AND SYSTEM (sistemi periferici).E’ un’infrastruttura che fornisce servizi alle
applicazioni come Web, posta elettronica, messaggistica istantanea etc. Queste applicazioni sono dette
distribuite perché coinvolgono più sistemi periferici che si scambiano reciprocamente dati.
Un sistema distribuito è un sistema che gira su una collezione di macchine che non hanno memoria
condivisa,e che tuttavia appaiono agli utenti come un singolo calcolatore.
Quindi “sistema distribuito” non è sinonimo di “ rete di calcolatori” in quanto quest’ultima permette l’accesso
diretto alle risorse di un altro calcolatore, la prima, invece, non accede direttamente ad un altro calcolatore
ma ad un unico super-calcolatore. Inizialmente l’approccio d’uso era quello di Sistemi centralizzati, cioè
sistemi in un cui un unico calcolatore (Mainframe) è quello in grado di operare in maniera indipendente e
tutti gli altri terminali , ad esso collegati, in grado di ricevere e stampare a video caratteri. Con l’invenzione
della rete LAN, l’approccio centralizzato è stato del tutto abolito.
Una rete LAN (Local Area Network) è un insieme di calcolatori indipendenti interconnessi mediante una rete
di comunicazione ,estendibile anche a dispositivi periferici condivisi, che copre un'area limitata.
Esistono anche altri tipi di rete :PAN, MAN, WAN. L’ordine con cui sono state elencate è crescente per
dimensione della rete e decrescente per la capacità di banda; si passa da rete domestica->pubblica-
>urbana-> interurbana.
Burocraticamente gli standard di Internet vengono sviluppati dall’ INTERNET ENGINEERING TASK FORCE(
I.E.T.F). I documenti sugli standard si dicono REQUEST FOR COMMENT (RFC) e sono disponibili online.
Gli Host e i Sistemi periferici ( che si trovano ai bordi della rete)si dividono in:
-Client se richiedono servizi;
-Server se erogano dei servizi. Un insieme di Server è detto Data center.
Quando un host invia dati ad un altro host , il dato viene suddiviso in sottoparti (payload)e aggiunto con una
intestazione (header). Nel complesso le sottoparti e l’intestazione rappresentano il PACCHETTO. Il percorso
seguito dal pacchetto è chiamato PATH. Gli Host sono connessi tra loro tramite una rete di collegamenti e
commutatori di pacchetti.
I commutatori di pacchetti prendono un pacchetto che arriva da uno dei collegamenti in ingresso e lo
ritrasmettono in quello di uscita. Esistono due tipi di commutatori di pacchetti:
-I router .
-Switch o commutatori a livello di collegamento.
Il PROTOCOLLO è un insieme di regole che definisce il formato e l’ordine con cui i messaggi devono
essere scambiati tra due o più entità comunicanti.
Gli ISP (internet service provider) forniscono agli host accesso a Internet. Esempi di ISP commerciali sono
Telecom, Infostrada etc. In sostanza sono un insieme di Router e Switch . Rappresentano la spina dorsale
della rete ( in inglese Backbone).
Il primo Router che si incontra sul percorso partendo dal sistema d’origine è chiamato EDGE ROUTER (router
di bordo) . Una rete LAN collega i sistemi periferici al router di bordo.
Per spostare i dati nella rete di collegamenti e commutatori esistono due tipi di approcci fondamentali:
1)Commutazione di circuito;
2)Commutazione di pacchetto.

2
Nelle reti a commutazione di circuiti la capacità trasmissiva all’interno della rete è assegnata per
ciascuna “chiamata” . I commutatori, sul percorso tra mittente e destinatario, mantengono lo stato della
connessione per tutta la durata della comunicazione. Nel gergo questa connessione è detta CIRCUITO.
Quando la rete stabilisce un circuito, con esso stabilisce
anche una velocità di trasmissione costante nei
collegamenti di reti per la durata della connessione.
Ricorda che la velocità di trasmissione di un dato si misura in bit/s (bps). Figura 1
Tra i due Host che vogliono comunicare si stabilisce una
connessione ENT-TO END(punto a punto)

La figura 2 mostra una rete a commutazione di circuito in cui i


quattro commutatori sono interconnessi tramite quattro
collegamenti. Ciascuno di questi ultimi dispone di quattro
circuiti, in modo da poter supportare quattro
Figura 2 connessioni simultanee. Per tale
motivo, ogni Figura 3
collegamento
utilizzato dalla
connessione punto a
1
punto ottiene della
4
capacità trasmissiva totale durante l’intera trasmissione. Un circuito
all'interno di un collegamento può essere implementato tramite :
-FDM multiplexing a divisione di frequenza ;
-TDM multiplexing a divisione di tempo.

Con FDM, lo spettro di frequenza di un


collegamento viene suddiviso tra le connessioni stabilite tramite il collegamento.
Il collegamento dedica una banda di frequenza a ciascuna connessione per la
durata della connessione stessa. La larghezza della banda viene detta
ampiezza di banda.
Per un collegamento TDM il tempo viene suddiviso in frame (intervalli) di durata
fissa, a loro volta ripartiti in un numero fisso di slot (porzioni) temporali. Quando
la rete stabilisce una connessione attraverso un collegamento, le dedica uno
slot di tempo in ogni frame. Tali slot sono dedicati unicamente a quella
connessione, con uno slot temporale disponibile in ciascun frame alla
trasmissione dei dati di connessione.
Un esempio di rete di commutazione di circuito è la rete telefonica.

Nelle reti a commutazione di pacchetti (packet switching)


I pacchetti vengono trasmessi su ciascun collegamento a una velocità pari alla velocità totale di trasmissione
del collegamento stesso. Quindi, se un sistema periferico o un commutatore inviano un pacchetto di L bit su
un canale con velocità di R bps, il tempo di trasmissione risulta pari a L/R secondi. La maggior parte dei
commutatori di pacchetto utilizza la trasmissione store-and-forward. Ciò significa che il commutatore deve
ricevere l' intero pacchetto prima di potere cominciare a trasmettere sul collegamento in uscita il primo bit;
questo fa sì che si creano delle code di pacchetti (buffer di output) che possono causarne la perdita. Si
consideri ora il caso generale della trasmissione di un pacchetto dalla sorgente alla destinazione su un
percorso consistente di N collegamenti ognuno con velocità di trasmissione R (quindi vi sono N - 1 router tra
la sorgente e il destinatario). Applicando lo stesso ragionamento si trova che il ritardo da un capo all' altro
𝐿
(end-to- end) è: 𝑑𝑒𝑛𝑑−𝑡𝑜−𝑒𝑛𝑑 =N .
𝑅
Ciascun flusso di dati è diviso in pacchetti,cioè in entità composte da un’intestazione (header), utilizzata ai
fini dell’identificazione e gestione, i dati veri e propri (payload)
Come abbiamo già detto ci sarà traffico di pacchetti che causerà ritardo, ma non è l’unico motivo. I ritardi si
suddividono nelle seguenti categorie:
RITARDO DI ELABORAZIONE:tempo di lettura dell header per indirizzare il pacchetto;
RITARDO DI TRASMISSIONE: lughezza bit del pacchetto/ velocità del canale in bps;
RITARDO DI ACCODAMENTO:dipende dal #pacchetti precedentementi arrivati;
RITARDO DI PROPAGAZIONE:distanza tra 2 router/velocità di propagazione nel collegamento.
Il ritardo totale sarà : 𝑑𝑛𝑜𝑑𝑜 = 𝑑𝑒𝑙𝑎𝑏 + 𝑑𝑡𝑟𝑎𝑠𝑚 + 𝑑𝑎𝑐𝑐𝑜𝑑 + 𝑑𝑝𝑟𝑜𝑝𝑎𝑔

3
Datagrammi Vs. Circuiti virtuali

Esistono due modi per instradare un pacchetto per farlo arrivare a destinazione:
Figura 4
1)Reti a datagrammi: Ogni nodo che riceve un pacchetto decide in maniera
indipendente a quale altro nodo inoltrarlo, sulla
base dell’indirizzo destinazione contenuto nel
pacchetto, indipendente rispetto agli altri nodi e
agli altri pacchetti passanti per lo stesso nodo.
Pacchetti tra la stessa coppia sorgente-
destinazione possono seguire percorsi .Internet
fa parte di questa categoria di Reti.
2)Reti a circuiti virtuali (VC):Ogni pacchetto
contiene il numero del circuito virtuale. Il circuito
virtuale è stabilito prima della trasmissione dei
dati. I nodi devono conservare informazioni sui
circuiti virtuali che li attraversano

Parametri di qualità nelle reti a pacchetto

Traughput: quantità di dati che può essere trasferita tra due sistemi periferici [b/s];
Ritardo nella consegna dei pacchetti [s];
Goodput: quantità di bit effettivamente giunta a destinazione [b/s];
Loss-Rate: probabilità che un pacchetto non venga consegnato a destinazione;
Jitter: Variazione temporale del ritardo.

Commutazione di circuito Vs. Commutazione di pacchetto

L’approccio a circuito provoca un dispendio di tempo in quanto prealloca l’uso dei collegamenti
indipendentemente alla richiesta e possono esserci collegamenti non utilizzati.
L’altro approccio, invece, non è adatto ai servizi a tempo reale a causa dei suoi ritardi. Tuttavia c’è una
migliore condivisione della larghezza di banda ed è più efficiente ed economico. Internet utilizza un
approccio di commutazione di pacchetto.

Il traceroute è un comando disponibile all’interno dei terminali Windows, Mac e Linux, e serve per misurare,
in una connessione tra due hosts, i tempi di percorrenza dei pacchetti trasmessi ed il dettaglio del
percorso attraversato dagli stessi. Durante il loro percorso verso la destinazione, questi pacchetti passano
attraverso una serie di router. Quando un router riceve uno di questi pacchetti speciali, invia un breve
messaggio che torna all'origine. Il messaggio contiene il nome e l'indirizzo del router. In realtà Traceroute
ripete l' esperimento appena descritto tre volte. Se l' origine riceve meno di tre messaggi da ogni dato router
(per la perdita di pacchetti nella rete),Traceroute pone un asterisco subito dopo il numero del router e riporta
meno di tre tempi di andata e ritorno per tale router. Vediamo quindi nella pratica come si può agire in questi
termini ( su Windows Vista/7/8):

Accedere al Prompt dei comandi come Amministratore; Digitare tracert [nome sito] oppure per salvare il
risultato su file: tracert [nome sito] > C:/output.txt
Esempio : Nel percorso seguito
abbiamo 10 router tra la sorgente
e la destinazione(facebook). La
prima riga rappresenta il
percorso per arrivare al modem
di casa, fra i 3 tentativi il ritardo di
andata è di 3ms. I ritardi
comprendono anche quelli dovuti
al traffico di pacchetti i quali
variano nel tempo; alla riga 6 il
ritardo max è maggiore di 1ms ,
successivamente alla riga 7 è di
26 ms , il motivo potrebbe essere
proprio una coda di pacchetti
4
smaltiti.

Stratificazione dei protocolli

I protocolli di rete sono organizzati in livelli o strati (layer). Ancora una volta siamo interessati ai servizi offerti
da un livello a quello superiore. La stratificazione dei protocolli presenta vantaggi concettuali e strutturali .
Fornisce un modo strutturato per trattare i componenti dei sistemi. La modularità rende più facile aggiornare
la componentistica. Un eventuale svantaggio è la possibilità che un livello duplichi le funzionalità di quello
inferiore. Un secondo potenziale svantaggio è che la funzionalità di un livello possa richiedere informazioni
presenti in livelli diversi. I protocolli dei vari livelli sono detti pila di protocolli (protocol stack). La pila di
protocolli di Internet (Figura a.) consiste di cinque livelli: fisico, collegamento, rete, trasporto e applicazione.
Esiste anche l’organizzazione OSI . Negli anni ' 70, l'International Organization for Standardization (ISO)
propose che le reti di calcolatori fossero organizzate in sette livelli, chiamati modello Open Systems
Interconnection(OSI). I sette livelli del modello di riferimento OSI(
Figura b) sono: applicazione, presentazione, sessione, trasporto, Figura 5
rete, collegamento e fisico. Le funzionalità di cinque di questi livelli
sono più o meno le stesse degli omonimi della controparte
Internet, quindi consideriamo i due livelli nuovi: il livello di
presentazione e quello di sessione. Il ruolo del livello di
presentazione è fornire servizi che consentono ad applicazioni
che vogliono comunicare
di interpretare il significato dei dati scambiati. Questi servizi
comprendono la compressione e la cifratura dei dati come pure la
descrizione del formato interno nel quale sono
rappresentati/memorizzati, questo perché i formati potrebbero
essere diversi da un computer a un altro. Il livello di sessione
fornisce la delimitazione e la sincronizzazione dello scambio di
dati.
Lo stack utilizzato da internet è anche detto STACK TCP/IP perché TCP è il protocollo utilizzato a livello di
trasporto e IP a livello di rete.

INCAPSULAMENTO
Esaminiamo il percorso fisico seguito dai dati scendendo lungo la pila di protocolli del lato CLIENT(host1),
risalendo e scendendo lungo le pile di protocolli dei commutatori e dei router che intervengono a livello di
collegamento e, infine, risalendo la pila nel lato SERVER (host2). Alla base di questa stratificazione c’è il
concetto di incapsulamento. Presso un host client, un messaggio a livello di applicazione “M” viene passato
a livello di trasporto. Tra i livello c’è un’interfaccia separatrice. Questo livello prende il messaggio e gli
concatena informazioni aggiuntive a livello di trasporto,” H”,che saranno utilizzate dalla parte server del
livello di trasporto. Il messaggio a livello di applicazione e le informazioni di intestazione a livello di trasporto
costituiscono il segmento a livello di trasporto che incapsula il messaggio a livello di applicazione.
Il livello di trasporto, quindi, passa il segmento al livello di rete, che aggiunge informazioni di intestazione
proprie del livello di rete (H), quali gli indirizzi dei sistemi periferici di sorgente e di destinazione, andando
così a creare un datagramma a livello di rete. A questo punto, il datagramma viene passato al livello di
collegamento, il quale aggiunge le proprie informazioni di intestazione creando un frame a livello di
collegamento .Quindi,a ciascun livello, il pacchetto ha due tipi di campi: quello di intestazione e quello di
payload . Il payload è tipicamente un pacchetto proveniente dal livello superiore.

Capitolo 2 : LIVELLO APPLICAZIONE


Il livello applicazione si occupa della comunicazione tra processi in reti.
Le API (Application programming interface) sono un insieme di regole che specificano come la parte di
software eseguita dal lato mittente deve essere eseguita sulla parte di software del lato destinatario.
Definiscono l’interfaccia tra il livello applicativo e di trasporto, chiamata socket .

Le architetture si dividono in due categorie:


5
CLIENT-SERVER: vi è un host sempre attivo
(server) che risponde alle richieste di servizio
di molti altri host (client);
PEER TO PEER :comunicazione diretta tra
coppie arbitrarie di host chiamati “peer”,
collegati in modo intermittente. E’
un’architettura scalabile che ,però, ha dei limiti
(sicurezza, incentivazione,bisogno di maggiore
grandezza di banda).

Vediamo nel dettaglio le architetture CLIENT-


SERVER.

I protocolli utilizzati nel livello sottostante (di trasporto ) possono essere TCP oppure UDP. Verranno
menzionati anche in questo livello perché la scelta del protocollo sottostante condiziona il comportamento
del livello di applicazione. Il protocollo TCP presenta un funzionamento “handshaking”, cioè client e server si
scambiano informazioni di controllo a livello di trasporto prima che i messaggi a livello di applicazione
cominciano a fluire . Utilizza una connessione full- duplex(scambio contemporaneo di messaggi). Offre un
servizio affidabile e controllabile in congestione. Il protocollo UDP non presenta l’handshaking ma è più
veloce, in quanto non si accerta e non assicura l’affidabilità della connessione. E’ un protocollo minimalista e
leggero.
Livello di applicazione e di trasporto comunicano attraverso i “numeri di porta” della socket .

Esaminiamo le seguenti applicazioni di rete con i corrispettivi protocolli :


- WEB, protocollo http;
- POSTA ELETTRONICA, protocollo SMTP;
- DNS, protocolli POP3, IMAP, http;
- FTP.

Web & http

Il “World Wide Web” o Web nasce negli anni ’90 e diventa la prima applicazione di internet che attira il
pubblico. Il protocollo utilizzato è http (hypertext transfer protocol). In generale un protocollo a livello di
applicazione definisce la struttura dei messaggi e la modalità con cui client e server se li scambiano.
Chiameremo in questo contesto BROWSER WEB il client e WEB SERVER il server. Http è basato su un
protocollo a livello di trasporto TCP, in quanto gli offre un servizio di affidabilità. Negli anni ci sono state varie
versione di http ,in particolare http 1.0 e http 1.1 . Esamineremo tutte le trasmissioni in un diagramma fatto
come in figura 6. Il tempo va dall’alto verso il basso. Il passaggio dei pacchetti dal lato client e server è
indicato con una freccia e il RTT, o Round Trip Time, rappresenta il tempo impiegato da un piccolo
pacchetto per viaggiare dal client al server e poi tornare al client. Per effettuare la richiesta di un file dal
server sicuramente ci saranno 3 frecce esclusa quella del file, questo perché TCP effettua per prima cosa
l’handshaking : il browser inizializza una connessione TCP con il Web server, il browser invia una richiesta al
web server e questo la risponde per confermare, il client infine risponde per la conferma della conferma.
Questo tipo di handshaking è detto a tre vie. Il file ora può essere inviato al browser.

Con http 1.0 dopo la fase di handshaking e di invio del file, la connessione viene chiusa e ogni qual volta
bisogna richiedere o inviare un file, bisogna instaurare una nuova connessione. Questo tipo di connessione
è detta NON PERSISTETE. Inoltre ogni volta che c’è una nuova connessione ci saranno 2 RTT.
http 1.1 ,invece, si basa su connessioni PERSISTENTI: sulla stessa connessione il Web server analizza tutte
le richieste e le serve. Il Browser riceve la pagina iniziale e invia subito tutte le altre richieste. Si hanno meno
RTT ed un solo slow-start(inizializzazione).
Esiste anche una versione di http 1.1 pipelining: le richieste
possono essere effettuate una di seguito all' altra senza aspettare
le risposte.

IMPLEMENTAZIONE http:
http è un protocollo testuale. I messaggi sono costituiti da sequenze
di byte,ogni byte identifica un carattere secondo la tabella ASCII. Il
payload dei messaggi può essere comunque anche in formato

6
Figura 6
binario. Lo scambio dei messaggi (richiesta) può avvenire con 4 metodi :GET,HEAD,POST & PUT.

Il metodo GET serve per la richiesta , viene attivato facendo click su un link ipertestuale di un documento
HTML, o specificando un URL nell’apposito campo di un browser. Un URL HTTP ha la seguente sintassi
:http://host[:port]/path[#fragment][?query]
L’ Host identifica il server, la porta è opzionale (per il web è usata 80),il Path identifica la risorsa sul
server,il#fragment identifica un punto preciso all’interno di un oggetto e la ?query è usata per passare
informazioni dal client al server (come i dati inseriti nei campi di una form)
Es.: http://www.unina2.it/immatricolazioni.htm#ingegneria[?Mario]&[?Rossi].
Il metodo GET può essere : assoluto( la risorsa viene richiesta senza altre specificazioni ,condizionale
(si richiede la risorsa se è soddisfatto un criterio indicato negli header ) o parziale (si richiede una sottoparte
di una risorsa memorizzata).
Implementazione
{GET/http/ VERSIONE\ r\ n
Host: __URL______\r \ n
User-Agent : Browser utilizzato (Chrome, Mozilla etc.) \ r\ n
Accept-Language : lingua\ r\ n
Accept Encoding: tipi di file accettabili ( gif, zip etc) \ r\ n
Connection: close se dopo la risposta chiudi la connessione, open se dopo la risposta lasci la connessione
. aperta \ r\ n
[Entyty body vuoto per questo metodo ] }
N.B. ogni riga è seguita da un ritorno a capo e un carattere di una nuova linea, la 1° riga è detta request-line
, le successive header-lines.
Il metodo HEAD è simile al metodo GET, ma il server deve rispondere soltanto con gli header relativi, senza
il corpo ( viene utilizzato quando si chiedono informazioni al web server ).

Il metodo POST serve per trasmettere delle informazioni dal client al server, ma senza la creazione di una
nuova risorsa ( viene utilizzato per riempiere i form) . E’ possibile implementare il metodo POST con il
metodo GET mettendo nell’URL i campi da inviare nel seguente modo :
URL?campo1=_ & ?campo2=_ .

Il metodo PUT consente di inviare un oggetto ad una directory (percorso specifico) su un Web Server(
esempio upload di un file).

Il metodo DELETE consente la cancellazione di un oggetto su un web server ( raramente utilizzato).

Il formato generale dei messaggi di risposta di http è il seguente :


Messaggio di risposta http
{
HTTP / versione status code
Connection : close or open
Date : _________________________
Server : _______________________
Last - Modified : ___________________
Content - Length : lunghezza contenuto
Content - Type : tipi di contenuto
Cache-Control: il tipo di meccanismo di caching richiesto osuggerito per la risorsa
(___contenuto ______)}

Nel messaggio di risposta, diversamente dai metodi di richiesta, compare la linea “last-modified” che indica
l’ultima modifica dell’oggetto nella cache , sia nel lato client locale, sia in alcuni server in rete e serve per
decidere se la copia posseduta è ancora valida o meno
Lo status code è un numero di tre cifre, di cui la prima indica la classe della risposta, e le altre due la
risposta specifica. Esistono le seguenti classi:
-1xx: Informational : una risposta temporanea alla richiesta, durante il suo svolgimento;
-2xx: Successful : il server ha ricevuto, capito e accettato la richiesta (ESEMPIO 200 OK);
-3xx: Redirection : il server ha ricevuto e capito la richiesta, ma sono necessarie altre azioni da parte del
client per portare a termine la richiesta;
-4xx: Client error : la richiesta del client non può essere soddisfatta per un errore da parte del client (errore
sintattico o richiesta non autorizzata) , 400 bad requenst, 404 Not Found;

7
-5xx: Server error : la richiesta può anche essere corretta, ma il server non è in grado di soddisfare la
richiesta per un problema interno (ESEMPIO 505 http version, non supporta la versione).
Per una prova con Telnet consultare la guida al seguente link :
http://www.brescianet.com/appunti/sistemi/http_protocol.htm

COOKIE
http è un protocollo stateless (apolide), cioè è senza memoria e non tiene conto degli avvenimenti
precedenti. L’unico modo per avere traccia del passato sono i Cookie che consentono ai server di tenere
memoria degli utenti. Sono usati per uso commerciale, soprattutto nell’ambito dello shopping online. La
maggior parte dei siti web richiedono necessariamente la capacità del browser di accettare i cookie.
Un cookie è formato da quattro componenti:
1)Riga di intestazione della responde http;
2)Riga di intestazione della request ad http;
3)File mantenuto sul sistema gestito dal Browser;
4)Database sul sito.

Vediamo il funzionamento attraverso un esempio (figura 7) :

Un client si collega ad Amazon da un browser e precedentemente visita Ebay. Quando giunge la richiesta al
web server di Amazon, il sito crea un identificativo unico e una voce nel proprio database, indicizzata dal
numero identificativo.
A questo punto il server risponde al browser del client, includendo nella risposta HTTP l' intestazione
Set - cookie che contiene il numero identificativo( per esempio Set - cookie: 1678).
Quando il browser del client riceve il messaggio di risposta HTTP vede l 'intestazione Set - cookie e
aggiunge una riga al file dei cookie che gestisce. Questa riga include il nome dell'host del server e il numero
identificativo nell' intestazione Set – cookie. Si noti che il file di cookie contiene già una voce per eBay.
Mentre il Client continua a navigare nel sito di Amazon, ogni volta che richiede una pagina web, il suo
browser consulta il suo file dei cookie, estrae il suo numero identificativo per il sito e pone nella richiesta
HTTP una riga di intestazione del cookie che include tale numero. Più nello specifico, ciascuna delle sue
richieste HTTP al server di Amazon include la riga di intestazione: Cookie : 1678 (esempio). In tal modo è
possibile monitorare l' attività del client nel sito.

Figura 7

8
PROXY SERVER O WEB CACHE:

Il Proxy Server è un’entità di rete che sostituisce il Web Server. Ha


una propria cache (memoria) in cui conserva copie di oggetti
recentemente richiesti. Può assumere ruolo di Client o ruolo di
Server: fa da server se ha a disposizione l’oggetto richiesto, fa da
client se chiede al web server se l’oggetto in questione è stato
modificato e quindi quello che lui possiede è ormai datato. Il vantaggio più grande è quello di ridurre i tempi
di risposta, soprattutto se l’ampiezza di banda ( collo di bottiglia tra Client e Server) è molto più piccola
rispetto l’ampiezza di banda minima tra Client e Proxy. Inoltre i Proxy possono ridurre il traffico sul
collegamento di accesso a internet senza aumentare l’ampiezza di banda e ridurre, così, i costi.
Generalmente un Proxy server è acquistato e installato da un ISP. Fa uso del metodo GET CONDIZIONALE
per verificare se l’ oggetto richiesto è ormai troppo vecchio.

{GET / URL / VERSIONE http

HOST:___________

If- modified –since :__

Risposta: se “if-modified-since “= “last-modified” allora non inviare l’oggetto aggiornato, altrimenti invialo.}

Allora il web server invia un messaggio di risposta al proxy:

{HTT P / 1.1 304 Not Modified

Date :__________

Serv r : ____________

( corpo vuoto )}

Si dice che http invia le proprie informazioni in controllo in banda, cioè la riga di intestazione di richiesta e
quella di risposta sono sulla stessa connessione TCP.
Figura 8
FTP

File Transfer Protocol (FTP) è un protocollo attraverso il quale è possibile


trasferire uno o più files di qualsiasi tipo tra due macchine . FTP e http sono due
protocolli per il trasferimento dei file. Entrambi utilizzano TCP ma si differenziano
in quanto FTP lavora utilizzando due connessioni: una dati e una controllo. La
prima viene usata per inviare informazioni di controllo tra gli host, quali
identificativo dell' utente, password, comandi per cambiare directory remota e
comandi per inviare e ricevere file. La connessione dati viene utilizzata per il vero
e proprio invio dei file. Dato che FTP usa una connessione di controllo separata,
si dice che tale protocollo invii le proprie informazioni di controllo fuori banda (out-
of-band), a differenza in http che si dice in banda. Ftp server ha numero di porto
21. Non è possibile per un client stabilire una connessione FTP verso una
qualsiasi macchina, Il tipo di paradigma adottato (client/server) presuppone infatti
che il server debba essere stato opportunamente configurato per accettare
connessioni. Solitamente, per questioni di sicurezza, le macchine non sono
configurate per accettare connessioni di tipo FTP; se si tenta di stabilire una
connessione verso una macchina non abilitata la sessione fallisce e nessun
trasferimento risulta possibile. I client FTP sono invece disponibili pressoché su
tutti i sistemi operativi.

9
Figura 9
FTP attivo (figura 8) : Il Client apre una connessione di controllo verso l’indirizzo del server sul porto 21
utilizzando un ephemeral port. Il Server apre una connessione dati dal porto 20 verso il client . FTP
passivo(figura 9): il Client apre una connessione di controllo verso l’indirizzo del server sul porto 21
utilizzando un ephemeral port. Il Server sceglie un ephemeral port per la connessione dati e la comunica al
Client . Il Client apre la connessione dati sul porto indicato dal server. Nel caso passive FTP, è il client ad
aprire una connessione verso il server, sia per il canale di controllo che per il canale dati. I comandi, dal
client al server, e le risposte, dal server al client, sono inviati attraverso la connessione di controllo in formato
ASCII a 7 bit. Pertanto anche i comandi FTP (ciascuno dei quali è delimitato da un ritorno a capo e un
carattere di nuova linea) possono essere letti dall'utente, come quelli HTTP.

• USER : utilizzato per inviare l' identificativo dell'utente al server.

• PASS: usato per inviare la password dell'utente al server.

• LIST: utilizzato per chiedere al server di inviare un elenco di tutti i file nella directory remota corrente. Tale
elenco viene spedito su una connessione dati (nuova e non persistente) anziché sulla connessione di
controllo.

• RETR: usato per recuperare un file dall'attuale directory dell'host remoto.Forza l ' host remoto a nizializzare
una connessione dati e a inviare il filerichiesto.

• STOR: utilizzato per memorizzare un file nella directory corrente dell'host remoto.

Posta elettronica & SMTP

In questo ambito chiameremo il Client come User agent e il Server come Mail server. E’ importante capire
perché il Mail server svolge il ruolo di Server ma anche quello di Client per il protocollo SMTP.
SMTP è un protocollo a livello di applicazione ( Simple mail transfer protocol) ed il suo compito è quello di
trasferire i messaggi dal mail server, del mittente, a quello del destinatario. Fa uso di connessioni
PERSISTENTI perché ha bisogno di affidabilità e deve dare la possibilità all’User agent di inviare più
messaggi allo stesso destinatario. Vediamo le differenze tra SMTP e http:

HTTP SMTP
Protocollo “PULL”: gli utenti lo utilizzano per attirare Protocollo “PUSH”: Il Mail Server spinge i file al Mail
,dal server, informazioni. server ricevente.
Non impone vincoli Usa ASCII a 7 bit
Ogni oggetto è incapsulato nell’oggetto principale di Colloca tutti gli oggetti in un unico messaggio
risposta
Connessione PERSISTENTE e NON Connessione PERSISTENTE
PERSISTENTE

Comandi:
HELO, MAILFROM, RCPT TO (recapitare a), DATA, “.”, QUIT (basta).
Questi comandi permettono di inviare una mail tramite un Mail Server locale.

Esistono tre tipi di PROTOCOLLI DI ACCESSO ALLA POSTA:


POP3; IMAP; http;

POP3 è il più diffuso. Entra in azione quando lo user agent apre una connessione TCP verso il server sulla
porta 110. Si divide in tre fasi:
-Autorizzazione: e-mail e pass;
-Transazione: recupero messaggi o altre info;
-Aggiornamento:Dopo il “quit” vengono cancellati i messaggi di cancellazione.

IMAP associa a una cartella ogni messaggio arrivato al server. I messaggi sono associati alla cartella INBOX
del destinatario. Diversamente da POP3 , consente una gestione più ordinata de messaggi.

10
http fa sì che lo User agente diventa il browser. Ad oggi è il protocollo di accesso alla posta più usato perché
tutti noi accediamo tramite il browser. Alcuni anni fa era utilizzato il servizio Outlook presente sul proprio pc ,
sul quale c’era bisogno di impostare i protocolli e scegliere tra POP3 e IMAP.

E’ possibile accedere alla posta anche


dal cmd ,connettendosi al POP3 del
server della posta o SMPT attraverso
Telnet. Vediamo un esempio:

DNS

Un messaggio importante che scambiano Client e Server è il nome dell’ host. La DNS (Domain Name
System ) traduce gli hostname in indirizzi IP che identificano ogni host ( li ritroviamo nel livello di Rete). Essi
sono formati da 4 byte distanziati da un “.” .Ogni byte va da 0 a 255. Esempio : 121.7.106.83. La DNS svolge
lato

Figura 10

Client o lato Server a secondo dell’uso. E’ client quando invia l’hostname di un client al server DNS ( si dice
che esegue una query). Altri servizi che svolge sono:

1)Host Aliasing : quando ci sono host ALIAS (sinonimi, con lo stesso nome) , viene scelto quello canonico;

2)Mail server aliasing: permette di associare un server di posta al nome di un dominio per facilitare la
memorizzazione dell’indirizzo di posta.;

3)Load Distribution : distribuisce il carico ad esempio di un Web server.

E’ facile capire quali sono i motivi secondo i quali un DNS centralizzato è meno efficiente di uno distribuito: in
un DNS centralizzato se c’è un punto di fallimento esso si trasporta, c’è sicuramente un volume di traffico
maggiore, la manutenzione e la distanza sono difficile da gestire. Quindi un DNS distribuito risolve questi
problemi ed è regolato da una gerarchia, gli elementi più alti nella gerarchia contengono molte informazioni
non dettagliate, gli elementi più bassi nella gerarchia contengono poche informazioni dettagliate.In prima
approssimazione, esistono tre classi di DNS server: i root server, i top-level domain (TLD) server e i server
autoritativi, organizzati in una gerarchia,come mostrato nella Figura 10.

Root server. In Internet esistono 13 root server, la maggiorparte dei quali sono situati in Nord America. Ai fini
di sicurezza e affidabilità ciascuno di essi è in realtà un cluster di server replicati.

11
Top-level domain (TLD) server. Questi server si occupano dei domini di primo livello quali com, org, net, edu
e gov, e di tutti i domini di primo livello relativi ai vari paesi, come uk, fr, ca e jp.

DNS server autoritativo : organizzazione dotata di host pubblicamente accessibili tramite Internet (quali web
server e mail server) deve fornire record DNS pubblicamente accessibili, che associano i nomi di tali host a
indirizzi IP. Il DNS server dell' organizzazione ospita questi record. Un' organizzazione può scegliere di
implementare il proprio server autoritativo o di pagare un fornitore di servizi per ospitare questi record su un
suo server. La maggior parte delle università e delle grandi società implementa e gestisce dei propri server
autoritativi primario e secondario (di backup).

Esiste un altro importante tipo di DNS, detto DNS server locale, che non appartiene alla gerarchia di server,
ma che è comunque centrale nell'architettura DNS. Ciascun ISP, come un'università, un'azienda o un ISP
residenziale, ha un DNS server locale (detto anche default name server). Quando un host si connette a un
ISP, quest'ultimo gli fornisce un indirizzo IP tratto da uno o più dei suoi DNS server locali. Un DNS server
locale è solitamente "vicino" all'host. Nel caso di un ISP istituzionale si può trovare sulla stessa rete locale
dell'host, mentre negli ISP residenziali sono abitualmente separati da un numero limitato di router. Quando
un host effettua una richiesta DNS, la query viene inviata al DNS server locale, che opera da proxy e inoltra
la query alla gerarchia dei DNS server. Le query si divisono in due tipi: ricorsive e iterattive. Nella prima
l’host fa richiesta al DNS il quale risponde dopo aver fatto accesso ad altri DNS locali. La seconda prevede
un botta e risposta diretto.

DNS CACHING

In una concatenazione di richieste il DNS server che riceve una risposta DNS può mettere nella cache le
informazioni contenute per un tempo fissato di 1 giorno,
dopodiché vengono eliminate. Un DNS server locale può
anche memorizzare in cache gli indirizzi IP consentendo di
raggirare la richiesta ai root server. I server che implementano
il database distribuito di DNS memorizzano gli RR ( RECORD
DI RISORSA) così fatti:

(NAME, VALUE, TYPE , TTL)

Se TYPE = A allora NAME = hostaname e VALUE = IP host;

Se TYPE = NS allora NAME = domain e VALUE = hostname


del DNS server;

Se TYPE = CNAME allora NAME = hostaname alias e VALUE


= hostname canonico;

Se TYPE = MX allora NAME = mailname alias e VALUE =


mailname canonico.

Figura 11: formato di un messaggio DNS Nel flags se il 1° bit è 0 = query, se 1=reply. Il 2° bit abilita la query
ricorsiva. L’authority contiene i records di altri server autoritatii.

BIND (Berkeley Internet Name Domain, in precedenza Berkeley Internet Name Daemon) è il server DNS più
usato[1] su Internet,

REGISTAR è un ente di registrazione che verifica l’unicità del nome di un dominio, lo inserisce all’interno del
database DNS e richiede una somma di denaro per i propri servizi.

Fino ad ora abbiamo trattato architetture client-server tralasciando quelle peer to peer. Per queste ultime si
lascia un approfondimento al lettore dal testo citato in prima pagina.
12
Capitolo 3 : LIVELLO TRASPORTO

Un protocollo a livello di trasporto mette a disposizione una comunicazione logica tra processi applicativi di
host differenti . Per comunicazione logica si intende che i processi sono direttamente connessi, quindi sono
in REMOTO. I protocolli a livello di trasporto sono implementati nei sistemi periferici (end system) e
convertono i pacchetti ( che abbiamo trovato a livello di applicazione) in segmenti , i quali saranno
incapsulati in datagrammi ( come vedremo a livello di rete) . Questo livello intermedio riesce a sopperire
alcuni problemi provocati dal livello di applicazione e dal livello di rete, in particolare può aumentare
efficienza e affidabilità controllando errori, flussi e congestione. Offre due servizi intermedi tra il servizio di
trasporto,da processo a processo, e servizio di rete ,da host a host:

- Multiplexing: Raccogliere i dati provenienti dalle applicazioni, imbusta i dati con un header
appropriato (per il de-multiplexing);

- Demultiplexing: inoltra i segmenti ricevuti al corretto processo cui i dati sono destinati;

In realtà non è giusto dire che a livello di trasporto c’è un collegamento da processo a processo
perché,come abbiamo visto nel 2° Capitolo , esiste un’interfaccia per ogni processo, la socket. Quindi a
Livello di trasporto, il servizio Multiplexing fa sì che il protocollo si interfaccia con la socket, preleva i
pacchetti, li incapsula in segmenti e li trasporta a livello di rete. Il servizio Demultiplexing preleva i
datagrammi a livello di rete li decapsula e li rimanda alla socket che interfaccia il livello applicativo. In
internet esistono due protocolli per questo livello: UDP e TCP.

UDP

Come già introdotto nel 2° capitolo, il protocollo UDP (User Datagram Protocol) si basa su un trasporto NON
ORIENTATO alla connessione. Non effettua l’Handshaking (scambio di informazioni di controllo prima che i
messaggi cominciano a fluire). Svolge sia il servizio di Multiplexing che Demultiplexing ed è definito
connectionless perché ogni segmento UDP è inviato indipendentemente dagli altri. Ha un dialogo diretto con
l’IP . I vantaggi per questo protocollo sono:

1) Controllo più veloce su quali dati inviare a livello di applicazione ;


2) Nessun ritardo per stabilire la connessione( perché non c’è una connessione);
3) Vengono aggiunti solo 8 byte all’intestazione del pacchetto;
4) I pacchetti UDP possono subire perdite, giungere a destinazione in ritardo , non ordinati o non
arrivare affatto.

13
Struttura segmenti UD

L'intestazione UDP presenta solo quattro campi di due byte ciascuno. I numeri
di porta ( source port # , dest port # )consentono all'host di destinazione di
trasferire i dati applicativi al processo corretto.Il campo lunghezza , lenght,
specifica il numero di byte del segmento UDP . Un valore esplicito di lunghezza
è necessario perché la grandezza del campo dati può essere diversa tra un
segmento e quello successivo. L'host ricevente utilizza il checksum per
verificare se sono avvenuti errori nel segmento. In realtà, oltre che sul segmento
UDP, il checksum è calcolato anche su alcuni campi dell'intestazione
IP(pseudoheader).

Checksum UDP

Mittente:Tratta il contenuto del


segmento Supponiamo di avere 3 parole di 16 bit in questo modo:
come una sequenza di blocchi
espressi su 16 bit; 1) 0110011001100000
checksum: somma dei numeri 2) 0101010101010101
da 16 bit che costituiscono il 3) 1000111100001100
segmento UDP.
Poi se ne fa il complemento a 1. La somma con riporto delle prime due è:
Il mittente pone il valore della
0110011001100000 +
checksum nel campo checksum 0101010101010101 =
del segmento UDP 1011101110110101

Ricevente: Sommando il risultato alla terza parola:


calcola la somma dei campi del 1011101110110101 +
segmento ricevuto. 1000111100001100 =
Si aggiunge la CHECKSUM 0100101011000001
+
Se il risultato è composto da tutti 1 1
0100101011000010
Non ci sono errori.
Infine facendo il completamento a 1 del risultato :

Di lato a destra è riportato un 1011010100111101 = 𝐶ℎ𝑒𝑐𝑘𝑠𝑢𝑚 𝑟𝑖𝑠𝑢𝑙𝑡𝑎𝑛𝑡𝑒

esempio. Controprova:

0100101011000010 +
1011010100111101 =
1111111111111111

14
Trasferimento dati affidabile UDP

Un canale si definisce affidabile se nessun bit dei dati trasferiti è corrotto, si definisce ideale se non presenta
errori e perdite di pacchetti. Figura 12

Nella Figura 12 sono riportati 3 tipologie di canale ( dalla meno realistica alla più realistica). Vediamole nel
dettaglio:Nel canale ideale il dato viene inviato dal sender e ricevuto dal receiver senza bisogno di dare
informazioni aggiuntive perché nulla può essere perduto. Nel canale con errori ma senza perdite di
pacchetti, oltre al dato inviato è presente un nuovo protocollo ARQ(automatic repeat request) di
trasferimento dati affidabili, basato sulla ritrasmissione di una notifica. Tale protocollo ha tre funzionalità:

- Rilevamento dell'errore;

- Feedback del destinatario:invia risposte di notifica positiva (ACK, acknowledgment) o negativa (NAK).

- Ritrasmissione: Un pacchetto ricevuto con errori sarà ritrasmesso dal mittente.

Quando si presenta un errore sul dato ( come in figura) , il receiver invia un NAK ( può anche accadere che
l’errore si presenta sul NAK o sull’ ACK ) . Il sender invia un dato che potrebbe essere un nuovo dato o la
ritrasmissione del dato che non è andato a buon fine. Per gestire questa ambiguità occorre inserire
nell’header ,del segmento da inviare ,un’ulteriore informazione : il numero di sequenza. Inoltre tali protocolli
utilizzano una modalità detta STOP AND WAIT cioè inviano un messaggio e aspettano un riscontro prima di
ritrasmettere un nuovo messaggio. Utilizzando questa modalità basta avere un numero di sequenza di 1 bit:
0 per NAK e 1 per ACK, per questo motivo l’ARQ viene detto protocollo ad alternanza di bit.
Nell’ultimo canale in figura siamo nel caso peggiore. Si noti che è presente soltanto la notifica ACK. In realtà
attraverso un banale ragionamento è possibile utilizzare solo la notifica positiva per segnalare la presenza di
errori. L’idea è quella di utilizzare, al posto del NAK, un ACK per l’ultimo pacchetto ricevuto correttamente. Il
destinatario deve includere esplicitamente il numero di sequenza del pacchetto con l’ACK. Un ACK duplicato
presso il mittente determina la stessa azione del NAK: ritrasmettere il pacchetto corrente.
Un’altra novità è la presenza di un timeout che vale quanto il RTT (tempo di andata e ritorno del pacchetto).
Se si perde il dato o l’ACK durante il timer, allo scadere
di esso , verranno rinviati.
E’ bene dire che la modalità STOP AND WAIT presenta
un limite. Per valutare la prestazioni consideriamo 2
host con un RTT alla velocità della luce. Con la modalità
S&W l’utilizzo del canale sarà sicuramente minore. Per
far fronte a questo problema si utilizza una nuova
tecnica :PIPELINING.
𝐿=1𝐺𝑏
𝑆𝑢𝑝𝑝𝑜𝑛𝑖𝑎𝑚𝑜 𝑇𝑡𝑟𝑎𝑠𝑚𝑖𝑠𝑠𝑖𝑜𝑛𝑒 = 9 = 8 ∗ 10−6 𝑠
𝑅=10 𝑏/𝑠

15
Pipelining

Consente al mittente di trasmettere un treno di pacchetti senza dover aspettare gli ACK, aumentando
l’utilizzo del canale. Occorre aumentare l’intervallo dei numeri di sequenza Esistono due approcci per questa
modalità :

i. GO-BACK-N;
ii. RIPETIZIONE SELETTIVA.

Il primo, detto anche protocollo a finestra scorrevole, consente al mittente di trasmettere più pacchetti
senza attendere l’ACK ma non può superare un certo numero N di pacchetti.

Funzionamento del mittente: vi è una finestra che comprende


N pacchetti in sospeso di ACK, se quest’ultima è piena il
mittente li rimanda a livello superiore o li mantiene nei buffer,
che rappresentano il momento in cui un blocco di pacchetti
aspetta di essere portato a livello superiore. Se , invece, la
finestra non è ancora piena , i pacchetti vengono inviati correttamente. L’ ACK del pacchetto N-esimo viene
detto CUMULATIVO, se viene ricevuto significa che sicuramente sono stati ricevuti tutti i precedenti. Viene
utilizzato un solo Timeout per ogni finestra. I pacchetti che si trovano alla sinistra della finestra sono stati già
inviati, quelli a destra non sono utilizzabili e quelli nella finestra possono essere già inviati o sono in attesa di
essere inviati.

Funzionamento del destinatario: scarta i pacchetti fuori sequenza e rinvia l’ACK dell’ultimo pacchetto.

In conclusione questo protocollo è affidabile e , come vedremo, è utilizzato anche da TCP.

Il secondo approccio, protocollo a ripetizione selettiva, ha come obiettivo quello di evitare ritrasmissioni
non necessarie. E’ una forma di richiesta selettiva. Funzionamento: viene creata una finestra sul mittente
che via via si sposta con l’invio dei dati, mentre sul destinatario si sposta con la conferma dei dati.
Supponiamo che il mittente invia il
pacchetto0 e nella finestra ci sono i
pacchetti numerati 0,1,2,3. Il destinatario
verifica l’arrivo del pacchetto0 e quindi
sposta la finestra sulla numerazione
1,2,3,4. Cosa accade se il pacchetto2 non
viene inviato correttamente? Quelli inviati
successivamente come il pacchetto 3 e 4,
vanno all’interno del buffer. Quando il
numero dei pacchetti inviati coincide con la
dimensione della finestra ( in questo
esempio 4), viene rinviato il pacchetto2 e
arrivano tutti gli ACK insieme.

16
TCP

Caratteristica importante del protocollo TCP è quella di essere orientato alla connessione in quanto, prima di
effettuare lo scambio dei dati, i processi devono effettuare l' handshak a 3 vie. La "connessione" TCP non è
un circuito end-to-end TDM o FDM, come in una rete a commutazione di circuito e neppure un circuito
virtuale (Capitolo 1 ), in quanto lo stato della connessione risiede completamente nei due sistemi periferici.
Dato che il protocollo TCP va in esecuzione solo sui sistemi periferici e non negli elementi di rete intermedi
(router e switch a livello di collegamento), questi ultimi non salvano lo stato della connessione TCP. Infatti, i
router intermedi sono completamente ignari delle connessioni TCP; essi vedono datagrammi, non
connessioni. Offre:

- servizio full-duplex: dati a livello di applicazione possono fluire dal processo di un host A al processo di un
host B nello stesso momento in cui fluiscono in direzione opposta;

-connessione punto a punto: Il cosiddetto "multicast", ossia il trasferimento di dati da un mittente a molti
destinatari in un ' unica operazione, con TCP non è possibile.

-buffer di invio e ricezione: quando il pacchetto esce dalla socket e arriva alla TCP che forma segmenti, in
realtà arriva nei buffer di invio e analogamente prima di passare nella socket del destinatario passa per il
buffer di ricezione.

Struttura segmenti TCP

Il segmento TCP viene diviso in due parti: il campo d’intestazione e


il campo dei dati provenienti dall’applicazione. Al campo
d’intestazione fanno parte il N. porta sorgente e destinazione ,
utilizzati per multiplexing/de multiplexing, e un campo checksum.

Il numero di sequenza e di riscontro (ACK) vengono utilizzati dal


mittente e dal destinatario per implementare il trasferimento dei
dati affidabile, sono entrambi a 32 bit. La lunghezza d’intestazione
è di 4 bit e va in multipli di 32 bit. Il campo opzioni viene utilizzato
quando mittente e destinatario negoziano la dimensione massima
del segmento (MSS), se è vuoto , in genere, la lunghezza
d’intestazione è 20 byte. Il campo dei Bit di Codice serve per
identificare il tipo di informazione contenuta nel segmento e vengono impiegati i 6 bit di codice:

ACK: Il campo riscontro è valido;

RST: Effettua il reset della connessione;

SYN: Sincronizza i numeri di sequenza;

FIN: Il trasmettitore ha raggiunto la fine del suo stream di byte;

PSH: Questo segmento richiede una “spinta” (a destinazione);

URG: Il campo puntatore urgente è valido.

Il campo Finestra: da 16 bit ,che specifica la dimensione del buffer che il TCP ha a disposizione per
immagazzinare dati in arrivo.

Puntatore urgente: Il TCP permette la trasmissione di dati informativi ad alta priorità. Questi devono essere
trasmessi il prima possibile, indipendentemente dalla loro posizione nello stream. Questo campo, se valido,
conterrà un puntatore alla posizione dell’ ultimo byte dei dati urgenti nello stream .

17
Checksum TCP

Campo di 16 bit contenente un valore intero utilizzato dal TCP dell’ host di destinazione, per verificare
l'integrità dei dati e la correttezza dell'intestazione. Questa informazione è di essenziale importanza perché il
protocollo IP non prevede nessun controllo di errore sulla parte dati del frame. Per il calcolo del valore
checksum il TCP aggiunge una pseudointestazione al datagramma, per effettuare così un controllo anche
sugli indirizzi IP di destinazione e provenienza. La Pseudoheader creata è posta in testa al datagramma
TCP. Viene inserito in essa un ulteriore byte di zeri per raggiungere un multiplo di 16 bit. Successivamente
viene calcolata la checksum su tutto il messaggio così formato, viene scartata la pseudoheader e passato il
datagramma al livello IP. In fase di ricezione, il livello TCP ricrea la pseudoheader interagendo con l'IP
sottostante, calcola la checksum e verifica la correttezza del messaggio ricevuto. In caso di errore il
datagramma viene scartato.

Numero di sequenza e di riscontro


TCP vede i dati come un flusso di byte non strutturati, ma ordinati. L'uso dei numeri di sequenza in TCP
riflette questa visione, dato che i numeri di sequenza si applicano al flusso di byte trasmessi e non alla serie
di segmenti trasmessi. Il numero di sequenza per un segmento è pertanto il numero del primo byte
(all’interno del flusso ) del segmento. Il numero di acknowledgement è il numero di sequenza del successivo
byte di dati che l'host sta aspettando e fa riferimento allo stream di dati che fluisce nella direzione opposta a
tale segmento (FULL-DUPLEX). Vediamo un esempio , figura 13:
Supponiamo di avere un host A che invia un certo dato ad un host B. A questo punto l’host A diventa client e
l’host B server. Supponiamo, inoltre, che i numeri di sequenza iniziali siano
rispettivamente per entrambi 10 e 45 ( vengono scelti a caso ). L’host A
invia il primo segmento con numero di sequenza 10, numero di riscontro
(ACK) 45, perché non ha ancora ricevuto nessun dato dall’host B, e
ovviamente con il dato da inviare. Il secondo segmento inviato dal lato
server, contiene numero di sequenza 45, numero di riscontro 10 e rinvia il
dato. Si dice che tale ACK è PIGGY-BACKED sul segmento dati dal server
al client. Nel caso in cui un host riceve segmenti fuori sequenza, non ci
sono regole imposte dagli RFC.

Stima RTT
Come visto nel paragrafo UDP, anche TCP presenta un Timeout per
Figura 13 gestire il rinvio dei dati. Sicuramente il Timeout deve essere maggiore del
RTT, ma di quanto maggiore? Conviene fare una stima del RTT. In realtà
le misure vengono fatte sul SampleRTT ovvero la quantità di tempo che
intercorre tra l’istante di inio del segmento a quello di ricezione dell’acknowledgment del segmento.
Per effettuare una stima dei valori di SampleRTT bisogna fare una media esponenziale pesata dei campioni:
1
𝐸𝑠𝑡𝑖𝑚𝑎𝑡𝑒𝑑𝑅𝑇𝑇 = (1 − 𝛼) ∗ 𝐸𝑠𝑡𝑖𝑚𝑎𝑡𝑒𝑑𝑅𝑇𝑇 + 𝛼 ∗ 𝑆𝑎𝑚𝑝𝑙𝑒𝑅𝑇𝑇 con 𝛼 = .
8
L’influenza di un singolo campione sul valore della stima decresce in maniera esponenziale, e si da più
importanza a campioni recenti.
Sulla base di quanto detto, il Timeout iniziale potrebbe essere pari a 𝑇 = 2 ∗ 𝐸𝑠𝑡𝑖𝑚𝑎𝑡𝑒𝑑𝑅𝑇𝑇 ,per essere sicuri
che non scada prematuramente. Inoltre è importante che le ritrasmissioni siano disabilitate (si sceglie un
ACK ad ogni istante di tempo), per evitare che venga fatta una sottostima.
Oltre ad una stima di RTT è importante possedere la misura della sua variabilità. Si definisce DevRTT come
lo scostamento che SampleRTT ha rispetto EstimatedRTT:
1
𝐷𝑒𝑣𝑅𝑇𝑇 = (1 − 𝛽) ∗ 𝐷𝑒𝑣𝑅𝑇𝑇 + 𝛽 ∗ |𝑆𝑎𝑚𝑝𝑙𝑒𝑅𝑇𝑇 − 𝐸𝑠𝑡𝑖𝑚𝑎𝑡𝑒𝑑𝑅𝑇𝑇| 𝑐𝑜𝑛 𝛽 =
4
Prendendo in considerazione tutti questi aspetti citati, TCP determina di Timeout di ritrasmissione:
𝑇𝑖𝑚𝑒𝑜𝑢𝑡𝑅𝑖𝑡𝑟𝑎𝑠𝑚𝑖𝑠𝑠𝑖𝑜𝑛𝑒 = 𝐸𝑠𝑡𝑖𝑚𝑎𝑡𝑒𝑑𝑅𝑇𝑇 + 4 ∗ 𝐷𝑒𝑣𝑅𝑇𝑇
18
Trasferimento dati affidabile TCP

TCP crea un servizio di trasferimento dati affidabile sul servizio inaffidabile di IP(Livello di rete). Utilizza il
servizio di Pipeline dei segmenti. Inoltre usa un solo timer di ritrasmissione e non per ogni pacchetto inviato:
esso viene riattivato ogni volta che scade se ci sono ancora ACK da ricevere. Le ritrasmissioni sono avviate
da eventi di timeout e ACK duplicati.

Figura 14

In Figura 14 sono illustrati tre casi:

A sinistra l'Host A spedisce un segmento all'Host B. Supponiamo che questo segmento abbia numero di
sequenza 92 e contenga 8 byte di dati. Dopo aver inviato il segmento, A attende un segmento da B con
numero di ACK =100. Sebbene il segmento in questione sia stato ricevuto da B, l'ACK sul percorso inverso
viene smarrito. In questo caso si verifica l'evento di timeout e l'Host A ritrasmette lo stesso segmento.
Ovviamente, quando l'Host B riceve la ritrasmissione, rileva dal numero di sequenza già ricevuto. Quindi,
l'Host B scarta i byte del segmento ritrasmesso.

Al centro A invia due segmenti. Il primo ha numero di sequenza 92 e 8 byte di dati, il secondo ha numero di
sequenza 100 e 20 byte di dati. Supponiamo che entrambi arrivino intatti a B e che questo invii due ACK
separati per i segmenti, il primo numerato 100, il secondo 120. Supponiamo ora che nessuno degli ACK
arrivi all'Host A prima del timeout. Quando si verifica il timeout, l'Host A rispedisce il primo segmento con
numero di sequenza 92 e riavvia il timer. Fino a quando l' ACK del secondo segmento non arriva prima del
nuovo timeout, il secondo segmento non sarà ritrasmesso.

A sinistra l'Host A invia due segmenti. L' ACK del primo segmento viene perso nella rete ma, appena prima
dell'evento di timeout, l'Host A riceve un ACK con numero 120. È, pertanto, a conoscenza che l'Host B ha
ricevuto tutto fino al byte 119; quindi non rispedisce nessuno dei due segmenti.

Esistono poi alcune varianti utilizzate da TCP . La prima riguarda la grandezza del timeout dopo la scadenza
di un timer. E’ una tecnica conservativa:quando scade il Timeout si rinnova il doppio di quello precedente e
questo serve per evitare le congestioni. La seconda riguarda la ritrasmissione rapida. il mittente può ,in molti
casi, rilevare la perdita dei pacchetti ben prima che si verifichi l'evento di timeout grazie agli ACK duplicati
relativi a un segmento. Viene mostrata di seguita la politica di generazione degli ACK di TCP:

19
Figura 15

Nel caso in cui sono stati


ricevuto 3 ACK duplicativi, il
mittente effettua una
ritrasmissione rapida,
rispedendo il segmento
mancante prima che scade il
timer.

Ultima caratteristica di TCP


,come UDP, riguarda la
pipelining. L’approccio di TCP è
un ibrido tra GO-BACK-N e
RIPETIZIONE SELETTIVA. Si
differenzia dal primo perché nel
caso in cui su N pacchetti viene
perso 1 di questi, TCP non
ritrasmette tutti e N ma soltanto
quello smarrito. Si avvicina a
quello a ripetizione selettiva perché è possibile inviare un ACK selettivo per i segmenti non in ordine anziché
cumulativamente per l’ultimo segmento ricevuto senza errori e nel giusto ordine.

Gestione della connessione TCP

Funzionamento , nel dettaglio, dell’handshake a 3 vie:

-Apertura di connessione Passo1: TCP lato client invia uno speciale segmento al TCP lato server. Questo
segmento speciale non contiene dati a livello applicativo, ma il bit SYN è posto a 1. Per
questo motivo viene detto segmento SYN. Inoltre il client sceglie a caso un numero di
sequenza iniziale (client_isn) e lo pone nel campo numero di sequenza del segmento
SYN iniziale. Quest'ultimo viene incapsulato in un datagramma IP e inviato al server.

Passo2: Quando il datagramma IP contenente il segmento TCP SYN arriva


Al server,esso estrae il segmento ,alloca i buffer e le variabili TCP alla connessione e
invia un segmento di connessione approvata al client. Anche questo segmento non
contiene dati a livello applicativo , ma nella sua intestazione vi sono tre informazioni
importanti. Il bit SYN è posto a 1, il campo ACK assume il valore client_isn+1 e il server
sceglie il proprio numero di sequenza iniziale (server _isn) e lo pone nel campo del
numero di sequenza. Il segmento di connessione approvata viene detto segmento
SYNACK.

Passo3: Alla ricezione del segmento SYNACK, anche il client alloca buffer e variabili
alla connessione. L'host client invia quindi al server un altro segmento in
risposta al segmento di connessione approvata del server. Tale operazione viene
svolta dal client ponendo il valore server _isn+1 nel campo ACK dell'intestazione
del segmento TCP. Il bit SYN è posto a zero, dato che la connessione è stata
stabilita. In questo terzo passo dell'handshake a tre vie il campo dati del segmento
può contenere informazioni che vanno dal client verso il server.

Passo1: il client invia un segmento di controllo TCP ,con FIN alto, al server.
-Chiusura di connessione
Passo 2: il server riceve FIN, risponde con ACK. Quindi chiude la connessione inviando
FIN al client

Passo 3: il client riceve FIN, risponde con un ACK. Attende in uno stato TIMED_WAIT
(nel caso in cui l’ultimo ACK vada perso, e riceva un ulteriore FIN dal server).

Passo 4: il server, riceve ACK.Chiude la connessione.

N.B: una piccola variante al Passo 2: il sender invia ACK e FIN contemporaneamente
all’interno dello stesso segmento 20
Figura 16

In Figura 16 vi sono due diagrammi che mostrano la normale apertura/chiusura di una connessione TCP lato
client/server. Ci sono, poi, degli scenari patologici:

1) Quando arriva una richiesta di connessione ma la connessione è già stabilita;


2) Quando arriva una richiesta di connessione e un dato ma la connessione è già stabilita;
3) Quando viene perso l’ACK di chiusura di connessione.
4) Perdita del segmento di richiesta di disconnessione di risposta;
5) Perdita del segmento di richiesta di disconnessione e delle successive richieste.

Controllo di flusso e congestione TCP

TCP offre un servizio di controllo di flusso .L’idea è quella di lavorare con la velocità, paragonando la
frequenza di invio del mittente con quella di lettura del ricevente . Questo servizio instaura una variabile
chiamata finestra di ricezione (receive window) che, in sostanza, fornisce al mittente un'indicazione dello
spazio libero disponibile nel buffer del destinatario.

La finestra di ricezione, indicata con Rcvwnd, viene impostata alla quantità di spazio disponibile nel buffer:

Rcvwnd = RcvBuffer – ( LastByteRcvd - LastByteRead )

RcvBuffer= dimensione buffer di ricezione;

LastByteRcvd= n° dell’ultimo byte ,del flusso, letto dal buffer;

LastByteRead= n° dell’ultimo byte ,del flusso, ricevuto dal buffer;

ricevente: comunica dinamicamente al mittente la dimensione corrente del buffer nel segmento TCP;
mittente: conserva i dati già trasmessi ma non riscontrati e limita tale quantità all’ultima Rcvwnd ricevuta:
LastByteSent– LastByteACKed ≤ Rcvwnd
le due variabili, LastByteSent e LastByteAcked, hanno come significato rispettivamente "ultimo byte
mandato" e "ultimo byte per cui si è ricevuto ACK". Si noti che la differenza tra i valori di queste due variabili
esprime la quantità di dati spediti dal mittente per cui non si è ancora ricevuto un ACK. Mantenendo la
quantità di dati senza ACK sotto il valore di Rcvwnd, si garantisce che il mittente non mandi in overflow il
buffer di ricezione del ricevente.

La silly window syndrome (sindrome da finestra sciocca) è un problema legato alla cattiva
implementazione del controllo di flusso a livello TCP. Un processo di scrittura molto lento da parte del

21
mittente nel buffer di trasmissione (o di lettura da parte del ricevente) porta infatti all'invio di segmenti di dati
molto piccoli, aumentando così il rapporto tra header e dati con un conseguente uso inefficiente del canale.
Silly Window Syndrome (ricevitore): il ricevitore svuota lentamente il buffer di ricezione e invia segmenti di
ACK con dimensione della finestra molto piccola, quindi il trasmettitore invia segmenti corti con molto
overhead (rapporto tra lunghezza delle intestazioni (header) dei segmenti TCP e dati utili (payload) troppo a
favore delle prime). Soluzione con l’algoritmo di Clark.
Silly Window Syndrome (trasmettitore): l’applicazione genera dati lentamente, invia segmenti molto piccoli
così come vengono prodotti. Soluzione algoritmo di Nagle.
ALGORITMO DI CLARK
Quando un ricevente lento (rispetto al mittente) riempie il proprio buffer di ricezione comunica al mittente che
la finestra di ricezione è piena, e quindi impone a quest'ultimo di non inviare più dati fino a nuovo avviso.
Tuttavia se il ricevente, non appena si fossero liberati pochi byte di spazio nel proprio buffer, mandasse
immediatamente un riscontro (ACK) al mittente con la dimensione della finestra di ricezione pari allo spazio
liberato, il mittente inviando un nuovo segmento riempirebbe di nuovo il buffer del ricevente, inviando un
segmento con un payload di pochi byte. La soluzione di Clark previene questo uso inefficiente del canale
evitando che il mittente comunichi la dimensione della sua finestra di ricezione non appena liberi qualche
byte. Precisamente il ricevente "inganna" il mittente comunicando nei riscontri un valore zero per Rcvwnd
finché lo spazio libero nel buffer sarà minore del minimo tra MSS e la metà di RcvBuffer.
ALGORITMO DI NAGLE
Definisce un metodo per stabilire una connessione auto-temporizzata, che non richiede l'utilizzo di
cronometri locali:

if (ci sono dati da inviare){


if (la dimensione della finestra e dati disponibile nel buffer >= MSS)
{spedisci i dati; }
else if (sono stati inviati dati non ancora confermati)
{memorizza i dati ma non inviarli ancora;}
else invia i dati direttamente verso la destinazione;
end if
end if
end if
Principi del controllo di congestione:

La congestione di una rete è dovuta tecnicamente dai seguenti fattori: numero elevato di sorgenti di traffico,
sorgenti di traffico che inviano troppi dati, traffico inviato ad una frequenza troppo elevata. Per capire il
motivo per il quale si è dato maggiore peso alla congestione, bisogna sapere quali sono gli effetti che causa:

perdita di pacchetti: buffer overflow nei router;

ritardi nell’inoltro dei pacchetti: accodamenti nei buffer dei router;

scarso utilizzo delle risorse di rete.

Cosa avviene di preciso quando gli host aumentano il proprio tasso


trasmissivo e le reti diventano congestionate? Vediamo due scenari tipici: Figura 17

❖ Primo scenario: due mittenti e un router con buffer illimitati

L’host A sta inviando dati sulla connessione a una frequenza media di 𝜆𝐼𝑁 byte/s. Tra l’Host A e l’Host B
c’è solo un singolo router intermedio. L'Host A presenta traffico al router pari a 𝜆𝐼𝑁 byte/s. L'Host B opera in
modo smile, assumiamo che ha frequenza media di 𝜆𝐼𝑁 byte/s anch’esso. I pacchetti da ll'Host A e dall'Host
B passano attraverso un router e un collegamento uscente condiviso di capacità R. Il router possiede buffer
che gli consentono di memorizzare i pacchetti entranti quando la loro velocità di arrivo supera la capacità del
collegamento uscente. In questo primo scenario ipotizziamo inoltre che i buffer del router abbiano
dimensione illimitata. La figura 17 (a) mostra il throughput per connessione (numero di byte per secondo al
ricevente) in funzione del tasso di invio. Finché non supera il valore di R/2, l velocità di ricezione del
ricevente equivale alla velocità di invio del mittente. Superati gli R/2, si raggiunge un valore costate. Questo
limite superiore sul throughput è conseguenza della condivisione della capacità di collegamento tra le due
22
connessioni. La figura 17 (b) mostra il grafico in funzione dei ritardi. Quando la velocità di invio si avvicina a
R/2 (da sinistra), il ritardo medio cresce sempre più. Quando supera R/2, il numero medio di pacchetti in
coda nel router cresce senza limite, e il ritardo medio tra origine e destinazione tende all'infinito.

❖ Secondo scenario : due mittenti e un router con buffer limitati

Tale situazione è come quella precedente ma il router tra l’host A e l’host B


presenta un buffer limitato (i pacchetti che giungono in un buffer già pieno
verranno scartati). Ricordiamo che TCP prevede che Se un pacchetto che
contiene un segmento a livello di trasporto viene scartato da router, il mittente
prima o poi lo ritrasmetterà. Denotiamo il tasso di trasmissione verso la socket
con 𝜆𝐼𝑁 byte/s, e indichiamo con 𝜆′𝐼𝑁 byte/s il tasso al quale il livello di
trasporto invia segmenti ,con una grandezza detta carico offerto alla rete.
Consideriamo un caso idealistico in cui l’host A sappia quando il buffer
all’interno del router sia pieno. In questo caso si avrebbe 𝜆𝐼𝑁 = 𝜆′𝐼𝑁 (linea
che finisce a R/2 figura 18). Consideriamo ora il caso, un po' più realistico, in Figura 18
cui il mittente ritrasmette solo quando è certo che un pacchetto sia andato
perduto. Il throughput effettivo è inferiore al carico offerto ( curva che finisce a R/3). Prendiamo in esame,
infine, la situazione in cui il mittente possa andare in timeout prematuramente e ritrasmettere un pacchetto
che abbia subìto ritardi in coda, ma non sia stato perduto. Ogni segmento è spedito, in media, due volte. Il
throughput massimo è di R/4.

Esistono due approcci per il controllo della congestione. Un primo approccio è chiamato END TO END che
deduce lo stato di congestione della rete a partire dall’osservazione di ritardi e perdite di pacchetti. E’ quello
utilizzato da TCP. Un secondo approccio è detto ASSISTITO DALL RETE secondo il quale i router
forniscono un feedback esplicito al mittente sullo stato di congestione della rete. Questo avviso può essere
semplicemente un bit che indica traffico su un collegamento. E’ utilizzato dalle reti ATM. Asynchronous
Transfer Mode o ATM è un protocollo di rete di livello di collegamento dati del modello ISO/OSI che
implementa un modo di trasferimento a commutazione di circuito virtuale e trasmissione di cella,
incapsulando i dati in unità, dette celle, di lunghezza fissa anziché in pacchetti a lunghezza variabile come
avviene invece nelle reti a commutazione di pacchetto Le reti che implementano il protocollo ATM vengono
dette reti ATM (compagnie telefoniche).

CONTROLLO DELLA CONGESTIONE TCP

L' approccio scelto da TCP consiste nell'imporre a ciascun mittente un limite alla velocità di invio sulla
propria connessione in funzione della congestione di rete percepita. Se il mittente TCP si accorge di
condizioni di scarso traffico sul percorso, allora incrementa il proprio tasso trasmissivo; se, invece,
percepisce traffico lungo il percorso, lo riduce. Il meccanismo di controllo di congestione TCP fa tener traccia
agli estremi della connessione di una variabile aggiuntiva: la finestra di congestione indicata con Congwnd,
che impone un vincolo alla velocità di immissione di traffico sulla rete da parte del mittente. La quantità di dati
che non hanno ancora ricevuto ACK inviata da un mittente non può eccedere il minimo tra i valori di
Congwnd e Rcvwnd, ossia:

𝐿𝑎𝑠𝑡𝐵𝑦𝑡𝑒𝑆𝑒𝑛𝑡 − 𝐿𝑎𝑠𝑡𝐵𝑦𝑡𝑒𝐴𝐶𝐾𝑒𝑑 ≤ min{𝐶𝑜𝑛𝑔𝑣𝑤𝑛𝑑|𝑅𝑐𝑣𝑤𝑛𝑑}

Il controllo di congestione di TCP prevede un algoritmo che ha la seguente idea di base: incrementare
Congwnd finché non si verifica la perdita di un segmento, cioè il non arrivo di ACK (interpretata come il
sopraggiungere dello stato di congestione), in seguito alla perdita di un segmento decrementare Congwnd e

23
ricominciare daccapo. Dato che TCP utilizza gli ACK per temporizzare gli incrementi dell' ampiezza della
finestra di congestione, si dice che TCP è auto-temporizzato.

L’algoritmo prevede 2 fasi e una fase finale opzionale:

1. SLOW START
2. CONGESTION AVOIDANCE;
3. FAST RECOVERY.

Slow Start: TCP invia il primo segmento nella rete e attende un riscontro.
Se il segmento riceve un ACK prima che si verifichi un evento di perdita, il
mittente incrementa la finestra di congestione di 1 MSS e invia due
segmenti di dimensione massima. Questi segmenti ricevono a loro volta
degli ACK e il mittente incrementa la finestra di congestione di 1 MSS per
ciascuno di essi portandola a 4 MSS e così via. Questo processo ha come
effetto il raddoppio della velocità trasmissiva a ogni RTT. Quindi la velocità
di trasmissione parte lentamente, ma cresce in modo esponenziale. Se c'è
un evento di perdita indicato da un evento di timeout o dall’arrivo di 3 ACK
duplicati consecutivi (significa,pacchetto fuori ordine ricevuto), il mittente
pone il valore di Congwnd a 1 e ricomincia daccapo. Inoltre pone il valore di
una seconda variabile di stato, ssthresh ("soglia di slow start") a cwnd / 2 :
se la Congwnd è pari a tale variabile, finisce la fase di Slow start e si passa
a quella successiva

Congestion Avoidance: il valore di Congwnd è circa la metà di quello che aveva l' ultima volta in cui era
stata rilevata la congestione .Quindi, invece di raddoppiare il valore ogni RTT, si incrementa la Congwnd
ogni qual volta arriva un ACK, in modo lineare. Ad esempio se MSS vale 1 460 byte e Congwnd 1 4.600
byte, allora in un RTT vengono spediti dieci segmenti. Ciascun ACK in arrivo incrementa l'ampiezza della
finestra di congestione di 1 / 10 MSS e quindi, dopo la ricezione degli ACK relativi a tutti e dieci i segmenti, il
valore della finestra di congestione sarà stato aumentato di un MSS . Quando si verifica un timeout , tale
fase, ritorna allo slow start: il valore di Congwnd è posto uguale a 1 MSS e il valore di ssthresh viene
impostato alla metà del valore di Congwnd al momento del timeout. Nel caso in cui si verificano 3 ACK
duplicativi consecutivi , diversamente da prima la rete continua a consegnare segmenti dal mittente al
ricevente: TCP dimezza il valore di Congwnd (aggiungendo 3 MSS per tenere conto dei duplicati ricevuti) e
imposta il valore di ssthresh pari al valore di Congwnd al momento del ricevimento degli ACK.

Fast Recovery: Durante la fase di fast recovery il valore di Congwnd è incrementato di 1 MSS per ogni ACK
duplicato ricevuto relativamente al segmento perso che ha causato l'entrata di TCP nello stato di fast
recovery. Infine, quando arriva un ACK per il segmento perso, TCP entra nello stato di congestion avoidance
dopo aver ridotto il valore di Congwnd. Se si verifica un timeout vi è invece una transizione dallo stato di fast
recovery a quello di slow start dopo
avere effettuato le stesse azioni
presenti sia in slow start che in
congestion avoidance: il valore di
cwnd è posto a 1 MSS e il valore di
ssthresh è impostato a metà del
valore di Congwnd nel momento in
cui si è riscontrato l'evento di
perdita.

La figura 19 mostra l’automa a stati


finiti dell’algoritmo:

24
Figura 19
Una prima versione di TCP, nota come TCP Tahoe, non richiedeva la fase di FAST RECOVERY. La
versione più recente, TCP Reno, adotta invece fast recovery . Il vantaggio dell’ultima fase sta nel fatto di
evitare una nuova partenza lenta in quanto la ricezione di tre ACK duplicati indica che, nonostante si sia
perso un pacchetto, almeno 3 segmenti successivi sono stati ricevuti dal destinatario.

Aspetti generali sul controllo di congestione TCP:

Ignorando la parte iniziale della fase di slow start ( in


quanto molto veloce) e assumendo che le perdite
siano indicate da un triplo ACK duplicato piuttosto
che da un evento di timeout, il controllo di
congestione di TCP consiste in un incremento
additivo lineare della Congwnd pari a 1 MSS per
RTT e quindi di un decremento moltiplicativo che
dimezza la Congwnd in corrispondenza di un evento
di triplice ACK duplicato. Per questa ragione,il
controllo di congestione di TCP è spesso indicato
come una forma di controllo di congestione incremento additivo, Figura 20
decremento moltiplicativo (AIMD, additive-increase multiplicative-
decrease). Tale controllo da luogo all’andamento di un dente di sega: TCP incrementa linearmente l'
ampiezza della propria finestra di congestione e quindi del tasso di trasmissione, finché si verifica un evento
di triplice ACK duplicato. Quindi decrementa la propria finestra di congestione di un fattore due, ma riprende
ancora a crescere linearmente per capire se ci sia ulteriore ampiezza di banda disponibile( figura 20).

Un meccanismo di controllo di congestione si dice equo


(fair) se date K sessioni TCP che condividono lo stesso
collegamento con ampiezza di banda R( collo di bottiglia),
ogni sessione dovrà avere una frequenza trasmissiva
media pari a R/K.

AIDM è un controllo equo se , supponendo un caso di sole


due connessioni:

-MSS e RTT uguali per le due connessioni: ( stesso


throughput );

- Entrambe le connessioni si trovano oltre lo slow start.

In figura 21 è mostrato il throughput dell’esempio citato con


Figura 21 due connessioni: se TCP sta suddividendo la larghezza di
banda del collegamento in modo uguale tra le due
connessioni, allora il throughput dovrebbe cadere sulla bisettrice. L’ obiettivo è ottenere throughput situati
vicino all' intersezione tra la bisettrice e la linea di massimo utilizzo della banda . Supponiamo che le
dimensioni della finestra TCP siano tali che a un certo istante di tempo le connessioni 1 e 2 raggiungano i
throughput corrispondenti al punto A . Dato che la porzione di banda del collegamento utilizzata
congiuntamente è minore di R, non si verificheranno perdite e le due connessioni aumenteranno la loro
finestra di 1 MSS per RTT.Di conseguenza, il throughput congiunto procede lungo la semiretta. La banda
congiunta potrebbe essere maggiore di R, e si potrebbe quindi verificare una perdita di pacchetti. Se le
connessioni 1 e 2 subiscono una perdita di pacchetti quando raggiungono i throughput indicati dal punto B,
allora decrementeranno le loro finestre e così via.

25
PROGRAMMAZIONE SOCKET (phyton) UDP

Traccia : Un client legge una riga di caratteri dalla tastiera e la invia tramite la propria socket al server. Il
server riceve i dati ,converte i caratteri in maiuscole, li rinvia al Client. Il client legge i caratteri modificati e li
stampa sul proprio schermo.Cominceremo con la programmazione del client UDP che invierà un semplice
messaggio a livello di applicazione al server. Il server, per essere in grado di ricevere e rispondere al
messaggio del client, deve essere pronto e in esecuzione come processo PRIMA che il client invii il
messaggio.

UDPClient.py

from socket import* //libreria phyton//

serverName = 'hostname o IP address' // se si usa l’hostname, la DNS assegna


automaticamente l’IP//

serverPort=12000 // numero di porta del server scelta a caso//

clientSocket =socket (AF_INET, SOCK_DGRAM) // si crea la socket lato client,


memorizzandone un. Il primo parametro passato indica la famiglia di indirizzi, AF_ INET indica che la rete
sottostante usa IPv4,il secondo parametro indica che la socket è di tipo UDP, piuttosto che TCP. Il numero
di porta lato Client non viene espresso perché lo fa automaticamente il sistema. //

while True:

message = input ("Frase in minuscolo da convertire in maiuscolo:") // sul prompt del client
compare la stringa utilizzata come parametro. L'utente inserisce da tastiera una linea che viene assegnata
alla variabile message //

clientSocket.sendto(message.encode(),(serverName,serverPort)) // In questa linea il metodo


sendto ( ) attacca l'indirizzo di destinazione ( serverName , serverPort ) al messaggio e invia il pacchetto
risultante nella socket clientSocket. //

modifiedMessage, serverAddress =clientSocket.recvfrom(2048) // quando un pacchetto arriva


alla socket client, i dati contenuti vengono assegnati alla variabile modifiedMessage , mentre l' indirizzo
sorgente ( indirizzo IP e numero di porta )del pacchetto viene messo nella variabile serverAddress. Il
metodo recvfrom prende in input la grandezza del buffer (2048). //

print ( modifiedMessage.decode() ) // visualizza a schermo la frase convertita in maiuscolo//

clientSocket.close()

26
UDPServer.py

from socket import*

serverPort=12000

serverSocket =socket (AF_INET, SOCK_DGRAM)

serverSocket.bind(('10.225.32.63', serverPort)) // lo sviluppatore assegna alla socket lato server il numero di porta
12000 //

print ("Il server è pronto a ricevere")

while True: // loop, sempre vero//

message, clientAddress = serverSocket.recvfrom (2048) // analogo a UDPClient; i dati vengono assegnati


alla variabile message, gli indirizzi alla variabile clientAddress //

modifiedMessage =message.decode().upper() // il metodo upper converte minuscolo in maiuscolo //

serverSocket.sendto(modifiedMessage.encode(),clientAddress) // l ' indirizzo del client (indirizzo IP e


numero di porta) viene attaccato al messaggio in caratteri maiuscoli e viene inviato il pacchetto risultante tramite la socket lato server.Il
servermrimane nel ciclo while aspettando che arrivi un altro pacchetto UDP //

INTERAZIONE CLIENT/SERVER (UDP)

27
PROGRAMMAZIONE SOCKET (phyton) TCP

Come ben sappiamo, TCP prevede un fase iniziale (handshake ) che lo differenzia da UDP. Una socket TCP
è di tipo interattivo in quanto gestisce una richiesta per volta e le altre vengono accodate. A una
connessione TCP, quando viene creata, viene associato sia l'indirizzo della socket lato client (indirizzo IP e
numero di porta) sia l' indirizzo della socket lato server (indirizzo IP e numero di porta). Una volta stabilita la
connessione TCP, quando un lato vuole inviare dati all'altro, deve solo mettere i dati nella connessione TCP
attraverso la sua socket. Ciò si differenzia da quanto visto prima con UDP, dove il server doveva attaccare l '
indirizzo di destinazione al pacchetto prima di inviarlo nella socket. il programma server deve essere già
pronto ( come UDP ) e deve avere una socket che dia il benvenuto al contatto iniziale stabilito da un
processo client in esecuzione su un qualsiasi host.

TCPClient.py

from socket import *

serverName = 'hostname o IP address'

serverPort=12000 //esempio//

clientSocket=socket(AF_INET,SOCK_STREAM) //si crea la socket Il primo parametro


indica che la rete sottostante usa IPv4. Il secondo indica che la socket è di tipo SOCK_STREAM,
che significa
che è una socket TCP . //

clientSocket.connect((serverName,serverPort)) // inizializza una connessione TCP tra


client e server. Il parametro del metodo connect () è l'indirizzo del lato server della connessione.
Dopo l'esecuzione di questa linea di codice, viene effettuata la procedura di handshake a tre vie e
viene stabilita una connessione tra client e server. //

sentence= input ('Inserisci frase in minuscolo:') // La stringa sentence continua a


raccogliere caratteri finché l'utente non termina la linea con un ritorno a capo. //

clientSocket.send(sentence.encode()) // invia la stringa sentence attraverso la socket del


client alla connessione TCP. Si noti che non viene creato un pacchetto ma si lascia cadere i byte
della stringa sentence nella connessione TCP //

modifiedSentence = clientSocket.recv(1024) // caratteri arrivati dal server vengono


assegnati alla stringa modifiedSentence, dove continuano ad accumularsi fino al carattere di ritorno
a capo. //

clientSocket.close()

28
TCPServere.py

from socket import *

serverPort=12000

serverSocket = socket(AF_INET,SOCK_STREAM) // Si crea una socket con rete sottostance


IPv4, di tipo TCP //

serverSocket.bind(('',serverPort)) // viene associato il numero di porta ad una socket di benvenuto


//

serverSocket.listen(1) // il server usare la socket per ascoltare le richieste di connessione da parte


dei client. Il parametro specifica il numero massimo di connessioni da tenere in coda. //

print ('Il server è pronto per ricevere')

while True:

connectionSocket,addr = serverSocket.accept() // Il metodo accept () blocca


temporaneamente l' esecuzione del programma finché il client non bussa alla porta di benvenuto. Nel
riprendere l'esecuzione viene creata una nuova socket nel server, chiamata connectionSocket e dedicata
allo specifico client che richiesto la connessione. //

sentence = connectionSocket.recv(1024).decode() // Stabilita l a connessione TCP, il client


e il server possono scambiarsi byte (ricorda che in UDP non vengono letti byte ma indirizzi ). //

capitalizedSentence = sentence.upper()

connectionSocket.send(("Messaggio Ricevuto"+capitalizedSentence+'\r\n').encode())

connectionSocket.close() // la connectionSocket è chiusa ma la serverSocket rimane aperta per


ritornare il ascolto.//

INTERAZIONE CLIENT/SERVER (TCP)

29
La system-call accept()

Il server utilizza due socket diverse per ogni connessione con un client le quali identificano due connessioni
diverse: una socket di ascolto creata dalla funzione socket() che viene utilizzata durante tutto il processo ed
utilizzata per accettare le richieste di connessione ( nell’esempio precendete la ConnectSocket) e una socket
connessa che viene creata dalla funzione accept() che viene usata per la singola connessione con un certo
client e permette uno scambio di dati con il client ( nell’esempio clientSocket)

Interfaccia

Dato che il server può creare più connessioni con client diversi ha bisogno di una coda per gestire le varie
richieste, quindi la comunicazione con i client si svolge su diverse interfacce. Queste ultime vengono gestise
in questo modo :

il server chiama la accept passando come argomento il socket listening (socket in ascolto), e subito dopo
chiama la fork. Una fork è la modalità attraverso cui un processo crea in memoria una copia di se stesso: la
copia prenderà il nome di processo figlio, mentre il processo originale verrà chiamato processo padre. Il
processo padre chiude il connected socket, e ripete la accept sul listening socket, in attesa della prossima
richiesta di connessione Invece il descrittore del connected socket (socket connesso) restituito dalla accept
resta aperto per il figlio, e viene utilizzato da questo utilizzato per gestire l’I/O con la connessione. Quando
infine il figlio termina il suo lavoro e chiude il connected socket con la close(), la connessione viene
finalmente terminata con la sequenza di FIN.

RICAPITOLANDO

I tipi di protocolli utilizzati dalla socket, ne definiscono la famiglia (o dominio). Possiamo distinguere due
importanti famiglie:

• AF_INET: comunicazione tra host remoti, tramite Internet;

• AF_UNIX: comunicazione tra processi locali, su macchine Unix. Questa famiglia è anche
chiamata Unix

All’interno della famiglia possiamo distinguere il tipo di socket, a seconda della modalità di connessione.
Abbiamo:
• Stream socket: orientati alla connessione (connection-oriented), basati su protocolli affidabili come
TCP o SCTP;
• Datagram socket: non orientati alla connessione (connectionless), basati sul protocollo veloce ma
inaffidabile UDP;
• Raw socket (raw IP): il livello di trasporto viene bypassato, e l’header è accessibile al livello
applicativo.

Raw socket
Questo tipo permette l’invio di dati tramite un protocollo a livello di
trasporto, mantenendo accessibile l’header dei pacchetti (o
datagrammi, in caso di UDP). Viene usati per lo sviluppo di
protocolli o per applicazioni di sicurezza e diagnostica di rete. La
chiamata sockfd = socket(AF_INET, SOCK_RAW, protocol);
produce l’istanziazione di una socket definita rozza. Una tale socket
si aggancia direttamente al livello IP, creando un nuovo protocollo
di quarto livello. Ogni messaggio viene quindi incapsulato
direttamente in un pacchetto IP. Il valore di protocol identifica il
numero che si desidera assegnare al protocollo in questione.
Questo numero sarà pertanto il valore dell’omonimo campo
nell’intestazione dei datagrammi IP inviati da una tale socket. Una
volta allocata una raw socket è possibile gestire completamente
l’accesso all’intestazione del pacchetto IP, cambiando i singoli campi a proprio piacimento.

30
Capitolo 4 : LIVELLO RETE

Il ruolo del livello di rete è quello di trasferire pacchetti da un host ad un altro. Per fare questo è possibile
identificare due importanti funzioni:

-inoltro :azione locale con cui il router trasferisce i pacchetti da un' interfaccia di ingresso a quella in uscita.

-instradamento ( routing ): processo di rete che determina i percorsi dei pacchetti nel loro viaggio dalla
sorgente alla destinazione, attraverso degli algoritmi di instradamento.

Per inoltrare i pacchetti i router estraggono dal campo di intestazione del pacchetto il valore che utilizzano
come indice nella tabella di inoltro (tabella di forwarding)

Nel primo capitolo si è discusso circa le reti a circuito virtuale e datagram (che sono entrambe reti a
commutazione di pacchetto ) , evidenziandone le differenze. In questo capitolo verranno discusse in modo
più ampio.

RETI A DATAGRAM:

Supponiamo che un host voglia inviare un pacchetto in una rete datagram, allora prima lo contrassegna con
l'indirizzo del destinatario e poi lo immette nella rete. I pacchetti passano attraverso una serie di router che
utilizzano gli indirizzi di destinazione per inoltrarli. Ogni router presenta una tabella di inoltro che fa
corrispondere gli indirizzi di destinazione alle interfacce di collegamento; il router quindi inoltra il pacchetto
sull’ interfaccia scelta. Nella figura 22 è illustrato un esempio: un pacchetto arriva ad un router che ha 4
interfacce , da 0 a 3. Nella tabella di inoltro ci sono un
numero di righe pari ai possibili indirizzi di
collegamento , che in questo caso sono 4 . Il router
confronta il prefisso dell’indirizzo di destinazione del
pacchetto con ogni riga della tabella. Se c’è
corrispondenza ha trovato l’interfaccia su cui inviare il
Figura 22 pacchetto. Supponiamo che l’indirizzo di
destinazione del pacchetto sia
1001000 00010111 00011000 10101010, allora il
router confronta il prefisso con le righe della tabella e
risultano i primi 22 bit compatibili con l’interfaccia 2 e i primi 24 bit con l’interfaccia 1. Nell’ambiguità viene
scelto il prefisso più lungo quindi il pacchetto sarà inviato lungo sul collegamento 1 anziché 2.

RETI A CIRCUITO VIRTUALE:

Il pacchetto di un circuito virtuale ha un numero


identificativo ( VC) nella propria intestazione,
diverso su ciascun collegamento. Quando il
pacchetto passa tra i router ,subisce modifiche del
VC. Il router modifica il VC del pacchetto,
rilevandolo dalla tabella di inoltro. In figura 23
viene scelto un path. Il pacchetto lascia l’host
all’estrema sx e passa attraverso l’interfaccia 1 del
primo router che incontra lungo il cammino. Il
router legge nella tabella di inoltro il VC associato
per questa interfaccia ed è 12. Questo
procedimento viene fatto per ogni transito del
pacchetto nei vari collegamenti e la tabella viene
dinamicamente aggiornata.
Figura 23
31
IP- INTERET PROTOCOL

IP è un protocollo di livello rete usato per lo scambio di dati tra reti di calcolatori. I dati ( pacchetti IP )sono
trasportati con la tecnica dei datagrammi. Un pacchetto
IP è anche chiamato datagramma. È costituito da un
header e un’area dati . I datagrammi possono avere
dimensioni diverse ,la dimensione dell’header è
solitamente fissata (20 byte) . Un datagramma può
contenere fino a un massimo di 65535 byte (216 – 1).

Version: 4 bit, versione del protocollo IP cui il pacchetto è conforme.

IP header length 4 bit, lunghezza dell'header, in multipli di 32 bit (max 60 byte)


(IHL):
Type-of-Service 8 bit, specifica come un protocollo di livello superiore vorrebbe che il pacchetto fosse
(ToS): trattato

Total length: 16 bit, specifica la lunghezza in byte dell’intero pacchetto (header + dati)
Time-to-live 8 bit, contatore che viene gradualmente decrementato fino a zero, punto in cui il
(TTL): pacchetto viene scartato. Serve ad evitare che un pacchetto resti perennemente in
circolo

Protocol: 8 bit, indica il protocollo di livello superiore che riceve il pacchetto dopo che
l’elaborazione IP è terminata. Analogo al numero di porto di livello trasporto: 6 indica
TCP, 17 indica UDP
Header 16 bit, aiuta a garantire l’integrità dell’header IP
checksum:
Source Address: 32 bit, specifica il nodo mittente
Destination 32 bit, specifica il nodo ricevente
Address:
Identification: I pacchetti possono essere frammentati lungo il percorso. Questo campo (16 bit) è un
identificativo del datagramma

Flags: Il bit D indica se il pacchetto può essere frammentato, Il bit M indica se il pacchetto è
l’ultimo frammento
Fragment offset 13 bit, identifica la posizione del frammento all’interno del pacchetto

Frammentazione e riassemblaggio

Per il trasporto da un router a un altro, i datagrammi IP sono incapsulati in frame a livello di collegamento.
Definiamo la massima quantità di dati che un frame a livello di collegamento può trasportare come MTU. Se
un pacchetto di dimensione N arriva ad un router e deve essere trasmesso su un link di uscita con MTU<N, il
pacchetto viene frammentato. Ogni frammento è trasmesso come singolo pacchetto IP. La dimensione di
ogni frammento sarà un multiplo di 8 byte tranne l’ultimo pacchetto per differenziarsi. Inoltre tutti i frammenti
hanno lo stesso ID number. I frammenti verrano riassemblati a destinazione nell’ordine in cui sono arrivati.
Nel caso in cui alcuni frammenti non arrivano, viene scartato il pacchetto.

32
Indirizzamento IP

Indirizzi IP sono lunghi 32 bit ( 4 byte). Ogni byte identifica un campo. Ad ogni host è assegnato un indirizzo
IP o indirizzo Internet, unico. Ogni indirizzo IP è diviso in un prefisso e un suffisso: Il prefisso indica la rete
alla quale l’host è collegato , Il suffisso identifica l’host all’interno della rete (host su reti diverse possono
avere lo stesso suffisso, non è vero il viceversa). La notazione “dotted decimal” rappresenta gli indirizzi IP
come 4 numeri decimali separati da un punto. Ogni numero decimale,è compreso tra 0 e 255.

Ad assegnare gli indirizzi IP , c’è l’Internet Corporation for Assigned Names and Numbers (ICANN), che
gestisce il DNS e assegna i nomi dei domini.

Una rete, di solito, è formata da host e router connessi tra loro. I router hanno minimo due interfacce. Una
rete in realtà è l’insieme di tante sottoreti. Per determinare le sottoreti si sgancino le interfacce da host e
router in maniera tale da creare isole di reti isolate delimitate dalle interfacce. Ognuna di queste reti isolate
viene detta una sottorete (subnet).

CLASSI:

La parte di indirizzo che specifica la rete e quella che specifica l’host non
hanno lunghezza fissa, ma variano a seconda della classe a cui appartiene
l’indirizzo. Sono state definite 5 classi :

-3 (A, B, C) sono usate per gli indirizzi degli host e si differenziano per la lunghezza della parte rete/host.

- 1 (D) è usata per il multi cast;

_-1 (E) è riservata per usi futuri.

In figura 24 sono evidenziate le lunghezze di


ogni indirizzo appartenente ad una determinata
classe. La notazione riportata di lato ad ogni
lunghezza , segue la “dotted decimal”, cioè è
formata da quattro campi separati da un punto
dove ogni campo è 1byte. Le lettere a,b,c
rappresentano il prefisso fisso , che non può
essere modificato e che tutti gli host
appartenenti a quella rete avranno uguale. Le
lettere x,y,z, sono i campi variabili ed, a
seconda di quanti bit rappresentano,
individuano una classe. Vediamo nello
specifico:

▪ La classe A è del tipo a.x.y.z. cioè ha 8 bit fissi


( in realtà 7 ) e 24 variabili. Ciò vuol dire che
può ospitare 224 host e può essere suddivisa in
un massimo di 27 =128 sottoreti. Inoltre il Il
primo byte dell’indirizzo è compreso tra 0 e
Figura 24
127;

▪ La classe B è del tipo a.b.x.y. cioè ha 16 bit fissi ( in realtà 14) e 16 variabili. Ciò vuol dire che può ospitare
216 host e può essere suddivisa in 214 sottoreti. Il primo byte è compreso tra 128 e 191;

▪ La classe C è del tipo a.b.c.x cioè ha 24 bit fissi ( in realtà 21 ) e 8 variabili. Ciò vuol dire che può ospitare
28 = 256 host al massimo e può essere divisa in 221 sottoreti. Il primo byte è compreso tra 192 e 223.

33
La suddivisione degli indirizzi IP in classi non è efficiente perché comporta lo spreco di indirizzi, in quanto 32
bit ⇒ 4 miliardi di indirizzi diversi, ma non tutti vengono usati. I rimedi sono Indirizzi privati
e sottoreti.

Esistono alcuni blocchi di indirizzi riservati per uso privati e sono:


_ 10.0.0.0 - 10.255.255.255 Classe A
_ 172.16.0.0 - 172.31.255.255 Classe B
_ 192.168.0.0 - 192.168.255.255 Classe C
I router di Internet non inoltrano pacchetti aventi indirizzo sorgente o destinazione compreso in uno di questi
blocchi.

La rete stessa ha un indirizzo, il cui suffisso è costituito da tutti bit ‘0’ (Network address). Per mandare un
messaggio in broadcast ad una rete ( cioè inviare un messaggio a tutti gli host della rete ) il suffisso è
costituito da tutti ‘1’ (Directed broadcast address) ovvero 255.255.255.255. Ogni indirizzo che comincia con
127 indica il computer locale 127.0.0.1 è il più comune, ma va bene anche 127.0.44.53.

SOTTORETI

Gli indirizzi IP sono assegnati in modo che tutti gli host sulla stessa rete locale appartengono alla stessa
sottorete. Una sottorete è individuata dai bit del prefisso più alcuni bit presi in prestito dal suffisso, come
specificato dalla subnet mask. Una subnet mask è una stringa di 32 bit associata ad ogni host:

Gli ‘1’ definiscono la porzione di indirizzo che identifica la sottorete

Gli ‘0’ definiscono la porzione di indirizzo che identifica l’host

La netmask può essere riportata insieme l’IP nel seguente formato : a.b.c.d/x dove x è il numero di “1” della
netmask.

L’indirizzo della sottorete si ottiene mediante un AND bit a bit tra l’indirizzo dell’host e la netmask

Esempio: vogliamo utilizzare un unico indirizzo di classe B avendo diverse reti fisiche. Se prendiamo in
prestito 8 bit dal suffisso avremo a disposizione 256 sottoreti, ognuna delle quali potrà avere 254 host

L’host 128.192.56.50 con netmask 255.255.255.0 appartiene alla sottorete 128.192.56.0

10000000.11000000.00111000.00110010.
11111111.11111111.11111111.00000000.
10000000.110000000.00111000.00000000

Quando un host che deve trasmettere un pacchetto confronta la destinazione con la propria subnet mask: se
la destinazione è sulla stessa sottorete, invia sulla LAN,altrimenti, invia al gateway.

Quando bisogna suddividere la rete in sottoreti viene suddivisa anche la lunghezza dell’indirizzo IP
appartenente ad una data classe. In particolare per ogni classe avremo la seguente suddivisione:

Si prendono in considerazione i bit variabili di ogni classe e si dividono in subnet e host. La dimensione della
subnet è pari ad N tale che 2𝑁 = 𝑁𝑈𝑀𝐸𝑅𝑂 𝐷𝐼 𝑆𝑂𝑇𝑇𝑂𝑅𝐸𝑇𝐼 𝑉𝑂𝐿𝑈𝑇𝐸

La dimensione dell’host è pari a P tale che 2𝑃 = 𝑁𝑈𝑀𝐸𝑅𝑂 𝐷𝐼 𝐻𝑂𝑆𝑇 𝑃𝐸𝑅 𝑂𝐺𝑁𝐼 𝑆𝑂𝑇𝑇𝑂𝑅𝐸𝑇𝐸. Ovviamente la
somma di N e P dovrà essere uguale al numero di bit variabili di ogni sottoclasse.

34
SOTTORETE DI SOTTORETE:

Fino ad ora abbiamo suddiviso una rete in tante sottoreti ognuna delle quali ospita lo stesso numero di host.
Nella realtà le reti che
devono collegarsi sono
diverse tra loro. Si pensi
ad una connessione tra
una rete LAN, attraverso
qualche router, e una
rete generica .
Sicuramente la rete LAN
ospita pochi host in
quanto è una rete locale;
i router che si collegano
tra loro, inoltre, formano una sottorete formata da 2 singoli host che sono le interfacce che comunicano. In
definitiva generando sottoreti con egual numero di host si rischia di avere molto indirizzi inutilizzati. La
soluzione migliore è quella di creare sottoreti di sottoreti. Per spiegare come avviene si fa riferimento al
secondo esercizio svolto di seguito.

ESERCIZIO N° 1
SVOLTO SULL’
INDIRIZZAMENT
O IP:

35
ESERCIZIO N° 2

SVOLTO

SOTTORETE DI

SOTTORETE:

36
INSTRADAMENTO

IP assume una corrispondenza biunivoca tra reti fisiche e subnet: il routing è implicito all’interno di una
subnet ed è gestito dalla rete fisica mentre è esplicito tra subnet diverse ed è gestito dai router tramite
tabelle di instradamento. I protocollo che gestiscono l’instradamento determinano il percorso che i
datagrammi seguiranno per giungere a destinazione, in quanto calcolano le tabelle di inoltro che vengono
usate per inoltrare i pacchetti nella rete.

Vediamo un esempio di tabelle di instradamento in riferimento dell’esercizio n°2:

ROUTER INDIRIZZO IP SOTTORETE LINK COLLEGAMENTO


R1 192.168.1.0/25 1 LAN1-R1
R2 192.168.1.0/25 1 R2-R1-LAN1
192.168.1.160/27 2 R2-LAN2
R3 192.168.1.128/27 3 LAN2-R3
192.168.1.192/27 4 R3-LAN3

PROTOCOLLO DHCP

Ogni qualvolta un host ( o un router) si connette ad una rete bisogna effettuare una configurazione. I router,
di solito, vengono configurati manualmente. Gli indirizzi degli host possono essere configurati utilizzando il
dynamic host configuration protocol (DHCP), protocollo che ha lato client/server . DHCP consente a un host
di ottenere un indirizzo IP in modo automatico, conoscere
la netmask, l'indirizzo del router per uscire dalla sottorete
detto gateway) e l'indirizzo del server DNS locale. Si
articola in 4 fasi:

1)DHCP discover: lì host identifica il server DHCP inviando


un pacchetto UDP attraverso la porta 67. Il pacchetto UDP
è incapsulato in un datagramma IP, con l'indirizzo IP di
destinazione broadcast di 255.255.255.255 e indirizzo IP
sorgente di 0.0.0.0 , cioè "questo host''. Il client invia quindi
il frame in broadcast a tutti i nodi della sottorete.

2)DHCP offer: il server risponde al client inviando un


messaggio di offerta nel quale propone la your address
name (yaddr) al client , la netemask e l’intervallo di tempo
della connessione. L’indirizzo IP di destinazione è
anch’esso broadcast in quanto l offerta arriva a tutti i client interessati.

3)DHCP reqeust: Il client sceglie tra le offerte dei server e risponde con un messaggio che riporta i parametri
di configurazione.

4)DHCP ACK: Il server risponde con un messaggio che conferma i parametri richiesti.

NAT

Network address translation è il nome di una tecnica che consente ad un router di agire come intermediario
tra una LAN ( rete domestica ) e una WAN ( rete interurbana). La NAT nasconde la rete LAN all’esterno e
trasforma il suo indirizzo IP che verrà utilizzato dalla WAN. L’uso più comune del NAT è quello di mappare
un insieme di indirizzi privati su di un unico indirizzo pubblico, utilizzando differenti porti (di livello trasporto)
per mantenere traccia dell’indirizzo privato di provenienza Quando il router riceve un pacchetto inviato da un
computer della rete privata ad un computer esterno, salva in una tabella l’indirizzo e il porto del mittente,
oltre ai nuovi valori che esso assegna. Tale tabella viene consultata anche quando il router riceve un
pacchetto in entrata susseguente ad un pacchetto in uscita. Per una maggiore comprensione è sufficiente
osservare l’esempio che segue:
37
WAN

NAT
LAN

Indirizzo IP LAN:
Indirizzo IP visto da WAN:
169.254.78.23,
10.0.10.47, porta5478
porta3478

LAN WAN
169.254.78.23, porta3478 10.0.10.47, porta5478

Tuttavia la NAT presenta un limite: il livello di trasporto supportato per l’invio dei pacchetti è solo di tipo UDP.
Applicazioni P2P , che hanno bisogno di una connessione affidabile TCP, utilizzano la NAT passando
attraverso router sui quali essa non è attiva, istaurando così una connessione TCP ma raggirando il
problema. Una vera soluzione a questo limite è quella di utilizzare UPnP, Universal Plug and Play, un
protocollo che consente a un host di individuare e configurare una NAT vicina.

ALGORITMI DI ROUTING

Nella fase di routing avviene l’instradamento dei pacchetti attraverso un percorso. L’obiettivo è quello di
trovare il miglior percorso. Esistono algoritmi di routing che svolgono tale compito. Per formulare i problemi di
instradamento abbiamo bisogno delle seguenti nozioni:

Grafo: G( N,E ), un insieme di N nodi ( i router ) ed E archi ( collegamenti fisici);

Dati due nodi x e y ∈ 𝑁 𝑒 (𝑥, 𝑦) ∈ 𝐸 ∶ il costo del collegamento è c(x,y) ed è associato all’ arco (x,y);

Se (x,y) ∉ 𝐸 => 𝑐(𝑥, 𝑦) = ∞ ;

Se il grafo è NON orientato allora (x,y)=(y,x) e c(x,y)=c(y,x);

Se (x,y) ∈ 𝐸 allora x e y sono detti adiacenti;

Un percorso in un grafo G =(N,E) è una sequenza di nodi (x 1, x2, ••• , xn) tali che ciascuna delle p coppie
x1, x2,), (x2, x3,), ••• , (xP -1,xP) ∈ 𝐸 . Il costo di un percorso (x 1, x2, ... , xP) è semplicemente la somma di
tutti i costi degli archi lungo il percorso, ossia c(x1 , x2) + c(x1 , x3) + . .. + c(x P-1, xP).

Costi (o metriche) dei link:

BANDWIDTH capacità di un link, tipicamente definita in bit per


secondo (bps)
DELAY il tempo necessario per spedire un pacchetto da una
sorgente ad
una destinazione
LOAD una misura del carico di un link
RELIABILITY riferita, ad esempio, all’error rate di un link
HOP COUNT il numero di router da attraversare nel percorso dalla
sorgente
alla destinazione
COST un valore arbitrario che definisce il costo di un link

38
Gli algoritmi di instradamento posso essere classificati in più modi:

• GLOBALE o DECENTRALIZZATO: globale se informa a tutti i nodi circa le informazioni complete su


connettività e costi dei nodi adiacenti ; decentralizzato se i nodi conoscono inizialmente solo le
informazioni sui propri vicini e iterativamente vengono a conoscenza delle informazioni sui costi e
connettività inerenti agli altri nodi;

• STATICO o DINAMICO: statico se i percorsi cambiano raramente; dinamico se i percorsi cambiano


al variare del volume di traffico o della topologia della rete;

• SENSITIVE O INSENSITIVE: sensitive se è sensibile al carico della rete, viceversa insensitive.

Un algoritmo globale è detto LINK STATE (LS), in particolare quello che studieremo è detto algoritmo di Di
jkstra:

Un router trasmette le informazioni dei nodi adiacenti a tutti gli altri router della rete tramite un Link State
Packet (LSP). Inoltre memorizza gli LSP trasmessi dagli altri router e costruisce una mappa della rete dalla
quale calcola la tabella di instradamento applicando l'algoritmo di Dijkstra . Un Link State Packet (LSP)
contiene lo stato di ogni link connesso al router, l’identità di ogni vicino connesso all'altro estremo del link , il
costo del link, il numero di sequenza per il LSP, la checksum e la lifetime. LSP è trasmesso in flooding su
tutti i link del router. Il flooding è un protocollo di instradamento usato dai router che inoltrano
un pacchetto in ingresso su tutte le linee ad eccezione di quella da cui proviene. Alla ricezione dell’ LSP il
router svolge le seguenti azioni:

Se non ha mai ricevuto LSP da quel router (o se LSP è più recente di quello precedentemente
memorizzato) memorizza il pacchetto e lo ritrasmette in flooding ;

Se LSP ha lo stesso numero di sequenza di quello posseduto non fa nulla;Se LSP è più vecchio di quello
posseduto trasmette al mittente il pacchetto più recente. La notazione utilizzata è la seguente:

D(v): costo corrente del percorso, dalla sorgente al nodo v

p(v): predecessore (collegato a v) lungo il cammino dalla sorgente a v

N’: insieme di nodi per cui la distanza è stata trovata

Inoltre verranno fatte due ipotesi semplificative: il grafo non è orientato e il


costo è di tipo cost.

In figura 25 è riportato un grafo con 4 nodi (router) e 6 archi con i rispettivi costi
assegnati.

Vediamo i passi dell’algoritmo implementati in un linguaggio di pseudoprogrammazione:


Figura 25
Inizializzazione:

1. N’ ={A} // partenza nodo A //


2. Per tutti i nodi x // x appartiene ad N = insieme nodi della rete //
3. If ( x adiacente ad A )
4. D(x) = c(A,x) // in questa fase si assegnano tutti i costi dei nodi adiacenti //
5. Else D(x) = ∞
39
6.
7. LOOP
8. If ( y non appartenente ad N’ & D(y) il minimo tra tutti i D(x) ) // y appartiene ad N //
9. Aggiungi y ad N’
10. Aggiorna D(x) per tutti i nodi x adiacenti a y e non appartenenti ad N’
11. D(x) = min {D(x), D(y)+c(x,y)} // se il costo vecchio è più piccolo di quello nuovo , si lascia il
vecchio, altrimenti si aggiorna e si sceglie quello che ha cammino più corto //
12. If (N > N’ ) ricomincia LOOP
13. Else esci

N’ D(B),p(B) D(C ), p (C) D(D),p(D)


A 6,A 4,A ∞
AC 5,C - 10,C
ACB - - 8,B
ACBD - - -

Nella prima riga sono stati inseriti tutti i costi e i rispettivi predecessori del nodo A. Successivamente è stato
scelto il costo minore ed è stato aggiunto il predecessore all’insieme N’. Si noti che il costo per arrivare a B è
stato aggiornato: è stato scelto il minimo tra il costo vecchio (6) ed il costo calcolato dall’ultimo predecessore
aggiunto ( D(C) + c(c,b) = 4+1 ). Una volta aggiunto il predecessore, la cella diventa inutilizzata (-) .

Infine il grafo diventa:

Rappresenta il miglior percorso per arrivare a tutti i nodi partendo da A. Per avere il grafo finale basta
ricalcare soltanto gli archi scelti durante l’algoritmo.

Il numero dei passi dell’algoritmo nella prima fase è pari ad N, mentre nella seconda fase è pari a ∑𝑁
𝐼=1(𝑁 −
𝑖). Nel nostro esempio sono 10 passi circa quindi in generale la complessità è quadratica rispetto al numero
di nodi.

Consideriamo ora il caso in cui il costo dipende dal traffico e quindi


dalla congestione della rete. In questo caso potrebbe capitare che un
percorso ottimale che smaltisca traffico sia seguito in senso orario ( ad
esempio se il traffico si trovo in senso antiorario ) . Si vengono a
creare delle oscillazioni a causa dell’alternarsi del verso di
percorrenza. Una soluzione è quella di non sincronizzare i router nel
lancio dell’algoritmo.

VANTAGGI LS : Può gestire reti di grandi dimensioni, ha una


convergenza rapida, difficilmente genera loop, ogni nodo ha la mappa della rete.

SVANTAGGI LS : Molto complesso da realizzare ,i messaggi scambiati sono considerevoli.

DISTANCE VECTOR

L’algoritmo decentralizzato che studieremo è quello detto Distance Vector (DV). E’ iterativo ( come LS ),
distribuito e asincrono in quanto non richiede che tutti i nodi operino contemporaneamente. Il concetto di
costo utilizzato è quello del costo del percorso a costo minimo 𝑑𝑥 (𝑦) dal nodo x a y. La formula di Bellam-
Ford afferma che 𝑑𝑥 (𝑦) = 𝑚𝑖𝑛𝑣 { 𝑐( 𝑥, 𝑣 ) + 𝑑𝑣 (𝑦)} con v inteso come nodo adiacente a x. Il significato è il
seguente: il costo del percorso a costo minimo per andare da x a y è il costo minimo tra tutti i costi dei
percorsi per arrivare a y passando per altri v nodi adiacenti ad x.

40
Calcoliamo secondo Bellam-Ford il costo del percorso a costo minimo per
andare da x a y ( Figura 26 ) :

𝑑𝑥 (𝑦) = 𝑚𝑖𝑛{ (𝑐( 𝑥, 𝑎) + 𝑑𝑎 (𝑦) ); ( 𝑐(𝑥, 𝑏) + 𝑑𝑏 (𝑦)); ( 𝑐(𝑥, 𝑐 ) + 𝑑𝑐 (𝑦))}

𝑑𝑥 (𝑦) = 𝑚𝑖𝑛{ (1 + 5 ); ( 3 + 2); ( 4 + 2)} = 5

Tale formula sarà utilizzata nell’algoritmo: Vengono create delle tabelle per
ogni nodo della rete. Le righe di tali tabelle rappresentano il vettore delle
Figura 26 distanze. Una riga di un generico nodo n è del tipo
𝐷𝑛 = [𝐷𝑛 (𝑛) 𝐷𝑛 (𝑛 − 1) . . . . . 𝐷𝑛 (0)] con n, n-1___,0 tutti i vicini di n

Figura 27

Ad ogni nodo x :

1. Inizializzazione:
2. Per tutti i nodi C adiacenti a A :
3. Metti ∞ nelle righe diverse da C e metti c(A,C) solo
nella riga C
4. Per tutte le tabelle t
5. Manda la riga completa ad ogni vicino
6.
7. LOOP
8. Aspetta fino a quando c’è una modifica o un vicino
invia un aggiornamento
9. If ( c(A,C) cambia di p)
10. Cambia il costo in tutte le destinazioni aggiungendo a quello vecchio p
11.
12. Else if ( un vicino invia un aggiornamento )
13. ricalcola il vettore delle distanze con la formula di Bellam-Ford
14.
15. if (hai un nuovo percorso minimo per una qualunque destinazione)
16. manda il nuovo valore a tutti i vicini
17.
18. forever

In figura 27 sono mostrate le tabelle di instradamento dette anche tabelle di distanze in riferimento alla rete
di lato. La rete è formata da 3 nodi e 3 archi. Le prime 3 tabelle ( viste per colonna ) rappresentano la fase
iniziale dell’algoritmo. Le altre 6 tabelle rappresentano gli aggiornamento e quindi la fase LOOP: la tab x
riceve la riga y e z dalle tabelle iniziali rispettivamente tab y e tab z , mentre la riga x viene aggiornata
secondo la formula di Bellam-Ford , per arrivare a z partendo da x c’è un percorso meno costoso, che
prevede il passaggio per y; lo stesso ragionamento viene iterato per le tab y e z. Al successivo passo le
tabelle vengono nuovamente aggiornate . Ad esempio la tab x del 2° aggiornamento ( nell’angolo a destra)
riceve la riga y dalla tab y del 1° aggiornamento e la riga z dalla tab z del 1° aggiornamento, la riga x viene
aggiornata qualora ci fossero nuove informazioni ( in questo caso non ci sono ).

MODIFICA DEI COSTI DURANTE L’ALGORITMO DV

Quando un nodo che esegue l' algoritmo DV rileva un cambiamento nel costo dei collegamenti con un vicino
aggiorna il proprio vettore delle distanze e, se si verifica un cambiamento nel costo del percorso a costo
minimo, trasmette ai suoi vicini il proprio nuovo vettore delle distanze.

41
Supponiamo che il costo del collegamento tra x e y cambi da 2 a 10 . In un primo momento (t0) il nodo y
rileva il cambiamento e aggiorna il proprio distance vector e informa i vicini. Al tempo t1 il nodo z fa lo stesso
calcolando il nuovo costo del percorso minimo verso x. In questo caso z riformula come percorso minimo ,
per arrivare a x, quello diretto, mentre ,precedentemente alla modifica, il percorso era quello passante per y.
Si crea un instradamento ciclico: quando z deve arrivare a x conviene passare per y( ancora non è avvenuto
l aggiornamento ) , quando y deve arrivare a x passa per z . In definitiva un pacchetto destinato a x rimbalza
da y a z per sempre. SOLUZIONE: inversione avvelenata (poisoned reverse) . Se z instrada tramite y per
giungere alla destinazione x, allora z avvertirà y che la sua distanza verso x è infinita, ossia z comunicherà a
y che 𝐷𝑍 (𝑥) = ∞ anche se in realtà è 7, e continuerà a dire questa piccola bugia fintanto che instrada verso
x passando per y. Dato che y crede che z non abbia un percorso verso x, non tenterà mai di instradare verso
x passando per z, per tutto il tempo in cui z continua a instradare verso x passando per y.

LS vs. DV

LS DV
Complessità messaggio richiede che ciascun nodo richiede scambi di messaggi
conosca il costo di ogni tra nodi adiacenti.
collegamento nella rete. Ciò
implica l'invio è dell’ordine N·E
messaggi
Velocità convergenza È dell’ordine N^2 Può convergere anche molto
lentamente
Robustezza ( se un router è .. sarà errata solo l’informazione .. propagherà informazioni errate
guasto .. ) che il singolo router invia agli altri per ogni router

SISTEMI AUTONOMI (AS)

Fino ad ora abbiamo visto esempi di reti formate da pochi router e qualche collegamento tra di essi. In
internet la situazione si complica: il fatto che ci siano centinaia di milioni di host ha fatto sì che gli algoritmi di
instradamento non fossero fatti tra singoli router ma , bensì, tra gruppi di router chiamati Sistemi Autonomi.
Tali Sistemi dovranno avere un algoritmo che gestisce la situazione INTERNA dei router ,che lo
caratterizzano, e un algoritmo che gestisce l’interazione TRA più sistemi attraverso i router gateway ( router
di un sistema autonomo che si affacciano ad altri sistemi, ai bordi ). A tal
proposito si distinguono:

- Il protocollo di instradamento interno al sistema autonomo (tra router) ,


INTRA-AS ROUTING PROTOCOL;
- Il protocollo di instradamento tra sistemi autonomi, INTER-AS ROUTING
PROTOCOL.

Sistemi autonomi che devono comunicare tra loro devono necessariamente usare lo stesso INTRA-AS
protocol.

Quando un sistema autonomo ha più router gateway per arrivare ad un altro sistema si utilizza l’approccio
della “patata bollente”:

Consideriamo 3 sistemi autonomi come in figura 28 : AS1,AS2,AS3 .I router gateway sono 3a e 2a per AS3
e AS2 e 1c,1b per AS1. Secondo l’approccio hot-potato un pacchetto che parte da 1d sceglie se andare
verso 1c o 1b a seconda del costo minore sui collegamenti. Se la destinazione è un router del sistema AS3 e
il costo minore è sul collegamento di 1b, hot-potato invia il pacchetto a 1b egoisticamente anche se
aumenta il percorso da seguire . L’informazione sui costi è data
dal protocollo intra-AS .
Figura 28

42
I protocolli intras-AS sono noti come IGP (interior gateway protocol ). In internet sono utilizzati due tipi:

1)RIP ( routing information protocol ) di tipo Distance Vector , non trattato nel corso;

2)OSPF (open shortest path first) di tipo Link State;

Esiste, invece , un unico protocollo intra-AS : BGP (border gateway protocol)

OSPF

Il termine open nell'acronimo indica che le specifiche del protocollo sono pubblicamente disponibili. E’ un
protocollo link state che utilizza il flooding di informazioni riguardo lo stato dei collegamenti e l'algoritmo di
Dijkstra per la determinazione del percorso a costo minimo. In OSPF, un router costruisce una mappa
topologica, cioè un grafo, dell'intero sistema autonomo e manda in esecuzione (locale) l’algoritmo di Dijkstra
per determinare un albero dei percorsi minimi verso tutte le sottoreti. I costi dei collegamenti vengono fissati
dall'amministratore di rete. collegamenti. . In OSPF, ogni qualvolta che si verifica un cambiamento nello stato
di un collegamento(una variazione di costo), il router manda informazioni di instradamento via broadcast a
tutti gli altri router nel sistema autonomo. Inoltre, invia periodicamente lo stato dei collegamenti (almeno ogni
30 minuti), anche se questo non è cambiato.

Perché usare OSPF: trasferimento affidabile dei messaggi, se due percorsi hanno lo stesso costo si
possono utilizzare entrambi, supporto integrato per l'instradamento unicast e multi cast, possibilità di
strutturare i sistemi autonomi in modo gerarchico.

Implementazione: Un sistema autonomo OSPF può essere configurato in aree che eseguono diversi
algoritmi di instradamento OSPF: ciascun router in un'area invia lo stato dei suoi collegamenti agli altri router
nell' area. In ogni area, uno o più router di confine d'area (area border router) si fa carico dell' instradamento
dei pacchetti indirizzati all' esterno. Un' area di un sistema autonomo OSPF è configurata per essere l' area
di dorsale (backbone area), il cui ruolo principale è quello di instradare il traffico tra le altre aree nel sistema
autonomo. La dorsale contiene sempre tutti i router di confine del sistema autonomo, ma non
necessariamente soltanto quelli. L'instradamento nell' area di un sistema autonomo richiede che i pacchetti
siano instradati dapprima verso il proprio router di confine (instradamento intra-area) e da questi, attraverso
la dorsale, al router di confine dell' area di destinazione, che provvede a farli pervenire alla destinazione
finale.

BGP

Il border gateway protocol versione 4, dettoBGP4 o semplicemente BGP, rappresenta l' attuale standard dei
protocolli di instradamento tra sistemi autonomi in Internet e mette a disposizione di ciascun sistema
autonomo un modo per: ottenere informazioni sulla raggiungibilità delle sottoreti da parte dei sistemi
confinanti; propagare le informazioni di raggiungibilità a
tutti i router interni a un sistema autonomo; determinare
percorsi "buoni" verso le sottoreti sulla base delle
informazioni di raggiungibilità e delle politiche del
sistema autonomo. Due router che si scambiano
informazioni in BGP garantiscono una connessione
affidabile, in particolare tra router di uno stesso sistema
autonomo si istaura una connessione TCP chiamata
iBGP e router di sistemi diversi eBGP. I router sono bett
BGP peer e la connessione TCP è detta sessione BGP.
Un sistema autonomo viene identificato dal suo numero
di sistema autonomo ,ASN, globalmente univoco Non
tutti i sistemi autonomi hanno un ASN. In particolare, i cosiddetti sistemi autonomi stub, che trasportano solo
traffico, non hanno un ASN.

La selezione della rotta da seguire può essere fatta sulla base di tre tecniche:
43
1) Tecnica del NEXT-HOP ( patata bollente);
2) Tecnica Route-selection (AS-PATH);
3) Tecnica politica decisionale;

Per comprendere a fondo come funzionano consideriamo una rete di esempio e applichiamole tutte:

La rete in figura è formata da tre AS . L’obiettivo è quello di scegliere la rotta dal router 1b a quello x.

Tecnica HOT-POTATO:

Il router 1b può scegliere 2 path per arrivare ad x. Il primo path è quello che attraversa AS2 mentre il
secondo è quello che arriva direttamente al router 3d di AS3. Secondo questa tecnica il router 1b sceglie il
primo path anche se è quello meno
ottimale, perché più lungo. Questo
perché vuole immediatamente
lasciare il compito di instradamento
al router adiacente che è 1c. Nella
tabella di instradamento alla voce di
destinazione x ,allora, corrisponderà
l’interfaccia del router 1b che si
affaccia su 1c.

Tecnica Route-Selection:

viene scelto il secondo path perché si sceglie quello minimo. Un ulteriore ambiguità si crea nella scelta per
arrivare a 1d. Bisogna passare per 1a o 1c? Semplicemente si sceglie 1a perché 1c è un router di frontiera e
di solito è più trafficato.

Tecnica di politica decisionale:il path viene scelte in base ad accordi economici o accordi tra domini.

PERCHE’ PROTOCOLLI DIVERSI PER INTRA-AS E INTER-AS ?

Politiche: nell’ inter-AS l’ admin vuole il controllo sul il suo traffico instradato, che attraversa la sua rete.Nell’
intra-AS l’ amministratore è singolo, quindi nessuna decisione politica necessaria.

Scalabilità: Rappresentare un algoritmo che gestisca instradamento interno esterno di un sistema autonomo
risulterebbe troppo complicato. Con protocolli diversi se un singolo dominio amministrativo diventa troppo
grande, è sempre possibile ripartirlo ed effettuare instradamento tra i sottosistemi. Ricordiamo che OSPF
consente la costruzione di una simile gerarchia dividendo gli AS in aree.

Prestazioni: in questo modo intra-AS può concentrarsi sulle prestazioni e inter-AS a può dominare la
performance.

ICMP: Facciamo il quadro della situazione: il livello di rete di Internet presenta tre componenti principali: il
protocollo IP, i protocolli di instradamento OSPF E BGP e, infine, il protocollo ICMP ( internet control
message protocol). Le sue funzionalità sono le
seguenti : verificare lo stato della rete,riportare
anomalie,scoprire la netmask e migliorare il
routing. I messaggi ICMP vengono trasportati
come payload di IP; hanno un campo tipo e un
campo codice ( vedi tabella). Attraverso questo
protocollo è possibile spiegare il funzionamento
dei comandi “ping” e “traceroute”. Quest’ultimo è
stato già discusso inizialmente e ricordiamo che
viene utilizzato per scoprire il percorso seguito
per raggiungere una certa destinazione. Il

44
comando ping è invece utilizzato per verificare la connettività a livello rete tra due host.

Funzionamento PING (vedi figura di lato ): il programma ping invia un messaggio ICMP di tipo 8 e codice 0
(richiesta echo )verso l' host specificato. L'host destinazione, vedendo la richiesta di echo, risponde con un
messaggio ICMP di tipo 0 e codice
0 ( risposta echo). La maggior
parte delle implementazioni
TCP/IP implementa un server ping
direttamente nel sistema operativo.
In figura è stato eseguito il ping
all’IP del gateway predefinito.

Funzionamento TRACEROUTE (
vedi pag 6):Per determinare i nomi
e gli indirizzi dei router tra sorgente
e destinazione, il programma invia
una serie di datagrammi IP ordinari verso la destinazione, ciascuno dei quali trasporta un segmento UDP
con un numero di porta improbabile, il primo con TTL pari a 1, il secondo pari a 2, il terzo pari a 3 e così via.
Inoltre, la sorgente avvia un timer per ogni datagramma. Quando l'n-esimo datagramma giunge all'n-esimo
router, quest'ultimo nota che TTL è appena scaduto. Secondo le regole del protocollo IP, il router lo scarta e
invia alla sorgente un messaggio di allerta ICMP di tipo 1 1 e codice 0 . Quando il messaggio giunge alla
sorgente, questa ottiene il tempo di andata e ritorno a partire dal timer e dal nome e dall' indirizzo IP dell' n-
esimo router indicati da ICMP. La sorgente incrementa il campo TTL di ciascun datagramma inviato.
Pertanto, uno di questi alla fine completerà il percorso verso l ' host di destinazione. Dato che questo
datagramma contiene un segmento UDP con un numero di porta improbabile, l'host di destinazione
restituisce alla sorgente un messaggio ICMP di porta non raggiungibile (tipo 3 codice 3). L'host sorgente,
quando riceve questo particolare messaggio ICMP, sa che non deve inviare ulteriori pacchetti. Il programma
traceroute standard in effetti invia blocchi di 3 pacchetti con identico TTL e di conseguenza offre tre risultati
per ciascun TTL. In questo modo, l ' host sorgente apprende quanti e quali sono i router che lo separano
dalla destinazione, nonché il tempo di andata e ritorno. Notiamo che il programma client traceroute deve
essere in grado di istruire il sistema operativo per generare datagrammi UDP con valori specifici di TTL e
deve anche essere in grado di recepire notifiche da parte del sistema operativo all' arrivo di messaggi ICMP.

IPv4 vs. IPv6

Il protocollo IP fino ad ora trattato è anche detto IPv4 ( 32 bit). Già dagli anni ’90 lo spazio di indirizzamento
iniziava a scarseggiare. Per tale ragione si è sviluppato un nuovo protocollo, IPv6, formato da 128 bit.
priorità: identifica la priorità tra i datagrammi in flusso,flow label: identifica i datagrammi nello stesso "flusso",next hdr :
identifica il protocollo di livello superiore per i dati, checksum: rimossa completamente per ridurre il tempo di
elaborazione ad ogni hop limit. Il contenuto di quest’ultimo campo è decrementato di 1 da ciascun router che inoltra il
datagramma. Quando il suo valore raggiunge , il datagramma viene eliminato ( non c’è più frammentazione e
riassemblaggio).
TUNNELLING: il datagramma IPv6 viene trasportato come payload nel
datagramma IPv4 tra i router IPv4.

45
Capitolo 5 : LIVELLO DATALINK
Il livello DataLink si occupa della comunicazione tra due dispositivi fisicamente connessi. Considerando un
host A abbiamo visto come un messaggio viene incapsulato prima in un pacchetto (l. applicazione-
l.trasporto), poi in un datagramma (livello trasporto-livello rete) e infine in un frame (l.rete-livello datalink).
Quest’ultimo livello offre i seguenti servizi:
-Framing: incapsulamento di datagrammi all’interno di frame, aggiunta di campi di intestazione (header e
trailer), gestione dell’accesso al canale, in caso di mezzo condiviso ( broadcast), utilizzo di ‘indirizzi fisici’
all’interno delle frame, per identificare nodo sorgente e destinazione;
-Trasferimento affidabile;
-Rilevazione e correzione degli errori: errori causati da attenuazione del segnale o da presenza di
rumore (interferenza)vedremo delle tecniche successivamente;
-Controllo di flusso: per regolare la velocità di trasmissione tra mittente e destinatario;
- full-duplex (trasmissione bidirezionale simultanea) e half-duplex (trasmissione bidirezionale alternata).

Il livello DataLink è implementato da un adattatore di rete noto come scheda di rete (NIC, network interface
card). Il cuore della scheda di rete è il controller, che è di solito un chip dedicato, che implementa molti dei
servizi a livello di collegamento (framing, accesso al collegamento, rilevazione degli errori) .La maggior
parte, quindi, delle funzionalità del controller è implementata in hardware. Le componenti software
implementano le funzionalità del livello più alto, come l' assemblaggio delle nformazioni di indirizzamento e l'
attivazione dell'hardware del controller.

TECNICHE DI RILEVAZIONE E CORREZIONE DEGLI ERRORI:


1) Parità ad un bit
2) Parità a due bit
3) Checksum
4) Controllo a ridondanza ciclica ( CRC)

1. Parità ad un bit
Sia d il numero di bit del messaggio da inviare scelto dispari. A tale messaggio viene aggiunto un bit di parità
pari ad 1 tale che d+1 sia pari. Quando arriva il messaggio, se il numero di “1” è dispari, allora c’è stato
sicuramente un errore. Esempio :
Bit di parità
1 0 0 1 1 1

2. Parità a due bit


Siano d bit divisi in i righe e j colonne. Ad ogni riga e ad ogni colonna viene applicato il bit di parità. In questo
modo se ,eventualmente, si presenta un errore in una colonna e in una riga, con un controllo ad incrocio si
può trovare la posizione del bit errato e correggerlo .Esempio: il punto di incontro dei due errori segnala che
nella seconda riga della quarta colonna c’è un errore.
Bit di parità riga i-esima
1 0 1 0 0
0 1 1 0 1
0 1 0 1 0
0 1 0 0 1
1 1 0 0 <-Bit parità colonna j-esima

3. Checksum
E’ la stessa utilizzata dal livello di trasporto da TCP e UDP e dal livello di rete da IP, anche se in entrambi i
casi c’è una sottile differenza.

4. CRC
I bit di un messaggio vengono considerati come un polinomio M(x) con coefficienti 0 o 1.
Dati m bit allora 𝑀(𝑥) = 𝑥 𝑚−1 + 𝑥 𝑚−2 + ⋯ + 𝑥 0 .
Sia G(x) un polinomio detto GENERATORE di degG(x) = r e #bit =r+1 .
Tale polinomio è noto sia al mittente che al ricevente ed ha la proprietà di avere il coefficiente del grado più
alto e quello del grado più basso pari ad 1 ( esempio 100101, 𝐺(𝑥) = 𝑥 5 + 𝑥 2 + 1).
Inoltre si deve verificare degM(x)>degG(x) , ossia m>r;

46
Il controllo avviene attraverso una divisione binaria tra M(x) e G(x). E’ necessario rendere M(x) divisibile per
G(x) quindi si modifica la stringa. In particolare si moltiplica per 2𝑟 il polinomio M(x) che in binario significa
aggiungere r zero a destra.
Sia R(x) il resto della divisione (𝑀(𝑥) ∗ 2𝑟 ) ∶ 𝐺(𝑥).
L’ultimo passaggio è quello di sottrarre R(x) ad M(x):
𝑀(𝑥) − 𝑅(𝑥) = 𝑀′ (𝑥) cioè il frame completo di checksum da trasmettere.
L’errore verrà rilevato nel caso in cui la divisione tra M’(x) e G(x) ha resto non nullo.
Esempio :

I collegamenti si dividono, come ormai ben sappiamo, in collegamenti di tipo punto-punto o di tipo Broadcast.
Studieremo quest’ultimo in quanto Ethernet e rete wifi utilizzano questo tipo di connessione. Per regolare
l’accesso multiplo al collegamento broadcast sono stati messi appunto dei protocolli ad accesso multiplo. Si
dividono in tre categorie:
-Protocolli a suddivisione di canale : TDM, FDM, CDMA;
-Protocolli ad accesso casuale : ALOHA SLOTTED, ALOHA PURO, CSMA, CSMA/CD.
-Protocolli a rotazione :POLLING, TOKEN.

Protocolli a suddivisione del canale: I protocolli TDM ed FDM sono stati già incontrati(vedi pag 4). Si tratta di
protocolli che suddividono la larghezza di banda fra i nodi( dispositivi ) che appartengono al broadcast. Il
protocollo TDM suddivide la larghezza di banda in funzione del tempo, riservando uno slot ad ogni nodo.
FDM suddivide la larghezza di banda in funzione della frequenza, assegnando ciascuna ad ogni nodo. Il
protocollo CDMA suddivide la larghezza di banda in base a dei codici. Ogni nodo ha un suo codice univoco
permettendo così a più nodi di inviare o ricevere contemporaneamente. I codici sono scelti in modo
ortogonali tra loro. Questo protocollo verrà trattato ampliamente nell’ultimo capito in quanto è legato ai canali
wireless.

Protocolli ad accesso casuale: Sia L la lunghezza di ogni frame e la sua velocità trasmissiva sia R. Inoltre
tale canale supporta M nodi. Inoltre facciamo delle ipotesi aggiuntive:
• tutti i frame consistano esattamente di L bit;
• il tempo sia suddiviso in slot di L/R secondi (cioè che uno slot equivalga al tempo di trasmissione di un
pacchetto);
• i nodi comincino la trasmissione dei frame solo all' inizio degli slot e siano sincronizzati;
•venga rilevata la collisione prima del termine dello slot.

Il protocollo ALOHA SLOTTED prevede che se un nodo ha dati disponibili trasmette all’inizio del primo slot
disponibile, in caso di collisione ritrasmette il pacchetto negli slot successivi con probabilità p, finché la
trasmissione non va a buon fine.

EFFICIENZA DI ALOHA SLOTTED

47
Supponiamo che N stazioni abbiano frame da trasmettere: ogni stazione trasmette in un determinato slot,
con probabilità p. La probabilità che la trasmissione di un solo nodo abbia successo su N nodi è 𝐸(𝑝) = 𝑁 ∗
𝑝 ∗ (1 − 𝑝)𝑁−1 . Per calcolare la massima efficienza bisogna derivare E(p) ed eguagliarlo a 0:

𝐸 ′ (𝑝) = 𝑁 ∗ (1 − 𝑝)𝑁−1 − 𝑁 ∗ 𝑝 ∗ (𝑁 − 1) ∗ (1 − 𝑝)𝑁−2 = 0 ; ( derivata di una funzione composta)

𝐸 ′ (𝑝) = 𝑁(1 − 𝑝)𝑁−1 [ (1 − 𝑝) − 𝑝(𝑁 − 1)] = 0 ; ( messa in evidenza )

1
𝐸 ′ (𝑝) = 𝑁(1 − 𝑝)𝑁−1 [ 𝑁 ( − 𝑝)] = 0 ; ( messa in evidenza di N nella quadra)
𝑁

1
Basta che uno dei fattori sia nullo per annullare l’equazione: 𝑝 = e sostituendolo in E(x) :
𝑁

1
1 1 𝑁−1 1 𝑁−1 (1− )𝑁 1
𝑁
𝐸(𝑝) = 𝑁 ∗ ∗ (1 − ) = (1 − ) che al crescere di N diventa lim 1 = ≅ 0.37 .
𝑁 𝑁 𝑁 𝑁→∞ (1− ) 𝑒
𝑁

Quindi l’efficienza massima è circa il 37 % , piuttosto bassa.

Il protocollo ALOHA puro è il predecessore di ALOHA slotted. Si differenzia da quest’ultimo in quanto no


richiede la sincronizzazione dei frame. Ogni frame invia dati quando sono pronti. La probabilità di collisione è
maggiore e calcolando l’efficienza massima con un ragionamento
simile al precedente viene fuori che circa il 18%. Possiamo osservare
i due protocolli attraverso le curve in figura 29:

ALOHA puro limita il throughput effettivo della trasmissione.

Il protocollo CSMA (Carrier Sense Mullttiiplle Access ) “Ascolta prima


di parlare” : se il canale è libero trasmette la frame , se il canale è
occupato rimanda la trasmissione.
Figura 29
CSMA persistente: Riprova immediatamente con probabilità p quando il canale si libera (p
persistente);

CSMA non persistente: Riprova dopo un intervallo casuale (backoff).

Consideriamo quattro nodi (A,B,C,D,) all’interno di un canale.


Supponiamo che al tempo t0 il nodo B inizia a trasmettere dati perché
trova i canale libero. Al tempo t1 il nodo D inizia a trasmettere
anch’esso dati in quanto crede che il canale sia libero perché i bit dei
dati spediti da B non sono ancora arrivati a D. Al tempo t2 si verifica
una collisione. Lungo l’intervallo [t2,t3] sia B che D trasmettono
collisione.

48
Anche se CSMA segue buone regole di norma, non gestisce casi di collisione come quello mostrato
nell’esempio. Il protocollo CSMA/ CD (collision detection) è una versione migliorata di CSMA ed è usata
anche in Ethernet.

Funzionalità: quando un nodo rileva una collisione, cessa immediatamente la trasmissione. Si misura la
potenza del segnale ricevuto e la si compara con quella del segnale trasmesso . Quando il canale è libero la
potenza è nulla.

Protocolli a rotazione: detti anche Taking Turns si dividono in Polling e Token. Il protocollo Polling prevede

RICORDA: la base esadecimale conta su base 16.

che un nodo master “invita” i nodi slave a trasmettere in maniera alternata .I messaggi sono di tipo “Request
to Send”, “Clear to Send”. Token passing: Un “gettone” (token) di controllo viene passato da un nodo al
successivo in maniera sequenziale. Il possesso del token dà diritto a trasmettere. Problemi da affrontare:
Overhead nella gestione del token, Latenza, Presenza di un single point of failure (token).

INDIRIZZI FISICI O MAC

La scheda di rete di Host e Router ha un suo indirizzo fisico univoco e permanente, cablato nella ROM . Per
LAN come Ethernet è lungo 6 Byte , 248 indirizzi disponibili. I primi 3 Byte indicano il lotto di indirizzi
acquistato, i restanti 3 sono scelti dal costruttore La notazione è in esadecimale, ogni campo ( formato da 1
byte) è distanziato con un trattino. Esempio: 1A-23-F9-CD- 06-9B che corrisponde in decimale a

1*16+10*1 – 2*16+3*1 – 15*16+9*1 – 12*16+13*1 – 0*16+6*1 – 9*16+11*1 = 26-35-249-205-6-155

A differenza dell’ indirizzo IP, il MAC non è gerarchico. Il loro obiettivo è quello di permettere la trasmissione
di una frame da una scheda di rete ad un’altra scheda con cui sussiste un collegamento diretto (stessa rete
fisica). Ricordiamo che, invece, l’IP permettere la corretta consegna del pacchetto ad un destinatario
collegato alla rete.

Tipi di indirizzi MAC:

Single: di una singola stazione;

Multicast: di un gruppo di stazioni ;

Broadcast: di tutte le stazioni.

PROTOCOLLO ARP

E’ un il protocollo per la risoluzione degli indirizzi ( address


resolution protocol), che fornisce ai nodi un meccanismo
per trasformare indirizzi IP in indirizzi MAC. Consideriamo i seguenti scenari:

• A deve spedire un datagramma a B, host appartenente alla stessa rete IP .A conosce l’indirizzo IP di
B, ma non il suo indirizzo fisico .Interviene ARP: A manda in broadcast a tutti gli host della rete un
pacchetto (ARP request ) contenente l’indirizzo IP di B, allo scopo di conoscere l’indirizzo fisico di B,
il quale riconosce il suo indirizzo di rete e risponde ad A facendo si che quest’ultimo possa spedire il
datagramma a B
49
• A deve spedire un datagramma B che si trova su un’altra rete IP. In questo caso, pertanto, si
prepara un pacchetto ARP in cui si specifica come indirizzo IP quello del router che si trova tra le
due reti.

Ricordiamo che per scoprire se i due host A e B sono sulla stessa rete viene fatta la AND tra l’indirizzo IP
destinazione e la netmask del mittente. Per ridurre il traffico sulla rete, ogni host mantiene una cache con le
corrispondenze tra indirizzi logici e fisici. Prima di spedire una richiesta ARP controlla nella cache. Gli host
possono aggiornare le loro ARP cache.

ETHERNET

Ethernet è stata la prima tecnologia per la LAN diffusa. Dagli anni ’90 si è evoluta migliorando le prestazioni.

Struttura di un frame Ethernet

Preambolo ( 8 byte) : 7 Byte con una sequenza 10101010 seguiti da un byte con la sequenza 10101011
utilizzato per sincronizzare i clock del mittente e del destinatario. Gli ultimi “1” consecutivi stanno ad indicare
che sta per arrivare qualcosa.

Indirizzo di destinazione (6 byte): contiene l’indirizzo MAC del destinatario;

Indirizzo sorgente (6 byte ): contiene l’indirizzo MAC del mittente;

Tipo (2 byte) : consente a Ethernet di supportare vari protocolli di rete. E’ l’analogo del numero di porta nel
segmento a livello di trasporto.

Data (min 46 Byte, max 1500 Byte): contiene il datagramma IP.

CRC (4 byte): come quello già studiato, consente alla scheda di rete ricevente di rilevare la presenza di un
errore nei bit del frame.

Successivamente al campo CRC c’è l’interframe gap che rappresenta la spaziatura tra il frame e il tempodi
trasmissione ed è di 12 Byte In totale la Lmin del frame = 84 Byte, la Lmax=1538 Byte.

Se R (velocità di trasmissione) = 10Mb/s =107 𝑏/𝑠 allora per L min il tempo di trasmissione di 1 pacchetto
84∗8
L/R = = 67.2𝜇𝑠. Per conoscere il massimo numero di pacchetti di lunghezza minima che sono
107
trasmessi in un secondo basta fare R/L =14880 pacchetti/s. Per L max il tempo di trasmissione di 1
1538∗8
pacchetto L/R= = 1.23𝑚𝑠 e il massimo numero di pacchetti = 812 pacchetti/s.
107

protocollo Ethernet CSMA/CD:

Anche in Ethernet è utilizzato il protocollo ad accesso casuale CSMA/CD. In particolare il back off viene
calcolato attraverso il seguente algoritmo

prima collisione: scegli K tra {0,1}.Il ritardo di trasmissione è pari ad un intervallo K x 512 bit (pari a 51.2
𝜇sec in una Ethernet a 10 Mbps);

seconda collisione: scegli K tra {0,1,2,3};

50
dopo 10 o più collisioni, scegli K tra {0,1,2,3,4,…,1023};

In banda base (trasmissione su un canale) , invece, viene utilizzata la codifica di Manchester:

• ogni bit codificato contiene una transizione a metà del periodo di bit;

• la transizione 1->0 determina 1, la transizione 0->1 determina 0;

• la prima metà, della transizione, è il valore vero del bit e la seconda metà è il complemento del
valore vero del bit

Evoluzione di Ethernet:

Ethernet compare in molte forme differenti con denominazioni del tipo v-BASE-
mezzofisico

La prima parte è la velocità standard (10 Mbps, 100 Mbps, 1 Gbps e I0 Gbps ) .
Il termine "BASE" si riferisce a Ethernet in banda base, cioè che il mezzo fisico
trasporta solo traffico Ethernet. La parte finale rimanda al mezzo fisico (cavi
coassiali, fili di rame e fibre ottiche . Tipicamente, "T" si riferisce al doppino di
rame intrecciato) . Nel corso degli anni si sono evoluti i seguenti standard:
10BASE-5; 10BASE-2; 10BASE-T, 100BASE-T, 100BASE-TX. Vediamole nel dettaglio:

10BASE5: Standard formato da un cavo coassiale spesso (thick) di lunghezza


massima 500m. E’ anche detto Thicknet. La velocità di trasmissione è di 10
Mb/s in banda base e la topologia è a BUS. E’ stato di gran lunga superato.

10BASE2: Standard formato da un cavo coassiale sottile (thin) più


flessibile di lunghezza massima 200m. Anche’esso di topologia a BUS
con il miglioramento della connessione di una nuova stazione nella catena
dei collegamenti.

10BASET/100BASET:Standard formato da due doppini intrecciati (per


cavo) di lunghezza massima 100m. La topologia è a stella realizzata
tramite doppini intrecciati e un concentratore (hub) al centro della
stella. Un hub è un dispositivo a livello fisico che agisce sui singoli bit,
piuttosto che sui frame. Quando un bit, rappresentato da 0 o 1 , arriva a
un'interfaccia, l' hub semplicemente rigenera il bit, amplifica la sua potenza e lo trasmette su tutte le altre
interfacce.

CAVI UTP: Sono costituiti da 4 coppie di conduttori di rame intrecciati. Le coppie sono a loro volta intrecciate
in un’unica spirale. Tale disposizione dei cavetti consente di limitare il campo magnetico generato da ogni
singolo cavetto che andrebbe a disturbare il segnale dell'intero cavo di rete. Si dividono in 6 categorie.
Possono essere :

-straight (dritti ) servono per collegare ad esempio i PC con router, hub e switch ;

-cross (incrociati) per collegare direttamente tra loro


due PC oppure per collegare in cascata hub/switch;

E’ facile comprendere che se si collegano due PC tra


di loro direttamente, per poter trasmettere e ricevere
contemporaneamente il cavo dovrà essere incrociato
51
ovvero i pin che trasmettono da una estremità del cavo devono comunicare con i pin che ricevono dall'altra
estremità del cavo e viceversa. Quando invece si collega un PC ad un Hub o router o switch il cavo dovrà
essere dritto ovvero trasmissione e ricezione non si incrociano.

INTERCONNESSIONE HUB-LAN:

Vantaggi: L’organizzazione multi-livello fa sì che porzioni di LAN continuano a funzionare in caso di guasto
ad uno o più hub. Si estende la massima distanza tra i nodi fino a 100m per ogni hub.

Svantaggi: Gli hub non gestiscono le collisioni. La creazione di una collisione non comporta alcun aumento
del throughput massimo: il throughput complessivo in una r ete multi-livello è lo stesso di una rete con un
unico segmento

INTERCONNESSONE BRIDGE-LAN
I bridge sono dispositivi utilizzati per collegare due o più LAN tra loro in maniera più efficiente dell’ hub.
Come dispositivi hardware oggi sono raramente utilizzati essendo stati sostituiti dagli switch . Il loro compito
è quello di filtrare i pacchetti. Se la destinazione è sullo stesso segmento di LAN del mittente allora non
compiono nessuna azione, se la destinazione è su un segmento di LAN differente da quello del mittente:
inoltrano la frame sul segmento di LAN del destinatario. Il filtraggio (filtering) è la funzionalità del bridge che
determina se un frame debba essere inoltrato a un segmento di LAN o scartato . L'inoltro consiste nell'
individuazione del segmento di LAN verso cui il frame deve essere diretto e, quindi, nell'inviarlo. Queste due
azioni vengono fatte senza l’ausilio di un protocollo , bensì vengono eseguite dai bridge autonomamente
attraverso un algoritmo di autoapprendimento. Le informazioni vengono salvate in tabelle dette “filtering
tables”. Quando una frame è ricevuta, il bridge aggiunge una riga alla tabella informazioni sull’indirizzo MAC,
porta del bridge, Time Stamp.Le righe vengono cancellate dopo un po’ di tempo, se non arrivano altre frame
dal’host a cui si riferiscono. Una LAN complessa può essere costituita da diversi segmenti di rete, connessi
tra loro tramite dei bridge o switch, con il vincolo che la topologia di una LAN non contenga cicli, ovvero che
tra ogni coppia di calcolatori esista un solo percorso. Se così non fosse, alcuni pacchetti verrebbero replicati
all'infinito sulla rete, con risultati disastrosi. Il bridge, infatti, conosce gli indirizzi MAC degli host connessi su
ogni segmento, ma se riceve un pacchetto con destinazione sconosciuta, o un pacchetto broadcast, lo invia
su tutti i segmenti, tranne che su quello di provenienza. Se esiste un ciclo nella rete, il pacchetto raggiungerà
nuovamente il segmento da cui è partito, venendo nuovamente replicato. Questo porterebbe alla
proliferazione di infinite copie dello stesso pacchetto sulla rete, e quindi alla saturazione della rete stessa.

SOLUZIONE: organizzare i bridge mediante uno SPANNING TREE, facendo in modo che in ogni istante la
rete sia connessa ma priva di cicli.

VANTAGGI: Isolano i domini di collisione, determinando un aumento complessivo del throughput massimo
,non introducono limitazioni sul numero massimo delle stazioni, né sull’estensione geografica , possono
collegare differenti tecnologie, dal momento che sono dispositivi di tipo store & forward , sono trasparenti:
non richiedono alcuna modifica negli adattatori dei computer né configurazione da parte di un amministratore
(plug & play)

ROUTER BRIDGE
Livello di rete Livello DataLink
store & forward store & forward
routing table e algoritmi di routing filtering table, autoapprendimento,spanning tree
Richiedono configurazione a livello IP e capacità Operazioni più semplici, meno richieste
adeguata
Forniscono una naturale protezione contro le Non offrono alcuna protezione contro le tempeste
tempeste broadcast broadcast (il broadcast ininterrotto generato da un
host è normalmente inoltrato da un bridge)
Supportano differenti topologie Topologie limitate
Utilizzati per grandi reti Utilizzati per reti piccole

52
VLAN

L’obiettivo di una rete VLAN ( virtual LAN ) è quello di far coesistere sulla stessa infrastruttura di rete fisica
due o più reti IP distinte. Gli switch possono gestire gruppi di porte in modo che gli host connessi a ciascun
gruppo costituiscano una rete Ethernet virtuale separata dalle altre. Attraverso una rete virtuale si possono
trarre i seguenti vantaggi : isolare il traffico della rete ( se due reti sono tendenti ad un maggior traffico è utile
creare un’unica VLAN), diminuire il numero degli switch per ogni rete. Per collegare due o più VLAN si
utilizzano le “trunk port”, ovvero porte speciali di uno switch riservate unicamente al collegamento. In figura
ci sono 2 VLAN. Lo switch A comprende 8 host ed identivifa la VLAN1, analogamente lo switch B la VLAN2.
Il trunking abilita la connessione tra le VLAN di switch diversi attraverso le due porte riservate (8). Perché lo
switch di destinazione sappia a quale VLAN inoltrare i frame in arrivo su una porta di trunking, occorre
taggare frame con l’identificativo della VLAN di destinazione.Una volta raggiunto lo switch di destinazione, il
tag viene rimosso Questo non è previsto dal protocollo Ethernet originale.

Protocolli di trunking :

-ad incapsulamento: viene aggiunto un header al frame Ethernet per indicare la VLAN di destinazione;

a piggyback :l’identificativo della VLAN (12 bit) è parte di un campo da 4 byte inserito nel frame Ethernet tra i
campi indirizzo sorgente e tipo. Occorre ricalcolare il CRC all’ingresso e all’uscita dal trunk.

Capitolo 6 : WIRELESS E RETI MOBILI


Dopo aver trattato sistemi basati su connessione cablata, restano i sistemi basati su connessione wireless,
cioè senza cavo. Tali sistemi per comunicare usano onde elettromagnetiche che si propagano nello spazio.
In questo contesto l’host wireless può essere un portatile, un tablet o un qualunque dispositivo mobile o
meno. Una stazione base è responsabile dell'invio e della ricezione dei pacchetti tra gli host wireless che si
trovano nella sua area di copertura. Stazioni di base possono essere ripetitori di cella ( telefonia ) o access
point. Se gli host riescono ad associarsi ad una stazione base si dicono in modalità di infrastruttura. Una rete
ad hoc è formata da host wireless che non hanno infrastruttura su cui connettersi. Il processo di un host che
esce dall’area di copertura di una stazione base e si aggancia ad un’altra, è detto handoff.
TASSONOMIA DELLE RETI WIRELESS

Singolo collegamento wireless (hop) collegamento wireless multiplo ( + hop)


Con infrastruttura Gli host sono connessi ad una stazione Gli host sono connessi ad una stazione
base ( WiFi, cellulari ) base attraverso più nodi wireless ( rete
mesh, a maglie)
Senza infrastruttura Gli host non sono connessi ad una Non c’è una stazione base. Gli host
stazione base ( Bluetooth, reti ad hoc) hanno bisogno di alti nodi per poterla
raggiungere

Problematiche : attenuazione del segnale, interferenze da parte di altre sorgenti, propagazione su più cammini a causa
della riflessione. Vengono definite le seguenti due grandezze :

SNR= rapporto segnale rumore (dB) ; BER = probabilità di errore sulla ricezione di un bit.

Aumentando il rapporto segnale rumore, diminuisce il BER.

Tecniche di modulazione (finalizzate ad imprimere un segnale,


detto modulante, contenente informazione , su di un altro segnale,
detto portante, sviluppato ad alta frequenza ) per codificare l'
informazione per la trasmissione su un canale wireless ideale:

BPSK, QAM16,QAM256

53
Protocollo CDMA

Protocollo incontrato nel livello DataLink delle reti


cablate inerente alla suddivisione del canale. In
realtà è molto utilizzato nelle reti wireless. Si base
sull’assegnazione di un codice univoco (chipping
sequence) ad ogni utente che si immette nel
canale e che serve per codificare i dati. Questo
protocollo permette di utilizzare il canale per intero
e di trasmettere simultaneamente, riducendo al
minimo l’interferenza nel caso in cui si siano scelti
codici ortogonali”.Di seguito è riportato il funzionamento di due partecipanti al canale:

Supponiamo che ogni tempo di una trasmissione sia pari alla dimensione di uno slot. Sia d il dato ( -1=0 ). Lo slot è
diviso in M minislot ( nell’esempio 8). Ogni mini slot contiene il bit di codice scelto. Soffermiamoci sul primo slot del
mittente1: si moltiplica d1= -1 con i singoli bit del codice, ottenendo in uscita il codice 𝑍1 = −1, −1, −1,1, −1,1,1,1
. Stesso ragionamento sul secondo slot e sui due slot del mittente2. Successivamente si sommano i due codici Z1 e Z2.
Fase di decodifica : Il codice risultante viene confrontato con il codice univoco di ciascun mittente attraverso il prodotto
scalare. Considerando ancora il mittente1 nel primo slot, per riottenere il dato di partenza d1 basterà moltiplicare
rispettivamente i bit del codice Ztot e del chipping sequence , sommarli e dividere per il numero di minislot:

(0 ∗ 1) + (−2 ∗ 1 ) − 2 − 2 − 2
𝑑1 = = −1
8

LAN wireless 802.11 (WiFi)

E’ progettata per trasmettere dati usando tre tecniche differenti che hanno come obiettivo quello di diffondere
il segnale su di un intervallo di frequenza ampio, in modo tale da minimizzare l’effetto dell’interferenza da
parte di altri dispositivi:

frequency hopping: il segnale è trasmesso su una sequenza di frequenze


calcolata in maniera algoritmica, tramite un generatore di numeri pseudo-
casuali. Il ricevitore utilizza lo stesso algoritmo del mittente evitando, quindi,
le frequenze sincronizzata con il mittente, per ricevere correttamente le frame.

direct sequence : ogni bit di una frame è rappresentato da molteplici bit nel
segnale trasmesso. Il mittente invia, in effetti, il risultato dell’OR esclusivo di
tale bit e di n bit scelti in maniera pseudo-casuale con una sequenza nota sia
al mittente che al ricevitore. I valori trasmessi sono noti come chipping
sequence (come nel caso del CDMA). L’802.11 utilizza una chipping
sequence a 11 bit.

diffused infrared

L’architettura 802.11.b (ci sono vari tipi ) lavora in un range di frequenza di 2.4-2.485 GHz. Lo spettro è
diviso in 11 canali a differenti frequenze. Solo 3 canali risultano non sovrapposti. I canali sono non
sovrapposti se sono distanziati gli uni dagli altri da almeno quattro canali. All’atto dell’installazione di un
Acces Point (AP) , l’amministratore di rete sceglie il canale da utilizzare per la trasmissione. Vi è possibilità di
interferenza se due AP vicini utilizzino lo stesso canale. Quando un host deve associarsi ad un AP controlla

54
i vari canali ascoltando le cosiddette beacon frame,contenenti MAC address ed identificativo (SSID ,Service
Set Identifier) dell’AP. Seleziona l’AP cui associarsi (tipicamente sceglie i frame beacon ricevuti con la
potenza segnale più alta) ed inizia la procedura di associazione. Al termine di tale procedura, effettuerà una
richiesta DHCP per ottenere un indirizzo IP nella subnet dell’AP.

Il processo di scansione dei canali e di ascolto dei frame beacon è chiamato scansione passiva. La
scansione attiva si ha quando un host invia in broadcast un frame sonda che verrà ricevuto da tutti gli AP
nel raggio di copertura. L' AP risponde al frame sonda. L'host wireless scegli l’AP con cui associarsi tra quelli
che hanno risposto.

TECNICHE DI PREVENZIONE DI COLLISIONI

Una volta che una stazione wireless è associata a un AP, può iniziare a trasmettere e a ricevere frame dati
da e verso l'AP. Ma, poiché stazioni multiple potrebbero voler trasmettere frame di dati
Contemporaneamente sullo stesso canale, è necessario un protocollo ad accesso multiplo per coordinare le
trasmissioni : CSMA/CA (collision avoidance) .

802.11 , a differenza di Ethernet, preferisce evitare a monte le collisioni anziché rilevarle. La funzionalità del
protocollo CSMA/CA è la seguente:

802.11 sender

1.Se il canale è inattivo, allora trasmette il frame dopo un breve periodo di tempo ,DIFS;

2. Altrimenti, la stazione sceglie un valore casuale di ritardo usando una attesa binaria esponenziale e
decrementa questoo valore solo quando il canale viene percepito come inattivo. Se il canale e percepito
come occupato, il contatore rimane fermo.

3. Quando il contatore arriva a zero (notiamo che questo può vericarsi soltanto quando il canale è percepito
come inattivo), la stazione trasmette l’intero frame e aspetta l’ACK.

4. Se riceve l’ ACK , la stazione sa che il frame è stato ricevuto corretto e, qualora avesse un altro frame da
inviare riattiva il protocollo dal passo 2

5. Se non arriva l’ACK, si ritorna al passo 2, ma con un


valore di ritardo maggiore.

Questo protocollo, però, non risolve il caso in cui due


stazioni risultano nascoste tra loro. Questo accade
quando a causa dell’attenuazione del segnale, diminuisce
il raggio di copertura dell’AP al quale le due stazioni sono
collegate ( problema dei nodi nascosti). L’unico modo per
gestire questo problema è utilizzare dei protocollo che si
occupano delle prenotazioni del canale: RTS, CTS:

Il mittente trasmette prima un frame RTS (richiesta di invio) all’AP (scelta piccolo in modo tale da essere
trascurata in caso di collisione). L’AP invia in broadcast una frame CTS (abilita e trasmetti) in risposta alla
frame RTS. La frame CTS è ascoltata da tutti i nodi. l mittente trasmette la frame dati, le altre stazioni
differiscono le loro trasmissioni. Un nodo che vede la frame CTS sa di essere vicino al ricevitore. In
mancanza di ricezione di CTS , i nodi assumono che vi sia stata una collisione.

Struttura frame 802.11

La figura di lato mostra in alto il formato di un frame con le rispettive lunghezze (Byte) dei campi. In basso ci
sono i sottocampi del campo di frame control con le rispettive lunghezze (bit).
55
Payload: contiene un datagramma IP o un pacchetto ARP.bit .

address1 : indirizzo MAC della stazione ricevente ;

Address 2 : indirizzo MAC della stazione trasmittente;

Address3: indirizzo MAC dell’interfaccia del router connesso alla sottorete del BSS(insieme di AP e stazioni
Wireless) a cui fa parte la stazione ;

Addes 4: usato solo in caso di reti ad hoc.

56
57
58
59