Sei sulla pagina 1di 27

Domande IIW

1° Capitolo

Descrivere le varie componenti del ritardo in una rete a pacchetto (9) ✔[Descrivere i vari tipi di ritardo in una
rete a pacchetto. (1) ] {Libro: par. 1.4.1 ed.6}

Un pacchetto parte da un host sorgente, attraversa una serie di router e arriva a un host destinazione. Durante questo
tragitto, il pacchetto può subire 4 tipi di ritardo che sommati tra loro forniscono il ritardo totale di nodo. Questi ritardi sono:
- Ritardo di elaborazione (Delab): Il tempo richiesto per esaminare l’header del pacchetto e per determinare
dove dirigerlo fa parte del processing delay. Questo può includere altri fattori, tra i quali il tempo richiesto per
controllare errori a livello di bit nel pacchetto.
- Ritardo di accodamento (Dqueue): Ogni commutatore, per ciascuno dei collegamenti a cui è connesso,
mantiene un buffer di output (o coda) dove conserva i pacchetti che sta per inviare. Un pacchetto in arrivo che
richiede l’invio attraverso un determinato collegamento, ma lo trova occupato dalla trasmissione di un altro, deve
accodarsi nel buffer. Questo comporta dei ritardi di accodamento che vanno ad incrementare i tempi di
trasmissione di un pacchetto. Tali ritardi ovviamente sono variabili e dipendono dal livello di traffico sulla rete.
Dato che la dimensione del buffer è finita può accadere che un pacchetto in arrivo trovi il buffer completamente
pieno. Si verificherà una perdita di pacchetto (packet loss). E’ la componente piu’ complessa del ritardo totale di
nodo - per caratterizzarla si fa uso di misure statistiche quali il ritardo di accodamento medio, la varianza del
ritardo di accodamento e la probabilità che il ritardo di accodamento superi un valore fissato.
a è la velocità media di arrivo dei pacchetti alla coda (packet/s), R la velocità di trasmissione (bit/s). Supponiamo
che tutti i pacchetti siano di L bit. La velocità media di arrivo dei bit è La (bit/s); Il rapporto La/R è detto intensità
di traffico. Se La/R>1 : la coda tenderà a crescere all’infinito e con essa il ritardo di accodamento.
Se l’intensità di traffico è vicina a zero, allora gli arrivi di pacchetti sono pochi e piuttosto distanziati (poco ritardo
di accodamento) mentre se è vicino ad 1 il tasso di arrivo dei pacchetti è molto alto e si forma facilmente una
coda (ritardo di accodamento aumenta).
- Ritardo di trasmissione (Dtrans): è la quantità di tempo richiesta dal router per trasmettere in uscita il
pacchetto. Questo ritardo non dipende dalla distanza tra due router ma solo dalla lunghezza del pacchetto (L) in
bit e dalla velocità di trasmissione del collegamento (R) in bps. Il ritardo di trasmissione dunque risulta essere
L/R.
- Ritardo di propagazione (Dprop): è il tempo richiesto per la propagazione di un bit da un router al router
successivo, è quindi in funzione della distanza tra i due router (d), ma non dipende dalla lunghezza del pacchetto.
Il bit viaggia alla velocità di propagazione del collegamento (v), che dipende dal mezzo fisico (compresa tra
2x10^8 m/s e 3x10^8 m/s). Il ritardo di propagazione è quindi dato da d/v.
Dtot= Dproc+ Dqueue+Dtrans+Dprop

Spiegare il ritardo end- to end


Il ritardo endtoend (punto-punto) invece è il ritardo misurato per inviare un pacchetto dalla sorgente alla destinazione.
Su una rete di N router il ritardo end-to-end tra A e B sarà
D = (dtrasm + dprop)A + ∑𝑁𝑖=1 (delab + dcoda + dtrasm + dprop)i
Dove i è l’i-esimo nodo di commutazione tra A e B.
Nell’ipotesi che i collegamenti siano tutti non congestionati (dcoda trascurabile), che i router abbiano tutti la stessa
velocità di elaborazione, i link abbiano tutti i la stessa velocità di trasmissione e ritardo di propagazione allora il ritardo
approssimato sarà D = (N+1) (delab + dtrasm + dprop). Il throughput istantaneo in ogni istante di tempo è la velocità
in bps alla quale un host di destinazione sta ricevendo un file da una sorgente. Il throughput medio del trasferimento è
pari a F(numero bit)/ T(tempo trasferimento).

Illustrare le caratteristiche generali e i relativi vantaggi delle reti a commutazione di circuito e delle reti a
pacchetto (1) ✔{par. 1.3 ed. 6}

Commutazione di circuito:
Le risorse richieste per la comunicazione tra due end-system sono riservate per l’intera durata della sessione di
comunicazione ed inoltre prima che la comunicazione avvenga, la rete deve stabilire una connessione (circuito) end-to-
end tra mittente e destinatario, con capacità trasmissiva assegnata. Ciò causa un dispendio delle risorse e quindi una
perdita di efficienza, visto che quando inizia una sessione, bisogna attenderne la fine per iniziarne un’altra. Un circuito
in un collegamento è implementato con due tecniche diverse, TDM o FDM; FDM indica che lo spettro di frequenze di un
collegamento viene suddiviso tra le connessioni stabilite con quel collegamento. Nello specifico viene dedicata un’
1
ampiezza di banda bandwidth) a ciascuna connessione; TDM indica che si divide il tempo in intervalli (frame) di durata
fissa, divisi a loro volta in slot; quando si stabilisce una connessione tramite un collegamento, le viene dedicato uno slot
di tempo in ogni frame, solo per quella connessione.
Commutazione di pacchetto: i messaggi da scambiare dalla sorgente vengono divisi in parti più piccole chiamate
pacchetti; questi pacchetti vengono trasmessi tramite router e commutatori a livello di collegamento fino alla destinazione.
Ogni pacchetto è composto da un
: Header utilizzato ai fini dell’identificazione e gestione e Payload che contiene i dati veri e propri. Viene usata la tecnica
dello store and forward: il commutatore deve ricevere l’intero pacchetto e storarlo in un buffer prima di poterlo inoltrare
alla destinazione. Ogni commutatore ha un buffer di output dove conserva i pacchetti che attendono la trasmissione; ciò
può causare ritardi di accodamento o perdita di pacchetti. Ogni pacchetto che percorre la rete contiene nella sua
intestazione (header) l’indirizzo ip della sua destinazione. Ogni router ha una tabella di inoltro (forwarding table) che
mette in relazione gli indirizzi di destinazione con in collegamenti in uscita del router stesso. Quando il pacchetto giunge
ad un router, quest’ultimo esamina l’indirizzo della destinazione e consulta la propria tabella per determinare il
collegamento uscente appropriato verso cui dirigere il pacchetto in uscita.
Internet implementa parecchi protocolli di instradamento (routing protocol) per impostare automaticamente queste tabelle
di inoltro.
Le grandi differenze tra commutazione di pacchetto e di circuito risiede nell’efficienza e nella velocità. Nella
commutazione di circuito la velocità è divisa a seconda di quanti collegamenti ci sono nello stesso circuito. Nella
commutazione di pacchetto invece è disponibile tutta la velocità per ogni singolo collegamento, con i dovuti ritardi e
attese del caso. Inoltre l’efficienza nella commutazione di pacchetti è molto maggiore visto che non vi è inutilizzo di
risorse nei momenti di silenzio, cosa che avviene nella commutazione di circuito. Infatti nelle reti a commutazione di
pacchetto i messaggi utilizzano le risorse di rete (il canale) solo quando necessario, al contrario della commutazione a
circuito. La commutazione a circuito offre però una maggiore garanzia sulla ricezione dei pacchetti, che viaggiano su
canali dedicati. Non esiste dunque il problema della congestione, che esiste invece per la commutazione di pacchetti.

2° Capitolo

Descrivere il funzionamento del protocollo HTTP (8) (http1.1) ✔


HTTP è un protocollo a livello di applicazione del web. Un browser web implementa il lato client di HTTP. Un web server
implementa il lato server di HTTP.
Il protocollo HTTP definisce formalmente in che modo i client web devono richiedere le pagine ai web server e come
questi ultimi le trasferiscono ai clienti. In pratica definisce una semantica per ogni interazione tra i due. L’uso di questo
protocollo viene specificato all’inizio dell’URL di richiesta da parte del client nei confronti del server: nell’URL c’è la prima
parte dedicata al nome del protocollo usato, la seconda dedicata al nome dell’host del server che ospita la risorsa
richiesta, la terza dedicata al pathname nell’host del server della risorsa richiesta. Il protocollo di trasporto usato da HTTP
è il TCP, quindi l’affidabilità è tutta delegata a quest’ultimo, permettendo all’HTTP di non preoccuparsene; ogni
messaggio si ha la certezza che arriverà e verrà restituito tra client e server grazie a TCP.
TCP inoltre è un protocollo orientato alla connessione e http può usare 2 approcci:
- Connessione non persistente: il client HTTP inizia una connessione TCP con il server che possiede la pagina
web. Dopo di che il client HTTP tramite la propria socket richiede la pagina web al server. Il server riceve il
messaggio, prende l’oggetto richiesto e lo spedisce al client. Dopo che il client riceve la risposta da parte del
server, la connessione TCP verrà chiusa. Lo svantaggio di questo approccio è che per ogni richiesta verso il
server deve essere iniziata una nuova connessione.
- Connessione persistente: il client e il server possono scambiarsi più messaggi senza dover ogni volta instaurare
una connessione. Questo meccanismo funziona perché una volta che il server risponde alla richiesta del client
mantiene la connessione attiva. Ci sono due tipi di connessioni persistenti : con pipeling e senza pipeling. Nella
connessione senza pipeling un client richiede un oggetto alla volta e aspetta la risposta del server, mentre in
quella con pipeling il client può inviare piu’ richieste contemporaneamente e il server invia risposte una dopo
l’altra.
Inoltre HTTP è un protocollo senza memoria di stato, ovvero i server inviano i files richiesti dai client senza memorizzare
informazioni su questi ultimi, quindi, se si chiede lo stesso file più volte allo stesso server, quest’ultimo procederà come
se fosse la prima volta che gli viene richiesta tale risorsa. I browser cercano di garantire una user experience statefull
implementando il meccanismo dei cookies.

Descrivere il funzionamento dei messaggi in http.


Esistono due tipi di messaggi in http : messaggi di risposta e messaggi di richiesta.
Essi sono scritti in formato ASCII su diverse righe, ognuna delle quali è seguita da un carattere di ritorno a capo (carriage
return) e un carattere di nuova linea (line feed). I metodi di richiesta più importani sono: get/post/head/put. Riga di
richiesta è composta dal metodo di risposta, l’URI (uniform resourse identifier) che indica l’oggetto della richiesta e la
versione del protocollo usato. Il metodo get : permette di richiedere informazioni ad un web server attraverso url method

2
– attaccando i dati inviati dal client alla fine dell’url. Il metodo Post si differenzia dal get in quanto i parametri non vengono
passati attraverso url-method. I messaggi di risposta sono identificati attraverso il codice di stato (200 ok, 400 bad
request..) . Gli header http sono righe testuali free-format che specificano caratteristiche generali della trasmissione,
dell’entità trasmessa, della richiesta effettuata, della risposta generata. Il server mantiene nell’header informazioni
riguardo : lunghezza messaggio, ultima modifica dell’oggetto, data della risposta, il tipo dell’oggetto inviato e il tipo di
server.

Descrivere le differenze tra le versione 1.0 e 1.1 del protocollo HTTP (2) ✔
Le differenze tra le due versioni risiedono soprattutto nel fatto che HTTP 1.0 utilizza connessioni non persistenti: per
mandare più oggetti appartenenti ad esempio alla stessa pagina, viene aperta e chiusa una nuova connessione TCP ad
ogni oggetto; invece, in HTTP 1.1 c’è l’utilizzo di connessioni persistenti, ovvero per più richieste e risposte successive
tra stessi client e server viene usata sempre la stessa connessione TCP permanente, ed inoltre questa connessione può
essere usata non solo per la sola pagina web in questione, ma per spedire più pagine web. In un protocollo HTTP
l’inizializzazione di una connessione TCP (handshaking) comporta un RTT: il tempo impiegato da un pacchetto di
dimensione trascurabile per viaggiare dal client al server e poi tornare al client. L’invio della richiesta HTTP da parte del
client e l’inoltro della risorsa da parte del client comportano un altro RTT. Il tempo totale di risposta è di 2RTT+tempo di
trasmissione della risorsa per unprotocollo non persistente. In un protocollo HTTP con persistenza dunque il RTT
“pagato” per la connessione è sfruttato anche per altri oggetti. I tempi medi di risposta totali si riducono notevolmente
per http persistente. Nella versione 1.1 c’è anche il pipelining, ovvero la capacità di effettuare richieste di oggetti una
dopo l’altra senza aspettare le risposte alle richieste pendenti. Queste migliorie nella versione 1.1 comportano una
notevole diminuzione dell’onere di lavoro sul web server e dei ritardi dovuti alla versione 1.0.

Descrivere il meccanismo di funzionamento di cookie


I server HTTP sono stateless (senza memoria), scelta che si è resa necessaria per garantire velocità nei salti
attraverso i link ipertestuali. I cookie HTTP sono una sorta di identificativo, usato dai server web per poter riconoscere
i browser durante comunicazioni con il protocollo HTTP. Tale riconoscimento permette di realizzare meccanismi di
autenticazione (login), di memorizzare dati utili alla sessione di navigazione, di associare dati memorizzati dal server,
di tracciare la navigazione dell’utente.
Sono composti da una riga di intestazione HTTP, un file mantenuto sul sistema dell’utente e gestito dal browser e un
database sul sito. Quando giunge una richiesta ad un web server il sito crea un identificativo unico e una voce nel
proprio database, indicizzata dal proprio identificativo. Il server risponde includendo nell’http l’intestazione ‘set-cookie’ :
contenente il numero identificativo. Il browser aggiunge quindi una riga nel file di cookie contenente nome dell’host del
server e identificativo. Ogni volta che si richiede una pagina web si consulta il file dei cookie estraendo l’identificativo
per il sito.
Nonostante i cookie semplificano molte attività via internet, sono fonte i controversie, in quanto possono essere
considerati una violazione della privacy e dell’utente. Inoltre potrebbero essere intercettati tramite diverse tecniche
(cross-site scripting, cross-site request) ed usati per ottenere l’accesso (credenziali) al sito web a cui il cookie
appartiene.

Descrivere il funzionamento del caching nel web (5) ✔


Ci sono due tipi di web cache : la prima riguarda il browser e si trova all’interno del client la seconda è nota come proxy
server.
Una web cache, nota anche come proxy server, è un’entità di rete che soddisfa le richieste http al posto del web server
effettivo e serve per ridurre il traffico. A tale scopo, il proxy ha una propria memoria su disco (una cache) in cui conserva
le copie di oggetti recentemente richiesti.
Quando un browser deve richiedere una pagina web invece di essere indirizzato verso il server inizializza una
connessione con un proxy server. Il browser stabilisce una connessione TCP con il proxy server e invia la richiesta per
l’oggetto specificato. Il proxy controlla nella propria memoria se l'oggetto è presente. Se sì lo inoltra al client. Altrimenti,
se non è presente, il proxy invia al server una richiesta HTTP per l’oggetto. Una volta ricevuta la richiesta, il server invia
l’oggetto al proxy tramite una risposta HTTP. Quanto il proxy riceve questo oggetto, ne salva una copia nella propria
memoria e invia una copia al browser.
In questi passaggi il proxy server svolge sia un ruolo server quando comunica con il browser sia un ruolo client quando
contatta il server di origine.
I vantaggi del web caching sono la riduzione sostanziale dei tempi di risposta alle richieste dei client e la riduzione del
traffico al collegamento di accesso a internet. Se si suppone di avere un elevato livello di ‘hit rate’ – la maggior parte
delle richieste saranno soddisfatte in tempi brevi in quanto già presenti nella cache.
Il web caching introduce però un problema: la copia di un oggetto che risiede in cache potrebbe essere scaduta. Questo
problema si risolve con un GET condizionale. Quando un proxy richiede una oggetto al server, oltre a salvare una copia
dell’oggetto nella cache, salva anche la data dell’ultima modifica di questo oggetto. Successivamente, quando questo
oggetto viene di nuovo richiesto, il proxy effettua un controllo di aggiornamento inviando un GET condizionale chiedendo
3
al server di rinviargli l’oggetto se e solo se è stato modificato rispetto all’ultima data specificata. Se non c'è stata nessuna
modifica il server risponde al proxy con un messaggio con il corpo vuoto – 304 not modified. Altrimenti, se c’è stata una
modifica risponde con messaggio ‘200 ok’ e con l’oggetto richiesto incluso. Il meccanismo di get condizionale viene
utilizzato anche quando il proxy server non c’è. I browser hanno una cache dove memorizzano le pagine web. Il client
invia messaggi di richieste con get condizionale al server di origine il quale risponde fornendo l’oggetto se modificato,
oppure fornendo la copia presente in cache.

Protocollo FTP con le relative differenze con htpp


E’ il protocollo utilizzato a livello applicativo per trasferire i file (File Transfer Protocol), basato su TCP .
A differenza di altri protocolli, FTP per trasportare un file utilizza due canali TCP separati che agiscono in parallelo:
- Una connessione di controllo usata per trasmettere informazioni di controllo tra client e server come
l’identificazione dell’utente, password, ecc. Questa connessione rimane sempre aperta. (port 21)
- Una connessione per il trasferimento dati, che viene aperta e chiusa. (port 20)
Dato che l’FTP usa un connessione di controllo separata, si dice che invia le sue informazioni di controllo fuori banda
(out-of-band).
FTP è un protocollo statefull perché mantiene lo stato sulle directory e sui dati di autenticazione durante le
trasmissioni. Il protocollo FTP si riferisce ad un modello client/server dove il client da luogo al trasferimento in entrambi
i versi e il server resta in attesa delle connessioni (in ascolto sulla porta 21). Quando un utente avvia una sessione FTP
con un server remoto, il lato client apre due porte una per la trasmissione e ricezione dei dati e l’altra per il controllo. Il
client instaura una connessione TCP di controllo con il server sulla porta 21 del server specificando il numero di porta
dati del client.
Il client ottiene dal server l’autorizzazione alla connessione sulla linea di controllo.
Il client invia l’identificazione dell’utente e la password sulla connessione di controllo.
Il server apre il data channel verso la porta indicata dal client per iniziare il trasferimento.
Al termine del trasferimento il server chiude la connessione. Le differenze con htpp sta nel fatto che htpp non è statefull
– infatti mantiene le informazioni attraverso i cookie. http inoltre è strutturato per permettere di richiedere/scaricare un
solo oggetto tramite il metodo get mentre nel protocollo ftp è possibile utilizzare il metodo mget e scaricare piu’ oggetti.
FTP ha limiti sul numero di utenti connessi in quanto mantiene lo stato. In http i messaggi di controllo e i dati viaggiano
sulla stessa connessione.

Descrivere le caratteristiche principali dell’applicazione di Posta Elettronica. Si illustrino, inoltre, i protocolli di


livello applicativo impiegati in tale applicazione. (1)
L’applicazione di posta elettronica consente lo scambio di messaggi tra persone. E’ un mezzo di comunicazione
asincrono. I principali attori di questo sistema sono gli user agent (client di posta), i server di posta e il protocollo SMTP.
User agents viene utilizzato dall’utente per connettersi ad un servizio di posta elettronica. I mail server hanno lo scopo
di contenere i messaggi in arrivo. Al loro interno è presente una coda di messaggi che devono essere inviati.
Il protocollo SMTP si occupa di trasferire i messaggi dal server del mittente a quello del destinatario; ciò avviene in questi
passi: quando si da il comando allo user agent di inviare il messaggio, esso viene posto sul mail server in coda di
messaggi; il lato client di SMTP vede il messaggio e apre una connessione TCP verso il server SMTP sul server mail del
destinatario, con un handshaking; in seguito a ciò invia il messaggio sulla connessione TCP; sul server mail del
destinatario il lato server di SMTP riceve il messaggio e lo pone nella casella destinataria; il destinatario quando lo riterrà
opportuno apre il proprio user agent per leggere il messaggio. Per il SMTP non si usano server intermedi, ma la
connessione avviene anche tra due città distanti. Più mail verso lo stesso destinatario possono esser mandate sulla
stessa connessione TCP. Un messaggio di posta è formato da un’intestazione con delle righe fondamentali (from:, to:..)
separata da uno spazio dall’area riservata al corpo del messaggio.
. Presenta un lato client in esecuzione sul mail server del mittente e un lato server in esecuzione sul mail server del
destinatario. Rispetto ad http che è un protocollo pull, SMTP è un protocollo di tipo push, ovvero i dati vengono mandati
da client a server. Client e server comunicano mediante messaggi : comandi scritti in ASCII e risposta con codice di
stato. L’STMP deve comporre l’intero messaggio con codifica ASCII a 7 bit, HTTP non impone questo vincolo. E’ stata
introdotta quindi l’estensione MIME. Questa estensione prevede la possibilità di scrivere messaggi multiparte, che
contengono al loro interno testo con diversa codifica; quindi può contenere file multimediali, quali video, immagini, audio
ed eseguibili.
Durante il trasferimento, sia HTTP che SMTP utilizzano connessioni persistenti.
Per la ricezione tramite user agent di messaggi posizionati nel mail server del destinatario si usano diversi protocolli di
accesso alla posta come POP3, IMAP, o HTTP stesso (tramite web mail). Il protocollo POP3 è il protocollo più semplice,
e consiste in 3 fasi: autorizzazione, transazione e aggiornamento; nell’autorizzazione si fa il login con il mail server (in
chiaro presso la porta 110); con la transazione si può fare “scarica e cancella” o “scarica e mantieni”; nell’aggiornamento
si conclude la sessione dopo aver ricevuto il comando quit, facendo il logout dal mail server; il POP3 non trasporta info
di stato tra sessioni diverse ne permette di creare cartelle remote sul server.

4
Un server IMAP associa ad ogni messaggio una cartella (ad esempio i messaggi in arrivo nella cartella INBOX). Consente
la creazione di cartelle e lo spostamento di messaggi in esse. Conserva info di stato tra sessioni diverse (nomi cartelle
e assegnazioni di messaggi ad esse). Inoltre consente di ricevere parte di un messaggio, cosa utile con connessioni a
velocità ridotte.
L’ultimo protocollo usato è HTTP. Questo viene usato nelle web mail, ovvero caselle di posta aperte tramite un browser.
Quello che cambia è la comunicazione tra user agent e il primo mail server che è attuata tramite protocollo HTTP e non
più SMTP.

Descrivere il funzionamento del DNS (8) ✔/ Descrivere il DNS (3) ✔


Gli host internet possono essere indentificati in vari modi: ad esempio un utente che richiede una pagina web utilizza
degli hostname, mentre il browser web che deve instaurare una connessione TCP con il web server che contiene gli
oggetti richiesti utilizza gli indirizzi IP. Il DNS sta per Domain Name System; è un sistema utilizzato per la risoluzione di
nomi dei nodi della rete in indirizzi IP e viceversa. Oltre ad attribuire nomi simbolici a indirizzi IP fornisce anche servizi
come :
- host aliasing che permette di associare un sinonimo semplice ad un nome complicato, resistuendo
‘alias’.
- mail server aliasing che fornisce nome canonico di un sinonimo
- distribuzione del carico di rete associa ad ogni hostname canonico di siti replicati su più server un
indirizzo IP e lo restituisce a rotazione su richiesta.
Il DNS utilizza il protocollo di trasporto UDP perché il servizio deve essere veloce (TCP non ha garanzie sulla velocità)
e l’IP ritornato dal DNS è grande solo 4 byte - Essendo però l’UDP un protocollo non affidabile, in caso di perdita di
pacchetti, questi dovranno essere rispediti.
La traduzione da hostname a indirizzo IP avviene nel seguente modo: il browser estrae il nome dell’host dall’URL e lo
passa al lato client del DNS che viene eseguito sulla macchina dell’utente; il client DNS invia una query contenente
l’hostname a un DNS server e prima o poi il DNS client riceve una risposta contenente l’indirizzo IP corrispondente
all’hostname; una volta ottenuta la risposta, il browser può dare inizio a una connessione TCP verso il processo server
HTTP collegato alla porta 80 di quell’indirizzo IP.
Il servizio DNS non può essere centralizzato in quanto prevederebbe un unico server con database centralizzato
distante dai singoli clienti DNS , volume di traffico consistente e responsabilità su tutta la rete in caso di guasto. Per
trattare il problema della scalabilità, il DNS utilizza un grande numero di server, organizzati in maniera gerarchica e
distribuito nel mondo.
Il DNS è infatti sia un database distribuito implementato in una gerarchia di DNS server sia un protocollo a livello di
applicazione che consente di interrogare il database. Il database è rappresentabile mediante un albero dove ogni livello
è una classe di dns server.
Esistono 3 classi di DNS server: root server, top-level domain(TLD) server e server autoritativi. I root server : sono
responsabili del dominio di radice possiedono l’elenco dei server autoritativi di tutti i domini di primo livello (TLD)
conosciuti e lo forniscono in risposta a ciascuna richiesta. I server TLD forniscono gli indirizzi IP dei server autoritativi e
si occupano dei domini di primo livello (com,edu). Per DNS Autoritativi intendiamo i DNS gestiti da chi ospita il
nome del dominio come ad esempio un provider di hosting.
In realtà esiste un’altra classe di DNS server che è quella dei DNS Server Locali. Questi non appartengono strettamente
alla gerarchia dei server, infatti non sono autoritativo per nessun dominio, ma sono centrali per l’architettura DNS.
Sostanzialmente quando un host si connette a un ISP riceve l'indirizzo IP di uno o più DNS server locali. Inoltre quando
un host effettua una richiesta DNS, questa query viene inviata al server locale che fa da proxy e inoltra la query alla
gerarchia dei DNS detta in precedenza.
Il DNS sfrutta in modo estensivo il caching per migliorare le prestazioni di ritardo e per ridurre il numero di messaggi
DNS sulla rete. Il caching si basa sul fatto che a seguito di una richiesta, un DNS server possa mettere in cache le
informazioni di risposta. Ogni qual volta è richiesta la stessa risoluzione, questa verrà fornita direttamente. Quindi in
questi casi il DNS server fornisce l’IP richiesto anche se non è autoritativo per tale indirizzo. Essendo le associazioni in
alcun modo permanenti, i DNS server invalidano la cache dopo un TTL (time to live) in genere di 2 giorni. I server che
implementano il database distribuito DNS memorizzano i cosiddetti record di risorsa(RR) che hanno il seguente formato
(Nome, Valore, Tipo, TTL). Il tipo di messaggio trasporta informazioni sui messaggi facenti parte del database. Nel
protocollo dns i messaggi di richiesta (query) e quelli di risposta (reply) hanno lo stesso formato.
L’intestazione del messaggio contiene un identificante per effettuare query o reply e contiene piu’ flags.
Differenza tra query DNS iterative e ricorsive. (1)
Con una query ricorsiva il client contatta il local server configurato – questo contatta il root name server che contatta il
tld server che contatta il server autoritativo – la procedura viene ripercorsa all’indietro. Ogni richiesta deve passare per
il root server – questo impone un limite sul carico del root server.
Il meccanismo iterativo fa si che ogni volta che si interroga un server non ci si metta in attesa che risponda - perché il
server ci comunica chi ‘contattare’. L’utente inoltra una richiesta al local server, che contatta il root server che comunica
di contattare il tld server che a sua volta comunica di contattare il server autoritativo. Il local name server contatta il server
5
autoritativo e ne ottiene il mapping. In questo modo il root name server viene alleggerito – ma il traffico passaper root,
tld e server.
In generale la richiesta da host a server locale è ricorsiva, mentre le successive sono tutte iterative.

Architettura P2P
È un modello di architettura logica in cui i nodi non sono gerarchizzati sotto forma di client e di server, ma sotto forma di
nodi equivalenti o paritari (peer). Qualsiasi nodo dunque è in grado di avviare o completare una transazione. Due host
della rete sono connessi in modo intermittente e comunicano direttamente tra di loro. Con l’architettura client-serer il
tempo di distribuzione cresce linearmente con il crescere dei client N che scaricano il file. Con l’architettura P2P con il
crescere dei peer N che scaricano il file, il tempo di distribuzione diminuisce. L’architettura P2P (al contrario di Client-
Server) può essere scalabile e questo è la diretta conseguenza del fatto che i peer re-distribuiscono i bit oltre che a
scaricarli. Ci sono tre tipologie di architetture P2P –Decentralizzate pure •Tutti i nodi sono peer, nessun coordinatore
centralizzato •Ogni peer può funzionare come router, client, o server –Parzialmente centralizzate •Alcuni nodi (supernodi)
facilitano l’interconnessione tra i peer –Indice locale centralizzato per risorse dei peerlocali •Prima comunicazione con
un supernodo (a), poi con il peer(b) –Decentralizzate ibride •Presenza di un server centralizzato che facilita l’interazione
tra i peer (servizio di localizzazione). Overlay network: è la rete virtuale che interconnettei peer ed è basata su una rete
fisica sottostante (tipicamente IP). Ci sono 3 tipi di reti : reti strutturate (p2p che fanno uso di DHT), reti non strutturate.
Le reti non strutturate si dividono in : Sistemi decentralizzati ibridi: directory centralizzata (napster), Sistemi
decentralizzati puri: ricerca flood-based (gnutella), Sistemi parzialmente centralizzati.

Descrivere il protocollo BitTorrent


BitTorrent è un protocollo P2P per la distribuzione di file. L’insieme di tutti i peer che partecipano alla distribuzione di un
file è chiamata torrent. I peer in un torrent si scambiano porzioni dello stesso file di uguale dimensione (256Kb) chiamate
chunk.
Quando un peer entra a far parte di un torrent inizialmente non ha chunk del file. Man mano che inizia ad accumularli
inizia anche ad inviarli agli altri peer del torrent.
Ciascun torrent ha un nodo di infrastruttura chiamato tracker, che coordina la distribuzione di file. Quando il peer si
aggiunge ad un torrent esso si registra presso il tracker per avere la lista dei peer e si connette ad un sottoinsieme di tali
peer (neighbors) direttamente con connessioni TCP. Un gruppo di peer interconnessi per condividere un file torrent si
chiama swarm.
Periodicamente, un peer chiede a tutti i neighbor la lista dei chunk in loro possesso ed invia richieste per i chunk
mancanti. Nel decidere quali chunck richiedere si adotta la tecnica rarest first, cioè si determinano i chunk più rari tra
quelli che mancano (con il minor numero di copie tra i neighbors). In questo modo i chunk più rari vengono distribuiti più
velocemente. Per determinare a quali richieste di chunk il peer debba rispondere si utilizza un algoritmo di tit-for-tat,
cioè si dà priorità ai peer che forniscono dati al rate più alto. In particolare vengono scelti i top 4, chiamati unchocked e
che sono ricalcolati ogni 10 secondi. Ogni 30 secondi si seleziona un peer nuovo in maniera casuale (optimistically
unchoke) e si inizia ad inviargli chunk. Il peer scelto può essere aggiunto ai top 4 se più veloce di uno dei 4.
Questo meccanismo limita la pratica del free-riding, ovvero di scaricare senza contribuire al torrent, in quanto incentiva
scambi tra peer con velocità compatibili.

Skype
Skype è un’applicazione P2P che supporta inoltre instant messaging e conferencing. E’ sviluppata con un protocollo
completamente proprietario per cui le info conosciute sono attribuite unicamente a studi di reverse engineering.
Skype utilizza un rete di overlay con tre tipi di host: Skype Clients, Skype login server e SuperNode.
Ciascun client Skype mantiene una lista di indirizzi IP di super nodi conosciuti. I super nodi sono responsabili della
localizzazione degli utenti, del routing delle chiamate, del mantenimento delle informazioni circa gli host connessi alla
rete Skype.
Alla prima esecuzione dopo l’installazione, un client Skype comunica con il server Skype. Durante la comunicazione, la
cache dell’host è popolata di 7 indirizzi IP di super nodi da usare per il bootstrap. A questo punto l’host può contattare
uno di essi per il join. Selezionato il super nodo per il join, parte la fase di autenticazione con user name e password con
il server Skype. L’host viene periodicamente aggiornato con indirizzi IP di nuovi super nodi. Gli indici mappano i nomi a
indirizzi IP, distribuiti tra i super nodi. Per i login successivi un client sceglie uno degli indirizzi dei super nodi e stabilisce
direttamente la connessione. Il server Nat copre i peer client per il riconoscimento in Skype – la comunicazione viene
permessa attraverso i supernodi che trasmettono per conto dei due peer protetti da NAT.

Descrivere come vengono realizzate le DHT (1) ✔


Le DHT sono tabelle hash distribuite, utilizzate in reti p2p strutturate. Distribuite perché, nel sistema P2P, ogni peer può
gestire un piccolo sottoinsieme della totalità di coppie (chiave,valore); inoltre ogni peer può interrogare il database
distribuito con una specifica chiave ed esso gli restituirà i peer che hanno la coppia (chiave,valore) richiesta ed ogni peer

6
può anche aggiungere nuove coppie al database. Un primo metodo di realizzazione sarebbe la distribuzione casuale
delle coppie e la memorizzazione in ogni peer dell’IP di tutti gli altri: ciò però non è affatto scalabile e non va quindi bene.
Un metodo migliore è il seguente: si assegna un identificatore ad ogni peer (da 0 a 2^n-1 con n fissato); anche ogni
chiave deve essere sempre nello stesso intervallo precedente; queste chiavi però spesso non sono nel formato giusto,
e per creare interi a partire da esse si usa una funzione hash che ne crea la corrispondenza (tramite questa funzione
più chiavi possono avere la stessa corrispondenza ma è una probabilità molto ridotta quindi trascurabile). Come si
assegnano le chiavi ai peer? Si assegna ogni coppia chiave-valore al peer il cui id è il più vicino alla chiave, e se la
chiave corrisponde proprio ad uno degli id, allora si assegna proprio a quel peer, mentre se è più grande di tutti gli id,
allora si memorizza nel peer con l’id più piccolo (convenzione modulo-2^n). Però con questo metodo c’è un problema
quando un peer vuole aggiungere una nuova coppia: per determinare il peer con id più vicino alla chiave dovrebbe
conoscerli tutti, cosa infattibile.
Questo problema si risolve con la DHT circolare. In questa realizzazione ogni peer tiene traccia solo del predecessore
immediato e successore. Un peer per sapere quale sia responsabile per una certa chiave, interroga il successivo o il
precedente, e se non è nessuno dei due, manda avanti al successore in senso orario sul cerchio, fino ad arrivare al
responsabile che invia risposta al peer originario che ha mandato la richiesta. Però così facendo, nel caso peggiore, ogni
peer dovrebbe mandare una richiesta sul cerchio. Questo problema si aggira con l’aggiunta delle scorciatoie che
permettono ad un peer di conoscere anche un numero piccolo di peer sparsi nel cerchio. Una situazione ottimale è che
il numero di peer vicini e il numero di messaggi scambiati siano O(logN) con N numero di peer. Infine c’è il problema
dell’uscita o entrata di peer dal sistema. Questo si risolve con il turnover. Ogni peer conosce due successori, il primo e
il secondo e verifica periodicamente che ognuno sia attivo. Se uno di essi se ne va, il peer rende il secondo come primo
successore e poi prende il successore immediato di questo e lo rende suo secondo successore. All’entrata di un nuovo
peer, esso chiede quale sia il suo successore nella rete DHT, e poi fa in modo che esso aggiorni la sua lista includendo
il nuovo peer.

Descrivere le diverse modalità per la ricerca nelle reti peer to peer (5) ✔
Viene utilizzato un indice nel sistema p2p che mappa le informazioni per la locazione del peer. La locazione è
composta dall’indirizzo IP e il numero di porta. Ci sono diversi tipi di meccanismi per la ricerca dei peer. Una prima
distinzione viene fatta per le applicazioni file sharing e instant messagging.
Nel file sharing l’indice tiene traccia dinamicamente delle posizioni dei file condivisi dai peer. I peer devono
comunicare all’indice quale file contegono e i peer cercano nell’indice per determinato dove i file possono essere
trovati. Nell’istant messagging gli indici mappano i nomi utenti alle posizioni. Quando l’utente inizia l’appicazione
instant messagging deve informare l’indice della sua posizione. I peer cercano l’indice per determinare l’indirizzo ip
dell’utente.
Nel peer con directory centralizzata (napster): Un nodo centralizzato (directory server) possiede il mapping delle
risorse-peer(index), fornendo un servizio di discovery dei peer e di look up delle risorse.
Il peer si connette inizialmente ad un server centralizzato fornendo il proprio indirizzo IP e il nome degli oggetti resi
disponibili per la condivisione. In questo modo il server raccoglie le info sui peer attivi e le aggiorna dinamicamente.
Gli svantaggi di questo tipo di architettura sono: la presenza di un singolo punto di fallimento, un collo di bottiglia per le
prestazioni, e soprattutto il server potrebbe contenere informazioni che violano il copyright.
Il trasferimento dei file è di fatto decentralizzato, ma la locazione dei contenuti è pesantemente centralizzata. Nel p2p
decentralizzato(gnutella) non esistono server. Gnutella è supportato da un bootstrap server per ottenere la lista dei
peer attivi. Si realizza con un’architettura di rete sovrapposta (overlay network) fatta da connessioni TCP in corso. Le
problematiche da risolvere sono come costruire e gestire la rete di peer e come localizzare i contenuti all’interno della
rete. Viene utilizzata la tecnica di ricerca query flooding : viene inoltrata la query di ricerca ai peer vicini che
trasmettono ai peer vicini finchè la risorsa non viene trovata oppure viene raggiunto il limite imposto dalla rete. Il p2p
con parzialmente centralizzato sfrutta le caratteristiche positive di napster e gnutella. Ogni peer è associato ad un
gruppo leader che è esso stesso un peer. I super peer memorizzano le informazioni in condivisione dei “figli” e
indicizzano le risorse disponibili nei peer che gestiscono. Ogni group leader è in grado di interrogare altri group leader
:Il flooding riguarda solo i supernodi. Un peer che si connette deve essere associato ad un group leader o deve essere
designato esso stesso group leader. Quando un nodo si connette alla rete non chiede al nodo di bootstrap ma ai
superpeer. Il super peer chiedono informazioni al nodo di bootstrap su gli altri super peer.
L’overlay network è costituita da connessioni TCP tra peer e group leader e tra coppie di group leader.I peer
spediscono le query al proprio group leader; quest’ultimo risponde per ogni richiesta con l’indirizzo IP del detentore
della risorsa e i metadati associati alla risorsa. Il group leader inoltra sia le richieste sia le eventuali risposte da parte di
altri group leader. Nelle reti strutturate vengono utilizzate le DHT : tabelle hash distribuite. Per la ricerca nelle reti DHT
viene utilizzata una corrispondenza tra l’id del peer e chiave attraverso funzioni hash.

7
3° Capitolo

Descrivere come viene effettuato il demultiplexing in TCP e UDP. (3)


Per multiplexing e demultiplexing si intende il passaggio del servizio di trasporto da host a host (fornito con dal livello di
rete) a un servizio di trasporto da processo a processo per le applicazioni in esecuzione sugli host. Nell’host
destinatario il livello di trasporto riceve segmenti dal livello di rete immediatamente sottostante. Il livello di trasporto ha
il compito di consegnare i dati di questi segmenti al processo applicativo appropriato in esecuzione nell’host.
Un processo può gestire una o più socket, attraverso le quali i dati fluiscono dalla rete al processo e viceversa. Per cui
il livello di trasporto nell’host di ricezione in realtà non trasferisce i dati direttamente a un processo, ma piuttosto ad una
socket che fa da intermediario. Il compito di trasportare i dati dei segmenti a livello di trasporto verso la giusta socket
viene detto demultiplexing. Il compito di radunare frammenti di dati da diverse socket sull’host di origine e incapsulare
ognuno con intestazioni a livello di trasporto per creare segmenti e passarli al livello di rete, viene detto multiplexing. Il
multiplexing e il demultiplexing è realizzato inserendo all’interno dei segmenti UDP e TCP gli identificatori delle socket:
• Campo del numero di porta di origine • Campo del numero di porta di destinazione. Quando arriva un segmento
all’host, il livello di trasporto esamina il numero della porta di destinazione e dirige il segmento verso la socket
corrispondente. I dati del segmento passano, quindi, dalla socket al processo assegnato.
In UDP quando un segmento arriva all’host, il suo livello di trasporto esamina il numero di porta di destinazione del
segmento e lo consegna alla propria socket. In UDP, una socket è composta da una coppia formata da indirizzo IP e
numero di porta di destinazione; quindi, se due segmenti UDP hanno indirizzi IP e/o numeri di porta di origine diversi ma
indirizzo IP e numero di porta di destinazione uguali, saranno diretti allo stesso processo di destinazione tramite la stessa
socket. La differenza tra una socket TCP e una UDP risiede nel fatto che la prima è identificata da quattro parametri:
indirizzo e porta di origine, indirizzo e porta di destinazione. Pertanto quando un segmento TCP giunge alla rete di un
host, quest’ultimo utilizza i quattro parametri per dirigere (fare demultiplexing) il segmento verso la socket appropriata.
Al contrario di UDP, due segmenti TCP in arrivo, aventi indirizzi IP di origine o numeri di porta di origine diversi, saranno
sempre diretti a due socket differenti, anche a fronte di indirizzo IP e porta di destinazione uguali. L’host server può
ospitare piu’ socket TCP contemporanee collegate a processi diversi, ognuna identificata da una specifica quaterna di
valori. I quattro campi vengono utilizzati per fare demultiplexing, e quindi dirigere il segmento verso la socket appropriata
in TCP.
Trasporto non orientato alla connessione : UDP
UDP, User Datagram Protocol, definito in RFC 768, fa praticamente il minimo che un protocollo di trasporto debba fare.
A parte la funzione di multiplexing/demultiplexing e una forma di controllo degli errori molto semplice, non aggiunge nulla
a IP. In UDP non esiste handshaking tra le entità di invio e di ricezione a livello trasporto per questo motivo si dice non
orientato alla connessione. UDP Prende i messaggi dal processo applicativo, aggiunge il numero di porta di origine e
di destinazione e passa il segmento al livello di rete che lo incapsula in un datagramma IP ed effettua un tentativo di
consegnarlo all’host di destinazione in modalità best-effort. Se il segmento arriva a destinazione, UDP utilizza il numero
di porta di destinazione per consegnare i dati del segmento al processo applicativo corretto. DNS utilizza UDP.
L’intestazione UDP presenta solo quattro campi di due byte ciascuno. I numeri di porta consentono all’host di
destinazione di trasferire i dati applicativi al processo corretto. Il campo lunghezza 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.
Lato mittente UDP effettua il complemento a 1 della somma di tutte le parole da 16 bit nel segmento e l’eventuale riporto
finale viene sommato al primo bit. Il risultato viene posto nel campo checksum del segmento UDP. In ricezione si
sommano le tre parole iniziali e il checksum. Se non ci sono errori nel pacchetto, l’addizione darà 1111111111111111,
se un bit vale 0 è stato introdotto almeno un errore. UDP deve mettere a disposizione a livello di trasporto un meccanismo
di verifica su base end-to-end se si vuole che il servizio trasferimento dati sia in grado di rilevare eventuali errori. UDP
non fa nulla per risolvere le situazioni di errore, alcune implementazioni si limitano a scartare il segmento danneggiato.

Differenze tra TCP e UDP (vantaggi e svantaggi)


UDP, come IP, costituisce un servizio inaffidabile e cioè non garantisce che i dati inviati da un processo arrivino intatti
(e neppure che arrivino) al processo destinatario.
TCP, d’altra parte, offre alle applicazioni diversi servizi aggiuntivi che permettono di fornire un trasferimento dati
affidabile: controllo di flusso, Acknowledgement,timer,controllo di congestione. Con un canale affidabile vengono evitati:
• Presenza di errori • Perdita di pacchetti • Ordine dei pacchetti non garantito • Duplicazione di pacchetti. Udp non
garantisce l’assenza di questi eventi in quanto non affidabile.
UDP dispone di un controllo più fine a livello applicazione su quali dati sono inviati e quando - risparmia tempo a
differenza di tcp. Non appena un processo applicativo passa dei dati a UDP, li impacchetta in un segmento che trasferisce
immediatamente al livellodi rete. TCP, con il meccanismo di controllo della congestione, ritarda l’invio a livello di trasporto.
Le applicazioni in tempo reale non supportano ritardi eccessivi , infatti UDP è buono per applicazioni in tempo reale.
8
UDP non prevede alcuna connessione stabilita e nessun relativo ritardo, in quanto a differenza di TCP, non esiste
handshaking tra le entità di invio e ricezione. UDP non gestisce nessuno stato di connessione per cui non è necessario
includere buffer di ricezione e invio, parametri per il controllo della congestione, parametri sul numero di sequenza e di
acknowledgment. Un server UDP può supportare molti più client attivi rispetto ad un server TCP.
L’intestazione dei pacchetti TCP aggiunge 20 byte, UDP ne aggiunge 8.

Descrivere il funzionamento del protocollo Go-Back N. (2)


Nel protocollo Go-Back-N il mittente può trasmettere più pacchetti senza dover attendere ack, ma non può avere più di
un dato numero massimo consentito N di pacchetti in attesa di ack nella pipeline. Il pipelining serve per evitare il problema
dello stop and wait, quindi permette di trasmettere i pacchetti senza dover attendere i relativi ack. Ai pacchetti da inviare
sono fatti corrispondere dei numeri di sequenza – questo numero è scritto in un campo a dimensione fissa
dell’intestazione del pacchetto. Detto k il numero di bit di tale campo, l’intervallo dei possibili numeri di sequenza è [0,
2^(k) -1]. L’intervallo dei numeri di sequenza ammissibili per i pacchetti trasmessi, ma che non hanno ricevuto ack, può
essere visto come una finestra di dimensione N sull’intervallo dei numeri di sequenza. Quando questo protocollo è in
funzione, questa finestra trasla lungo lo spazio dei numeri di sequenza e per questo motivo N viene detto ampiezza
della finestra e questo protocollo viene detto a finestra scorrevole. La base della finestra è il numero di sequenza del
pacchetto piu’ vecchio che non ha ricevuto ack e nextseqnum è il piu’ piccolo numero di sequenza inutilizzato, ossia il
pacchetto che si può inviare con quel numero di sequenza. Il controllo di flusso è una delle ragioni per imporre limite al
mittente sui pacchetti da inviare.
Il mittente GBN risponde a 3 tipi di eventi: invocazione dall’alto, ricezione di un ack, evento di timeout. Invocazione
dall’alto: quando arriva una richiesta di invio dall’alto, il mittente controlla se la finestra è piena, e in tal caso restituisce
i dati da inviare per poterli mandare in un altro momento; contrariamente se non è piena crea ed invia un pacchetto;
ricezione di un ack: quando il mittente riceve un ack, esso viene considerato cumulativo, ovvero vale per tutti i pacchetti
con un numero di sequenza inferiore o uguale a esso. In questo modo, se avviene la perdita di un ack ma viene ricevuto
un ack di un pacchetto con sequenza superiore, significa che tutti i pacchetti precedenti a quest’ultimo sono stati
riscontrati. Il mittente imposta un timer per il pacchetto trasmesso meno di recente per cui non sia stato ancora ricevuto
un ack. L’evento di timeout indica la possibilità che ci sia stato l’evento di perdita pacchetti.
evento di timeout: quando si verifica un timeout il mittente reinvia tutti i pacchetti spediti che ancora non hanno ricevuto
un ack; se si riceve un ack ma ci sono ancora pacchetti trasmessi che non l’hanno ricevuto, si fa ripartire il timer;
altrimenti, in assenza di pacchetti in sospeso, il contatore viene fermato. Il destinatario GBN compie queste azioni: se
un pacchetto viene ricevuto correttamente ed in ordine rispetto al numero di sequenza, il destinatario manda un ack per
quel pacchetto e consegna i suoi dati al livello superiore. Altrimenti scarta i pacchetti (quelli fuori sequenza) e manda un
ack per il pacchetto in ordine ricevuto più di recente. Il vantaggio di questo metodo è che il destinatario non deve
memorizzare nel buffer i pacchetti giunti fuori sequenza; lo svantaggio invece è che viene eliminato un pacchetto ricevuto
correttamente e quindi la sua ritrasmissione potrebbe avere problemi di vario tipo causando ulteriore perdita di tempo. Il
mittente deve mantenere limiti superiori e inferiori della propria finestra di ricezione e la posizione nextseqnum all’interno
di tale finestra, l’unica parte che il destinatario deve memorizzare è il numero di sequenza del successivo pacchetto
nell’ordine. Questo è dovuto al fatto che il destinatario deve fornire i dati in modo ordinato al livello superiore.

Descrivere il protocollo a ripetizione selettiva (selective repeat)


I protocolli a ripetizione selettiva (SR, selective-repeat protocol) evitano le ritrasmissioni non necessarie facendo
ritrasmettere al mittente solo i pacchetti su cui esistono sospetti di errore. Nella pipeline si possono trovare numerosi
pacchetti. Un errore su un pacchetto può provocare un elevato numero di ritrasmissioni inutili. La pipeline può saturarsi
a causa di queste ritrasmissioni non necessarie. Si utilizza, come GBN, un’ampiezza di finestra di ricezione pari a N, per
limitare il numero di pacchetti privi di acknowledgement nella pipeline. Il destinatario deve mandare ACK specifici per i
pacchetti ricevuti in modo corretto: invierà un riscontro per i pacchetti correttamente ricevuti sia in ordine sia fuori
sequenza. Questi vengono memorizzati in un buffer finchè non sono stati ricevuti tutti i pacchetti mancanti, con numero
di sequenza piu’ basso, momento in cui un blocco di pacchetti può essere trasportato a livello superiore. Il destinatario
spedice ack dei pacchetti già ricevuti con certi numeri di sequenza al di sotto della base della finestra.
E quindi le operazioni e la finestra sarà diversa tra mittente e destinatatrio.
Il mittente in tale protocollo deve rispondere a tre eventi:
1. Dati ricevuti dall’alto -> controlla il successivo numero di sequenza disponibile per il pacchetto. Se è all’interno
della finestra del mittente, vengono impacchettati e inviati, altrimenti sono salvati nei buffer o restituiti al livello
superiore per una successiva ritrasmissione.
2. Timeout -> contro la perdita di pacchetti, ogni pacchetto deve avere un proprio timer logico, dato che al timeout
sarà ritrasmesso solo un pacchetto alla volta.
3. ACK ricevuto -> il mittente etichetta tale pacchetto come ricevuto, ammesso che sia nella finestra. Se il numero
di sequenza del pacchetto è uguale alla base della finestra, quest’ultima si muove verso il pacchetto che non ha
ricevuto ACK con il più piccolo numero di sequenza. Se ci sono pacchetti non trasmessi, vengono trasmessi.
Il destinatario deve rispondere a tre eventi:

9
1. Il pacchetto con numero di sequenza all’interno della finestra viene ricevuto correttamente -> ricade all’interno
della finestra del ricevente e al mittente viene restituito un pacchetto di ACK selettivo. Se il pacchetto non era
già stato ricevuto viene inserito nel buffer. Se presenta un numero di sequenza uguale alla base della finestra di
ricezione, esso e tutti i pacchetti consecutivi ricevuti vengono consegnati al livello superiore.
2. Viene ricevuto il pacchetto con numero di sequenza nell’intervallo dei pacchetti già riscontrati -> si genera un
ACK, anche se è un pacchetto che il ricevente ha già riscontrato.
3. In tutti gli altri casi si ignora il pacchetto.
Occorre assicurarsi che un numero di sequenza non venga riutilizzato finché il mittente non sia sicuro che ogni pacchetto
mandato precedentemente non si trovi più nella rete. La finestra di ricezione deve avere ampiepzza inferiore o uguale
alla metà dello spazio dei numeri di sequenza dei protocolli SR.

Strutture segmenti TCP : PDU


La Protocol Data Unit (PDU) di TCP è detta segmento. Ciascun segmento viene normalmente imbustato in un pacchetto
IP, ed è costituito da un header TCP e da un payload, ovvero dati a livello applicativo. Un segmento TCP è così
strutturato:
•numeri di porta di origine e destinazione, 16 bit utilizzati per il multiplexing/demultiplexing • il campo numero di
sequenza di 32 bit che indica lo scostamento (in byte) dell’inizio del segmento TCP all’interno del flusso completo. È
riferito allo stream che fluisce nella medesima direzione del segmento.
• Il campo numero di acknowledgement: di 32 bit ed ha significato solo se il flag ACK è impostato a 1 o se i segmenti
utilizzano la tecnica trasmissiva PiggyBacking. Conferma la ricezione di una parte del flusso di dati nella direzione
opposta, indicando il valore del prossimo numero di sequenza che l’host mittente del segmento TCP si aspetta di
ricevere. Fa riferimento dunque allo stream dati che fluisce nella direzione opposta a tale segmento.
• Il campo finestra di ricezione di 16 bit viene utilizzato per il controllo di flusso e in particolare specifica la dimensione
del buffer che il TCP ha a disposizione per la gestione dinamica della dimensione della finestra scorrevole. • Il campo
lunghezza dell’intestazione, di 4 bit, specifica la lunghezza dell’intestazione TCP in multipli di 32 bit. Generalmente il
campo opzioni è vuoto e la lunghezza è quindi 20 byte.
• il campo opzioni facoltativo e di lunghezza variabile, utilizzato quando mittente e destinatario negoziano la
dimensione massima del segmento o come fattore di scala per la finestra nelle reti ad alta velocità.
• Il campo flag è di 6 bit. o bit ACK viene usato per indicare che il valore trasportato nel campo di acknowledgement
è valido; ossia il segmento in questione contiene un acknowledgement per un segmento che è stato ricevuto con
successo; o il bit RST se impostato a 1 indica che la connessione non è valida; viene utilizzato in caso di grave errore,
a volte insieme al flag ACK per la chiusura di una connessione; o il bit SYN se impostato a 1 indica che l’host mittente
del segmento vuole aprire una connessione TCP con l’host destinatario; ha lo scopo di sincronizzare i numeri di sequenza
di due host. L’host che ha inviato il SYN deve attendere dall’host remoto un pacchetto SYN/ACK. o il bit FIN: se impostato
a 1 indica che l’host mittente del segmento vuole chiudere la connessione TCP aperta con l'host destinatario. Il mittente
attende la conferma dal ricevente con un FIN/ACK. La connessione è ritenuta chiusa per metà: l’host che ha inviato FIN
non potrà più inviare dati, mentre l’altro host ha il canale ancora disponibile. Quando anche l’altro host invierà il pacchetto
con FIN 1, la connessione (dopo il relativo FIN/ACK) sarà completamente chiusa. o Il bit PSH se ha valore 1, indica che
i dati in arrivo non devono essere bufferizzati ma passati subito ai livelli superiori o Il bit URG indica che nel segmento
sono presenti dati che il mittente a livello superiore ha marcato come “urgenti”. • Puntatore a dati urgenti: indica lo
scostamento in byte a partire dal Sequence number dei dati urgenti all’interno del flusso. Valido se il bit URG è settato a
1;
• Checksum: campo di 16 di controllo utilizzato per la verifica della validità del segmento. Questa informazione è di
essenziale importanza perché il protocollo IP non prevede nessun controllo di errore sulla parte dati del frame.

Checksum in TCP
Per il calcolo del valore checksum il TCP ha bisogno di aggiungere una pseudo intestazione al datagramma, per
effettuare così un controllo anche sugli indirizzi IP di destinazione e provenienza. La pseudo intestazione viene creata e
posta in testa al datagramma TCP. Viene inserito in essa un ulteriore byte di zeri per raggiungere un multiplo di 16.
Successivamente viene calcolata la checksum su tutto il messaggio così formato, viene scartata la pseudo intestazione
e passato il datagramma al livello IP.
In fase di ricezione, il livello TCP ricrea la pseudo intestazione interagendo con l’IP sottostante, calcola la checksum e
verifica la correttezza del messaggio ricevuto. In caso di errore il datagramma verrà scartato (e quindi ritrasmesso dal
mittente).

Descrivere come viene realizzata la comunicazione affidabile nel protocollo TCP (24) TCP è un protocollo a livello
di trasporto che offre un servizio affidabile. Per fare in modo che tutti i pacchetti inviati da un host raggiungano la
destinazione nello stesso ordine, senza perdite e senza errori utilizza diversi elementi e meccanismi, riuscendo a
mantenere un throughput maggiore dei protocolli stop-and-wait.

10
Nel PDU di TCP il campo CheckSum di 16 bit si occupa di verificare la validità del segmento. Questa informazione è
importante in quanto il protocollo IP non prevede nessun controllo di errore sulla parte dati del frame. Tcp associa a ogni
pacchetto un numero di sequenza, detto campo numero sequenza e un campo del sistema di feedback, detto campo
numero di acknowledgment , entrambi di 32 bit, per rimanere informato dell'ultimo pacchetto ricevuto dal destinatario.
Inoltre possiede delle variabili che delimitano una finestra di pacchetti (una finestra di dimensione size dove il primo
pacchetto è il più vecchio che non ha ricevuto un ack) e mantiene un timer per registrare eventuali ritardi. Nel campo
flag dell’intestazione del segmentio tcp– c’è il bit ACK che viene utilizzato per indicare se un ack è valido. Sostanzialmente
il lavoro del mittente è il seguente: riceve dei pacchetti dal livello applicativo, se la finestra non è piena (ovvero se non
tutti i pacchetti sono già stati inviati e tutti in attesa di ack) TCP crea i segmenti gli associa il loro numero di sequenza e
li passa a IP, e se il timer non era già attivo lo mette in funzione. Ciascun segmento include un numero di sequenza che
rappresenta il numero del primo byte di dati del segmento nel flusso di byte. Il timer è associato al piu’ vecchio segmento
che non ha ricevuto ack. Il destinatario mantiene una variabile che contiene il prossimo numero di sequenza del pacchetto
che si aspetta di ricevere. Risponde con un ack relativo a quel pacchetto se il numero di sequenza è quello giusto. Tcp
confronta il valore di ACK con la variabile sendBase (base della finestra). La variabile sendbase è il numero di sequenza
del piu’ vecchio byte che non ha ancora ricevuto un ack. Tcp utilizza acknowledgment cumulativa, come in BGN,
pertanto viene mandato un unico ack per confermare la ricezione di tutti i byte precedenti. Se l’ack mandato è maggiore
di sendbase, allora l’ack si riferisce a uno o piu’ segmenti che precedentemente non avevano ancora ricevuto conferma.
Quindi il mittente aggiorna la variabile sendbase – trasla la finestra di ricezione – e riavvia il timer se non ci sono
segmenti che necessitano di ack. Se invece il pacchetto che il destinatario si aspettava di ricevere non corrisponde, con
probabilità di evento ‘packet loss’, trasmette un ack con associato l'ultimo pacchetto ricevuto - un ack duplicato visto
che aveva mandato lo stesso quando aveva ricevuto quel pacchetto in precedenza, quindi evitando di mandare un nak.
In questo caso viene rilevato un buco nel flusso di dati, ossia un segmento mancante. Se avviene l’arrivo di un segmento
che colpa parzialmente o completamente il buco dei dati ricevuti – viene inviato immediatamente un ack, ammesso che
il segmento cominci all’estremità inferiore del buco. Per il mittente possono accadere due eventi negativi: scade il timer
o riceve ack duplicati. Se scade il timer, TCP ritrasmette il pacchetto più vecchio che non ha ricevuto l'ack e raddoppia il
tempo del timer (è un'azione minima per il controllo di congestione); se riceve per tre volte un ack duplicato deduce
che il pacchetto con numero di sequenza più piccolo è andato perso e lo ritrasmette prima che scada il timer
(ritrasmissione rapida). TCP non segue esattamente il protocollo GBN in quanto non ritrasmette tutti i pacchetti che
non hanno ricevuto l'ack ma solo il più vecchio, questo perché normalmente il destinatario ha anche lui un buffer in cui
può inserire i pacchetti anche se non gli arrivano in modo ordinato. Può anche essere implementato come un ibrido tra
GBN e SR se al destinatario si dà la possibilità di inviare ack di pacchetti non ricevuti in ordine.

Descrivere il funzionamento del meccanismo dei riscontri ritardati (“delayed ACK”) e illustrare i vantaggi
dell’uso di tale meccanismo in TCP. (12)
Quando il ricevitore TCP riceve un segmento, non invia immediatamente un Ack, ma attende una certa frazione di
secondi (solitamente 200 ms). Ritardando la trasmissione di un Ack, aumenta la probabilità di poterne fare il
piggybacking in un pacchetto di dati. Se entro tale intervallo di tempo riceve un altro segmento, allora invia un Ack
complessivo – ack cumulativo. In questo caso si può dire che il messaggio inviato "piggybacks" (porta con sé) l'ACK
relativo all'ultima ricezione avvenuta. Altrimenti, scaduto il timer, invia ugualmente un Ack (ritardato per questo motivo).
L’invio immediato di un ACK si ha solo per segmenti fuori sequenza.
Questo si traduce essenzialmente in una riduzione del numero di Ack inviati dal ricevitore al trasmettitore. Se non si
usassero gli ack ritardati, ci sarebbe un aumento più rapido della finestra di congestione.

Meccanismo di ritrasmissione rapida TCP (2) ✔


Per offrire un servizio affidabile che tiene conto della perdita dei pacchetti TCP utilizza un timer riferito sempre al
pacchetto più vecchio che non ha ricevuto un ack. Se il mittente riceve l'ack per quel pacchetto o per uno successivo il
timer viene riavviato (in TCP gli ack sono cumulativi). Tuttavia è possibile che il timer implichi un'attesa troppo lunga visto
che ogni volta che scade viene raddoppiato (è un'azione minima per il controllo di congestione). In realtà aspettare la
fine del timer può essere inutile visto che in TCP se il destinatario riceve pacchetti che non coincidono con il numero di
sequenza atteso ritrasmette ack duplicati dell'ultimo pacchetto ricevuto. Questo significa che riceve più ack duplicati è
sintomo che un pacchetto è stato perduto. In questo caso TCP mantiene un contatore sul numero di ack duplicati, quando
raggiunge il numero tre avvia una ritrasmissione rapida ovvero riinvia il pacchetto che è andato perso prima che scada
il suo timer.
Anche se la scadenza del timer e gli ack duplicati indicano entrambi che un pacchetto è andato perduto il primo è più
probabile che sia dovuto a causa della congestione mentre nel secondo caso il pacchetto perduto può essere stato un
caso isolato visto che l'invio degli ack duplicati sono comunque una risposta a dei pacchetti che il destinatario ha
effettivamente ricevuto.
Quindi se il mittente riceve 3 ack duplicati per lo stesso dato, allora considera questo evento come indice che il segmento
che lo segue è andato perduto; in tal caso, viene effettuata la ritrasmissione rapida di tale pacchetto, prima che finisce il
timer.

11
Descrivere come viene calcolato il timer di ritrasmissione nel protocollo TCP (2) ✔
TCP utilizza un meccanismo di timeout e ritrasmissione per recuperare i segmenti persi. Il timeout dovrebbe essere più
grande del tempo di andata e ritorno sulla connessione.
Impostare la durata del timer non è immediato: un tempo troppo breve costerebbe un numero esagerato di ritrasmissioni
inutili che aumenterebbero la congestione, ugualmente un tempo troppo lungo potrebbe segnalare un errore dopo che il
mittente abbia già inviato molti altri pacchetti inutilmente.
La durata del timer è innanzitutto relazionata con il tempo di RTT (tempo di andata e ritorno sulla connessione).
Chiamando SampleRTT la durata di un generico RTT e EstimatedRTT una media dei valori si ha EstimatedRTT = (1-
alfa) x EstimatedRTT + alfa x SampleRTT. Contano di più i valori più recenti perché sono i più utili per sapere se la rete
è congestionata o meno – il valore raccomandato per alfa è 0,875.
Si definisce anche DevRTT = (1-beta) x DevRTT + beta x (SampleRTT-EstimatedRTT) una stima di quanto SampleRTT
e EstimatedRTT si discostano tra loro. Più sono distanti più è grande DevRTT e viceversa.
A questo punto l'intervallo di timeout è calcolato come TimeoutInterval = EstimatedRTT + 4 x DevRTT. Così il timeout
sarà sempre più grande della media degli RTT, in particolare molto più grande se ci sono fluttuazioni o poco più grande
se SampleRTT e EstimatedRTT non si scostano molto.

Descrivere come viene realizzato il controllo di flusso nel protocollo TCP (6) ✔
Gli host agli estremi della connessione TCP riservano dei buffer di ricezione per la connessione. Quando la connessione
riceve byte corretti e in sequenza, l’host li posiziona nel buffer di ricezione.II processo applicativo associato leggerà i dati
da questo buffer, ma se tale applicazione è lenta nella lettura dei dati può accadere che il mittente mandi in overflow il
buffer di ricezione del destinatario: TCP offre un servizio di controllo di flusso (flow-control service) per evitare che il
mittente saturi il buffer del ricevente – e che quindi si verifichi una perdina dei pacchetti.Il mittente mantiene una variabile
chiamata finestra di ricezione, che permette di sapere lo spazio libero disponibile nel buffer del destinatario, per evitare
di saturarlo. TCP essendo full-duplex, permette ai due host differenti di avere finestre di ricezione differenti. La
dimensione del buffer di ricezione del destinatario, inizialmente ha valore RcvBuffer; con questo metodo TCP riesce
quindi ad offrire il controllo di flusso.
RcvBuffer è la dimensione del buffer di ricezione, LastByteRead è l'ultimo byte del flusso letto dal processo applicativo e
LastByteRcvd è l'ultimo byte del flusso ricevuto. Si deduce che LastByteRcvd – LastByteRead <= RcvBuffer sennò è
overflow. Il mittente tiene a sua volta una finestra di ricezione rwnd che ha dimensione RcvBuffer – (LastByteRcvd –
LastByteRead), ovvero quantità di spazio disponibile nel buffer, e altre due variabili: LastByteSent che è l'ultimo byte del
flusso inviato e LastByteAcked che è l'ultimo byte del flusso che ha ricevuto un ack. Il controllo di flusso è assicurato
mantenendo la quantità di pacchetti che non hanno ricevuto un ack (LastByteSend – LastByteAcked) minore o uguale
della finestra rwnd (quanto spazio libero rimane al destinatario).
L'effetto del controllo di flusso come del controllo di congestione è un rallentamento da parte del mittente. Un problema
che può sorgere del controllo di flusso è quello che avviene quando il buffer del destinatario dopo essere stato saturo
inizia a liberarsi ma il mittente non ne è consapevole visto che ha smesso di inviare pacchetti all'host dopo che rwnd è
diventato 0. Per risolvere questo problema il mittente invia a intervalli regolari pacchetti di un byte per informarsi sulla
dimensione del buffer.

Illustrare le differenze tra il controllo di congestione “end- to-end” e “network assisted”. Presentare, inoltre,
esempi di controllo di congestione network assisted (1) ✔
Controllo di congestione end-to-end: la presenza di congestione non può esser controllata dal livello di rete, quindi
deve esser dedotta per forza dai sistemi periferici (TCP usa questo controllo visto che IP non è in grado di riconoscere
presenza di congestione; nel TCP la perdita di segmenti viene vista come congestione e quindi si diminuisce in
automatico l’ampiezza della finestra).
Controllo di congestione assistito dalla rete: i componenti a livello di rete aiuta nel riconoscere la presenza di
congestione fornendo lo stato della congestione di rete tramite un bit (feedback esplicito). Questo feedback viene fornito
in due modi: avviso diretto dal router o settaggio di un campo in un pacchetto che va da mittente a destinatario.
Un esempio di questo ultimo controllo è ATM ABR; in questo servizio, ci sono celle (pacchetti) RM (di gestione di risorse),
usate per trasmettere info sulla congestione (sia in modo diretto che tramite il destinatario). Ci sono 3 meccanismi per
segnalare al destinatario la congestione degli switch (router): bit EFCI, ovvero un bit contenuto in ogni cella con
indicazione esplicita di congestione; il destinatario deve controllarlo in ogni cella, e se lo trova attivo, pone a 1 il bit CI
nella cella RM e la rispedisce al mittente, quindi tramite EFCI e CI il mittente può esser notificato di congestione; bit CI
ed NI: le celle RM che vanno dal mittente al destinatario hanno questi due bit, CI ovvero congestion indicator e NI ovvero
no increase; il primo viene impostato in caso di traffico intenso a 1, il secondo viene impostato in caso di traffico moderato
a 1; quando il destinatario riceve tale cella, lascia i due campi indicati come stanno, tranne nel caso di meccanismo EFCI
dove modifica il valore CI; impostazione ER , ovvero un campo di ogni cella RM; uno switch congestionato può diminuire
il valore di questo campo in ogni cella RM di passaggio, quindi il campo ER sarà impostato alla velocità minima supportata
da tutti gli switch sul percorso.

12
Descrivere come viene realizzato il controllo di congestione in TCP (20) (o In generale)

In generale, in TCP, se il mittente si accorge di scarso traffico, incrementa il proprio tasso trasmissivo, altrimenti lo
decrementa; infatti si usa una variabile aggiuntiva detta finestra di congestione (cwnd) che impone un vincolo alla
velocità di immissione di traffico sulla rete da parte del mittente; la quantità di dati ricevuti senza ack è limitata da
cwnd. La velocità di invio del mittente quindi è data da cwnd/RTT byte al secondo. TCP utilizza gli ACK per aumentare
l’ampiezza della propria finestra di congestione. Se gli ACK arrivano con frequenza bassa, la finestra di congestione
verrà ampliata lentamente, se giungono con frequenza alta, la finestra di congestione verrà ampliata rapidamente, quindi
si dice che TCP è auto-temporizzato, cioè utilizza gli ACK per temporizzare gli incrementi d’ampiezza della finestra.
TCP ha alcuni principi guida per far funzionare il proprio protocollo di controllo di congestione:
-Un segmento perso implica congestione, i tassi di trasmissione del mittente TCP dovrebbero essere decrementati. Un
evento di timeout o la ricezione di quattro ACK per un dato segmento è un’indicazione implicita di evento di perdita che
scatena una ritrasmissione.
-Un ACK indica che la rete sta consegnando i segmenti del mittente al ricevente e quindi il tasso di trasmissione del
mittente può essere aumentato quando arriva un ACK non duplicato.
Nello specifico ci sono 3 fasi principali nel controllo della congestione in TCP: slow start, congestion avoidance e fast
recovery.
Slow start: quando viene stabilita una connessione TCP il valore di cwnd è inizialmente posto a 1 MSS (dimensione
massima del segmento -> maximum segment size); questo valore si incrementa di 1 MSS ogni volta che un segmento
trasmesso riceve un ack; cioè al primo ack da 1 segmento inviato precedentemente, ne invia 2; poi 4 (visto che riceve 2
ack), poi 8 (visto che riceve 4 ack) e così via: praticamente si raddoppia la velocità trasmissiva ad ogni RTT. Vediamo
che la velocità cresce esponenzialmente fino a quando non vi è un episodio di perdita di un pacchetto, indicato da un
evento di timeout, il mittente mette il valore di cwnd pari a 1 e inizia di nuovo il processo di slow start. Inoltre, pone
il valore di una seconda variabile di stato ssthresh (slow start threshold, soglia di slow start) a cwnd/2: metà del valore
che aveva la finestra di congestione quando la congestione è stata rilevata. Quando cwnd è pari a ssthresh, la fase di
slow start termina e TCP entra in modalità di congestion avoidance. Slow start può terminare anche quando
vengono rilevati tre ACK duplicati, TCP opera una ritrasmissione rapida ed entra nello stato di fast recovery.
Congestion avoidance: quando si arriva in questo stato, cwnd è pari alla metà di quanto era prima della congestione.
Si riparte da questa situazione e si incrementa di 1 MSS per RTT. Quando c’è una perdita, si verificano due casi; se
c’è timeout si fa come slow start ricominciando da cwnd=1MSS e ssthresh=cwnd/2; se si ricevono 3 ack duplicati, non
serve questa aggressività e quindi si dimezza cwnd (aggiungendo 3 MSS per tenere conto dei duplicati ricevuti) e si
mette ssthresh pari al valore che aveva prima degli ack. Infine si passa a fast recovery.
Fast recovery: si incrementa il valore di cwnd di 1 MSS per ogni ack duplicato ricevuto relativamente al segmento perso
che ha causato l’entrata in questa modalità. Quando arriva l’ack per il segmento perso, allora si passa a congestion
avoidance dopo aver ridotto il valore di cwnd; se invece c’è timeout si passa a slow start dopo aver posto cwnd a 1 MSS
e ssthresh a cwnd/2. In pratica il controllo di congestione in TCP consiste in un incremento additivo lineare di cwnd alla
ricezione di ack e in un decremento moltiplicativo che dimezza cwnd in presenza di ack duplicati (supponendo l’assenza
di timeout); dopo il decremento riprende a crescere per verificare l’eventuale presenza di più banda e poi decresce di
nuovo e così via.

Descrivere il funzionamento dell’algoritmo di controllo di congestione di TCP nella fase di “congestion


avoidance”. (1)
Quando si arriva in congestion avoidance, cwnd è pari alla metà di quanto era prima della congestione. Invece di
raddoppiare il valore di cwnd ogni RTT, TCP incrementa cwnd di 1 MSS ogni RTT. L’incremento del mittente della propria
cwnd è di MSS*(MSS/cwnd) byte ogni qualvolta riceva un nuovo ACK. Quando si verifica un timeout congestion
avoidance si comporta come slow start, cwnd è posto a 1 MSS e ssthresh viene impostato alla metà del valore di cwnd
al momento del timeout. Una perdita può essere il risultato della ricezione di tre ACK duplicati, in tal caso però la rete
continua a consegnare segmenti dal mittente al ricevente, per cui la risposta di TCP dovrebbe essere meno drastica di
quella adottata nel caso di timeout. In caso di ACK duplicati TCP dimezza il valore di cwnd, imposta il valore di ssthresh
pari al valore di cwnd, al momento di ricevimento degli ACK, ed entra nello stato di fast recovery.

Descrivere la gestione delle connessioni TCP


Vediamo adesso come viene instaurata e rilasciata una connessione di tipo TCP. Il processo applicativo client
dapprima informa il lato client di TCP di voler stabilire una connessione verso un processo nel server. Il tcp client
quindi procede a stabiliare una connessione TCp con il tcp nel server. L’instaurazione della connessione tra due host
viene detta handshake a tre vie, indicando la necessità di scambiare 3 messaggi tra host mittente e host ricevente
affinché la connessione sia instaurata correttamente. I segmenti utilizzati durante l’handshake sono solitamente ‘solo
header’, ossia hanno il campo Data vuoto essendo questa una fase di sincronizzazione tra i due host.
13
1. TCP lato client invia un segmento a TCP lato server. Non contiene dati a livello applicativo, ma il bit SYN
nell’intestazione è posto a 1. Il client sceglie a caso un numero di sequenza iniziale e lo pone nel campo numero di
sequenza del segmento. Tale segmento è detto segmento SYN. Quest’ultimo viene incapsulato in un datagramma IP
e inviato al server. Nel traffico TCP i segmenti SYN stabilisco nuove connessioni, mentre quelli con il flag non attivo
appartengono a connessioni già instaurate.
2. Il server estrae il segmento dal datagramma, alloca i buffer e le variabili TCP alla connessione e invia un segmento
di connessione approvata al client TCP. Anche questo segmento non contiene dati a livello applicativo, ma vi sono tre
informazioni importanti : nell’intestazione il bit SYN è posto a 1, e il campo ACK assume valore del numero di
sequenza del client +1, e il server sceglie il proprio numero di sequenza iniziale e lo pone nel campo numero di
sequenza. Il segmento di connessione approvata viene detto Segmento SYNACK.
3. Alla ricezione del segmento SYNACK, il client alloca buffer e variabili alla connessione. Invia al server un altro
segmento in risposta al segmento di connessione approvata. Il bit SYN è a zero e il campo dati del segmento può
contenere informazioni che vanno dal client al server. Il terzo segmento è necessario al fine di permettere anche
all’host una stima del timeout iniziale, come tempo intercorso tra l’invio di un segmento e la ricezione del
corrispondente ACK.
Quando la connessione non è più necessaria, ciascuno dei due processi che partecipano a tale connessione può
terminarla, e in questo caso le risorse negli host vengono deallocate. L’handshake a 4 vie invece viene utilizzato
quando la disconnessione non è contemporanea tra i due terminali in comunicazione.(1). Il client invia un comando di
chiusura, che forza il client TCP a inviare un segmento TCP speciale al server (2). Nell’intestazione il bit FIN ha valore
1; il server risponderà inviando un ACK. Il server spedisce quindi il proprio segmento di shutdown, con il bit FIN a 1
(3)e il client manda a sua volta un ACK (4). La connessione risulta quindi essere chiusa. Quando un host riceve un
segmento TCP i cui numeri di porta o l’indirizzo IP di origine non corrispondano ad alcuna socket attiva, invierà al
mittente un segmento di reset con il bit RST a 1.

4° Capitolo

Descrivere i servizi Datagram e a circuito virtuale. Inoltre descrivere le differenze con relativi vantaggi e
svantaggi.
Esistono due tipologie di servizio a livello rete: Datagram e a circuito virtuale.
Con il servizio datagram, i pacchetti entrano nella rete e seguono ognuno un percorso diverso in base a diversi fattori.
Tutti arrivano a destinazione con un ordine di arrivo non definito. Ogni nodo intermedio deve avere un modo per fare
routing, ossia ogni pacchetto deve essere identificato con gli indirizzi IP mittente e destinazione.
Il servizio a circuito virtuale utilizza invece un canale virtuale logico attraverso cui viaggiano i pacchetti. La difficoltà
iniziale sta nel creare, mediante algoritmi di routing, il canale virtuale. Una volta creato può essere numerato con un
id, un identificatore di flusso, ed utilizzato per instradare i pacchetti. Il router deve solo verificare l’id ed instradare il
pacchetto nel relativo canale. Il servizio datagram offre un controllo della congestione molto complesso- demandato ai
livelli superiori, mentre nel servizio a circuito virtuale è semplice. Il circuito virtuale porta del ritardo iniziale per la
creazione del circuito, mentre datagram no. Per quanto riguarda l’instradamente, il processo globale di rete che
determina i percorsi dei pacchetti dalla sorgente alla destinazione – coincide con l’operazione di riempimento delle
forwarding table per il servizio a circuito virtuale. L’instradamente per il servizio datagram invece non porta nessuna
informazione- i pacchetti non fanno mai la stessa strada. Gli effetti dei guasti nei router per il servizio datagram non ha
effetti drastici nei datagram – a parte i pacchetti persi. Mentre per il servizio a circuito un guasto al router fa crollare tutti
i percorsi e canali virtuali – con un recupero molto complesso. Il livello di rete mette a disposizione un servizio best-
effort cioè “col massimo impegno possibile”, per cui non c’è garanzia che i pacchetti vengano ricevuti nell’ordine in cui
sono stati inviati, così come non è garantita la loro consegna. Non c’è garanzia sul ritardo end-to-end, né su una
larghezza di banda minima. Nonostante ciò il livello rete è best-effort by design, perché si dimostra essere efficiente e
soprattutto più veloce se combinato con determinate politiche di controllo implementate ai livelli superiori. Internet
utilizza il servizio datagram – Atm invece utilizza il servizio dei circuiti virtuali. Internet non offre garanzia di banda,
perdina, ordine e timing – mentre ATM offre servizio CBR per la telefonata con garanzia.

Descrivere l’architettura del router


Il router è un dispositivo a livello di rete quindi deputato alla commutazione di livello 3 nello stack OSI. Si possono
identificare quattro componenti fisici principali:
- Porte di ingresso: svolgono le funzioni di terminazione (elettrica) di un collegamento in ingresso al
router e di elaborazione a livello di collegamento. Queste implementano rispettivamente il livello fisico e di
collegamento associati a un singolo collegamento in ingresso al router. Durante l’elaborazione alla porta di
ingresso, utilizzando le informazioni della tabella di inoltro, viene determinata la porta di uscita a cui dirigere

14
un pacchetto attraverso la struttura di commutazione. La tabella di inoltro viene elaborata e aggiornata dal
processore. Una sua copia conforme è memorizzata su ogni porta di ingresso.
- Struttura di commutazione (switching fabric): connette fisicamente le porte di ingresso a quelle di
uscita. Lo switching può essere effettuato in memoria, via bus o attraverso una rete di interconnessione.
- Porte di uscita: che memorizzano i pacchetti che provengono dalla struttura di commutazione e li
trasmettono sul collegamento in uscita, operando le funzionalità necessarie del livello di collegamento e fisico.
- Processore di instradamento (routing processor): esegue le funzioni del piano di controllo, cioè di
routing. Nei router tradizionali esegue di i protocolli di instradamento, gestisce le tabelle di inoltro e le
informazioni sui collegamenti attivi, ed elabora la tabella di inoltro per il router. Nei router SDN, il processore è
responsabile della comunicazione con il controller remoto.
Le funzioni del piano dei dati (quindi routing), quindi svolte da porte di ingresso, porte di uscita e struttura di
commutazione sono implementate quasi sempre in hardware perché operano su scala temporale dei nanosecondi. Le
funzioni del piano di controllo (forwarding) sono invece implementate via software ed eseguite dal processore di
instradamento, perché operano sulla scala dei millisecondi o secondi.

Descrivere il protocollo IP e la frammentazione


È un protocollo di interconnessione classificato al livello di rete (3) del modello ISO/OSI. È un protocollo a pacchetti
senza connessione e di tipo best effort, cioè che non garantisce alcuna forma di affidabilità della comunicazione in
termini di controllo di errore, controllo di flusso e di congestione, che viene realizzata al livello superiore (TCP). Il
pacchetto di rete è noto come datagramma. È costituito da un header e da un’area dati. I principali campi di un
indirizzo ip sono : Numero di versione (4bit), Lunghezza header (4bit), Tipo di servizio [8 bit], Lunghezza del
datagramma [16 bit], Identificatore [16 bit], Flag [3 bit] che indica info riguardo la frammentazione, Fragment offset [13
bit] offset di un particolare frammento, TTL un contatore di 8 bit incluso per assicurare che i datagrammi non restino in
loop per sempre nella rete, Protocollo [8 bit] (Tcp o UDP), Checksum dell’intestazione [16 bit], Source/ Destination
address [32 bit], Opzioni e Dati(payload contiene il segmento a livello di trasporto (TCP o UDP) da consegnare alla
destinazione.
La massima quantità di dati che un frame di livello collegamento può trasportare è detta maximum trasmission unit
(MTU). Non tutti i protocolli a livello di collegamento possono trasportare pacchetti della stessa dimensione a livello di
rete e sicuramente tra il mittente e il destinatario di un pacchetto verranno utilizzati differenti protocolli di collegamento
con differenti MTU.
Il protocollo di rete, e in particolare IP deve frammentare i datagrammi in frammenti adatti all’MTU del protocollo di
collegamento ricevente e trasferirli in uscita.
I frammenti dovranno essere riassemblati prima di raggiungere il livello di trasporto alla destinazione. Tenendo fede al
principio di mantenere semplice il nucleo della rete si prevede di operare il riassemblaggio dei datagrammi sui sistemi
periferici, anziché nei router interni.
Quando un host riceve una serie di datagrammi alla stessa origine, deve individuare i frammenti, determinare quando
ha ricevuto l’ultimo e stabilire l’ordine di riassemblaggio. I campi di identificazione, flag e offset contenuti nei
datagrammi IP assolvono a questo compito.

Indirizzamento Ip
Generalmente un host ha un solo collegamento con la rete e lo utilizza per inviare e ricevere datagrammi. Il confine tra
host è collegamento è detto interfaccia. Un router invece ha il compito di ricevere datagrammi da un collegamento ed
inviarli su un altro, dunque presenta almeno 2 interfacce. Il protocollo IP sia assegnato un indirizzo IP ad ognuna di
queste interfacce, e non al singolo host. L’indirizzo IPv4 è formato da 32 bit (4 byte) per tanto esistono circa 4 miliardi
di indirizzi possibili. Tali indirizzi sono scritti in dotted-decimal notation cioè ciascun byte è indicato in forma decimale
ed è separato con un punto dagli altri (es. 192.128.1.1). Concettualmente l’indirizzo IP si compone di due parte :
Identificatore di rete e precisamente della sottorete (Net_ID) e Identificatore di host (Host_ID). Una sottorete è una
porzione di rete dove i nodi presenti sono in grado di comunicare tra loro senza dover passare per un router. Per
determinare le sottoreti di una rete complessa si sganciano le interfacce da host e router in maniera tale da creare
isole di reti isolate delimitate dalle interfacce.

Strategie di assegnazioni degli indirizzi: addressing


La strategia di assegnazione degli indirizzi nota come classfull addressing prevede che la suddivisione dei bit tra le
due componenti di un indirizzo è effettuata in base alla classe di appartenenza. La classe di appartenenza è
determinata dalla subnet mask, che se in notazione /x determina il numero di bit che ricadono nel prefisso e che
individuano la sottorete. Il restante numero (32-x) costituisce il suffisso e identifica l’host specifico all’interno della rete.
Il network address si ottiene poi mediante un AND bit a bit tra l’indirizzo IP e la subnet mask. Si abbandonò poi il
concetto di classful routing in favore di una nuova strategia detta classless interdomain routing (CIDR) che
15
generalizza la nozione di indirizzamento di sottorete. L’indirizzo IP è ancora diviso in prefisso e suffisso e mantiene la
forma decimale puntata a.b.c.d/x. La novità essenziale consiste nell’utilizzare subnet mask di lunghezza arbitraria x,
quando l’indirizzamento classfull ammette solo tre lunghezze (/8, /16, /24). Con l’approccio classless possono essere
forniti blocchi di indirizzi con 31 netmask diverse. Ciò rende più flessibile la suddivisione di reti in più sottoreti
mantenendo un adeguato numero di host in ogni sottorete.

Descrivere il protocollo DHCP


DHCP è un protocollo di rete di livello applicativo che permette agli host di una rete locale di ricevere automaticamente
ad ogni richiesta di accesso ad una rete, la configurazione IP necessaria per stabilire una connessione e inter operare
con tutte le altre sottoreti. DHCP è implementato come protocollo Client-Server. Un client DHCP di solito è un host che,
connesso alla rete, richiede informazioni sulla configurazione di rete. Di solito ogni sottorete dispone di un server
DHCP che assegna gli indirizzi, ma in caso contrario è necessario un agente di Relay DHCP, che si occupa di inoltrare
le richieste ad un server.
Sessione tipica DHCP :
- Individuazione del server DHCP: il client collegato sulla rete invia un pacchetto UDP chiamato
DHCPDISCOVER
- Offerta del server DHCP: il pacchetto è ricevuto da tutto il dominio di broadcast e in particolare da tutti i
server DHCP presenti, i quali possono rispondere (o meno) ciascuno con un pacchetto di DHCPOFFER in cui
propongono un indirizzo IP e gli altri parametri di configurazione al client.
- Richiesta DHCP: Il client sceglie tra le offerte dei server dopodiché invia un pacchetto di
DHCPREQUEST in broadcast, indicando all’interno del pacchetto quale server ha selezionato
- Conferma DHCP: Il server che è stato selezionato conferma l’assegnazione dell’indirizzo con un
pacchetto di DHCPACK
Un host malevolo, connesso alla rete, e configurato come server DHCP potrebbe rispondere ad una richiesta DHCP e
fornire come gateway di default il proprio mac address. A questo punto l’host malevolo potrà sniffare tutto il traffico
generato dal client, e tramite IP masquerading può ridirigere le connessioni verso il gateway ufficiale (MITM). Per
prevenire questi attacchi, alcuni switch offrono la funzionalità DHCP snooping che permette di fermare i pacchetti che
non sono originati da server autorizzati.

Come avviene il percorso di un datagramma da sorgente a destinazione


I Router IP hanno la funzione di instradare i datagrammi in rete: ricevono un datagramma da una interfaccia, eseguono
alcune operazioni e rilanciano il datagramma stesso su un’altra interfaccia. L’instradamento può essere di due tipi:
instradamento diretto ,instradamento indiretto. L’instradamento diretto è la trasmissione di un datagramma IP tra due
macchine connesse su una stessa sotto-rete (stesso Net_id) – non coinvolge nessun router interno. Il trasmettitore IP
risolve l’indirizzo fisico dell’host destinatario (tramite il protocollo ARP), incapsula il datagramma nell’unità dati della rete
fisica e lo invia verso destinazione. L’instradamento indiretto è quando L’host di destinazione non è sulla stessa sotto-
rete del mittente. Il mittente deve identificare un router a cui inviare il datagramma; il router deve inviare il datagramma
verso la sotto-rete di destinazione. Il router esamina il datagramma IP ricevuto e, se l’host di destinazione non si trova
in una sottorete a cui il router è direttamente connesso, decide il router successivo verso cui instradarlo – l'instradamento
attraverso la sotto-rete che connette i due router avviene secondo i meccanismi della sotto-rete . Il processo si ripete di
router in router sino alla sotto-rete di destinazione – nella sotto-rete di destinazione è utilizzato l’instradamento diretto. Il
meccanismo per l’instradamento in IP è basato su una tabella che ogni host e ogni router mantiene allo scopo di
conoscere le possibili destinazioni e le modalità per raggiungerle. La tabella di instradamento specifica solo un passo
lungo il cammino verso la destinazione quindi il router non conosce il cammino completo che il datagramma dovrà
compiere. La tabella contiene: indirizzo ip rete destinazione, indirizzo ip del prossimo router, interfaccia di rete del router
a chi rilanciare i datagrammi e maschera di sottorete. Per valutare se un host appartiene ad una sottorete si esegue
una operazione di matching. Quando all’interno di un router si effettua l’operazione di instradamento il matching va
effettuato per tutte le righe della tabella di routing: se il matching dà esito positivo per più righe si attua la regola del
Longest Prefix Matching, si utilizza la riga che ha il maggior numero di bit in comune. Altrimenti se non c’è nessuna
corrispondenza, inoltra verso il default router se ne è stato specificato uno oppure scarta il datagramma e dichiara errore
di instradamento.

Illustrare la regola di corrispondenza del prefisso più lungo ed il suo impiego nell'instradamento nelle reti IP
(1)
Un pacchetto che viene inviato da un host in una rete a datagramma viene contrassegnato con un indirizzo di
destinazione. Nel viaggio dalla sorgente alla destinazione, i pacchetti attraversano una serie di router che utilizzato tali
indirizzi di destinazione per inoltrarli. In particolare ogni router presenta una tabella di inoltro grazie alla quale può cercare,
tramite l’indirizzo di destinazione, verso quale interfaccia di collegamento deve inviare il pacchetto. Per far ciò il router
confronta un prefisso dell’indirizzo di destinazione del pacchetto con una riga della tabella e se c’è corrispondenza il

16
router inoltra il pacchetto verso il collegamento associato. Può succedere che un indirizzo di destinazione corrisponda a
più righe della tabella e in questo caso il router adotta la regola di corrispondenza a prefisso più lungo (Longest Prefix
Max): cioè viene determinata la corrispondenza più lunga all’interno della tabella e i pacchetti vengono inoltrati
all’interfaccia di collegamento associata.

Descrivere gli algoritmi link-state


In un instradamento link state la topologia di rete e tutti i costi dei collegamenti sono noti, ossia disponibili in input
all’algoritmo. Ciò si ottiene facendo inviare a ciascun nodo pacchetti sullo stato (Link State Packet) dei suoi collegamenti
a tutti gli altri nodi della rete, ossia in broadcast: operazione di flooding. La trasmissione avviene periodicamente ogni
tot secondi, oppure quando viene rilevata una variazione nella topologia locale (adiacenze) ossia: • Viene riconosciuto
un nuovo vicino • Il costo verso un vicino è cambiato • Si è persa la connettività verso un vicino precedentemente
raggiungibile.
Per il funzionamento del protocollo è fondamentale il pacchetto LSP che contiene:
• Informazioni relative allo stato di ogni link connesso al router • L’identità di ogni vicino connesso all’altro estremo
del link • Il costo del link • Numero di sequenza per l’LSP: trasmessi continuamente per aggiornare lo stato della rete.
Una checksum per capire se l’LSP è stato corrotto nel viaggio; Lifetime: la validità di ogni LSP è limitata nel tempo.
Quando un nodo riceve un pacchetto LSP confronta il numero di sequenza del pacchetto con quello dell’ultimo
pacchetto ricevuto da quel nodo. Se il numero di sequenza indica che il pacchetto è più recente di quello memorizzato,
il nuovo pacchetto viene memorizzato e inoltrato a tutti i nodi collegati, eccetto quello da cui è stato ricevuto; - Se il
numero di sequenza è invariato il pacchetto viene scartato; - Se il numero di sequenza indica che il pacchetto ricevuto
è meno recente di quello memorizzato, quest’ultimo viene trasmesso al nodo mittente. Ogni nodo memorizza i pacchetti
ricevuti e costruisce una mappa completa e aggiornata della rete mantenuta in un Link State Database (uguale per
tutti). Quest’ultimo può essere rappresentato con una tabella che mostra quali router è in grado di raggiungere un
router con relativo costo del link o anche tramite una matrice di raggiungibilità, dove sulle righe ci sono tutte le
destinazioni, sulle colonne tutti i mittenti e ogni casella rappresenta il costo del collegamento tra sorgente e destinazione.
Ciascun nodo esegue in maniere indipendente l’algoritmo per determinare il cammino minimo per raggiungere ogni nodo
della rete ponendosi come radice dell’albero dei cammini minimi. Un tipo particolare di link state algortihm è l’algoritmo
Dijkstra. Sulla base di ogni singola destinazione, l’algoritmo decide qual è il next hop attraverso un calcolo nel quale
ogni nodo si mette come radice di un albero e raggiunge con le sue foglie tutti gli altri nodi della rete. Una volta realizzato
il LSD, completo con l’algoritmo per determinare i cammini minimi, viene riprodotta forwarding table.
Questo tipo di approccio al routing è utilizzato in alcuni protocolli di instradamento, e soprattutto nel protocollo OSPF.
Questi tipi di algoritmi presentano diversi vantaggi:
• Possono gestire reti composte da un gran numero di nodi; • Convergono rapidamente al cammino minimo; •
Difficilmente generano cammini ciclici; • È facile da comprendere poiché ogni nodo ha la mappa della rete.
Il principale svantaggio di un algoritmo Link State è la complessità di realizzazione, anche dovuta alla notevole capacità
di memoria ed elaborazione richiesti dai router stessi. Il principale svantaggio di un algoritmo Link State è la complessità
di realizzazione, anche dovuta alla notevole capacità di memoria ed elaborazione richiesti dai router stessi.

Algoritmo dijkstra
Ogni nodo ha a disposizione il grafo della rete ed utilizza l’algoritmo per costruire lo Spanning Tree del grafo, ovvero
l’albero dei cammini di costo minimo. Ad ogni nodo si assegna un’etichetta che rappresenta il costo massimo per
raggiungere quel nodo. L’algoritmo modifica le etichette cercando di minimizzarne il valore e di renderle permanenti.
L’algoritmo è di tipo iterativo: ad ogni interazione si determina il costo minimo verso un altro nodo, e se n è il numero di
nodi della rete, alla n-esima interazione il forwarding è completo per l’intera rete. L’algoritmo consiste in un passo di
inizializzazione, più un ciclo di durata pari al numero di nodi della rete. Al termine avremo i percorsi più brevi dal nodo
sorgente a tutti gli altri nodi. In un algoritmo di questo tipo se il costo del link è proporzionale al traffico su quel link, cioè
viene scelta una metrica che porti in conto livello di congestione del link, allora è possibile che si creino oscillazioni.
L’algoritmo periodicamente, infatti, ricalcolerà le route instradando i pacchetti verso i link meno trafficati, rendendoli di
fatto più trafficati rispetto a prima. Periodicamente il traffico oscilla tra diversi rami, mentre sarebbe preferibile che questo
traffico si distribuisse uniformemente. Un buon algoritmo che voglia essere dipendente dal carico lo deve randomizzare
in modo proporzionale alla quantità di carico stesso. La tecnica piu’ semplice e usata è quella round-robin.

Descrivere gli algoritmi di routing distance vector (5)


L’instradamento distance vector, noto anche come routing Bellman-Ford, è un tipo di algoritmo di routing dinamico, che
tiene conto del carico istantaneo della rete. È un algoritmo di tipo:
- distribuito e decentralizzato nel senso che ciascun nodo riceve parte dell’informazione da uno o più dei suoi neighbors
(vicini) direttamente connessi, a cui, dopo aver effettuato il calcolo, restituisce i risultati.
- Iterativo nel senso che questo processo si ripete fino a quando non avviene ulteriore scambio informativo tra vicini. È
dunque anche auto-terminante - si blocca da solo, passa in stato quiescente.
- Asincrono: nel senso che non richiede che tutti i nodi operino al passo con gli altri.
17
Concettualmente l’algoritmo misura la distanza di ogni singolo router dagli altri nodi della rete ricevendo i dati dai
router vicini collegati. A partire da tali dati, utilizzando l’algoritmo di Bellman-Ford, il router costruisce una tabella che
indica per ogni entry:
• Un nodo della rete raggiungibile • Il next hop • Il numero di hop necessari per raggiungere la destinazione (o altra
metrica per il costo) . Periodicamente il router aggiorna il proprio vettore delle distanze e comunica la propria tabella
ai vicini. I router che ricevono tale messaggio aggiornano la propria tabella modificando le informazioni sui cammini
aggiunti, modificati o cambiati usando l’algoritmo di BF. Per aggiornare la propria tabella di inoltro, il nodo non ha bisogno
di sapere la distanza sul percorso minimo verso un altro nodo, ma quale è il router successivo lungo il percorso più
breve verso un altro nodo; appena determina ciò, aggiorna la propria tabella di inoltro. Nella pratica, per il calcolo dei
percorsi a costo minimo l’algoritmo si avvale della Formula di Bellman-Ford. Se dopo aver viaggiato da x ad un generico
vicino v, consideriamo il percorso a costo minimo da v a y, il costo del percorso sarà c(x,y)+d v(x). Dato che per
raggiungere y, partendo da x, dobbiamo iniziare viaggiando verso qualche vicino v, il costo minimo da x a y è il minimo
di c(x,v)+dv(y) calcolato su tutti i nodi.
Il distance vector è un algoritmo di facile implementazione e richiede risorse computazionali limitate, quindi hardware
nei router economico, però presenta alcuni svantaggi: • Ogni messaggio deve contenere un’intera tabella di routing, il
che occupa molta banda. • La convergenza può essere piuttosto lenta, proporzionale al link e al router più lento della
rete. Se lo stato della rete cambia velocemente, le rotte possono risultare inconsistenti. • Può scatenare routing loop
dovuti a particolari cambiamenti nella topologia.
Inoltre, in caso di modifica dei costi da un nodo all’altro appare un problema: le buone notizie in tal senso (diminuizione
dei costi) viaggiano in modo veloce, l’aggiornamento è rapido; viceversa, le brutte notizie (aumento dei costi) viaggiano
in modo lento causando instradamento ciclico – ovvero il problema del conteggio all’infinito.
Si è provato a porre rimedio a questo problema tramite l’inversione avvelenata (poisoned reverse): se il pacchetto si
instrada tramite l’arco col costo aumentato, l’altro nodo setta la distanza verso la destinazione tramite quell’arco infinita,
affinchè il pacchetto non si istraderà tramite l’arco col costo minore non aumentato. Questa tecnica però non è del tutto
risolutiva perché cicli che riguardano due nodi non adiacenti non verranno mai rilevati.

Descrivere il meccanismo dell'avvelenamento del percorso inverso (“poisoned reverse”) (3) (nel protocollo RIP)
Poison Reverse è un algoritmo implementato che viene spesso utilizzato all'interno dei protocolli distance vector.
L'uso dell’inversione avvelenata è quello di risolvere il problema count-to-infinity . L’idea di base dell’avvelenamento
inverso è quella di assicurarsi che un percorso non ritorna nello stesso nodo se un costo è cambiato all'interno della
rete. Il router invierà un’informazione allo stesso router da cui l’ha ricevuta, ma con una metrica “infinita”, comunicando
di fatto a quel router che per lui la destinazione è irraggiungibile e non deve essere considerata dalle tabelle di routing.
Lo scopo è simile alla modalità semplice, ma con una maggiore efficacia contro gli anelli di routing.

In RIP: Alcuni protocolli di routing di distance-vector, come RIP, utilizzano un numero massimo di hop per determinare il
numero di router che il traffico deve attraversare per raggiungere la destinazione. A ogni route è assegnato un numero
di numero di hop che viene incrementato man mano che le informazioni di routing vengono passate dal router al router.
Una route è considerata irraggiungibile se il numero di hop supera il massimo consentito. L'avvelenamento da route è
un metodo per dimenticare rapidamente le informazioni di routing obsolete dalle tabelle di routing di altri router
modificando il numero di hop in modo che non sia raggiungibile (superiore al numero massimo di hop consentito) e
inviando un aggiornamento del routing. Nel caso del RIP, il numero massimo di hop è 15, pertanto per eseguire
l'avvelenamento da route su una route il conteggio dell'hop viene modificato in 16, ritenerlo irraggiungibile e viene inviato
un aggiornamento del routing. Poison reverse prevede l'invio di aggiornamenti con conteggi hop irraggiungibili
immediatamente a tutti i nodi della rete. Questo rende tutti i nodi sulla route non valida infinitamente distanti da essa,
impedendo a qualsiasi router di inviare pacchetti sulla route non valida.

Compara algoritmo link-state e distance vector


Negli algoritmi link state ogni nodo deve inviare un numero di messaggi proporzionale al numero di nodi per il numero
di archi. Ogni nodo invia messaggi per tutta la rete. Negli algoritmi distance vector un nodo deve comunicare con i
propri vicini. Il costo per i messaggi scambiati è notevolmente inferiore per gli algoritmi distance vector. Per quanto
riguarda la robustezza – nei link state se un nodo invia informazioni sbagliate agli altri nodi, quest’ultimi opereranno in
maniera sbagliata solo negli archi incidenti su quel router. Mentre per i distance vector se un nodo comunica una
informazione sbagliata, questa inciderà su tutta la rete. Oggi si operano i link state – grazie alla loro robustezza .

Descrivere il funzionamento di un router NAT (6) / Descrivere il meccanismo della traduzione degli indirizzi
NAT (2)
NAT è una tecnica che consiste nel modificare gli indirizzi IP contenuti negli header dei pacchetti in transito su un sistema
che agisce da router all'interno di una comunicazione tra due o più host. Il NAT permette di condividere un indirizzo IP
routabile fra più terminali in indirizzamento privato. Tutti i terminali della rete interna hanno virtualmente, lo stesso
indirizzo IP, se visti dall’esterno. In pratica un insieme di macchine interne alla rete è vista dall’esterno con un unico ip
pubblico, che è quello del router. Il NAT mantiene una tabella di routing per gestire le connessioni e le diverse
18
comunicazioni fra host. Per multiplexare i diversi indirizzi IP su un indirizzo pubblico il NAT dinamico usa il meccanismo
di traslazione della porta cioè l’attribuzione di una porta sorgente diversa ad ogni nuova richiesta in maniera tale da poter
mantenere una corrispondenza tra le richieste che provengono dalla rete interna e le risposte dei terminali su Internet,
tutte indirizzata all’indirizzo IP del router. Quando un host fa una richiesta a un webserver, setta il numero di porta
d’origine e invia il datagramma; il router lo riceve, genera per esso un nuovo numero di porta d’origine e lo sostituisce a
quello iniziale; inoltre sostituisce l’indirizzo IP sorgente col proprio indirizzo IP; quando genera un nuovo numero di porta
d’origine e aggiunge alla propria tabella di routing una nuova riga; in tutto ciò il web server è ignaro di questa
manipolazione e risponde all’indirizzo ip del router NAT con la porta di destinazione impostata da quest’ultimo; poi il
router, ricevuto il datagramma di risposta, consulta la tabella di routing usando numero di porta di destinazione e ip di
destinazione per inoltrarlo al corretto host. Nat risolve il problema della limitazione degli indirizzi ip disponibili – indirizzi
ip delle reti domestiche non esistono piu’ se non all’interno. Questo però genera un problema trasversale : associare un
indirizzo ip e un numero di porta limita il numero di porta che può assegnare. La nat limita il numero di connessioni
utilizzabili. Per risolvere questo problema: configurare NAT Statico. Il NAT associa un indirizzo IP pubblico ad un indirizzo
IP privato interno alla rete. Permette di connettere terminali della rete interna ad internet in maniera trasparente ma non
risolve il problema della scarsità di indirizzi.

Descrivere il funzionamento di NAT relativo a Skype (3)


Uno dei problemi del NAT è l’interferenza con le applicazioni P2P (comprese quelle VOIP come skype). Il fatto che gli
indirizzi interni non si vedono nella rete crea difficoltà nel riferirsi tra nodi della rete. Risuta impossibile una comunicazione
p2p in quanto gli utenti dietro una nat non possono vedersi tra loro. Ciò accade poiché tra 2 peer ci dovrebbe essere la
possibilità di stabilire una connessione TCP l’un l’altro; dato che ciò non accade, si usa un terzo peer (il super peer) che
non usa NAT per iniziare una connessione TCP attiva con uno dei due peer: così facendo l’altro peer, tramite questo
peer intermedio,il super peer, può connettersi in TCP con il peer con cui prima non si sarebbe potuto connettere.

Routing in internet
Il modello semplificato utilizzato per la trattazione degli algoritmi di instradamento era quello che vedeva la rete come
un insieme di router interconnessi, ognuno di questi indistinguibile dagli altri, nel senso che eseguivano tutti lo stesso
algoritmo per calcolare le route. Questo modello risulta un po' semplicistico e presenta diverse problematiche:
• Scalabilità: al crescere del numero di router, il tempo richiesto per calcolare, memorizzare e comunicare le
informazioni di instradamento diventa proibitivo.
• Autonomia amministrativa: Internet è una rete di ISP che generalmente desiderano gestire i propri router
liberamente e in modo diversificato all’interno della rete.
Questi problemi possono essere risolti organizzando la rete in Autonomous System, generalmente composti da
gruppi di router amministrato da un’unica autorità. Ogni AS deve essere identificato con un AD number (16 bit)
assegnato da ICANN. I router di uno stesso AS eseguono lo stesso algoritmo di instradamento.
Ogni AS è responsabile del routing interno(intra-AS) delle sue reti ed inoltre tutti gli AS devono scambiarsi
informazioni di raggiungibilità tramite un routing esterno (inter-AS).
Le tabelle di routing interne di un AS sono mantenute da algoritmi come :
• RIP (distance vector) • OSPF (link state) • IGRP (Interior Gateway Routing Protocol)
Le tabelle di routing esterne di un AS sono mantenute invece da :
• EGP (Exterior Gateway Protocol), ormai obsoleto • BGP (Border Gateway Protocol): approccio path vector. Esistono
diversi sistemi autonomi. Gli Stub AS sono sistemi associati aglio utenti, come università o aziende. Alcuni sistemi
STUB possono essere Multihomed AS : sistemi autonomi con piu’ connessioni verso altri sistemi autonomi. I
multihomed as generano traffico verso l’esterno e ricevono traffico ma non fanno da tramite. Questo è fatto per ragioni
di ridondanza ed economiche. I Transit AS sono reti di transito che non hanno necessariamente utenti ma il ruolo di
interconnettere fra di loro altre reti.

Descrivere e motivare le differenze principali tra i protocolli di routing intra-AS e interAS (1)
I protocolli di routing intra-AS sono protocolli che vanno ad operare all’interno di sistemi autonomi composti da router che
eseguono lo stesso protocollo di instradamento. I protocolli intra-AS più famosi sono RIP e OSPF.
Per poter invece conoscere le destinazioni raggiungibili all’esterno del sistema e informare tutti i router all’interno per
poterne configurare la tabella di inoltro per gestire le destinazioni esterne si usa il protocollo inter-AS. Il protocollo inter-
AS più famoso e usato è il BGP. Per motivi politici si preferisce usare protocolli inter-AS per poter determinare in quale
sistema possano fluire i dati e in quale no, cosa inutile da fare in intra-AS poiché dentro uno stesso sistema esiste un
unico controllo amministrativo; un’altra differenza sono le prestazioni: interAS è importante la questione delle politiche
,quindi se un percorso soddisfa tale vincolo la velocità diventa di secondaria importanza; viceversa, intra-AS non
importano le questioni politiche e quindi ci si può soffermare maggiormente sulle prestazioni.
Infine, la scalabilità: inter-AS un problema molto critico è la gestione dell’instradamento verso e tra un gran numero di
reti; intra-AS invece ciò ha minore importanza, visto che se un singolo dominio diventa troppo grande può esser ripartito
19
in più aree. Il routing intra-as si occupa di ottimizzare i percorsi all’interno del sistema autonoma. Gli algoritmi inter-as si
occupano di capire dove inviare i pacchetti verso sistemi autonomi esterni per farli arrivare a destinazione.

Protocollo RIP (4)


RIP (routing information protocol) è un protocollo di Internet per l’instradamento all’interno di un sistema autonomo che
viene implementato come un processo a livello di applicazione che fa uso di UDP. È un protocollo di tipo distance vector
che utilizza il conteggio degli hop come metrica di costo, dove hop rappresenta il numero di sottoreti attraversate lungo
il percorso minimo dal router sorgente alla sottorete destinazione. Il costo massimo che un persorso può avere è 15,
quindi RIP può utilizzare sistemi autonomi con al massimo un diametro inferiore a 15 hop. In RIP, i router adiacenti si
scambiano aggiornamenti di instradamento circa ogni 30 secondi utilizzando un messaggio RIP response. Tale
messaggio, inviato da un router a un host, contiene fino a 25 sottoreti di destinazione all’interno del sistema autonomo e
la distanza del mittente rispetto a tali sottoreti. Se un router non riceve notizie da un router adiacente per 180 secondi,
questo non viene più considerato raggiungibile. Quando ciò si verifica, RIP modifica la tabella di instradamento locale e
propaga l’informazione ai router vicini. I messaggi di risposta sono detti anche RIP advertisement. Ciascun router
mantiene una tabella di instradamento RIP, che include il vettore delle distanze e la tabella di inoltro. La prima colonna
di questa tabella è dedicata alla sottorete di destinazione, la seconda indentifica il router successivo lungo il percorso più
breve verso la destinazione e la terza indica il numero di hop per giungere alla sottorete di destinazione tramite il percorso
più breve. Un router può richiedere informazioni sui vicini usando messaggi di richiesta RIP. + poison reverse

Descrivere le caratteristiche del protocollo OSPF (3)


OSPF è impiegato negli ISP di livello superiore rispetto a RIP; è un protocollo link-state che utilizza il flooding
(inondazione) di info riguardo lo stato dei collegamenti e Dijkstra per la determinazione del percorso a costo minimo. In
questo algoritmo, un router crea un grafo dell’intero sistema autonomo e esegue localmente Dijkstra per determinare un
albero dei percorsi minimi verso tutte le sottoreti. OSPF non si occupa della determinazione dei costi dei collegamenti
(ciò è compito dell’amministratore di rete, che può trarre beneficio da tale scelta nel modo più conveniente a seconda
dei casi), bensì si occupa di fornire meccanismi per determinare l’instradamento con un percorso a costo minimo per un
dato insieme di pesi dei collegamenti.
Quando c’è un cambiamento nello stato di un collegamento (disponibilità o cambiamento di costi), il router manda info di
instradamento broadcast a tutti i router nel sistema autonomo, e inoltre almeno ogni 30 minuti invia lo stato dei
collegamenti anche se esso non cambia. Questi annunci sono contenuti in messaggi OSPF che vengono trasportati
direttamente da IP come un protocollo di livello superiore. Quindi OSPF implementa trasferimento affidabile dei messaggi
e brzoadcast dello stato dei collegamenti. Inoltre controlla che i collegamenti siano attivi con il messaggio HELLO inviato
ad un vicino connesso e consente ai router di accedere ai database sullo stato dei collegamenti della rete contenuti nei
router confinanti.
Vantaggi di OSPF: sicurezza (gli scambi tra router possono essere autenticati quindi si riduce la possibilità di attacchi
esterni; l’autenticazione è di due tipi, semplice o MD5: semplice si basa su una password unica per tutti i router condivisa
tra loro e inclusa in chiaro nei pacchetti; MD5 si basa su chiavi segrete condivise configurate in ogni router), uso di
percorsi con lo stesso costo per trasportare dati invece di usarne uno solo, supporto per il multicast e per le gerarchie
nel dominio di instradamento. Il lato negativo risulta nel fatto che i pacchetti seguono percorsi diversi perché OSPF vuole
utilizzare la rete in modo efficiente. Questo potrebbe portare a ritardi diversi. Le conseguenze sono che i pacchetti
ricevuti fuori ordine che implica ritrasmissione veloce causata dalla differenza di ritardo dei percorsi e non dalla
congestione. Inoltre l’algoritmo del timeout si complica – occorre associare un timer per ogni percorso -> timeout enorme.
Le reti in cui gli apparati utilizzano OSPF, possono presentare un approccio gerarchico se il sistema autonomo è grande
abbastanza da necessitarne; per ogni area ci sono router di confine che instradano i pacchetti per l’esterno e area di
dorsale che si occupa di smistare il traffico tra le aree del sistema. I gradi di gerarchia sono molto importanti nelle reti di
calcolatori dato che questi garantiscono maggiore scalabilità della struttura. Esso permette infatti la divisione di un
dominio anche di grandi dimensioni in aree di dimensioni inferiori. Ciascun router non ha quindi più la necessità di essere
in grado di raggiungere tutte le reti del dominio, ma è sufficiente che esso sia in grado di raggiungere la corretta area. I
pacchetti IP hanno il byte di tos (type of service) – OSPF sfrutta il TOS per permettere di definire priorità sul traffico.
Etichettando il traffico in maniera diversa si riescono a sfruttare percorsi per determinati tipi di traffico.

Descrivere come viene effettuato il routing inter-AS in Internet (14) [nelle reti IP] (Descrivere come viene realizzato
l’instradamento inter-AS nella rete Internet.) Corrisponde alla risposta sul bgp

Descrivere gli algoritmi di routing inter-AS. (1) vedi sopra e sotto

Descrivere il protocollo BGP (14)


Il BGP è il protocollo di routing per antonomasia, sul quale è basato il funzionamento di internet. Esso funziona attraverso
la gestione di una tabella di prefissi (reti IP), che forniscono informazioni sulla raggiungibilità delle diverse reti tra più
sistemi autonomi. Si tratta di un protocollo a indicazione di percorso (path vector) che non usa metriche di carattere
20
tecnico (ad esempio non considera le ampiezze di banda) ma prende le decisioni di instradamento basandosi su
specifiche politiche.
BGP è un protocollo di instradamento tra sistemi autonomi (inter-AS) in Internet che permette a ciascun sistema
autonomo di: 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 di informazioni di raggiungibilità e delle politiche del sistema autonomo. In particolare ciascun BGP consente
a ciascuna sottorete di comunicare la propria esistenza al resto di internet.
BGP utilizza connessioni TCP semipermanenti. I router ai capi di una connessione TCP sono chiamati BGP peer e la
connessione TCP con tutti i messaggi BGP che vi vengono inviati è detta sessione BGP. In particolare se questa sessione
coinvolge due sistemi autonomi viene detta sessione BGP esterna (eBGP), mentre se coinvolge router dello stesso
sistema autonomo viene detta sessione BGP interna (iBGP). BGP consente di conoscere quali sono le destinazioni
raggiungibili attraverso sistemi autonomi vicini. Queste destinazioni non sono host ma prefissi CIDR che rappresentano
una sottorete o una collezione di sottoreti. Quando un gataway di un sistema autonomo riceve prefissi tramite eBGP,
utilizza le proprie sessioni iBGP per distribuire prefissi agli altri router del sottosistema autonomo. Quando un router viene
a conoscenza di un nuovo prefisso, lo memorizza in una nuova riga della propria tabella di inoltro. In BGP un sistema
autonomo viene identificato dal suo numero di sistema autonomo (ASN). Quando un router annuncia un prefisso per una
sessione BGP, questo include anche una serie di attributi BGP. Prefisso + attributi = rotta.
Gli attributi principali sono:
AS-PATH: elenca i sistemi autonomi attraverso i quali è passato l’annuncio del prefisso, aggiungendo l’ASN di tali sistemi
autonomi. AS_PATH viene utilizzato dai router per rilevare ed evitare annunci reiterati.
NEXT-HOP: definisce l' IP address che sarà utilizzato al prossimo HOP verso la destinazione finale.
Viene riportata l’interfaccia del router che inizia l’AS-PATH. Viene utilizzato per configurare correttamente le tabelle di
inoltro.
Se due rotte hanno stesso AS_PATH e NEXT-HOP diverso, tramite NEXT_HOP e l’algoritmo di instradamento intra-AS
il router può determinare il costo del percorso verso i due collegamenti in peering e applicare poi l’instradamento a patata
bollente per determinare l’interfaccia appropriata. (vengono determinati i costi minimi per raggiungere il gateway)
Quando un router gateway riceve un annuncio di rotta, utilizza la proprie politiche d’importazione per decidere se
accettare o filtrare la rotta.
In caso di rotte uguali verso lo stesso prefisso, avvengono in sequenza le seguenti regole di eliminazione fino ad arrivare
ad un’unica rotta: si assegna alle rotte un attributo detto valore di preferenza locale (scelta dall’amministratore), e si
selezionano le rotte con tale attributo più alto; poi tra esse si sceglie la rotta con AS-PATH più breve; se sono molteplici,
si seleziona quella il cui router di NEXT-HOP è più vicino (percorso con costo minore determinato dall’algoritmo intra-AS
con la patata bollente); se rimane ancora più di una rotta allora si usano gli identificatori BGP.
Una rete stub è una rete in cui traffico in entrata è destinato solo a lei e il traffico in uscita ha origine in tale rete. Una rete
stub multihomed è connessa al resto della rete tramite due provider differenti, e impedisce a questi due provider di
smaltire il traffico tramite loro stessi “mentendo” sul fatto che non esiste un percorso intermedio tra i due o comunque un
collegamento tra i due passando per la rete stub stessa.
Tutto il traffico che fluisce attraverso la rete di dorsale di un ISP deve avere origine e/o destinazione in una sua rete
cliente.

5° Capitolo

Descrivere le principali tecniche per la rivelazione e correzione di errori a livello di collegamento


Qualunque dispositivo che opera a livello di collegamento (livello 2) viene indicato come nodo e i canali di comunicazione,
che collegano nodi adiacenti sono detti collegamenti. Su ogni collegamento, un nodo trasmittente incapsula il
datagramma in un frame del livello di collegamento e lo trasmette lungo il collegamento stesso. Il nodo ricevente deve
rilevare degli errori sui bit, che possono essere causati dall’attenuazione del segnale e dai disturbi elettromagnetici. Il
rilevamento degli errori nel livello di collegamento è solitamente più sofisticato rispetto a quello del livello trasporto
(checksum) in quanto implementato in hardware. La correzione degli errori permette al nodo ricevente di identificare e
correggere errori su alcuni bit del frame, evitando ritrasmissioni da parte del mittente. Al nodo trasmittente, ai dati D che
devono essere protetti da errori vengono aggiunti dei bit detti ECD (error detection and correction).
I dati D e bit EDC sono inviati in sequenza in un frame al nodo ricevente. Questo legge una sequenza di bit D’ e EDC’
che può essere diversa dall’originale. Il nodo ricevente deve determinare se D’ coincida con D, potendo contare soltanto
su D’ e EDC’.
Anche con l’utilizzo dei bit di rilevazione degli errori è possibile che ci siano degli errori non rilevati. Generalmente, le
tecniche più sofisticate comportano un’elevata ridondanza, nel senso che sono necessari calcoli più complessi e la
trasmissione di molti bit aggiuntivi. La forma più semplice di rilevamento degli errori è quella che utilizza un unico bit di
parità. Uno schema più complesso e allo stesso tempo più efficiente è rappresentato dalla parità a due bit.

21
Descrivi i principali protocolli a suddivisione di canale
I cosiddetti protocolli ad accesso multiplo fissano le modalità con cui i nodi regolano le loro trasmissioni sul canale
condiviso. Dato che tutti i nodi sono in grado di trasmettere frame, è possibile che due o più lo facciano nello stesso
istante. Tra questi si genera una collisione e una conseguente perdita di frame, mentre il canale rimane inutilizzato.
Occorre dunque coordinare la trasmissione dei nodi attivi. Il multiplexing a divisione del tempo, TDM e quello a
divisione di frequenza, FDM, sono due tecniche che possono essere utilizzate per suddividere la larghezza di banda di
un canale broadcast fra i nodi che lo condividono.
TDM suddivide il tempo in time frame e poi divide ciascun intervallo di tempo in N time slot. Ogni slot è quindi
assegnato a uno degli N nodi. Ogni volta che un nodo ha un pacchetto da inviare, trasmette i bit del pacchetto durante
lo slot di temo assegnatogli. TDM riesce ad evitare le collisioni ed è perfettamente imparziale: ogni nodo ottiene,
durante ciascun intervallo di tempo, un tasso trasmissivo di R/N bps. Tuttavia, anche quando non vi sono altri nodi che
devono inviare, quello che vuole inviare deve attendere il suo turno. FDM suddivide il canale condiviso in frequenze
differenti (ciascuna con larghezza di banda R/N) e assegna ciascuna frequenza a un nodo. Quindi, a partire da un
canale da R bps, FDM crea N canali di R/N bps. Come TDM, anche FDM evita le collisioni e divide equamente la
larghezza di banda tra gli N nodi. Tuttavia, anche con FDM la larghezza di banda è limitata a R/N, anche quando vi è
solo un nodo che deve spedire.
Descrivere il funzionamento e le caratteristiche del protocollo ALOHA (puro e slotted). (3)
Aloha è un protocollo ad accesso casuale, privo di slot, completamente decentralizzato. Questa classe di protocolli per
l’accesso multiplo concerne situazioni in cui un nodo trasmette sempre alla massima velocità consentita dal canale, cioè
R bps. Quando si verifica una collisione, i nodi coinvolti ritrasmettono ripetutamente i loro frame fino a quando non
raggiungono la destinazione senza collisioni. La ritrasmissione non è immediata, ma il nodo attende per un periodo di
tempo casuale indipendente da quello degli altri nodi. Le differenti scelte arbitrarie del tempo di attesa operate dai diversi
nodi possono consentire ai frame di attraversare il canale senza ulteriori collisioni.
Nell’ALOHA puro non appena arriva un frame al livello di collegamento, il nodo lo trasmette immediatamente e
integralmente nel canale broadcast. Se un frame va in collisione, allora il nodo lo ritrasmette immediatamente con
probabilità p o aspetterà, restando inattivo per un altro periodo di tempo, con probabilità 1-p. Un frame inviato da un nodo
al tempo t0 può collidere con altri frame inviati in [t0-1, t0+1].
Quindi la probabilità di successo di un dato nodo è data dalla probabilità che il nodo trasmetta (p) congiunta alla
probabilità che nessun altro trasmetta in [t0, t0+1] S = p (1-p)N-1(1-p)N-1 = p(1-p)2(N-1)
Il successo di uno su N nodi quindi è S = N p (1-p)2(N-1) Il valore ottimo di p, per N che tende ad infinito, è 1/2e = 18%
. Slotted aloha è una versione moderna di aloha; la velocità è la massima consentita di R bps, ogni frame consiste di L
bit, il tempo è suddiviso in slot di L/R secondi. I nodi cominciano la trasmissione all’inizio degli slot e sono sincronizzati
in modo da sapere tutti quando iniziano gli slot, e questa è la differenza principale con la versione iniziale di aloha. Il
protocollo prevede che quando un nodo ha un nuovo frame da spedire, attende fino all’inizio dello slot successivo e poi
trasmette l’intero frame. Se non si verifica una collisione non occorre effettuare una ritrasmissione. Se si verifica una
collisione, il nodo ritrasmette con probabilità p il suo frame durante gli slot successivi. Il nodo al prossimo slot può
trasmettere o non trasmettere, inoltre le probabilità tra tutti i nodi sono indipendenti tra loro. Efficienza: In presenza di
molti nodi attivi esistono due possibili problematiche per portano il protocollo ad essere non particolarmente efficiente. In
primo luogo, una certa frazione degli slot presenterà collisioni e di conseguenza andrà “sprecata”. Il secondo problema
è che una grande frazione degli slot risulterà vuota. I soli slot non sprecati saranno quelli utilizzati da un solo nodo per
trasmettere.
La probabilità che una trasmissione abbia successo per un dato nodo è data dalla probabilità che quel solo nodo
trasmetta (p) mentre i rimanenti N-1 rimangano inattivi (1-p)N-1: S = p (1-p)N-1
Poiché ci sono N nodi: S = Np(1-p)N-1. Il valore ottimo di p per N che tende all’infinito è 1/e = 37%, ovvero solo il 37%
degli slot compie lavoro utile che non va sprecato, e ciò è dovuto al fatto di esser fortemente decentralizzato. La
probabilità di collisione si dimezza in Slotted Aloha rispetto ad Aloha Puro.

Descrivere il funzionamento di uno switch (10) [funzionamento di uno switch ethernet] [Motivare inoltre perché la
topologia “attiva” di una rete LAN non possa avere dei cicli.]
È un dispositivo di rete che si occupa di commutazione a livello di collegamento. Lo switch agisce sull’indirizzamento e
sull’instradamento all’interno delle reti LAN mediante indirizzo fisico, selezionando i frame ricevuti e dirigendoli verso la
porta in uscita corretta. Lo switch è trasparente ai nodi, cioè un nodo indirizza i frame verso altri nodi senza sapere
che questi frame saranno ricevuti da uno switch che si occuperà di inoltrarli ad altri nodi. I frame che arrivano a uno
switch possono essere molti e per questo motivo le interfacce di uscita di uno switch sono dotate di un buffer : è un
dispositivo store-forward.
Uno switch filtra e inoltra i frame: il filtraggio è una funzionalità dello switch che determina se un frame debba essere
inoltrato a una qualche interfaccia o debba essere scartato; l’inoltro consiste nell’individuare l’interfaccia verso cui il frame
deve essere diretto e quindi inviarlo verso di essa. Per svolgere queste due operazioni lo switch è dotato di una tabella
di commutazione (switch table) composta dalle seguenti voci: indirizzo MAC del nodo, interfaccia dello switch che
conduce al nodo, il momento in cui la voce per quel nodo è stata inserita nella tabella. Questa tabella viene configurata
22
per autoapprendimento: inizialmente la tabella è vuota, dopo di che, ad ogni frame che riceve, lo switch archivia nella
tabella l’indirizzo MAC del campo indirizzo sorgente del frame, l’interfaccia da cui arriva il frame e il momento di arrivo.
Quando tutti i nodi nella LAN avranno inviato un frame, allora la tabella sarà completata. Se dopo un determinato tempo,
detto aging time, lo switch non riceve più frame da un determinato indirizzo sorgente, questo verrà cancellato dalla
tabella. Per questo motivo gli switch sono detti dispositivi plug-and-play in quanto non richiedono interventi
dell’amministratore di rete o dell’utente, cioè non ha bisogno di essere configurato.
Nell’ipotesi in cui un frame con indirizzo MAC di destinazione A giunge allo switch sull’interfaccia x gli scenari possibili
sono tre:
1. Nella switch table non vi è una voce per l’indirizzo A; lo switch inoltra copie del frame ai buffer di uscita di tutte le
interfacce, eccetto x (manda il frame in broadcast); 2. Nella switch table vi è una voce che associa l’indirizzo A
all’interfaccia x. Il frame proviene da un segmento di rete che contiene la scheda di rete A, quindi non deve uscire su
nessuna interfaccia e viene dunque scartato; 3. Nella switch table vi è una voce che associa l’indirizzo A all’interfaccia
y≠x; il frame viene inoltrato al segmento di LAN collegato all’interfaccia y.
Gli switch possono essere interconnessi tra loro.
I vantaggi dello switch sono:
- Eliminazione delle collisioni: Gli switch, a differenza degli hub, mettono i frame nei buffer e non trasmettono più
di un frame su ogni segmento di LAN a un certo istante evitando quindi le collisioni;
- Collegamenti eterogenei: Dato che uno switch isola un collegamento da un altro, i diversi collegamenti nella LAN
possono funzionare a velocità diverse e possono usare mezzi trasmissivi diversi;
- Gestione: se una scheda di rete ha un malfunzionamento e manda continuamente frame Ethernet, uno switch
può individuare il problema e disconnettere interamente la scheda non funzionante.

Cos’è un bridge
I bridge sono dispositivi utilizzati per collegare due o più LAN tra loro in maniera più efficiente degli hub.Come
dispositivi hardware oggi sono raramente utilizzati essendo stati sostituiti dagli switch. I bridge filtrano i pacchetti. Se la
destinazione è sullo stesso segmento di LAN del mittente non vi è nessuna azione da parte dei bridhe.
Se destinazione su un segmento di LAN differente da quello del mittente: Il bridge inoltra la frame sul segmento di LAN
del destinatario. I bridge eseguono un algoritmo di auto apprendimentoper scoprire a quali interfacce sono collegati gli
host: Informazioni salvate in tabelle dette “filtering tables” : Quando una frame è ricevuta, il bridge “prende nota” del
segmento di LAN di provenienza in una filtering table. La struttura di una entry nella filtering table: (Node MAC
Address, Bridge Port, Time Stamp). Le entry della filtering table vengono cancellate dopo un po’ di tempo, se non
arrivano altre frame dal’host a cui si riferiscono. I bridge isolano i domini di collisione, grazie alla loro capacità di porre
le frame in un buffer (dispositivi store & forward). Non appena una frame può essere inoltrata su un link d’uscita, un
bridge usa il protocollo CSMA/CD sul segmento LAN d’uscita prima di trasmettere. I vantaggi del bridge sono che :
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)- Isolano i domini di
collisione, determinando un aumento complessivo del throughput massimo. Per incrementare l’affidabilità, può essere
utile introdurre un certo grado di ridondanza: percorsi alternativi. In presenza di percorsi alternativi simultanei, vengono
create copie molteplici delle frame (loop). La soluzione: organizzare i bridge mediante uno spanning tree, disabilitando
alcune interfacce.

Differenza switch e bridge


La differenza fisica con lo switch è essenzialmente nel numero di porte: un bridge possiede al massimo una decina di
porte, mentre uno switch può arrivare fino ad alcune centinaia nei modelli più complessi. Un bridge viene quindi utilizzato
per connettere diversi segmenti di rete, due rami per ogni bridge (lo switch invece connette fra di loro più rami di rete) ,
ciascuno dei quali è costituito potenzialmente da molti host, sostituendo il repeater, mentre uno switch viene collegato
direttamente ai singoli host. Questa differenza sul numero di porte ha a sua volta effetto sulla dimensione dei domini di
collisione: entrambi i dispositivi riducono la dimensione dei domini di collisione, ma lo switch arriva all'estremo di ridurre
una parte della rete ad un insieme di domini di collisione di dimensioni minime, al limite costituiti ciascuno da un singolo
nodo. Questa situazione consente di ridurre drasticamente le collisioni, ma la contropartita è la grande quantità di cavi
necessari a collegare ogni singolo nodo allo switch, oppure i nodi ad alcuni hub e questi ultimi allo switch. Quando non
conosce la linea di uscita per il frame, lo Switch lo inoltra su tutte le sue linee, compresa quella di entrata, realizzando
broadcasting al contrario del flooding del Bridge.

Le differenze tra routers e bridge (anche switch e routers)


Sono entrambi dispositivi di tipo store-and-forward
•router: dispositivi di livello rete (esaminano il contenuto dell’header di livello 3)
•Bridge: sono dispositivi di livello Data Link •
I router si basano sulle routing table ed implementano algoritmi di routing •
I bridge si basano sulle filtering tableed implementano algoritmi di filtering, learning e spanning tree. I punti a favore dei
23
bridge sono che le operazioni all’interno sono piu’ semplici e processano meno richieste. Gli svantaggi del bridge
invece sono che le topologie sono limitate: è necessario uno spanning tree per prevenire i cicli. I bridge non offrono
alcuna protezione contro le tempeste broadcast (il broadcast ininterrotto generato da un host è normalmente inoltrato
da un bridge). I punti a favore del router : possono essere realizzate differenti topologie, i loop sono limitati grazie al
contatore TTL (ed all’impiego di buoni protocolli di routing) - forniscono una naturale protezione contro le tempeste
broadcast. I punti a sfavore dei router : -richiedono configurazione al livello IP (non sono plug and play) - richiedono
capacità adeguata per processare una grande quantità di pacchetti. I bridge sono maggiormente utili in caso di reti
piccole (con poche centinaia di host) mentre i router sono usati nelle grandi reti (migliaia di hosts).

Hub
Un hub rappresenta un concentratore, ovvero un dispositivo che funge da nodo di smistamento dati di una rete
organizzata sia con topologia a bus che con topologia a stella. Nelle reti Ethernet l’hub inoltra i dati in arrivo da una
qualsiasi delle sue porte su tutte le altre in broadcast. Per questa ragione può essere definito anche come ripetitore di
bit multi porta. La conseguenza dell’utilizzo dell’hub è che la banda totale disponibile in uscita viene frazionata e
ripartita tra i vari segnali portanti inviati a causa del moltiplicarsi dei dati da inviare. Ritrasmette semplicemente segnali
elettrici e non entra nel merito dei dati.
Sono dispositivi semplici e poco costosi. Hub organizzati in una gerarchia multi-livello, con un backbone hub al livello
più alto. Ogni LAN collegata è detta un segmento di LAN. I vantaggi dell’utilizzo di hub : L’organizzazione multi-livello
garantisce una parziale tolleranza ai guasti: porzioni di LAN continuano a funzionare in caso di guasto ad uno o più
hub. Si estende la massima distanza tra i nodi (100m per ogni hub). Gli svantaggi : Gli hub non isolanoi domini di
collisione: le stazioni di un segmento possono subire una collisione per una trasmissione simultanea da parte di una
qualunque stazione presente su un qualunque altro segmento. La creazione di un singolo dominio di collisione non
comporta alcun aumento del throughput massimo: il throughput complessivo in una rete multi-livello è lo stesso di una
rete con un unico segmento. La realizzazione di un’unica LAN impone un limite al numero massimo di stazioni che è
possibile collegare, nonché all’estensione geografica che è possibile raggiungere.

Differenze tra uno switch ed un hub (2)


Un hub è un dispositivo a livello fisico che agisce sui singoli bit, piuttosto che sui frame. Quando un bit arriva
all’interfaccia, l’hub semplicemente rigenera il bit, amplifica la sua potenza e lo trasmette su tutte le interfacce (anche se
su qualcuna di esse c’è un segnale). Non implementa ne la rilevazione della portante né CSMA/CD; trasmette in
broadcast e ciascun adattatore può controllare il canale per verificare se è libero e rilevare una collisione mentre
trasmette. Sono molteplici i vantaggi nell’utilizzo degli hub: la semplicità del comportamento di un hub ne fa uno dei
componenti più economici per costruire una rete; l’organizzazione multi-livello garantisce una parziale tolleranza ai
guasti; estende la massima distanza possibile tra i nodi (100m per ogni hub). Tuttavia in alcune applicazioni è necessario
considerare il grosso svantaggio che comporta: nel gergo, gli hub creano un unico dominio di collisione. Se molti host
collegati a porte diverse dovessero trasmettere contemporaneamente si verifica una collisione di pacchetti in ricezione
e di fatto il throughput effettivo viene limitato dalle numerose ritrasmissioni. Ciò crea delle limitazioni al numero di nodi
che si possono connettere nella LAN.
Uno switch è un vero commutatore di pacchetti store-and-forward; è più intelligente dell’hub e svolge un ruolo attivo,
ovvero filtra e inoltra pacchetti ethernet, esamina l’indirizzo di destinazione e lo invia all’interfaccia corrispondente alla
sua destinazione, e quando un pacchetto è stato inoltrato nel segmento, usa CSMA/CD per accedere al segmento. Gli
host sono inconsapevoli della sua presenza (è trasparente) e non ha bisogno di esser configurato (è plug and play). Uno
dei principali vantaggi degli switch (rispetto ai collegamenti tramite hub) è che possono essere utilizzati per suddividere
un dominio di collisione in parti più piccole, riducendo le collisioni possibili e quindi aumentando l’efficienza di
utilizzazione del mezzo trasmissivo condiviso.
Quando due nodi comunicano attraverso uno switch, questo crea una sorta di mezzo trasmissivo dedicato fra i due nodi,
su cui essi possono trasmettere senza disturbare le trasmissioni fra gli altri nodi, né essere disturbati.
Si avranno collisioni solo nel caso in cui, mentre lo switch mette in comunicazione due nodi, altri nodi vogliano comunicare
proprio con questi.

MAC
Gli host e i router collegati in una rete possiedono, oltre che un indirizzo di rete (IP), un indirizzo a livello di collegamento.
In realtà sono i loro adattatori (schede di rete) degli host e dei router ad avere questi indirizzi. Gli indirizzi a livello rete
sono detti indirizzi MAC, indirizzi fisici o anche indirizzi LAN assegnati in modo univoco dal produttore ad ogni scheda di
rete prodotta (modificabile via software). L’indirizzo MAC è lungo 6 byte, il che consente di avere 2^48 possibili indirizzi.
Non esistono due schede con lo stesso indirizzo MAC. La IEEE sovrintende alla univocità degli indirizzi e in vende
blocchi di MAC. L’indirizzo MAC ha una struttura piatta e non gerarchica, cioè, al contrario dell’indirizzo IP, è indipendente
dalla posizione della macchina all’interno della rete. Quando una scheda di rete vuole spedire un frame, vi inserisce
l’indirizzo MAC di destinazione e lo immette nella LAN. Uno switch presente nella rete potrebbe fare broadcast del
pacchetto in ingresso su tutte le sue interfacce. Così ogni scheda collegata alla LAN controlla se l’indirizzo MAC del

24
pacchetto in arrivo corrisponde al suo. In caso affermativo la scheda di rete estrae il datagramma e lo passa al livello di
rete.
E’ possibile che una scheda di rete voglia inviare un frame a tutte le altre schede di rete. in questo caso la schede di rete
inserisce un particolare ‘indirizzo MAC broadcast’ (composto da una stringa di 48 i cui bit ono 1) nel campo dell’indirizzo
destinazione del frame.
La risoluzione degli indirizzi MAC è demandata ai protocolli ARP e RARP.
Gli indirizzi MAC sono di tre tipi:
- Single: di una singola stazione. Quando una scheda di rete riceve un pacchetto con indirizzo di destinazione
un indirizzo single, allora lo passa al livello superiore solo se il DSAP è uguale a quello hardware della scheda
(scritto in una ROM) o a quello caricato da software in un apposito buffer;
- Broadcast: se il pacchetto ha indirizzo di destinazione broadcast (ff:ff:ff:ff:ff:ff), tutte le schede lo passano al
livello superiore
- Multicast: di un gruppo di stazioni. Il pacchetto viene passato al livello superiore solo se è stata abilitata la
ricezione via software per quel determinato indirizzo.

Descrivere il funzionamento del protocollo CSMA/CD (5) /descrivere il protocollo di accesso al mezzo MAC in
ethernet (in Ethernet)
CSMA/CD è un protocollo ad accesso multiplo con rilevamento della portante (CSMA) con aggiunta del rilevamento di
collisioni (CD). Per rilevamento della portante si intende che un nodo ascolta un canale prima di trasmettere e trasmette
su questo canale solo se rileva che è libero per un certo intervallo di tempo, mentre per rilevamento della collisione si
intende che il nodo che sta trasmettendo rimane in ascolto del canale e se rileva che un altro nodo sta trasmettendo un
frame che interferisce con il proprio interrompe la sua trasmissione. Il CSMA può essere persistente, se riprova
immediatamente a ritrasmettere con probabilità p quando il canale si libera, o non persistente se riprova a ritrasmettere
dopo un intervallo casuale.
Oltre a queste caratteristiche, un’altra caratteristica fondamentale di questo protocollo è il ritardo di propagazione,
infatti maggiore sarà questo ritardo, maggiore sarà la possibilità che un nodo non si accorga che su un canale è già
iniziata la trasmissione da parte di un altro nodo. La distanza ed il ritardo di propagazione concorrono a determinare la
probabilità di collisione.
Le operazioni che il protocollo CSMA/CD compie sono le seguenti: dopo che una scheda di rete ottiene un datagramma,
questa prepara un frame a livello di collegamento e lo sistema in un buffer; la scheda si mette in ascolto del canale, se
è libero invia il frame, altrimenti resta in attesa; durante la trasmissione resta in ascolto del canale e se trasmette l’intero
frame senza interferenze ha finito il suo lavoro, altrimenti se ci sono interferenze interrompe la trasmissione del frame,
aspetta un tempo casuale e dopo di che si rimette in ascolto del canale per rilevare quando è libero e ritrasmettere il
pacchetto.
L’intervallo di tempo di attesa casuale, detto tempo di backoff, che bisogna attendere per ritrasmettere un frame è
deciso tramite un algoritmo chiamato binary exponential backoff (attesa binaria esponenziale). Quando si rileva l’n-
esima collisione durante la trasmissione di un frame, questo algoritmo stabilisce casualmente un valore K nell’insieme
{0,1,2….,2n - 1}. Questo permette di avere un intervallo da cui estrarre K tanto grande quanto più è grande il numero di
collisioni. Il tempo di backoff deve essere casuale in quanto se due frame entrano in collisione e aspettano per lo stesso
periodo di tempo, continueranno ad entrare in collisione.
(Siano d_prop il tempo massimo che occorre al segnale per propagarsi fra una coppia di schede di rete e d_trasm il
tempo necessario per trasmettere un frame della maggior dimensione possibile, allora l’efficienza, cioè la frazione di
tempo media durante la quale i frame sono trasferiti sui canali senza collisioni in presenza di un alto numero di nodi attivi,
è uguale a 1/(1+5d_prop/d_trasm).)
L’efficienza di CSMA/CD è la frazione di tempo media durante la quale i frame sono trasferiti sul canale senza collisioni
in presenza di un alto numero di nodi attivi, con un’elevata quantità di frame da inviare. Quando il ritardo di propagazione
è nullo, i nodi in cui si verifica una collisione interromperanno immediatamente la trasmissione senza sprecare la capacità
del canale. Inoltre nel momento in cui un frame si appropria del canale, può trattenerlo per un periodo di tempo
estremamente lungo, di conseguenza il canale svolge lavoro produttivo per la maggior parte del tempo.
In Ethernet : La gestione delle collisioni e dell’occupazione condivisa del canale viene gestita mediante CSMA/CD.
L’adattatore (la scheda di rete) riceve un datagramma di rete dal nodo a cui è collegato e prepara un pacchetto Ethernet.
Se il canale è inattivo, inizia la trasmissione; viceversa resta in attesa fino all’assenza di segnale. Esso verifica anche
durante la trasmissione eventuali segnali provenienti da altre schede di rete; in caso di loro assenza, considera il
pacchetto spedito, altrimenti interrompe la trasmissione del pacchetto ed invia un segnale di disturbo (jam). Jammin
signal: è un segnale di disturbo di 32 bit che avverte le altre stazioni dell’avvenuta collisione bloccandone la
contemporanea trasmissione. Questo passaggio è necessario perché sulle lunghe distanze il segnale potrebbe essere
attenuato a tal punto da non rilevare la collisione. La scheda di rete rimane in attesa e quando riscontra l’n-esima
collisione consecutiva stabilisce casualmente un valore K nell’insieme {0,1,2….,2^n - 1}. (algoritmo di backoff) . Questo

25
permette di avere un intervallo da cui estrarre K tanto grande quanto più è grande il numero di collisioni. La scheda
aspetta un tempo pari a K volte 512bit e torna in ascolto del canale per provare a rinviare il pacchetto.

Descrivi i protocolli a rotazione e alcuni suoi esempi ( polling e token passing)


I protocolli taking turns cercano di prendere il meglio tra i protocolli ALOHA e CSMA. Un esempio di questi protocolli è
il protocollo polling. Nel protcollo polling un nodo master (designato come principale) invita “a turno” i nodi slave a
trasmettere i maniera alternata. Il master invia dei messaggi di tipo “Request to Send” per avvisare uno slave che può
iniziare ad inviare un dato numero massimo di frame. Il protocollo polling elimina le collisioni e gli slot vuoti, ma presenta
alcuni svantaggi. Si introduce una latenza dovuta dal tempo di notifica, ed inoltre vi è la presenza di un single point of
failure rappresentato dal master. Un altro esempio è il token passing. In questo caso non esiste un nodo principale,
ma un frame, un messaggio di controllo detto token, che circola fra i nodi in ordine sequenziale. Il possesso del token
dà diritto a trasmettere. Se il nodo che riceve il token non ha pacchetti da inviare, lo inoltra immediatamente al
successivo. Altrimenti, procede a trasmettere il numero massimo di frame consentito, prima di inoltrare il token al nodo
successivo. Questo protocollo è altamente efficiente, ma non privo di problemi: overhead nella gestione del token,
latenza dovuta alla trasmissione del token, presenza ancora una volta di un single point of failure (token).

Descrivere il protocollo ARP (5)


Il protocollo ARP è un protocollo per la risoluzione degli indirizzi, ovvero si occupa di tradurre indirizzi IP in indirizzi MAC
corrispondenti.
Per trasmettere un datagramma, il nodo sorgente deve fornire alla scheda di rete non solo il datagramma IP ma anche
l’indirizzo MAC del nodo destinazione; a questo punto la scheda di rete crea un frame contenente l’indirizzo MAC del
nodo destinazione e lo immette nella LAN. Il nodo trasmittente riesce ad ottenere il MAC destinatario a partire dall’IP
tramite ARP. Questo protocollo è molto simile al DNS, con la differenza che ARP non funziona ovunque ma solo su nodi
della stessa sottorete.
Per il funzionamento di ARP, nella RAM dei nodi viene mantenuta una tabella ARP contenente la corrispondenza tra
indirizzi IP e MAC, e anche un valore TTL ovvero il tempo oltre il quale bisognerà eliminare una determinata voce dalla
tabella (tipicamente 20 minuti dall’inserimento nella tabella). Cosa accade se la tabella non possiede una voce per il
nodo destinazione? Il nodo trasmittente crea un pacchetto ARP per interrogare tutti gli altri nodi della sottorete riguardo
l’indirizzo MAC corrispondente all’IP da risolvere. Il richiedente manda questo pacchetto in broadcast a tutti i nodi della
sottorete (indirizzo FF-FF-FF-FF-FF-FF). A questo punto il frame contenente questa richiesta è ricevuto da tutte le
schede di rete dei nodi facenti parte della sottorete e l’unico nodo (se esiste) che ha l’indirizzo corrispondente invia un
frame ARP di risposta al richiedente con la risposta desiderata, il quale può aggiornare la sua tabella nel modo corretto.
ARP è plug and play cioè la tabella non deve esser configurata dall’amministratore, si costruisce automaticamente, e se
un nodo viene eliminato, verrà eliminato automaticamente dalla tabella prima o poi.

Descrivi come avviene l’invio di un datagramma a un nodo esterno della sottorete utilizzando arp
Prenendo come esempio una rete costituita da due sottoreti interconnesse da un router.
Quando l’adattatore mittente invia un frame al router, l’adattatore crea un frame contenente il datagram e lo invia nella
LAN 1 . L’adattatore del router sulla LAN riconosce che il frame è indirizzato ad esso e allora lo passo allo strato di rete
del router. Il router ora deve determinare la corretta interfaccia su cui il datagram deve essere inoltrato. Questo
compito è svolto nel router, dal protocollo di instradamento dello strato di rete, il quale consulta la tabella di
instradamento. Questa interfaccia passa quindi il datagram al suo adattatore, che lo incapsula in un nuovo frame.
Prima di inviarlo alla LAN 2 finale, il router ottiene l’indirizzo di destinazione finale mediante ARP.

Descrivere le caratteristiche principali di una rete Ethernet. (1)


Ethernet è stata la prima LAN ad alta velocità con vasta diffusione. Quasi tutte le Ethernet attuali sono progettate con
topologia a stella, al centro della quale c’è un hub o uno switch. Ciascun nodo di questa stella esegue un protocollo
Ethernet separato e non collide con gli altri nodi.
Un pacchetto di Ethernet è composto dai seguenti campi:
- Campo dati: contiene il datagramma da scambiare, con massima dimensione ammessa di 1500byte, oltre la
quale il datagramma viene frammentato (MTU = unità massima di trasmissione). Se viceversa è più piccolo, il
campo dovrà esser riempito fino a raggiungere quel valore.
- Indirizzo di destinazione: campo contenente il MAC della scheda di rete destinataria.
- Indirizzo di sorgente: campo contenente l’indirizzo MAC della scheda di rete che trasmette il pacchetto.
- Tipo: consente ad Ethernet di supportare vari protocolli di rete, indicati dal numero di tipo relativo.
- Controllo a ridondanza ciclica (CRC): consente alla scheda di rete ricevente di rilevare la presenza di un errore
nei bit del frame.

26
- Preambolo: i pacchetti Ethernet iniziano con un campo di 8 byte: sette byte hanno i bit 10101010 e servono per
“risvegliare” le schede di rete dei riceventi e sincronizzare i loro clock con quello del trasmittente, mentre l’ultimo
byte ha i bit 10101011.
A livello di rete le tecnologie Ethernet forniscono un servizio:
- Senza connessione, cioè quando una scheda di rete vuole inviare un datagramma a un host della rete, lo
incapsula in un frame Ethernet e lo immette nella LAN senza alcun handshake preventivo con il destinatario.
- Non affidabile, cioè la scheda di rete non riceve alcun riscontro ne se il pacchetto supera il controllo CRC, ne
in caso contrario. Non prevede la ritrasmissione del frame scartato né una notifica della sua perdita, ma grazie
a ciò è semplice ed economico. Per questo motivo il flusso dei datagrammi può presentare lacune che poi
potranno essere riscontrate in caso di utilizzo di TCP. In caso contrario (usando UDP) potrebbe accusare
problemi a causa dell’incompletezza dei dati.
Tipicamente la massima distanza tra i nodi che comunicano via Ethernet è dell’ordine delle centinaia di metri (100m per
10BaseT e 100BaseT, 500m per 100Base2). Nelle reti con topologia a bus vengono infatti utilizzati dei repeater (ricevono
un segnale in entrata e lo rigenerano in uscita) per ottenere dei segmenti più lunghi.
Nelle reti locali Ethernet (10BaseT e 10Base2) viene utilizzata la codifica Manchester per evitare il trasferimento nella
rete di eventuali lunghe sequenze di zeri o di uno. In pratica invece di codificare il bit 0 e il bit 1 con livelli di tensione
fissi, si codificano con transizioni di livelli. La codifica specifica le seguenti convenzioni: Per un bit 0 i livelli saranno
Basso-Alto , Per un bit 1 saranno Alto-Basso. Questo tipo di codifica è considerata auto-sincronizzante (non necessita
di un segnale di sincronia esterno).La gestione delle collisioni e dell'occupazione simultanea ovvero condivisa del
canale di trasmissione viene gestita mediante il CSMA/CD, algoritmo di accesso multiplo alla rete.

27