Sei sulla pagina 1di 29

Reti di Calcolatori

Appunti a cura di Eugenio Rustico
Introduzione alle Reti di Calcolatori 

Il sistema a livelli
PAN 1m, LAN 10­1000m, MAN 10km, WAN 100­1000km, Internet
10.000 Km
Broadcasting = invio a tutti, multicasting = invio a molti, unicasting
= invio a uno soltanto, anycasting = invio a un insieme, mi
risponderà uno solo (es. server web su più macchine)
Architettura OSI, livelli TCP/IP e confronto (OSI meglio
organizzato, ma inefficiente e 2 livelli quasi inutili; TCP/IP era già
diffuso)
Comunicazioni affidabili (controllo degli errori, del flusso, ricevuta
di ricezione) e non affidabili, orientate alla connessione
(all'inizio si negozia sulla discussione e ci si scambiano meta­
informazioni, si riservano delle risorse; i messaggi arrivano
sicuramente in ordine) o no (posta, datagram). I mezzi fisici
devono sempre essere considerati non affidabili.
Rete a commutazione: può essere a commutazione di circuito
(viene fisicamente creato un circuito quando un host chiede di
comunicare con un altro host, es. rete telefonica) e a
commutazione di pacchetto (più resistente ai guasti, ogni
pacchetto segue un percorso indipendente, non si riservano
risorse, i pacchetti possono arrivare in un ordine differente); un
circuito virtuale è un circuito di una rete a commutazione di
pacchetto riservato per una determinata connessione e con un
proprio identificativo.
Il livello fisico

Analisi di Fourier di un segnale: un'onda di periodo finito può
essere rappresentata come una sommatoria (al più) inifita di onde
sinusoidali di frequenza e ampiezza opportune (armoniche della
frequenza base)
Canali trasmissivi
perfetti: non causano né distorsioni né ritardi
ideali: causano solo ritardo nella propagazione
reali: attenuazioni e ritardi in funzione della frequenza; per ogni
mezzo fisico definiamo due diagrammi di distorsione, uno
dell'attenuazione e uno della fase. La larghezza di banda di un
canale è data dalla differenza tra le frequenze di taglio inferiore
e superiore
A seconda dell'uso, un canale è:
Simplex = unidirezionale (es. radio, tv, fibra ottica)
Half duplex = bidirezionale a tempo (es. walkie talkie, Ethernet
con hubs)
Full duplex = bidirezionale (es. telefono, Ethernet con switches)
Il teorema di Nyquist afferma che se si trasmette un qualsiasi
segnale attraverso un canale ideale con ampiezza di banda pari
ad H, a destinazione per ricostruire il segnale completamente
sono sufficienti 2H campionamenti al secondo. Inoltre se il
numero di livelli discreti è pari a V avremo che:
Max data rate =  2 H⋅log2 V
Il teorema di Shannon limita il data rate di un mezzo fisico in
base al rumore presente nello stesso. In particolare:
Max data rate =  2 H⋅log2 1S / N 
con H = larghezza di banda, S ed N rispettivamente potenza del
segnale e potenza del rumore [S=signal, N=noise].
E' un mezzo trasmissivo qualunque cosa permetta l'invio di
informazioni
Il doppino telefonico è costituito da due fili di rame intrecciati a
elica (se non fossero intrecciati costituirebbero un'antenna). I cavi
si dividono in
STP: Shielded Twisted Pair
UTP: Unshielded Twisted Pair, dei quali ricordiamo gli UTP
CAT. 3 (quelli più comuni) e gli UTP CAT. 5 (con un intreccio
più fitto dei CAT. 3)
Il cavo coassiale è costituito da un filo di rame avvolto da un
isolante a sua volta circondato da un intreccio di fili conduttori. E'
schermato dal rumore più del doppino quindi ha un data rate
maggiore, ma è caduto in disuso.
La fibra ottica sfrutta l proprietà della luce di non rifrangersi se
l'angolo di incidenza è inferiore ad un certo limite (dipendente dal
mezzo fisico). E' fatta come il cavo coassiale ma non ha il
secondo strato conduttivo e al centro il filo è costituito da una
specie di vetro molto trasparente. Si può arrivare ai 100 Gbit/s. E'
unidirezionale, principalmente per la difficoltà di mettere da una
stessa estremità ricevitore e trasmettitore. Le reti in fibre possono
essere strutturate ad anello (con interfaccia attiva o passiva) o a
stella passiva (con le fibre fuse in un cilindro di silicio), ma il
collegamento più usato è quello punto­punto unidirezionale. Ci
sono due tipi di fibre ottiche:
multimodali: il raggio è di circa 50 micron e sono presenti più
raggi luminosi contemporaneamente
monomodali: il core ha un raggio di circa 8 micron e la luce
viaggia in linea retta, senza riflessioni; è più costosa ma
migliore
Tabella cavi
Nome Tipo Lunghezza max Altro
10Base5 Coassiale spesso 500 m Ora obsoleto
10Base2 Coassiale sottile 185 m Non occorre hub
10Base­T4 Doppino UTP 3  100 m Economico
10Base­TX Doppino UTP 5 100 m Full duplex a 100 Mbps
10Base­F Fibra ottica 2.000 m Data rate + alto

Le reti wireless sono utili in edifici e zone che non è possibile o
facile cablare e nel mobile computing. Possono arrivare distorte a
causa del multipath fading (le onde che seguono percorsi
alternativi arrivano rispetto a quelle che arrivano direttamente).
Tabella delle onde:
Onde (frequenza) Pro Contro
Radio ● Facili da generare e ● Bit rate basso
4 8
(10 ~10  Hz) rilevare
● Omnidirezionali
● Attraversano gli edifici
● Seguono la superficie
terrestre o si riflettono
nella ionosfera
Microonde ● Direzionabili ● Sono assorbite dalla pioggia
8 11
 (10 ~10  Hz) ● Concentrabili in fasci ● Non attraversano bene gli
● Bit rate alto ostacoli

Infrarossi ● Costo delle ● Usabili sono indoor


11
(10 ~10  Hz)
14 apparecchiature ● Non attraversano ostacoli
modestissimo
● Non interferiscono tra
loro
Luce visibile ● Concentrabili (laser) ● Non attraversano ostacoli
14 15
(10 < fq < 10  Hz)

Modem sta per MOdulatore DEModulatore; i modem inviano dati
digitali tramite connessioni analogiche, solitamente modulando
un'onda portante (funzione  A⋅sin  t ). Può essere
modulata l'ampiezza di tale onda (AM, st ⋅sin  t ), la
frequenza (FM, A⋅sins t ⋅t ) o la fase ( A⋅sin  ts t  ).
Si possono usare diverse modulazioni contemporaneamente. Si
solito si modula la portante in ampiezza e in fase; tutte le
combinazioni valide si riassumono nei diagrammi costellazione
(dei diagrammi in coordinate polari dove le coppie di valori lecite
sono evidenziate da un punto). Tali diagrammi spesso sono
ruotati di 45° per motivi di progettazione
(x)DSL è la denominazione delle offerte delle aziende per una
connessione a banda larga; in pratica, vengono rimossi i filtri
superiore e inferiore della linea telefonica di un abbonato per
permettergli di usare le frequenze più elevate di 3.000 Hz per
l'invio e la ricezione di dati. Secondo la tecnica DMT (Discrete
MultiTone) lo spettro disponibile (1,1 Mhz) viene suddiviso in 256
canali dei quali alcuni sono utilizzati per la linea telefonica
tradizionali, alcuni per l'upload di dati e tutti gli altri per il
download. Una tale divisione asimmetrica degli slot prende il
nome di ADSL (Asymmetric Digital Subscriber Line)
Talvolta si può usare un canale di comunicazione con più
comunicazioni separate tramite il multiplexing. Esistono
fondamentalmente quattro tipi di multiplexing:
Frequency Division Multiplexing (FDM): le comunicazioni
vengono “shiftate” (spostate ad una frequenza superiore,
ognuna con un determinato gap) e inviate
contemporaneamente. A destinazione si provvederà a
ripristinare la frequenza originale di ogni comunicazione.
Wavelength Division Multiplexing (WDM): nelle fibre ottiche si
modula l'ampiezza dell'onda del raggio luminoso così da inviare
diversi raggi contemporaneamente. A destinazione uno splitter
e dei filtri li separeranno nuovamente. Il principio è molto simile
al FDM.
Time Division Multiplexing (TDM): l'utilizzo del canale di
comunicazione viene suddiviso nel tempo in intervalli brevissi,
in ognuno dei quali viene inviata una parte dei campionamenti
vocali effettuati. Ciò è possibile se gli intervalli sono così brevi
da essere trascurabili rispetto alla comunicazione in atto. E'
usato nella portante T1, con la quale si inviano 24 canali audio
contemporaneamente (ogni frame di 193 bit è scandito dal byte
10101010, che corrisponde ad un segnale di 4.000 Hz non
generabile dai singoli canali audio); ognuno dei 24 canali è
PCM (Pulse Code Modulation, 8.000 campionamenti al
secondo).
Code Division Multiplexing (CDM) [sarebbe al livello datalink
sottolivello MAC, ma nel programma sta qui...]: ad ogni stazione
è assegnato un codice di bit m univoco e tale che tutti i codici
siano a due a due ortogonali (cioè il prodotto normalizzato è
uguale a zero; tali codici possono essere generati col metodo
dei codici Walsh); le stazioni inviano m per indicare 1 e il suo
inverso per lo 0; trasmettono quando vogliono, e i frame di
stazioni diverse si sovrappongono sommandosi linearmente. La
destinazione moltiplicherà la somma ricevuta per il codice m
della stazione mittente e, grazie all'ortogonalità prima descritta,
otterrà 1 o 0 a seconda di quello che era stato inviato. Il CDM
comincia a essere usato nei sistemi mobili di terza generazione.
Il livello Data Link

Comunicazione punto­punto, non end­to­end. 
Il livello Data Link riceve dati dal livello superiore, li “spezzetta” in
frame e provvede a spedirli alla destinazione. Come li divide in
frame? Ci sono diversi metodi di framing:
Conteggio caratteri: si specifica nell'intestazione del frame da
quanti caratteri esso è composto. Problema: se c'è un errore
proprio lì, è molto difficile risincronizzarsi
Flag byte con byte stuffing: si usa un byte speciale per indicare
inizio e fine di una frame. Se devo inviare quel byte proprio
come dato, lo faccio precedere da un altro byte speciale
(ESCape); se devo inviare il byte ESC, lo duplico.
Flag di inzio e fine con bit stuffing: si usa una determinata
sequenza di bit per indicare inizio e fine di una frame (es.
0111110). Se devo inviare proprio quella sequenza tra i dati, la
“spezzo” con uno 0. Il destinatario automaticamente rimuoverà
lo 0.
Violazione della codifica dello strato fisico: spesso le LAN
utilizzano le coppie alto­basso e basso­alto per indicare 0 o 1
(es. codifica Manchester, normale se alto­basso=1 e basso­
alto=0, differenziale se transizione = 0, 1 altrimenti). Si possono
usare invece le coppie basso­basso o alto­alto per marcare la
fine di una frame.
Ci sono diversi metodi per rilevare o addirittura correggere
eventuali e probabilissimi errori di trasmissione. Tutti i metodi
inviano bit supplementari al messaggio vero e proprio per
aumentare la ridondanza dei dati. I principali sono:
Bit di parità: si inviano uno o più bit contenenti il numero di cifre
1 presenti nel messaggio. Si possono anche sistemare le
stringhe che compongono il messaggio in una matrice quadrata
e indicare la parità per ogni riga e per ogni colonna; questo
metodo rileva al massimo n bit errati (n = larguezza matrice) ma
può correggere un solo errore.
Codici di Hamming: la distanza di Hamming è il numero di bit
differenti tra due codeword. La distanza di un insieme di
codeword legali è la distanza di Hamming più bassa fra esse.
Per rilevare n errori occore una distanza di Hamming pari a
n+1; per correggerne n ne occore una pari a 2n+1.
● supponiamo di voler progettare una codifica con n bit di cui m

di messaggio ed r di controllo che permetta di correggere
errori singoli. Per ognuna delle 2 parole valide ci saranno n
m

parole ottenute da questa invertendo un bit (introducendo un
errore); quindi ognuno dei 2 messaggi dovrà avere n+1
m

combinazioni dedicate (le n ottenute invertendo i singoli bit
più la combinazione originaria): n1 2 ≤2 ; sapendo che
m n

n=mr , otteniamo mr12 m ≤2 mr , da cui


m1≤2r −r . Una codifica che non violi questa
disuguaglianza sarà in grado di correggere errori singoli. Un
metodo dovuto allo stesso Hamming permette di raggiungere
questo limite: i bit della codeword vengono numerati a partire
da 1, e quelli che corrispondono a una potenza di due sono
bit di controllo. Ogni altro bit del messaggio interviene sulla
parità dei bit di controllo che si trovano nelle posizioni
espresse scrivendo la posizione del bit come somma di
potenze del due; per esempio, il bit n. 6 interverrà sui bit di
controllo 2 e 4.
Controllo Ciclico di Ridondanza (CRC, Cyclic Redundancy
Check): il messaggio binario viene trattato come un polinomio a
coefficienti binari.   Viene concordato un polinomio generatore
G(x) di grado r (quindi con r+1 bit); al messaggio M(x) che si
vuole inviare si aggiungono r bit 0 e si calcola il resto della
divisione M(x)/G(x); tale resto sarà composto da r bit, che
verranno scritti alla fine di M(x) (dove avevamo aggiunto i bit 0),
rendendo così il messaggio finale divisibile per G(x); in pratica
viene inviato x r⋅M  xR x  . Il destinatario dividerà per G(x),
verificando così la correttezza o meno del messaggio. I
polinomi generatori CRC oggi hanno anche 32 bit (grado 31), e
sono in grado di rilevare moltissimi tipi di errori (singoli e doppi,
errori sui dispari, raffiche di errori di oltre 16 bit). Nota: somma e
sottrazione nell'aritmetica modulo 2 equivalgono entrambe allo
XOR logico tra i due operandi.
MAC (Medium Access Control) è il sottostrato del livello data link
a cui appartengono i protocolli per l'assegnazione dell'uso di un
canale multiaccesso. I sistemi in cui gli utenti condividono un
canale comune in modo che può causare conflitto si dicono a
contesa. Un primo sistema per assegnare il canale prevede la
sua divisione in canale tramite multiplexing: FDMA se si usa
FDM, TDMA per il TDM, WDMA per il WDM, CDMA per il CDM.
Esaminiamo ora altri protocolli:
Aloha puro: fu implementato nell isole Hawaii, dove per ovvi
motivi le reti tra isole sono in gran parte wireless. Ogni stazione
trasmette quando vuole e rimane in ascolto; se i messaggi di
due stazioni si sovrappongono e collidono, le due stazioni
percepiscono la collisione e dopo un tempo casuale riprovano a
trasmettere (il tempo deve essere casuale o si avrebbe una
serie infinita di collisioni). Pregio: semplice, il ripetitore centrale
non elabora nulla; difetto: all'aumentare degli utenti aumentano
lo collisioni.
Slotted Aloha: come Aloha, ma l'invio delle frame è permesso
solo ad intervalli regolari (una stazione emette una specie di
clock). Il throughput massimo raddoppia, ma è ancora basso:
massimo utilizzo del canale < 40%
Carrier Sense Multiple Access (CSMA): sono così chiamati i
protocolli in cui gli utenti rimangono in ascolto della precedente
trasmissione e attendono la fine dell'onda portante prima di
provare a trasmettere. Il CSMA si dice persistent se ogni
stazione prima di provare a trasmettere controlla che il canale
sia libero, non­persistent se la stazione aspetta un tempo
random prima di controllare. Il CSMA è p­persistent se, dopo
aver verificato che il canale sia libero, trasmette con probabilità
p. Al diminuire di p aumenta il throughput del canale ma
diminuisce drasticamente l'uso che ciascuna stazione ne fa (es.
0.01­persistent vuol dire che se trovo libero trasmetto una volta
su 100!). Il CSMA/CD (Collision Detect), usato nelle LAN
Ethernet, consiste nell'interrompere immediatamente la propria
trasmissione non appena si rileva una collisione. Per essere
certi che una frame trasmessa arrivi a destinazione senza
collisioni è necessario attendere un tempo pari al doppio del
tempo di trasmissione totale (per dare il tempo a eventuali
collisioni avvenute all'altra estremità del mezzo di propagarsi
all'indietro)
Protocolli senza collisioni:
● Mappa di bit: il periodo di contesa è diviso tra le stazioni. Ogni

stazione può trasmettere 1 o 0 solo nel proprio slot del
periodo di contesa contesa. In questo modo alla fine del
periodo di contesa tutte le stazioni sanno chi ha frame da
trasmettere, e le stazioni così prenotate trasmettono in ordine
numerico; dopodiché inizia di nuovo il periodo di contesa.
● Conteggio binario: ogni stazione ha un codice univoco; nel
periodo di contesa le stazioni interessate trasmettono il
proprio codice e rimangono in ascolto. Appena rilevano un 1
dove hanno trasmesso uno zero capiscono che c'è almeno
un'altra stazione con codice + alto che vuole trasmettere, e
desistono. Per non privilegiare le stazioni con codici alti, i
codici sono permutati circolarmente in modo che le stazioni
che non parlano da più tempo abbiano maggiore priorità.
● Gestione del token: c'è un token (gettone) che circola tra tutte

le stazioni, e può parlare solo la stazione che lo possiede. In
particolare ricordiamo il token bus usato da General Motors e
il token ring brevettato da IBM. Non sono protocolli semplici:
per gestire tutti possibili errori possono essere necessari
anche decine di timer per ogni stazione.
IEEE 802
la 802.1 definisce gli aspetti generali delle LAN e loro
architetture
802.2 il Logical Link Control
802.3 Ethernet CSMA/CD: nelle reti Ethernet si possono usare
i cavi coassiali, i doppini o le fibre ottiche. I coassiali sottili non
richiedono hubs ma hanno connettori a T. Per evitare ambiguità
nella ricezione delle sequenze di bit (come distinguere 001000
da 010000 se 0 è codificato con l'assenza di segnale?) Ethernet
usa la codifica Manchester, che indica l'1 con una coppia di
tensione alto­basso e lo 0 con basso­alto; una variante è la
codifica Manchester differenziale, che indica lo 0 con una
transizione da basso­alto ad alto­basso o viceversa e l'1 con
una assenza di transizione. La frame Ethernet inzia con un byte
10101010 che, nella condfica Manchester, produce un'onda
quadra di 10 Mhz per 6,4 msec, così da permettere la
sincronizzazione col ricevente. Le frame sono lunghe almeno
64 bytes per distinguerle dai pezzi di frame corrotte e per
attendere almeno 2t (vedi CSMA/CD). Ethernet e i suoi
successori utilizzano, in caso di collisioni, il backoff
esponenziale binario: se la comunicazione non va a buon fine,
si attendono 0 o 1 intervalli di 512 bit prima di ritentare. In
genere, dopo i collisioni consecutive si attende un tempo
i
random tra 0 e 2 ­1, fino al massimo di i=10; a quel punto si
getta la spugna e viene mandato un errore al livello
sovrastante.
802.3u è meglio conosciuto come Fast Ethernet, il nuovo
standard per Ethernet che non stravolge nulla del
predecessore. Con Fast Ethernet non si utilizzano più i cavi
coassiali e si impongono solo collegamenti p2p (quindi niente
più connettori a vampiro); la velocità viene incrementata del
25% (25 Mhz) e si utilizza la 5­bit encoding. Si possono usare i
doppini UTP CAT. 3.
 802.3z (Gigabit Ethernet) è half duplex se si usa un hub, full­
duplex se si usa uno switch, proprio come Fast Ethernet; non si
possono usare gli UTP CAT. 3 ma almeno gli UTP CAT. 5;
inoltre:
● E' stata rimossa la parità (100 * 5/4 = 125 Mbps)

● Si usano le 4 coppie simultaneamente (125x4 = 500 Mbps)

● Si usano 5 livelli invece di 3 (uno per le frame e 4 per inviare

2 bit: 500x2 = 1.000 Mbps in full­duplex)
● I livelli in più aumentano il rapporto col rumore; allora

raddoppio la banda (invio 2Gbps!) e uso il gigabit in più per la
correzione degli errori con FEC (Forward Error Correction
[Schemi di Trellis e decodifica di Viterbi??]): definisco quattro
stati (00,01,10,11) che rappresentano il bit corrente e il
precedente. Definisco una macchina a stati finiti tale che in
ogni transizione da uno stato all'altro ci sia sempre distanza di
Hamming pari a 2 e invio i due bit della transizione invece che
quelli del dato. Se ci sono stati errori nella trasmissione invio
un percorso non valido; a destinazione posso correggere gli
errori usando il percorso più probabile (quello valido con
distanza di hamming minore da quello ricevuto)
Il controllo di flusso è necessario per assicurarsi che il mittente
non sommerga di messaggi un host destinazione più lento. Inoltre
è bene usare il meccanismo degli ACK per essere certi che il
destinatario abbia ricevuto i nostri messaggi. Ma per evitare
confusione è bene associare gli ACK ai messaggi ai quali si
riferiscono. I fattori da prendere in considerazione sono:
Buffer del destinatario limitato
Tempo di elaborazione non trascurabile
Ritardi dovuti alla trasmissione
Pacchetti (dati o ACK) persi o danneggiati
Protocolli del livello Data Link:
Si dicono protocolli Stop and Wait quelli nei quali il mittente,
dopo aver inviato una frame, attende un segnale del
destinatario prima di continuare a inviare.
I protocolli Sliding Window prevedono che il mittente tenga
traccia di quali frame possono essere inviate e quali no. In
pratica si tengono in memoria due indici che indicano il numero
di frame inviate e già confermate (ACK) e il numero di frame
inviate e in attesa di conferma (finestra di invio). Il destinatario
terrà in memoria quali frame sono state ricevute, mantenendo la
finestra di ricezione costante. Una finestra larga al massimo 1
equivale a forzare l'invio delle frame in sequenza. In caso di
timeout prematuri o invio contemporaneo della prima frame si
possono avere duplicazioni di tutte le frame.
Il piggy backing è la pratica di mandare l'ACK di una frame
ricevuta insieme alla prossima frame da inviare, e non in una
frame a sé stante; si risparmia banda ma è utile solo per i canali
full­duplex e solo se il nuovo pacchetto da inviare non si fa
attendere troppo (altrimenti il mittente, non ricevendo l'ACK,
ripeterà l'invio del messaggio).
Nel caso in cui il tempo di invio di una frame sommato al tempo
di ricezione dell'ACK non sia trascurabile (es. comunicazioni
satellitari) è bene usare un protocollo che usi una tecnica di
pipelining, che consiste sostanzialmente nel continuare a
inviare altre frame mentre si aspettano gli ACK di quelle
ricevute. Per rilevare e reinviare le frame perdute si usano due
approcci:
● go back n: se si perde una frame (o quella ricevuta è

danneggiata) il destinatario si limita a buttare tutte le frame
successive e il mittente, non ricevendo pià ACK, ricomincia
dall'invio della prima frame di cui non ha ricevuto l'ACK.
● ripetizione selettiva: se si perde una frame il destinatario
continua a memorizzare in un buffer le frame successive,
invia un NACK legato alla frame danneggiata o perduta e
attende che il mittente la rimandi; a quel punto può
completare il buffer e inviare tutto al livello network.
Ovviamente questo approccio è fattibile solo se la finestra di
ricezione è maggiore di uno.
Le reti wireless sono definite dagli standard 802.11b, a, g, ma
solo b e g sono molto diffusi; si tratta di protocolli CSMA/CA
(Collision Avoidance), che lavorano in due modalità, una delle
quali è MACAW. Problema del terminale nascosto: un host non
vede quello che sta trasmettendo e prova a trasmettere,
generando una collisione. Problema del terminale esposto: un
host trasmette ad un altro e involontariamente non permette ad
un altro host nel suo raggio d'azione di trasmettere. Il CSMA
standard, dunque, non va. Nasce il MACA (Multiple Access with
Collision Avoidance): un host, prima di trasmettere, invia a tutti i
vicini una frame RTS (Request To Send) indicando che ha
intenzione di trasmettere una frame di una determinata
dimensione; tutti i vicini inviano ai loro vicini una frame CTS
(Clear To Send), chiedendo di star zitti perchè attendono una
frame. Così anche chi non può sentire direttamente il primo host
sta zitto e permette una comunicazione senza collisioni. In caso
di collisioni, comunque, si usa il backoff binario esponenziale.
Componenti della rete
Ripetitore: amplifica il segnale. Sono analogici.
Hub: ricevuto un pacchetto, lo rimanda a tutti. Lavorano a livello
fisico, come i ripetitori.
Bridge: collega tra loro due o più reti, anche di natura
differente. Lavora a livello data link.
Switch: instrada i pacchetti solo in direzione del destinatario. Si
dicono trasparenti quando non hanno bisogno di configurazione
[e ad instradamento da sorgente quando??]. Lavora a livello
data link. Uno switch che operi a livello di rete è un router. Lo
switch al suo interno ha una tabella con gli indirizzi fisici
raggiungibili e l'interfaccia associata ad ognuno; tale tabella
viene periodicamente rigenerata (quando arriva un pacchetto e
non si conosce il destinatario lo si inoltra in flooding; quando il
destinatario risponde si prende nota dell'interfaccia)
Gateway: come uno switch ma opera tra reti differenti e non tra
singoli host.
Come usare più switch in una rete?
Collegandone semplicemente più di uno: il traffico viene
ripartito, ma si creano pericolosi anelli. Per evitarlo occorre una
struttura gerarchica.
Una struttura gerarchica si può ottenere usando i numeri di
fabbrica univoci degli switch: quello con l'id più basso sarà più
in alto nella gerarchia. Problema: in caso di abbondante traffico,
alcuni switch saranno sovraccaricati. Si vedrà a livello di rete
come trovare uno spanning tree adatto.
Sulle LAN
Virtual LAN: configuro gli switch per considerare delle partizioni
della rete come reti a sé stanti.
Indirizzi fisici: quelli che iniziano per 0 sono assegnati dal
produttore in fase di costruzione dell'hardware e sono univoci;
si possono cambiare con indirizzi che iniziano per 1 assegnati
dall'amministratore. Sono composti da 6 byte.
Schemi di indirizzamento flat: è la tabella di indirizzamento MAC
nella memoria dei bridge
Network Layer

Il livello di rete si occupa del trasporto dei pacchetti lungo tutto il
cammino dal mittente al destinatario. Il routing è il processo di
riempire e aggiornare le tabelle di inoltro; l'inoltro è l'invio vero e
proprio di un pacchetto attraverso la linea più adatta della tabella
di routing.
Gli algoritmi di routing si dicono statici se i percorsi da seguire
sono precacolati e caricati all'avvio della rete; dinamici se
l'algoritmo è in grado di cambiare le proprie decisioni a seguito di
cambi della topologia e del traffico della rete. Il principio di
ottimalità afferma che se un host J si trova sul percorso migliore
per andare da H a K, allora anche il percorso ottimale da J a K
segue la stessa strada.
Il flooding (“inondazione”) è uno degli algoritmi di routing statici
più semplici (e meno efficienti): un host manda un pacchetto a
tutti i vicini tranne il mittente, e i vicini fanno altrettanto. Senza un
controllo sul massimo numero di salti, i pacchetti circolerebbero
all'infinito e la rete collasserebbe.
Un efficiente algoritmo per trovare il percorso minimo di un grafo
è l'algoritmo di Dijkstra, secondo il quale a partire da un nodo A
visitiamo tutto il grafo una volta sola aggiornando di volta in volta
una tabella in cui teniamo nota dei percorsi più brevi per
raggiungere tutti gli altri nodi. Questo algoritmo, tuttavia,
presuppone a priori la conoscenza di tutto il grafo e deve essere
ripetuto da capo in caso di cambi nella topologia della rete.
Il link state routing prevede l'invio in flooding a tutti gli altri host
dello stato dei collegamenti con i vicini e dunque il calcolo dei
percorsi migliori con l'algoritmo di Dijkstra. Non è particolarmente
flessibile.
Il routing gerarchico è utile nelle reti molto vaste: in queste reti
le tabelle di routing sarebbero troppo grandi e difficili da gestire.
Le reti allora vengono trattate come delle “regioni” delle quali ogni
router conosce solo la regione di appartenenza.
L'algoritmo denominato distance vectors prevede l'utilizzo di una
tabella per ogni router. Ogni router conosce la distanza che lo
separa da tutti i vicini (basta un ping) e invia queste informazioni
a tutti i vicini. Ognuno aggiorna la propria tabella memorizzando,
per ogni host destinazione, l'host al quale inoltrare il pacchetto e
non tutto il percorso; ognuno provvederà a inviare il pacchetto
verso la giusta destinazione e il pacchetto seguirà così la strada
più breve. L'algoritmo produce delle tabelle corrette in un numero
di passi pari al diametro del grafo; in caso di miglioramenti della
rete le tabelle si autoaggiornano velocemente, viceversa in caso
di peggioramenti potrebbe essere necessario molto tempo.
Routing nelle reti wireless [fatto?]
La trasmissione di un messaggio a tutti gli host di una rete è detta
routing broadcast; multicast se si è interessati solo a una parte
di essi. Ci sono molti modi per effettuare il routing multicast:
linearmente, gerarchicamente, con collegamenti tutti dedicati,
ecc. Un algoritmo efficiente è il Reverse Path Forwarding (RPF),
che si basa sul presupposto che il percorso miglioreda un host J
ad un host K è anche il migliore da K a J (i percorsi sono
bidirezionali: il grafo non è orientato). Si comincia come per il
flooding: ognuno manda il pacchetto a tutti i suoi vicini; poiché
però ogni host conosce il percorso migliore da sé alla sorgente
dei pacchetti, ognuno accetta i pacchetti che vengono dal
percorso migliore e scarta gli altri. In questo modo i pacchetti
seguono sempre il percorso migliore (alla rovescia).
Ogni interfaccia ha un suo indirizzo IP. Le classi di indirizzi IP
sono state definite male; per sopperire a questa carenza si usano
NAT e DHCP.
Classe Inizio Formato Altro
A 0 1 byte rete, 3 byte host 16 mln host, 256 reti
B 10 2 byte rete, 2 byte host 65.000 host massimo
C 110 3 byte rete, 1 byte host pochi host
D 1110 multicast poco usati
E 1111 riservato per usi futuri poco usati
Io 0.0.0.0 this host
bcast tutti 1 broadcast (fermato dai router)
loopback 127 qsiasi cosa rimane nello stesso host

Se l'IP di destinazione di un pacchetto è della mia LAN utilizzo
ARP, se no lo mando al router. Come lo stabilisco? Tramite la
subnet mask: essa va in AND logico con l'indirizzo IP di un
pacchetto da inoltrare; dal risultato si evince se il pacchetto è
destinato alla propria rete o ad una esterna (quindi se va inviato al
router o no). Si può “accorciare” la subnet mask per rendere due
subnet differenti ma fisicamente connesse un'unica sottorete. In
pratica, a cause del fatto che gli indirizzi IP sono assegnati male,
si divide l'host in due pezzi: subnet e host. Può servire anche per
dividere una serie di IP di classe B in più sottoreti.
Formato dei pacchetti IPv4:
VERSIONE
DIM. DEL PREAMBOLO
TOS (non usato)
LUNGHEZZA TOTALE
ID
DON'T FRAGMENT FLAG
MORE FRAGMENT FLAG
FRAGMENT OFFSET
TTL
PROTOCOL (protocollo sopra IP)
HEADER CHECKSUM
SOURCE
DESTINATION
OPTIONS
Formato dei pacchetti IPv6:
VERSIONE
CLASSE DI TRAFFICO (sperimentale)
ETICHETTA DI FLUSSO (sperimentale per usare una specie di
circuito virtuale)
PAYLOAD LENGTH (dimensione pacchetto oltre l'header)
NEXT HEADER (indica gli header opzionali [finora i possibili
sono sei]; se è l'ultimo indica se è destinato al gestore UDP o
TCP)
HOP LIMIT (come TTL)
Procolli su IP:
ICMP (Internet Control Message Protocol), insieme di messaggi
standard per il monitoraggio delle reti
ARP (Address Resolution Protocol) è il protocollo mediante il
quale viene eseguita la “traduzione” da indirizzo IP a indirizzo
fisico. Si manda un messaggio in broadcast ad una rete; il
destinatario risponde e così il router e il mittente vengono a
conoscenza dell'associazione.
RARP (Reverse ARP): una macchina appena avviata manda in
broadcast il messaggio: “qualcuno conosce il mio IP”? Il pregio
è che il pc non necessita di memoria o configurazione. Il difetto
è che i pacchetti broadcast vengono fermati dai router.
BOOTP: evoluzione di RARP, ma implementato su UDP per
non essere bloccato dai router. Difetto: richiede la
configurazione manuale delle tabelle di traduzione IP/indirizzo
fisico.
DHCP (Dynamic Host Configuration Protocol): come BOOTP
ma non ha bisogno di preconfigurazioni. Richiede un server
DHCP e un agente di inoltro DHCP per ogni rete.
NAT (Network Address Translation): per sopperire alla scarsità
di indirizzi IPv4 è possibile che una rete utilizzi solo uno o più IP
pubblici per collegarsi a internet; una macchina collegata ad
internet farà il NAT, cioè sostituirà gli indirizzi IP privati della
LAN con quello pubblico della connessione. La connessione
può essere iniziata solo da fuori, quindi non si possono avere
server dietro un NAT. Quando arriva una risposta come si sa a
chi inoltrarla? Il NAT utilizza il campo source port dei pacchetti
TCP e UDP, assegna a questo un valore arbitrario e memorizza
l'associazione in una tabella. Quando arriverà la risposta,
basterà controllare e sostituire la destination port per recapitare
il pacchetto a destinazione. L'ultima voce della tabella di solito è
l'IP 0.0.0.0, che serve per reindirizzare tutti i paccheti che non
hanno trovato corrispondenze.
Migrare da IPv4 a IPv6 può voler dire cambiare radicalmente
tutto l'hw e il sw o voler fare un passaggio graduale. Ovviamente
si preferisce la seconda soluzione, ma come fare convivere i due
sistemi fino alla conversione completa? Il primo metodo consiste
nel “tradurre” i pacchetti IPv6 in pacchetti Ipv4; è il metodo più
veloce ma c'è l'ovvio difetto che si perdono tutti i campi peculiari
di IPv6. La seconda soluzione si appoggia alla tecnica del
tunneling, che consiste nel mandare i pacchetti IPv6 come dati
all'interno dei pacchetti IPv4; il difetto è che aumenta l'overhead
della comunicazione.
Un firewall può essere hw o sw. E' composto da due router che
filtrano tutti i pacchetti in uscita e in entrata e da un gateway
applicativo. Se il gateway opera a livello di trasporto guarda alle
porte indicate nei pacchetti. Se è a livello applicativo guarda
anche all'interno dei pacchetti per verificarne il contenuto. Tutto il
traffico è convogliato al firewall.
Altro: la frammentazione di pacchetti grossi dipende dall'MTU di
una rete
Transport Layer

Il livello di trasporto si occupa principalmente di rendere affidabile
il livello di rete, e di fornire un servizio di “recapito” dei dati
indipendente dalle reti (anche di diversa natura) utilizzate al livello
sottostante
Gli indirizzi dello strato network erano gli IP (NSAP, Network
Service Access Point), quelli dello strato di trasporto sono le
porte: numeri di 2 byte che identificano il processo di destinazione
Le porte fino alla 1024 sono le well known ports: sono registrate
dallo IANA, sono standard e sono utilizzabili solo da processi di
sistema (per prevenire lo sniffing)
Modello Client­Server
Si contrappone il modello P2P (Peer to Peer)
Server “centrale” a cui si collegano i client. Primitive tipiche:
● Server: listen() bloccante, send(), receive(), disconnect()

● Client: connect() bloccante, send(), receive(), disconnect()

I socket di Berkeley
● Seguono all'incirca lo stesso modello, ma sono più flessibili;

ono costituite da un diverso insieme di primitive
● La chiamata socket() ritorna un descrittore di file a cui

associare un indirizzo di rete con bind()
Di solito il server quando accetta una chiamata la passa ad un
processo che la gestisce, e il processo principale torna in ascolto
per altre chiamate
Sul protocollo IP
UDP (User Datagram Protocol)
● Non orientato alla connessione

● Non garantisce il recapito (non gestisce il flusso)

● Header: composto solo da SOURCE PORT, DESTINATION
PORT, UDP LENGTH, UDP CHECKSUM
TCP (Transmission Control Protocol)
● Orientato alla connessione, affidabile

● Handshake a tre vie: l'autore della proposta deve inviare

l'ACK della risposta (citare il problema dei due eserciti:
quante conferme sono necessarie? Infinite...)
● Permette dati URG (urgenti), prioritari (per es. per

interrompere subito una connessione)
● Bufferizzato, per mandare meno intestazioni e ridurre

l'overhead
● E' un protocollo sliding window, perchè il destinatario segnala

al mittente la dimensione della propria finestra di ricezione
● Pacchetto TCP: SOURCE PORT, DESTINATION PORT,

SEQUENCE NUMBER, ACK NUMBER, HEADER LENGTH,
FLAGS (urg [è urgente?], ack [contiene un ack?], push [invia
ora senza buffer], rst [reset connessione], syn [stabilire una
connessione], fyn [terminare una connessione]), WINDOW
SIZE, CHECKSUM, URGENT POINTER, OPTIONS 0+,
DATA
● Per il controllo di flusso, numera i pacchetti in maniera

univoca; sono numerati anche gli ACK, mandati con piggy
backing
● Per avere una numerazione univoca anche in caso di riavvio
32
della macchina, si usa un clock che assume tutti e soli i 2
valori possibili dei numeri di sequenza. Diciamo T il tempo
dopo il quale un pacchetto è da considerarsi definitivamente
perduto, e imponiamo che se il tempo corrente è X si possono
generare solo numeri di sequenza a partire da(l modulo di) X.
Si definisce zona proibita la fascia contenente tutte le
combinazioni di tempo e numero di sequenza non valide.
Rispettando questo limite sappiamo che, anche se la
macchina viene riavviata e perde la memoria, può
ricominciare a generare numeri di sequenza a partire da(l
modulo di) X senza temere conflitti con pacchetti passati,
perchè nel tempo T appena trascorso era vietato generare
questo stesso numero; pacchetti con questo numero più
vecchi di T ormai saranno gettati. La velocità massima non
può superare un pacchetto per ogni battito del clock o
“toccheremo” la zona proibita.
Il controllo della congestione viene effettuato tenendo d'occhio
la finestra di ricezione del ricevente, la finestra di congestione
della rete (il throughput al quale la rete si congestiona) e un terzo
parametro detto soglia, inizialmente settato a 64 Kb. La quantità
dei dati inviati è pari al valore più piccolo tra le due finestre.
L'algoritmo si chiama avvio lento ma non è affatto lento: ad ogni
ACK ricevuto il mittentte raddoppia la finestra di congestione della
rete fino al raggiungimento della finestra del ricevente o ad un
timeout (pacchetto perso). Al primo timeout la soglia viene
impostata alla metà del valore della finestra di congestione della
rete; si ricomincia da 1 a raddoppiare il throughput fino alla soglia;
arrivati alla soglia, si procede linearmente. Con raffinamenti
successivi si tende a stabilizzare il throughput su un valore molto
vicino al massimo possibile.
Si è visto che il sistema, una volta avviato, tende a ripartire
equamente il throughput delle connessioni attive (fairness, equità
nell'utilizzo del mezzo)
Chiusura della connessione
Citare il problema dei due eserciti. Quante conferme
occorrono?
In TCP la chiusura è a tre vie: invio DR, invio DR, ACK. Ad ogni
invio parte un timer; l'invio del primo DR prevede diversi timeout
prima di abbandonare; il secondo DR e l'ACK attendono solo il
primo timeout.
Application Layer

Comunicazione tra processi (?)
L'indirizzamento dei processi avviene attraverso le porte o i
socket
Il protocollo HTTP (Hyper Text Transfer Protocol) usa TCP. Il
client si connette al server, fa richiesta di una pagina (la richiesta
è in ASCII, quindi eseguibile col telnet) e il server la invia
(eventualmente dopo averla elaborata, per es. php). Con HTTP
1.0 veniva aperta e chiusa una sessione per ogni pagina. Con 1.1
viene aperta un'unica sessione. Ci sono diversi metodi HTTP:
GET, HEAD, PUT, POST, DELETE, TRACE, CONNECT,
OPTIONS. La richiesta è così formata:
METODO URL VERSIONE
NOMECAMPO: VALORE
...
(linea vuota)
CORPO
La risposta:
VERSIONE CODICE_STATO FRASE
NOMECAMPO: VALORE
...
(linea vuota)
CORPO
I codici di errore HTTP sono divisi in classi
Il protocollo FTP (FileTransfer Protocol): avviene una
connessione dati alla porta 20 e una di controllo alla porta 21. C'è
quasi sempre autenticazione e tiene aperta la sessione fino a
richiesta di disconnessione esplicita
Il protocollo SMTP (Simple Mail Transfer Protocol)
Molto bucato perchè non c'è una vera autenticazione (i processi
in ascolto hanno permessi elevati)
Infatti le fake mail sono facili da generare...
Serve per inviare email. Le email sono ricevute col protocollo
POP3 (POP3S se usa SSL), che ha una autenticazione migliore
IMAP (Internet Message Access Protocol) è più complesso di
POP3 (Post Office Protocol v. 3) ed ha funzionalità aggiuntive:
● I messaggi rimangono sul server

● Si possono leggere anche solo parti di messaggi

● Meccanismi di gestione cartelle

● Consegna la posta, oltre a riceverla

Il protocollo DNS (Domain Name Sysyem)
Ai tempi di ARPANET, c'era un unico file di testo con i nomi di
tutti gli host esistenti!
Oggi è un database gerarchico distribuito nel mondo
Si appoggia su UDP
Serve per associare nomi agli indirizzi IP, soprattutto per motivi
di mnemonicità e semplicità
Un nome di host è formato da più parole separate da punti, per
un massimo di 255 caratteri punti compresi
Il server DNS può essere locale per le LAN, per internet si fa
riferimento al proprio ISP
Si risolve una parola per volta partendo da quella più a destra
(es. “it”)
Ci sono 5 server al mondo a cui chiedere dove reperire
informazioni su un particolare dominio. Si è reindirizzati verso
un altro server DNS nazionale (per it, per esempio, si viene
reindirizzati al CINECA di Bologna)
A questo punto si domanda circa il nome host; il server
nazionale dà l'indirizzo IP dell'host richiesto, e ci connettiamo a
questo, che ci dirà l'indirizzo IP della macchina che cerchiamo o
della sottorete dove cercare...